Contratos Inteligentes

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

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.
 */
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;

Last updated