WEB3DEV

Cover image for Near Token Fungível
Dimitris Carvalho Calixto
Dimitris Carvalho Calixto

Posted on • Atualizado em

Near Token Fungível

Tradução feita por Dimitris Calixto, artigo original disponível aqui

Token Fungível (FT)

Exemplo de implementação de contrato de um token fungível que usa near-contract-standards e testes de simulação. Esse é apenas um exemplo de contrato.

Pré-requisitos
Se você está usando Gitpod, você pode pular essa etapa.

  1. Tenha certeza de que o Rust está instalado por pré-requisito em near-sdk-rs.
  2. Certifique-se de que near-cli está instalado executando near --version. Se não estiver instalado, instale com: npm install -g near-cli

Criação
Execute o build:
./build.sh

Usando esse contrato

Instalação rápida

Você pode criar e instalar esse smart contract para uma conta de desenvolvimento. Contas de Desenvolvimento são geradas automaticamente para auxiliar no desenvolvimento e no teste de smart contracts. Por favor, veja a seção “Standard Deploy” para criar uma conta mais personalizada para instalar.

near dev-deploy --wasmFile res/fungible_token.wasm --helperUrl https://near-contract-helper.onrender.com

Nesta instância, a conta é dev-1234567890123. Um arquivo foi criado contendo um par de chaves para a conta, localizada em neardev/de-account. Para tornar os próximos passos mais fáceis, nós vamos definir uma variável de ambiente contendo o id dessa conta de desenvolvimento e usá-la quando copiar/colar comandos. Execute esse comando na variável de ambiente.

source neardev/dev-account.env

Você pode dizer se a variável de ambiente está definida corretamente se a sua linha de comando mostra o nome da conta depois desse comando:

echo $CONTRACT_NAME

O próximo comando vai inicializar o contrato usando o método novo:

near call $CONTRACT_NAME new '{"owner_id": "'$CONTRACT_NAME'", "total_supply": "1000000000000000", "metadata": { "spec": "ft-1.0.0", "name": "Example Token Name", "symbol": "EXLT", "decimals": 8 }}' --accountId $CONTRACT_NAME

Nos bastidores, isso está criando uma conta e instalando um contrato nela. No console, observe uma mensagem assim:

Done deploying to dev-1234567890123

Para conseguir os metadados do token fungível:

near view $CONTRACT_NAME ft_metadata

Instalação Padrão

Esse contrato inteligente será instalado na sua conta NEAR. Para esse exemplo, por favor, crie uma nova conta NEAR. Como o NEAR permite a possibilidade de atualizar os contratos nas mesmas contas, as funções de inicialização devem ser desmarcadas. Se você gostaria de executar esse exemplo em uma conta NEAR que tem prioridade na instalação, por favor, use o comando near-cli near delete e então, recrie isso na carteira. Para criar ( ou recriar) uma conta, por favor siga as instruções na NEAR Wallet.

Altere para mainnet. Você pode pular esse passo para usar testnet como rede padrão.

export NEAR_ENV=mainnet

Na raiz do projeto, faça o login na sua conta recentemente criada com near-cli seguindo as instruções depois desse comando:

near login

Para tornar esse tutorial fácil de copiar/colar, nós vamos definir uma variável de ambiente para o id da sua conta. No comando abaixo, substitua MY_ACCOUNT_NAME com o nome da conta que você logou, incluindo o .near:

ID=MY_ACCOUNT_NAME

Você pode dizer se a variável de ambiente está definida corretamente se sua linha de comando mostrar o nome da conta depois desse comando:

echo $ID

Agora você pode instalar o contrato compilado nesse exemplo para sua conta:

near deploy --wasmFile res/fungible_token.wasm --accountId $ID

Contrato de Tokens Fungíveis devem ser inicializados antes de usar. Você pode ler mais sobre metadados em ‘nomicon.io’. Modifique os parâmetros e crie um token:

near call $ID new '{"owner_id": "'$ID'", "total_supply": "1000000000000000", "metadata": { "spec": "ft-1.0.0", "name": "Example Token Name", "symbol": "EXLT", "decimals": 8 }}' --accountId $ID

Obtenha os metadados:

near view $ID ft_metadata

Exemplo de transferências

Vamos definir uma conta para transferir alguns tokens. Essa conta será uma subconta da conta NEAR na qual você entrou.

near create-account bob.$ID --masterAccount $ID --initialBalance

Adicione armazenamento de depósito para a conta do Bob:

near call $ID storage_deposit '' --accountId bob.$ID --amount 0.00125

Cheque o saldo da conta do Bob, deverá ser 0 por agora:

near view $ID ft_balance_of '{"account_id": "'bob.$ID'"}'

Transfira tokens para Bob do contrato que cunhou esses tokens fungíveis, exatamente 1 yoctoNEAR de depósito deve ser anexado:

near call $ID ft_transfer '{"receiver_id": "'bob.$ID'", "amount": "19"}' --accountId $ID --amount 0.000000000000000000000001

Confira o saldo da conta do Bob de novo com o comando de antes e agora retornará 19.

Testando

Como em muitos Contratos e Bibliotecas Rust, há testes na implementação principal de token fungível em ft/src/lib.rs

Além disso, esse projeto tem testes de simulação em test/sim. Testes de simulação permitem testes de chamada de cross-contract, que são cruciais para garantir que a função ft-transfer_call funcione corretamente. Esses testes de simulação são a razão desse projeto ter a estrutura de arquivos que tem. Note que a raiz do projeto tem um Cargo.toml que é definido como área de trabalho. Ft e test-contract-defi são projetos de contrato pequenos e orientados, sendo que o último só existe para testes de simulação. A raiz do projeto importa o near-sdk-sim e a interação dos testes entre esses contratos.

Você pode executar todos esses testes com um comando:

cargo test

Se você quer executar apenas um teste, você pode usar cargo test simulate já que todos os testes de simulação tem “simulate” nos seus nomes.

Notas

  • O valor de saldo máximo é limitado por U128 ( 2**128 -1 ).
  • As chamadas de JSON devem passar U128 como uma string de base 10. Por exemplo, “100”.
  • Isso não inclui a funcionalidade de contrato de depósito, já que ft_transfer_call fornece uma abordagem superior. Um contrato de depósito pode, claramente, ser adicionado como um contrato separado ou uma funcionalidade adicional dentro desse contrato.

*Sem AssemblyScript? *

near-contract-standards são atualmente apenas em Rust. Nós recomendamos fortemente usar essa biblioteca para criar seu próprio contrato de Token Fungível para garantir que funcione como esperado.

Algum dia o núcleo da NEAR ou a comunidade pode fornecer uma biblioteca similar para AssemblyScript, até um ponto em que esse exemplo será atualizado para incluir ambas versões Rust e AssemblyScript.

Contribuição

Quando fizer mudanças nos arquivos no ft ou test-contract-defi, lembre-se de usar ./build-sh para compilar todos os contratos e copiar todas as saídas para a pasta res. Se você esquecer isso, o teste de simulações não utilizará as últimas versões.

Perceba que se o arquivo rust-toolchain mudar no repositório, certifique-se de atualizar o _.gitpod.Dockerfile _para exemplificar precisamente usando-o como padrão.

Latest comments (0)