Atualmente, os contratos inteligentes são divididos em três: ImpactMarket, CommunityFactory e Community.
ImpactMarket
Sua única função é aceitar novas comunidades. Isso será substituído por um mecanismo (já em desenvolvimento) com votação para novas comunidades.
CommunityFactory
Sua única função é implantar novos contratos comunitários. Um contrato por comunidade. Este contrato é controlado pela ImpactMarket.
Community
Este é o contrato usado pelas comunidades. Existe um contrato por comunidade, o que permite doações individuais para cada uma delas. Abaixo estão listados os métodos públicos que podem ser chamados para obter informações do contrato.
// When the beneficiary can claim again (timestamp)
mapping(address => uint256) public cooldown;
// What was the last interval when the user claim.
// This is used to calculate the next interval
mapping(address => uint256) public lastInterval;
// How much has the beneficiary claimed so far.
mapping(address => uint256) public claimed;
// In what state is the beneficiary (enum BeneficiaryState {NONE, Valid, Locked, Removed})
mapping(address => BeneficiaryState) public beneficiaries;
// community amount per claim (in cUSD)
uint256 public claimAmount;
// community base interval (we have been using 1 day or 1 week) (in seconds)
uint256 public baseInterval;
// community increment interval (in seconds)
uint256 public incrementInterval;
// community maximun claim per beneficiary (in cUSD)
uint256 public maxClaim;
// if the community was migrated, will have here the address
address public previousCommunityContract;
// impactMarket contract address
address public impactMarketAddress;
// cUSD contract address
address public cUSDAddress;
Functions
/**
* @dev Allow community managers to add other managers.
*/
function addManager(address _account) external onlyManagers;
/**
* @dev Allow community managers to remove other managers.
*/
function removeManager(address _account) external onlyManagers;
/**
* @dev Allow community managers to add beneficiaries.
*/
function addBeneficiary(address _account) external onlyManagers;
/**
* @dev Allow community managers to lock beneficiaries.
*/
function lockBeneficiary(address _account) external onlyManagers;
/**
* @dev Allow community managers to unlock locked beneficiaries.
*/
function unlockBeneficiary(address _account) external onlyManagers;
/**
* @dev Allow community managers to remove beneficiaries.
*/
function removeBeneficiary(address _account) external onlyManagers;
/**
* @dev Allow beneficiaries to claim.
*/
function claim() external onlyValidBeneficiary;
/**
* @dev Allow community managers to edit community variables.
*/
function edit(
uint256 _claimAmount,
uint256 _maxClaim,
uint256 _baseInterval,
uint256 _incrementInterval
) external onlyManagers;
Nota importante: para integrações externas, quando um gestor tenta agregar um endereço como gestor ou beneficiário, esse endereço precisa primeiro ser cadastrado no sistema, caso contrário, aparecerá um erro mencionado na . Para evitar isso, use o endpoint / api / user / auth. Para obter mais informações, consulte a .