Pular para o conteúdo principal

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​

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.