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 usado mais adiante quando você estiver implantando contratos mais complexos, pois os passos serão parecidos.
Requisitos
- Node.js
- Compreensão básica de Solidity
- Moedas XFI da Testnet (os faucets estão no Console XFI de Teste)
Instalando o Foundry (Obrigatório)
Neste guia, usaremos Foundry para testar e implantar nosso contrato inteligente. O Foundry permite fazer tudo isso dentro de 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á tem 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 Foundry
O comando abaixo fará o download da versão mais recente do Foundry:
curl -L https://foundry.paradigm.xyz | bash
Depois que o download for concluído, 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 criaremos o arquivo do contrato e os arquivos de suporte usando o comando abaixo:
forge init counter_contract
Agora você pode abrir o seu editor de código no local do recém-criado counter_contract. Uma estrutura de pastas como a abaixo deve ser criada:
--lib
--script
--src
--test
--README.md
--foundry.toml
Não se preocupe se ainda não souber para que servem todas essas pastas, pois as usaremos ao longo deste guia.
Revisando o Contrato Inteligente Counter
No seu editor de código, abra o arquivo Counter.sol localizado em /src/Counter.sol. O código deve ser o mesmo que o abaixo, possivelmente com uma versão do Solidity diferente:
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.13;
contract Counter
function increment() public
}
Este contrato inclui:
number - Uma variável numérica que é atribuída como um inteiro não assinado de 256 bits.
setNumber - Uma função pública que pode ser chamada para definir a variável number
increment - Uma função pública que incrementa a variável number em 1
Compilar o Contrato
Agora precisamos compilar o contrato. Este é um passo necessário para verificar se nosso contrato inteligente não possui erros lógicos de codificação. Não é um teste de segurança do contrato inteligente.
Podemos fazer isso executando o seguinte comando:
forge build
Se tiver sucesso, isso criará uma pasta chamada out que contém a 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 no arquivo /test/Counter.t.sol. O código deve parecer com o seguinte:
// 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 de teste executando o seguinte comando:
forge test
Após executar este comando, você deverá ver que 2 testes passaram, bem como o consumo de gás para a função Increment.
Executados 2 testes para 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 rede de teste CrossFi. Podemos fazer isso em um único comando usando forge create.
Você precisará usar uma chave privada conectada à sua carteira com tokens XFI de 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ê deverá ver o endereço do seu contrato sob o "Deployed to" no terminal.
Deployer: 0x85Ec95865AD3F912213f105d4f44e132B381f719
Deployed to: 0xE785D511Fa79B4D3C0c5C4182090EA8D89F32FF4
Transaction hash: 0x26ec2881d45dbb0eda13e2cd7df165d6ff8ff15a49af0196b45c5e7f34291d69
Você pode verificar que seu contrato foi implantado na CrossFi testnet buscando o seu endereço usando o test 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 obtiver sucesso, você verá o blockHash e outros dados da transação.
Lendo o Número
Para ler o valor atual da variável number, 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 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!
Os passos que você concluiu neste guia são os mesmos passos que você pode seguir ao continuar construindo no CrossFi.