# Contratos Inteligentes (Smart Contracts)

Actualmente, los contratos inteligentes se dividen en tres: **ImpactMarket, CommunityFactory** e **Community**.

## ImpactMarket <a href="#impactmarket" id="impactmarket"></a>

Su única función es aceptar nuevas comunidades. Esto será reemplazado por un mecanismo (ya en desarrollo) con votación para nuevas comunidades.

## CommunityFactory <a href="#communityfactory" id="communityfactory"></a>

Su única función es implementar nuevos contratos comunitarios. Un contrato por comunidad. Este contrato está controlado por impactMarket.

## Community <a href="#community" id="community"></a>

Este es el contrato que utilizan las comunidades. Existe un contrato por comunidad, que permite donaciones individuales a cada una de ellas.

A continuación se enumeran los métodos públicos que se pueden llamar para obtener información sobre el 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 <a href="#functions" id="functions"></a>

**Nota importante:** para integraciones externas, cuando un gerente intenta agregar una dirección como gerente o beneficiario, esa dirección debe registrarse primero en el sistema, de lo contrario, aparecerá un error mencionado en la sección agregar beneficiario. Para evitar esto, use endpoint / api / user / auth. Para obtener más información, consulte la sección [API](https://docs.impactmarket.com/v/espanol/developers/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;
```

[<br>](https://docs.impactmarket.com/v/brazil/developers/getting-started)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.impactmarket.com/espanol-1/developers/contratos-inteligentes-smart-contracts.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
