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 intervalmapping(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 addressaddress public previousCommunityContract;// impactMarket contract addressaddress public impactMarketAddress;// cUSD contract addressaddress public cUSDAddress;
Functions
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 seção adicionar beneficiário. Para evitar isso, use o endpoint / api / user / auth. Para obter mais informações, consulte a seção API.
/** * @dev Allow community managers to add other managers. */functionaddManager(address _account) externalonlyManagers;/** * @dev Allow community managers to remove other managers. */functionremoveManager(address _account) externalonlyManagers;/** * @dev Allow community managers to add beneficiaries. */functionaddBeneficiary(address _account) externalonlyManagers;/** * @dev Allow community managers to lock beneficiaries. */functionlockBeneficiary(address _account) externalonlyManagers;/** * @dev Allow community managers to unlock locked beneficiaries. */functionunlockBeneficiary(address _account) externalonlyManagers;/** * @dev Allow community managers to remove beneficiaries. */functionremoveBeneficiary(address _account) externalonlyManagers;/** * @dev Allow beneficiaries to claim. */functionclaim() externalonlyValidBeneficiary;/** * @dev Allow community managers to edit community variables. */functionedit( uint256 _claimAmount, uint256 _maxClaim, uint256 _baseInterval, uint256 _incrementInterval) externalonlyManagers;