Contrato Inteligente GPT

O GPT foi emitido em duas blockchains, Ethereum e Polygon, totalizando a quantidade de 100.053.211 tokens. Utilizamos a o protocolo ERC-20, e fizemos o deploy do contrato no Ethereum e na Polygon, especialmente em razão das taxas aplicadas por cada rede, sendo uma, utilizada para operações em varejo e outra para operações institucionais e de grande volume.

Herança de Contratos

O contrato inteligente GPT herda propriedades de vários contratos:

  • ERC20: Padrão para tokens fungíveis.

  • ERC20Burnable: Permite a queima de tokens.

  • ERC20Pausable: Permite pausar e despausar transferências e outras funcionalidades, para casos de emergência.

  • AccessControl: Fornece controle de acesso baseado em papéis.

  • ERC20Permit: Permite a execução de transações sem gas, usando assinaturas.

Definições de Papéis

  • PAUSER_ROLE: Permissão para pausar e despausar o contrato.

  • MINTER_ROLE: Permissão para criar novos tokens.

  • BURNER_ROLE: Permissão para queimar tokens.

Eventos

  • CompensationCompleted: Emitido quando uma compensação é completada.

  • TokensBurned: Emitido quando tokens são queimados.

  • MetadataURLUpdated: Cada vez que a URL dos metadados é atualizada, este evento é emitido, fornecendo rastreabilidade e visibilidade das alterações feitas na referência dos metadados.

Construtor

Define o nome do contrato, como GPT, que significa Greener Preservation Token. Faz a distribuição de um montante inicial de tokens para as carteiras que têm direito. O montante inicial 100.053.211 foi dividido em 3 carteiras, sendo que uma dela dividiu seu montante entre 90% Ethereum e 10% Polygon.

constructor(address defaultAdmin, address pauser, address minter, address burner, uint256 initialSupplyCluster1, uint256 initialSupplyCluster2, address cluster2Adress, uint256 initialSupplyCluster3, address cluster3Adress)

ERC20("GPT", "GPT")

ERC20Permit("GPT")

{

_grantRole(DEFAULT_ADMIN_ROLE, defaultAdmin);

_grantRole(PAUSER_ROLE, pauser);

_grantRole(MINTER_ROLE, minter);

_grantRole(BURNER_ROLE, burner);

_mint(msg.sender, initialSupplyCluster1);

_mint(cluster2Adress, initialSupplyCluster2);

_mint(cluster3Adress, initialSupplyCluster3);

}

Funções Principais

Pausar e Despausar

Permite pausar ou despausar todas as operações no contrato se o chamador tiver o PAUSER_ROLE.

function pause() public onlyRole(PAUSER_ROLE);
function unpause() public onlyRole(PAUSER_ROLE);

Mint

Permite a criação de novos tokens se o chamador tiver a permissão.

function mint(address to, uint256 amount) public onlyRole(MINTER_ROLE);

Queimar Tokens

Permite a queima dos tokens se o chamador tiver a permissão do contrato e aprovação para tal da carteira fonte dos tokens.

function burnFrom(address account, uint256 amount) public virtual override onlyRole(BURNER_ROLE) {

super.burnFrom(account, amount);

}

Compensate

Realiza uma compensação queimando tokens e registrando dados associados.

function compensate(address from, uint256 amount, string[] memory data) public onlyRole(BURNER_ROLE) returns (bool);

Set Metadata

Atualiza a URL dos Metadados do Token, contendo documentos e arquivos que comprovam a origem dos tokens.

function setMetadataURL(string memory newURL) public onlyRole(DEFAULT_ADMIN_ROLE) {

_metadataURL = newURL;

emit MetadataURLUpdated(newURL);

}

Get Metadata

Retorna o link atual de referência para os metadados do token.

function getMetadataURL() public view returns (string memory) {

return _metadataURL;

}

Gerar Hash

Gera e armazena um hash dos dados fornecidos. Esses dados são metadados do Burn, que garantem a autenticidade de cada transação de compensação.

function _generateHash(string[] memory data) internal returns (bytes32);

Sobrescritas Requeridas

Sobrescritas das funções para compatibilidade entre os contratos herdados.

function _update(address from, address to, uint256 value) internal override(ERC20, ERC20Pausable);

Last updated