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 utilizado mais tarde ao implantar contratos mais complexos, pois as etapas serão semelhantes.

Requisitos

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.