Avançar para o conteúdo principal

Cadeia de Desenvolvimento Local com Contratos de Protocolo

Como configurar uma blockchain de desenvolvimento Celo que inclui todos os contratos do protocolo central, incluindo os contratos de identidade e estabilidade.


O que esperar

No final deste tutorial, você terá uma blockchain de desenvolvimento Celo local rodando exposta em http://localhost:7545 e poderá se conectar a ela como qualquer outro nó local. Também vamos analisar como inspecionar a blockchain de desenvolvimento usando a ferramenta Celo CLI e o ContractKit.

Executar o blockchain de desenvolvimento Celo é útil porque acelera consideravelmente o tempo de desenvolvimento. Você começará com 10 contas pré-financiadas com CELO e todas as transações na rede são virtualmente instantâneas.

Você pode rodar o blockchain do desenvolvimento Celo de várias maneiras:

Use Ganache para fazer fork Mainnet ou Alfajores

Você pode começar uma blockchain de desenvolvimento EVM local com o Ganache. Uma vez que Ganache estiver instalado, você pode fazer fork Mainnet ou Alfajores com um único comando. Leia mais sobre isso na documentação de Ganache aqui.

ganache --fork.url https://forno.celo.org

Isso permite que você interaja com contratos e contas que foram implantadas no ponto de fork especificado, incluindo aplicativos de DeFi e contratos do protocolo, como a Reserva, cUSD, cEUR, Contas, Governança e outros contratos.

Você também tem 10 contas falsas financiadas com CELO para implantar seus contratos e executar testes neste ambiente mainnet simulado.

Esteja ciente de que você não poderá pagar taxas de transação em moedas estáveis, uma vez que este é um ambiente Ethereum. Comporta-se de forma semelhante ao Celo EVM, mas não exatamente.

Use o pacote celo-devchain NPM

O mais fácil é usar um devchain "pré-gerado" do pacote NPM celo-devchain. Tudo o que você precisa fazer é:

> npm install --save-dev @terminal-fi/celo-devchain
> npx celo-devchain --port 7545

or

> yarn add --dev @terminal-fi/celo-devchain
> yarn run celo-devchain --port 7545

Inicialize seu próprio devchain a partir de monorepo

Se preferir, você pode inicializar seu próprio devchain e construí-lo a partir do zero. Para iniciar, baixe o Celo monorepo aqui ou com o seguinte comando.

git clone https://github.com/celo-org/celo-monorepo.git

Consulte esta página para obter instruções sobre como construir o monorepo.

Uma vez que o monorepo é construído, entre no diretório do contrato.

cd packages/sdk/contractkit

Do diretório do contratokit , executar

yarn test:reset && yarn test:livechain

Isto irá iniciar a blockchain de desenvolvimento do Celo. Serão necessários pelo menos alguns minutos para começar. As migrações do contrato serão impressas no terminal à medida que forem sendo implementadas.

O processo terminará e imprimirá Ganache started. Deixe esta janela de terminal aberta para deixar a cadeia de desenvolvimento em execução.

Interagindo com a cadeia

Inspecionando a cadeia

Agora que temos uma cadeia de desenvolvimento do Celo em execução, nós provavelmente queremos saber a que contas temos acesso, quanto cGLD e cUSD eles têm, bem como os endereços dos contratos do protocolo implementado.

Podemos usar a ferramenta Celo CLI para isso, ou podemos usar o pacote npm ContractKit em um script node.

Celo CLI

Você pode instalar o CLI usando o npm executando npm install -g @celocli. Você pode ver os detalhes do pacote aqui. Uma vez instalado, você deve ser capaz de acessar a ferramenta a partir do terminal, executando $ celocli. Tente $ celocli help.

O CLI irá se conectar ao nó de http://localhost:8545 por padrão. Para se conectar à porta 7545, você pode executar $ celocli config:set -n http://localhost:7545, e, em seguida, verifique a conexão executando $ nó celocli: get.

Você pode ver as contas disponíveis na cadeia de desenvolvimento do Celo executando$ celocli account:list. Você deve ver algo como:

[ '0x5409ED021D9299bf6814279A6A1411A7e866A631',
'0x6Ecbe1DB9EF729CBe972C83Fb886247691Fb6beb',
'0xE36Ea790bc9d7AB70C55260C66D52b1eca985f84',
'0xE834EC434DABA538cd1b9Fe1582052B880BD7e63',
'0x78dc5D2D739606d31509C31d654056A45185ECb6',
'0xA8dDa8d7F5310E4A9E24F8eBA77E091Ac264f872',
'0x06cEf8E666768cC40Cc78CF93d9611019dDcB628',
'0x4404ac8bd8F9618D27Ad2f1485AA1B2cFD82482D',
'0x7457d5E02197480Db681D3fdF256c7acA21bDc12',
'0x91c987bf62D25945dB517BDAa840A6c661374402' ]

Se você tentar verificar o saldo da primeira conta com $ celocli account:balance 0x5409ED021D9299bf6814279A6A1411A7e866A631 você pode encontrar um erro dizendo que o nó não está sincronizado atualmente. Você pode silenciar isso adicionando esta variável de ambiente no terminal $ export NO_SYNCCHECK=true. Executar o comando novamente imprimirá:

Todos os saldos expressados em unidades de 10^-18.
gold: 9.9999999693185872e+25
lockedGold: 0
usd: 5e+22
total: 1.00004973043691287703791575e+26
pending: 0

ContratoKit + Node.js

Você também pode usar o ContractKit para acessar o nó local em um script node.js.

Como exemplo, tente executar este script em um projeto npm com contrato instalado.

O gist vinculado é chamado getInfo.js. Executá-lo com $ node getInfo.js Isso irá imprimir algumas informações sobre o blockchain Celo.

Agora você está preparado para começar a desenvolver, transacionar e implantar contratos no seu próprio blockchain de desenvolvimento Celo!

Usando ferramentas de desenvolvedores Ethereum com Celo

Você pode conectar a cadeia de desenvolvimento a uma ferramenta como [Truffle](https://trufflesuite. com/docs/truffle/) ou [Remix](https://remix. ethereum. org/) para começar a interagir com ela. Tenha em mente que essas ferramentas são construídas principalmente para desenvolvimento de Ethereum e são compatíveis com Celo porque Celo é semelhante ao Ethereum. As duas blockchains têm arquiteturas de blocos semelhantes e ambas rodam a Máquina Virtual Ethereum (EVM) para a execução de contratos inteligentes.

A principal diferença entre Celo e Ethereum que os desenvolvedores de dapp precisam ter em mente é que Celo tem um objeto de transação ligeiramente diferente da Ethereum. Celo requires one additional field in a transaction object, a feeCurrency. Quando Truffle e Remix são conectados a um nó de Celo executando localmente o nó local preencherá estes campos com valores padrão (se os campos estiverem vazios). O nó assinará a transação Celo e a transmitirá à rede.