# easycli - Documentação Completa Este doc cobre tudo do nosso CLI (easycli) pra interagir com: - EasyBRL (ERC20) – comando `coin` - EasyToken (ERC721) – comando `token` - Utilidades – comando `polygon` Dica: tudo que for valor on-chain usa UNIDADES BASE (inteiro). Para o eBRL, 6 casas decimais. Ex.: 1,23 eBRL = 1_230_000. ## Pré-requisitos - Go 1.21+ - Node RPC: `RPC_URL` ou `POLYGON_RPC_URL` (ou `AMOY_RPC_URL`) - Endereços dos contratos: `EASY_COIN_ADDR`, `EASY_TOKEN_ADDR` - Chave do admin: `PRIVATE_KEY` (ou `EASY_ADMIN_PRIVATE_KEY`/`EASY_ADMIM_PRIVATE_KEY`) - Opcional: chaves do usuário de teste (não-admin): `NOT_EASY_ADMIM_PUBLIC_KEY`, `NOT_EASY_ADMIN_PRIVATE_KEY` Arquivo .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. ## Build e ajuda Na pasta sdk/ ```bash go mod tidy go build -o easycli . ./easycli --help ``` Saída global (resumo): - Flags globais: `--rpc`, `--pk`, `--coin-addr`, `--token-addr` - Comandos: `coin`, `token`, `polygon` ## Flags globais - `--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 EasyToken Exemplo geral: ```bash ./easycli --rpc $RPC_URL --coin-addr $EASY_COIN_ADDR coin info ``` --- # Comando: polygon ## polygon create-new-address Gera uma carteira nova. Exemplo: ```bash ./easycli polygon create-new-address ``` Saída esperada: ``` privateKey=0x publicKey=0x address=0x ``` --- # Comando: coin (ERC20 EasyBRL) ## coin info Mostra nome, símbolo, decimais, totalSupply, e paused. ```bash ./easycli --rpc $RPC_URL --coin-addr $EASY_COIN_ADDR coin info ``` Saída: ``` name=EasyBRL symbol=eBRL decimals=6 totalSupply=123456789 paused=false ``` ## coin balance --address Consulta saldo em unidades base. ```bash ./easycli coin balance --address 0xAbc... ``` Saída: ``` 1000000 ``` ## coin transfer --to --amount Transfere tokens. ```bash ./easycli coin transfer --to 0xAbc... --amount 5000 ``` Saída: ``` 0x ``` ## coin approve --spender --amount Aprova o spender pra gastar seus tokens. ```bash ./easycli coin approve --spender 0xSpender... --amount 20000 ``` Saída: ``` 0x ``` ## coin allowance --owner --spender Consulta allowance. ```bash ./easycli coin allowance --owner 0xOwner... --spender 0xSpender... ``` Saída: ``` 20000 ``` ## coin transfer-from --from --to --amount Transfere usando a allowance disponível. ```bash ./easycli coin transfer-from --from 0xUser... --to 0xAdmin... --amount 5000 ``` Saída: ``` 0x ``` ## coin paused Consulta se está pausado. ```bash ./easycli coin paused ``` Saída: ``` false ``` ## coin pause Pausa transferências (precisa de papel apropriado – admin/pauser). ```bash ./easycli coin pause ``` Saída: ``` 0x ``` ## coin unpause Despausa. ```bash ./easycli coin unpause ``` Saída: ``` 0x ``` ## coin set-blacklist --account --status Configura blacklist. ```bash ./easycli coin set-blacklist --account 0xUser... --status true ``` Saída: ``` 0x ``` ## coin is-blacklisted --account Verifica blacklist. ```bash ./easycli coin is-blacklisted --account 0xUser... ``` Saída: ``` true ``` ## coin mint --to --amount Mint (admin). ```bash ./easycli coin mint --to 0xUser... --amount 100000 ``` Saída: ``` 0x ``` ## coin burn --amount Burn do próprio saldo (admin). ```bash ./easycli coin burn --amount 10000 ``` Saída: ``` 0x ``` ## coin burn-from --account --amount Burn de outro (conforme regras/allowance/role). ```bash ./easycli coin burn-from --account 0xUser... --amount 1 ``` Saída: ``` 0x ``` ## Roles (coin) Papéis: `DEFAULT_ADMIN_ROLE`, `PAUSER_ROLE`, `MINTER_ROLE`, `COMPLIANCE_ROLE`. ### coin grant-role --role --account ```bash ./easycli coin grant-role --role COMPLIANCE_ROLE --account 0xUser... ``` Saída: ``` 0x ``` ### coin revoke-role --role --account ```bash ./easycli coin revoke-role --role COMPLIANCE_ROLE --account 0xUser... ``` Saída: ``` 0x ``` ### coin has-role --role --account ```bash ./easycli coin has-role --role COMPLIANCE_ROLE --account 0xUser... ``` Saída: ``` true ``` ### coin grant-compliance-role --account Atalho para conceder COMPLIANCE_ROLE. ```bash ./easycli coin grant-compliance-role --account 0xUser... ``` Saída: ``` 0x ``` --- # Comando: token (ERC721 EasyToken) ## token info ```bash ./easycli --rpc $RPC_URL --token-addr $EASY_TOKEN_ADDR token info ``` Saída: ``` name=EasyToken symbol=eToken paused=false ``` ## token owner-of --token-id ```bash ./easycli token owner-of --token-id 1 ``` Saída: ``` 0xOwner... ``` ## token balance --address Quantidade de NFTs do endereço (valor inteiro). ```bash ./easycli token balance --address 0xUser... ``` Saída: ``` 2 ``` ## token token-uri --token-id ```bash ./easycli token token-uri --token-id 1 ``` Saída: ``` https://example.com/doc1.json ``` ## token doc-hash --token-id ```bash ./easycli token doc-hash --token-id 1 ``` Saída: ``` 0x<64-hex> ``` ## token appraisal --token-id Valor de avaliação (base units). ```bash ./easycli token appraisal --token-id 1 ``` Saída: ``` 1000000 ``` ## token set-token-uri --token-id --uri Requer `METADATA_ROLE`. ```bash ./easycli token set-token-uri --token-id 1 --uri https://example.com/doc1-updated.json ``` Saída: ``` 0x ``` ## token set-appraisal --token-id --value Requer `APPRAISER_ROLE`. ```bash ./easycli token set-appraisal --token-id 1 --value 1200000 ``` Saída: ``` 0x ``` ## token safe-mint --to --uri --hash <0x64hex> --value Minte um novo NFT de documento. ```bash ./easycli token safe-mint --to 0xUser... --uri https://example.com/doc1.json --hash 0x<64-hex> --value 1000000 ``` Saída: ``` 0x ``` ## token transfer --to --token-id Transfere seu NFT. ```bash ./easycli token transfer --to 0xTo... --token-id 1 ``` Saída: ``` 0x ``` ## token safe-transfer --to --token-id Versão explícita de safeTransferFrom. ```bash ./easycli token safe-transfer --to 0xTo... --token-id 1 ``` Saída: ``` 0x ``` ## token approve --to --token-id Aprova alguém pra esse tokenId. ```bash ./easycli token approve --to 0xSpender... --token-id 1 ``` Saída: ``` 0x ``` ## token set-approval-for-all --operator --approved Aprovação por operador. ```bash ./easycli token set-approval-for-all --operator 0xOp... --approved true ``` Saída: ``` 0x ``` ## token get-approved --token-id ```bash ./easycli token get-approved --token-id 1 ``` Saída: ``` 0xApproved... ``` ## token is-approved-for-all --owner --operator ```bash ./easycli token is-approved-for-all --owner 0xOwner... --operator 0xOp... ``` Saída: ``` true ``` ## token paused | token pause | token unpause ```bash ./easycli token paused ./easycli token pause ./easycli token unpause ``` Saídas: ``` false 0x 0x ``` ## token set-blacklist --account --status ```bash ./easycli token set-blacklist --account 0xUser... --status true ``` Saída: ``` 0x ``` ## token is-blacklisted --account ```bash ./easycli token is-blacklisted --account 0xUser... ``` Saída: ``` true ``` ## Roles (token) Papéis: `DEFAULT_ADMIN_ROLE`, `PAUSER_ROLE`, `MINTER_ROLE`, `METADATA_ROLE`, `APPRAISER_ROLE`, `COMPLIANCE_ROLE`. ### token grant-role --role --account ```bash ./easycli token grant-role --role MINTER_ROLE --account 0xAdmin... ``` Saída: ``` 0x ``` ### token revoke-role --role --account ```bash ./easycli token revoke-role --role MINTER_ROLE --account 0xUser... ``` Saída: ``` 0x ``` ### token has-role --role --account ```bash ./easycli token has-role --role MINTER_ROLE --account 0xUser... ``` Saída: ``` false ``` ### token grant-compliance-role --account ```bash ./easycli token grant-compliance-role --account 0xUser... ``` Saída: ``` 0x ``` --- # Geração de hash de documento (bytes32) Use um SHA-256 (64 hex) e prefixe com 0x. Exemplo rápido no Linux/macOS: ```bash echo -n "meu-doc" | sha256sum | awk '{print $1}' # 0x ``` # Dicas e solução de problemas - Erro `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. # Testes E2E 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.