Início Rápido
Neste guia, você aprenderá como implantar um contrato inteligente na CrossFi Chain. Vamos criar um contrato simples, testá-lo e, em seguida, implantá-lo. Este guia pode ser utilizado mais tarde ao implantar contratos mais complexos, pois as etapas serão semelhantes.
Requisitos
- Node.js
- Compreensão básica de Solidity
- Moedas Testnet XFI (os faucets estão no teste XFI Console)
Instalando Foundry (Obrigatório)
Neste guia, usaremos Foundry para testar e implantar nosso contrato inteligente. O Foundry nos permite fazer tudo isso em um único conjunto de ferramentas e usando a linha de comando (CLI).
Primeiro, criaremos um diretório de arquivos para o nosso projeto e, em seguida, instalaremos o Foundry. Se você já tiver o Foundry instalado, pode pular esta etapa.
Criando o Projeto
No seu terminal, execute o seguinte comando para criar uma pasta e inicializar o npm.
mkdir crossfi_quickstart && cd crossfi_quickstart && npm init -y
Baixando e Instalando o Foundry
O comando abaixo baixará a versão mais recente do Foundry:
curl -L https://foundry.paradigm.xyz | bash
Após a conclusão do download, execute o comando foundryup
no seu terminal:
foundryup
Se estiver usando MacOS, você pode receber o seguinte erro:
dyld[32719]: Library not loaded: /usr/local/opt/libusb/lib/libusb-1.0.0.dylib
Para corrigir isso, execute brew install libusb (Requer Homebrew)
Criar o Contrato
Agora vamos criar o arquivo de contrato e os arquivos de suporte usando o comando abaixo:
forge init counter_contract
Você pode agora abrir seu editor de código no local do recém-criado counter_contract
. Deve ser criada uma estrutura de pasta como a abaixo:
--lib
--script
--src
--test
--README.md
--foundry.toml
Não se preocupe se você não tem certeza para que serve todas essas pastas agora, pois nós as usaremos ao longo deste guia.
Revisão do Contrato Inteligente de Contador
No seu editor de código, abra o arquivo Counter.sol que está localizado em /src/Counter.sol.
O código deve ser o mesmo que abaixo, podendo haver uma versão diferente do Solidity:
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.13;
contract Counter
function increment() public
}
Este contrato inclui:
número - Uma variável de número que é atribuída como um inteiro sem sinal com 256 bits.
setNumber - Uma função pública que pode ser chamada para definir a variável número
increment - Uma função pública que incrementa a variável número em 1
Compilar o Contrato
Agora precisamos compilar o contrato. Este é um passo necessário para verificar se o nosso contrato inteligente não possui erros lógicos de codificação. Não é um teste da segurança do contrato inteligente.
Podemos fazer isso executando o comando abaixo:
forge build
Se for bem-sucedido, isso criará uma pasta chamada out
que contém o ABI do nosso contrato inteligente na forma de um arquivo JSON chamado Counter.json.
Testando o Contrato
Para este guia, não precisaremos criar nossos testes, pois eles são fornecidos para nós no arquivo /test/Counter.t.sol
. O código deve ser parecido com:
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.13;
import from "forge-std/Test.sol";
import from "../src/Counter.sol";
contract CounterTest is Test
function test_Increment() public
function testFuzz_SetNumber(uint256 x) public
}
Podemos então executar o código do teste executando o seguinte comando:
forge test
Depois de executar este comando, você deve ver que 2 testes foram aprovados, bem como uma quantidade de gás para a função Increment
:
Ran 2 tests for test/Counter.t.sol:CounterTest
[PASS] testFuzz_SetNumber(uint256) (runs: 256, μ: 30066, ~: 31310)
[PASS] test_Increment() (gas: 31325)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 9.45ms (5.75ms CPU time)
Implantando o Contrato
Agora é hora de implantar nosso contrato inteligente na testnet CrossFi chain. Podemos fazer isso em um único comando usando forge create.
Você precisará usar uma chave privada que esteja conectada à sua carteira com tokens XFI na testnet.
forge create --rpc-url https://rpc.testnet.ms \
--private-key YOUR_PRIVATE_KEY \
src/Counter.sol:Counter
Se a implantação for bem-sucedida, você deve ver seu endereço de contrato sob "Implantado em" no seu terminal.
Deployer: 0x85Ec95865AD3F912213f105d4f44e132B381f719
Implantado em: 0xE785D511Fa79B4D3C0c5C4182090EA8D89F32FF4
Hash da transação: 0x26ec2881d45dbb0eda13e2cd7df165d6ff8ff15a49af0196b45c5e7f34291d69
Você pode verificar se seu contrato foi implantado na testnet CrossFi buscando pelo endereço utilizando o teste XFI Scan.
Interagindo com o Contrato
Na etapa final deste guia, interagiremos com nosso contrato chamando as funções públicas. Podemos fazer isso usando o Foundry e os seguintes comandos:
Definindo o Número
Para usar a função setNumber
para definir o novo número, você pode usar o seguinte comando:
cast send YOUR_CONTRACT_ADDRESS "setNumber(uint256)" 5 --rpc-url https://rpc.testnet.ms --private-key YOUR_PRIVATE_KEY
Se tiver sucesso, você verá o blockHash
e outros dados da transação.
Lendo o Número
Para ler o valor atual da variável número, você pode usar o seguinte comando:
cast call YOUR_CONTRACT_ADDRESS "number()" --rpc-url https://rpc.testnet.ms
Incrementando o Número
Para usar a função increment
function para incrementar o número em 1, você pode usar o seguinte comando:
cast send YOUR_CONTRACT_ADDRESS "increment()" --rpc-url https://rpc.testnet.ms --private-key YOUR_PRIVATE_KEY
Conclusão
Parabéns, você agora testou, compilou e implantou um contrato inteligente na CrossFi Testnet!
As etapas que você completou neste guia são as mesmas que você pode seguir ao continuar construindo na CrossFi.