WEB3DEV

Cover image for Arbitrum Nitro: Uma visão geral
Dimitris Carvalho Calixto
Dimitris Carvalho Calixto

Posted on

Arbitrum Nitro: Uma visão geral

O que é o Arbitrum

O Arbitrum One da Offchain Labs é uma solução de dimensionamento de camada 2 (L2) para Ethereum, lançado em 2021. O objetivo do Arbitrum é reduzir as taxas de transação

e aumentar sua capacidade de processar milhares de transações por segundo, como qualquer solução de dimensionamento. Ele move a computação e o armazenamento de contratos da cadeia primária da Ethereum, permitindo um

rendimento. As transações no Arbitrum custam apenas alguns centavos para serem concluídas. Apesar de ser um blockchain separado, ele usa recursos de segurança e privacidade da Camada 1 (L1) e retransmite todas as informações da transação para a cadeia principal da Ethereum. Além disso, é fácil para os desenvolvedores integrarem o

Arbitrum sem modificações, pois ele é compatível com a Máquina Virtual Ethereum (EVM).

Como o Arbitrum funciona

Os desenvolvedores criam contratos inteligentes e enviam transações para as caixas de entrada das cadeias do Arbitrum. Após o processamento, o Arbitrum gera um recibo de transação. As transações nas caixas de entrada do Arbitrum afetam a forma como ela lida com a transação e, portanto, o estado da cadeia.

Image

O Arbitrum lida com as transações da Ethereum usando uma técnica conhecida como rollup otimista. Os rollups aumentam significativamente as velocidades de processamento ao mover muitos dados de transações para fora da cadeia. Entretanto, diferentemente de outras sidechains, os rollups otimistas ainda publicam uma pequena quantidade de dados na rede descentralizada de layer-1(camada 1) para serem validados, aumentando a segurança.

Os rollups otimistas não publicam provas de validade para lotes de transações postadas na cadeia, pois presumem que as transações fora da cadeia são válidas. Essa característica separa os rollups otimistas dos rollups de conhecimento zero que imprimem provas criptográficas de validade para transações off-chain.

Image

Arbitrum Nitro

O Arbitrum lançou o Nitro em 31 de agosto. O Nitro é uma atualização técnica significativa para o Arbitrum, com o objetivo de ser mais compatível com EVMs, criar uma experiência melhor para os usuários, reduzir as taxas e acelerar as transações.

Image

O Nitro é um novo provador que pode fazer as provas de fraude interativas clássicas do Arbitrum usando o código WebAssembly (WASM).

Nitro vs Classic

Se diminuirmos um pouco o zoom, podemos ver que tanto o Classic quanto o Nitro têm um desempenho semelhante: procuram estabelecer um ambiente de execução o mais próximo possível do EVM, que atua como uma segunda camada para a Ethereum.

No entanto, ao contrário do Classic, o Nitro usa o WebAssembly em vez do AVM para instruções de baixo nível. Ele compila o código Go para WASM, implementa o ArbOS e inclui a implementação Ethereum mais amplamente utilizada no Geth. A compilação clássica foi obtida por meio de uma máquina virtual personalizada chamada AVM (Arbitrum Virtual Machine).

Uma das características mais importantes que distingue o Nitro do Classic é a arquitetura.

A AVM (Arbitrum Virtual Machine) se conecta à ponte e valida regularmente a validade das transações entre L1 e L2.

ArbOS

O ArbOS é o sistema operacional que é executado em uma cadeia Arbitrum na Camada 2 para controlar a operação da cadeia, ciclos de vida de contratos inteligentes, segurança e outras funções. A Offchain Labs também atualizou o ArbOS, reescrito na linguagem de programação Go. A versão atualizada aprimorará a comunicação de cross-chain entre a Camada 2 (Arbitrum) e a Camada 1 (Ethereum).

Image

A outra vantagem do Nitro é o uso direto do Geth. Isso significa que a maior parte do trabalho de criação de uma VM L2 é herdada imediatamente.

Migração do Nitro para DApps

