Este doc cobre tudo do nosso CLI (easycli) pra interagir com:
cointokenpolygonDica: tudo que for valor on-chain usa UNIDADES BASE (inteiro). Para o eBRL, 6 casas decimais. Ex.: 1,23 eBRL = 1_230_000.
RPC_URL ou POLYGON_RPC_URL (ou AMOY_RPC_URL)EASY_COIN_ADDR, EASY_TOKEN_ADDRPRIVATE_KEY (ou EASY_ADMIN_PRIVATE_KEY/EASY_ADMIM_PRIVATE_KEY)NOT_EASY_ADMIM_PUBLIC_KEY, NOT_EASY_ADMIN_PRIVATE_KEYArquivo .env pode ficar na raiz (../.env relativo a sdk/) ou em sdk/.env. Flags sempre sobrescrevem .env.
Evite CRLF no .env (linha do Windows). Se aparecer erro tipo invalid hex character '\r', troque pra LF.
Na pasta sdk/
go mod tidy
go build -o easycli .
./easycli --help
Saída global (resumo):
--rpc, --pk, --coin-addr, --token-addrcoin, token, polygon--rpc: URL do RPC (sobrepõe .env)--pk: chave privada do remetente (hex) para transações--coin-addr: endereço do contrato ERC20 EasyBRL--token-addr: endereço do contrato ERC721 EasyTokenExemplo geral:
./easycli --rpc $RPC_URL --coin-addr $EASY_COIN_ADDR coin info
Gera uma carteira nova.
Exemplo:
./easycli polygon create-new-address
Saída esperada:
privateKey=0x<hex>
publicKey=0x<hex>
address=0x<addr>
Mostra nome, símbolo, decimais, totalSupply, e paused.
./easycli --rpc $RPC_URL --coin-addr $EASY_COIN_ADDR coin info
Saída:
name=EasyBRL symbol=eBRL decimals=6 totalSupply=123456789 paused=false
Consulta saldo em unidades base.
./easycli coin balance --address 0xAbc...
Saída:
1000000
Transfere tokens.
./easycli coin transfer --to 0xAbc... --amount 5000
Saída:
0x<txhash>
Aprova o spender pra gastar seus tokens.
./easycli coin approve --spender 0xSpender... --amount 20000
Saída:
0x<txhash>
Consulta allowance.
./easycli coin allowance --owner 0xOwner... --spender 0xSpender...
Saída:
20000
Transfere usando a allowance disponível.
./easycli coin transfer-from --from 0xUser... --to 0xAdmin... --amount 5000
Saída:
0x<txhash>
Consulta se está pausado.
./easycli coin paused
Saída:
false
Pausa transferências (precisa de papel apropriado – admin/pauser).
./easycli coin pause
Saída:
0x<txhash>
Despausa.
./easycli coin unpause
Saída:
0x<txhash>
Configura blacklist.
./easycli coin set-blacklist --account 0xUser... --status true
Saída:
0x<txhash>
Verifica blacklist.
./easycli coin is-blacklisted --account 0xUser...
Saída:
true
Mint (admin).
./easycli coin mint --to 0xUser... --amount 100000
Saída:
0x<txhash>
Burn do próprio saldo (admin).
./easycli coin burn --amount 10000
Saída:
0x<txhash>
Burn de outro (conforme regras/allowance/role).
./easycli coin burn-from --account 0xUser... --amount 1
Saída:
0x<txhash>
Papéis: DEFAULT_ADMIN_ROLE, PAUSER_ROLE, MINTER_ROLE, COMPLIANCE_ROLE.
./easycli coin grant-role --role COMPLIANCE_ROLE --account 0xUser...
Saída:
0x<txhash>
./easycli coin revoke-role --role COMPLIANCE_ROLE --account 0xUser...
Saída:
0x<txhash>
./easycli coin has-role --role COMPLIANCE_ROLE --account 0xUser...
Saída:
true
Atalho para conceder COMPLIANCE_ROLE.
./easycli coin grant-compliance-role --account 0xUser...
Saída:
0x<txhash>
./easycli --rpc $RPC_URL --token-addr $EASY_TOKEN_ADDR token info
Saída:
name=EasyToken symbol=eToken paused=false
./easycli token owner-of --token-id 1
Saída:
0xOwner...
Quantidade de NFTs do endereço (valor inteiro).
./easycli token balance --address 0xUser...
Saída:
2
./easycli token token-uri --token-id 1
Saída:
https://example.com/doc1.json
./easycli token doc-hash --token-id 1
Saída:
0x<64-hex>
Valor de avaliação (base units).
./easycli token appraisal --token-id 1
Saída:
1000000
Requer METADATA_ROLE.
./easycli token set-token-uri --token-id 1 --uri https://example.com/doc1-updated.json
Saída:
0x<txhash>
Requer APPRAISER_ROLE.
./easycli token set-appraisal --token-id 1 --value 1200000
Saída:
0x<txhash>
Minte um novo NFT de documento.
./easycli token safe-mint --to 0xUser... --uri https://example.com/doc1.json --hash 0x<64-hex> --value 1000000
Saída:
0x<txhash>
Transfere seu NFT.
./easycli token transfer --to 0xTo... --token-id 1
Saída:
0x<txhash>
Versão explícita de safeTransferFrom.
./easycli token safe-transfer --to 0xTo... --token-id 1
Saída:
0x<txhash>
Aprova alguém pra esse tokenId.
./easycli token approve --to 0xSpender... --token-id 1
Saída:
0x<txhash>
Aprovação por operador.
./easycli token set-approval-for-all --operator 0xOp... --approved true
Saída:
0x<txhash>
./easycli token get-approved --token-id 1
Saída:
0xApproved...
./easycli token is-approved-for-all --owner 0xOwner... --operator 0xOp...
Saída:
true
./easycli token paused
./easycli token pause
./easycli token unpause
Saídas:
false
0x<txhash>
0x<txhash>
./easycli token set-blacklist --account 0xUser... --status true
Saída:
0x<txhash>
./easycli token is-blacklisted --account 0xUser...
Saída:
true
Papéis: DEFAULT_ADMIN_ROLE, PAUSER_ROLE, MINTER_ROLE, METADATA_ROLE, APPRAISER_ROLE, COMPLIANCE_ROLE.
./easycli token grant-role --role MINTER_ROLE --account 0xAdmin...
Saída:
0x<txhash>
./easycli token revoke-role --role MINTER_ROLE --account 0xUser...
Saída:
0x<txhash>
./easycli token has-role --role MINTER_ROLE --account 0xUser...
Saída:
false
./easycli token grant-compliance-role --account 0xUser...
Saída:
0x<txhash>
Use um SHA-256 (64 hex) e prefixe com 0x. Exemplo rápido no Linux/macOS:
echo -n "meu-doc" | sha256sum | awk '{print $1}'
# 0x<coloque-prefixo-0x-no-resultado>
invalid hex character '\r': seu .env está com CRLF. Troque pra LF.missing address/invalid address: confira EASY_COIN_ADDR/EASY_TOKEN_ADDR e se têm prefixo 0x.execution reverted: geralmente falta de role, blacklist ou paused. Verifique permissões e status.Temos um script de teste: sdk/test_cli.sh que roda cenários com admin e não-admin, barra de progresso e checklist final.