Contrato Inteligente GPT

Herança de Contratos

O contrato inteligente GPT herda propriedades dos contratos ERC-20 e Ownable. O primeiro é um padrão para tokens fungíveis na blockchain Ethereum, enquanto o segundo fornece funcionalidades que permitem a gestão de propriedade do contrato.

contract GPT is ERC20, Ownable {
    address _admin;
    bytes32 generatedHash;
    mapping(bytes32 => string[]) public compensatedData;
    mapping(address => bool) public approvedBurners;
    
    // ... restante do contrato
}    

O contrato GPT possui variáveis para armazenar o admin do contrato (owner), a hash gerada com a compensação e dois mapeamentos. O primeiro mapeamento relaciona hashes de compensação com dados específicos, enquanto o segundo é utilizado para aprovar endereços autorizados a queimar tokens.

Construtor

O construtor do contrato GPT é usado para inicializar o contrato quando é implantado na blockchain.

constructor(
    string memory name,
    string memory symbol,
    uint256 initialSupply,
    address admin
) ERC20(name, symbol) {
    _admin = admin;
    _mint(msg.sender, initialSupply);
}

O construtor recebe o nome e símbolo do token, a oferta inicial de tokens e o endereço do administrador (admin).

Funções Principais

Mint

A função mint permite a criação de novos tokens e só pode ser chamada pelo owner do contrato.

function mint(address to, uint256 amount) public onlyOwner {
    _mint(to, amount);
}

Decimais

A função decimals ajusta o número de casas decimais do token para 6.

function decimals() public view virtual override returns (uint8) {
    return 6;
}

Aprovar Burner

A função approveBurner permite ao admin aprovar um endereço como autorizado para queimar tokens.

function approveBurner() public {
    require(msg.sender != _admin, "admin can't self approve");
    approvedBurners[address(_admin)] = true;
}

Revogar Aprovação de Burner

A função revokeBurnerApproval revoga a aprovação do admin para queimar tokens.

function revokeBurnerApproval() internal {
    approvedBurners[address(_admin)] = false;
}

Compensate

A função compensate gera uma hash, queima os tokens e retorna a hash para consulta.

function compensate(
    address from,
    uint256 amount,
    string[] memory data
) public onlyOwner returns (bytes32) {
    generate(data);
    require(burnFrom(from, amount), "Burn didn't work");
    return (generatedHash);
}

Queimar Tokens

A função burn permite ao owner queimar tokens.

function burn(address from, uint256 amount) public onlyOwner returns (bool) {
    _burn(from, amount);
    return true;
}

Contrato Ownable

O contrato Ownable gerencia a propriedade do contrato, permitindo adição e remoção de owners.

abstract contract Ownable is Context {
    mapping(address => bool) private _owner;
    event OwnershipAdded(address indexed newOwner);
    event OwnershipRemoved(address indexed removedOwner);
    
    // ... restante do contrato
}

Funções Principais

Adicionar Proprietário

A função addOwnership adiciona um novo owner ao contrato.

function addOwnership(address newOwner) public virtual onlyOwner {
    require(newOwner != address(0), "Ownable: new owner is the zero address");
    _addOwnership(newOwner);
}

Renunciar à Propriedade

A função renounceOwnership permite a um owner renunciar à sua posição.

function renounceOwnership(address removedOwner) public virtual onlyOwner {
    _owner[removedOwner] = false;
    emit OwnershipRemoved(removedOwner);
}

Verificar Proprietário

A função readOwner retorna se um endereço é ou não owner.

function readOwner(address owner) public view returns (bool) {
    return _owner[owner];
}

Last updated