Esta seção destina-se aos desenvolvedores do Solidity que desejam migrar seu DApp para o Arbitrum Nitro. Portanto, vamos falar primeiro sobre algumas vantagens de migrar seus DApps para o Nitro.

  • Compatibilidade com o gas Ethereum L1: o preço do gas para todas as operações EVM está precisamente alinhado com a camada 1.
  • Compressão de calldata: como a compressão no Nitro ocorre no nível do protocolo, os DApps não precisam fazer nenhuma alteração.
  • Suporte a todos os pré-compiladores Ethereum: todos os pré-compiladores Ethereum L1, incluindo ripemd160, blake2f e outros, são compatíveis com o Arbitrum Nitro.
  • Carimbos de data e hora frequentes: Os registros de data e hora que podem ser acessados via block.timestamp foram desacoplados do registro de data e hora do bloco anterior da Camada 1 e são atualizados a cada bloco.

Há algumas mudanças significativas para RPC, protocolos e DApps.

  • Não existe mais o conceito de um pool separado para armazenar gas.
  • Redução do tamanho máximo do código do contrato: Anteriormente, contratos de até 48 KB podiam ser implementados, mas agora eles só podem ter até 24 KB.

Como funciona o Arbitrum Nitro

Como o Arbitrum Nitro mencionado anteriormente é compilado para WASM, a linguagem e o compilador personalizados atuais podem ser substituídos por linguagens e ferramentas padrão para criar e compilar todo o sistema em vez da arquitetura AVM do Arbitrum Classic.

E para fornecer comunicação entre cadeias e reduzir as despesas de L1, os Offchain Labs reescreveram os componentes do ArbsOS em Go. Eles também têm um novo e aprimorado esquema de compactação e de lotes.

De acordo com os documentos, o núcleo do Nitro e suas principais inovações se baseiam em quatro conceitos principais.

Sequenciamento: O Nitro desenvolveu dois métodos para processar transações. Primeiro, uma única sequência ordenada é criada a partir de todas as transações, e o Nitro se compromete com essa sequência. Em seguida, uma função determinística de transição de estado processa as transações nessa ordem.

Geth: Ao incluir o código principal do go-Ethereum (Geth), o Nitro é compatível com as estruturas de dados, os formatos e as máquinas virtuais do Ethereum. Esse método de usar o Geth como uma biblioteca garante níveis muito altos de compatibilidade com a Ethereum.

Prova separada da execução: O Nitro pega o mesmo código-fonte e o compila duas vezes, uma vez em código nativo para uso em provas, que é projetado para portabilidade e segurança, e novamente em WASM para uso em execução em um nó Nitro, que é otimizado para velocidade.

Rollup otimista: Usando um protocolo de rollup otimista com provas de fraude interativas do Arbitrum, o Nitro líquida as transações na cadeia Ethereum da Camada 1.

O processamento de transações no Nitro é ilustrado na figura abaixo.

Image

No nível do cliente, não há transações pendentes nem txpool. As transações são aceitas ou rejeitadas imediatamente pela sequência

Executando um nó

Você pode executar seu nó ou usar o Chainstack. Executar seu nó pode ser difícil e caro.

Usar o Arbitrum Nitro no Chainstack é tão fácil quanto iniciar qualquer outro nó na plataforma:

  • Faça login no console do Chainstack.
  • Selecione um provedor de nuvem.
  • Implante o nó em qualquer local global preferido com baixa latência.

Isso permite que os desenvolvedores e as empresas interessadas em desenvolver o Arbitrum Nitro implantem, executem e gerenciem todos os nós que lançaram em uma plataforma única e contínua. Com a ajuda do Chainstack, a execução de blockchains em escala se torna realmente fácil para qualquer projeto, independentemente do seu caso de uso ou tamanho.

Isso permite que os desenvolvedores e as empresas interessadas em desenvolver o Arbitrum Nitro implantem, executem e gerenciem todos os nós que lançaram em uma plataforma única e contínua. Com a ajuda do Chainstack, a execução de blockchains em escala se torna realmente fácil para qualquer projeto, independentemente do seu caso de uso ou tamanho.

Implementação de um contrato de amostra na rede de teste do Arbitrum Goerli

Para resumir tudo o que foi dito nesta postagem, vamos implantar um contrato na rede de teste Arbitrum Goerli.

Primeiro, vamos adicionar a rede de teste do Arbitrum Goerli ao nosso provedor de carteira. Nesse caso, usaremos a MetaMask.

  1. Nome da rede: Arbitrum Nitro Goerli testnet
  2. URL DE RPC: Obtenha um com o Chainstack.
  3. ID da cadeia: 421613
  4. Símbolo: GoerliETH
  5. URL do Block Explorer: https://testnet.arbiscan.io/

Em seguida, solicite um pouco de Goerli ETH na torneira do Goerli. Após recebê-la, faça a ponte para a rede de teste Arbitrum Goerli usando a ponte oficial da rede de teste Arbitrum Nitro.

Image

Após a confirmação, levará aproximadamente 15 minutos para fazer a ponte entre os tokens.

Image

Se tudo correr bem, agora você deve ter seu GoerliETH em ponte na rede de teste do Arbitrum Goerli.

Depois disso, vamos começar a trabalhar em nosso contrato. Primeiro, crie uma nova pasta de projeto e inicie um novo projeto Truffle. Também usaremos o pacote @truffle/hdwallet-provider.


mkdir arbitrum-nitro-adoption && cd arbitrum-nitro-adoption

truffle init

npm I @truffle/hdwallet-provider

Enter fullscreen mode Exit fullscreen mode

Em seguida, dentro da pasta de contratos, crie um novo contrato Adoption.sol. Esse contrato permitirá que uma conta adote um novo animal de estimação e o nomeie.


// SPDX-License-Identifier: MIT

pragma solidity ^0.8.15;

contract Adoption {

    event PetAdopted(uint256 petIndex, string petName);

    uint256 totalAdopted;

    mapping(uint256 => string) petName;

    mapping(uint256 => address) petOwner;

    function adopt(string memory _petName) public {

        petName[totalAdopted] = _petName;

        petOwner[totalAdopted] = msg.sender;

        totalAdopted++;

        emit PetAdopted(totalAdopted - 1, _petName);

    }

}

Enter fullscreen mode Exit fullscreen mode

Agora, vamos preparar a rede de teste do Arbitrum Nitro em nosso projeto truffle para implantar o contrato. Abra o arquivo truffle-config.js e cole o seguinte conteúdo.


const HDWalletProvider = require("@truffle/hdwallet-provider");

const DEPLOYER_PRIVATE_KEY = "";

const CHAINSTACK_NITRO_TESTNET_RPC = "";

module.exports = {

  networks: {

    "nitro-goerli": {

    provider: () =>

        new HDWalletProvider(

        DEPLOYER_PRIVATE_KEY,

        CHAINSTACK_NITRO_TESTNET_RPC

        ),

    network_id: 421613,

    },

  },

  // Configure seus compiladores

  compilers: {

    solc: {

    version: "0.8.15", // Obtém a versão exata do solc-bin (padrão: versão do truffle)

    },

  },

};

Enter fullscreen mode Exit fullscreen mode

Certifique-se de usar sua própria chave privada para implantá-lo. Após essa verificação, na pasta de migrações, crie um novo arquivo chamado 2_deploy_contract.js e configure as instruções de implantação:


const Adoption = artifacts.require("Adoption");

module.exports = function (deployer) {

  deployer.deploy(Adoption);

};

Enter fullscreen mode Exit fullscreen mode

Quando tudo estiver resolvido, execute as migrações para implantar o contrato.

truffle migrate --network nitro-goerli

Quando a implantação for concluída, você deverá obter um resultado como este.

Image

E é isso! Implementamos com sucesso um contrato na rede de teste Arbitrums Nitro Goerli.

O objetivo desta postagem foi fornecer a você uma visão geral do Arbitrum Nitro, como ele funciona e a diferença entre o Nitro e o Classic. Mais informações sobre o Arbitrum e seu mecanismo serão abordadas nas próximas publicações.

Você já explorou o que pode conseguir com o Chainstack? Comece a usar gratuitamente hoje mesmo.

Artigo escrito por Bastian Simpertigue. A versão original pode ser encontrada aqui. Traduzido e adaptado por Dimitris Calixto.

Oldest comments (0)