Avançar para o conteúdo principal

Celo para desenvolvedores da Ethereum

Visão geral das semelhanças e diferenças entre as blockchains de Celo e Ethereum.


tip

Para uma visão geral da rede e arquitetura do Celo consulte a página geral do Celo.

O que é o Relacionamento de Celo para a Ethereum?

Celo é um protocolo layer 1 e plataforma blockchain, e o Celo Mainnet é inteiramente separado da rede Ethereum. Enquanto o cliente Celo se originou como um fork do cliente de linguagem Ethereum Go, go-ethereum (ou geth), tem várias diferenças significativas, incluindo um mecanismo de consenso PBFT baseado em proof-of-stake. Todos as criptomoedas no Celo têm interfaces compatíveis com o ERC-20, o que significa que, enquanto eles não são tokens ERC-20 no Ethereum Mainnet, todas as ferramentas e código familiares que suportam tokens ERC-20 podem ser facilmente adaptados para os ativos do Celo incluindo o Celo Native Asset (CELO) e o Celo Dollar (cUSD)).

Em termos de programação, Celo é semelhante à Ethereum. Ambas as redes executam a Máquina Virtual Ethereum (EVM) para suportar a funcionalidade de contrato inteligente. Isso significa que todas as linguagens de programação, ferramentas de desenvolvimento e padrões que visam o EVM são relevantes para Celo e Ethereum. Desenvolvedores construindo no Celo podem escrever contratos inteligentes em Solidity,, use Truffle para gerenciamento de contratos inteligentes e aproveite os padrões de contratos inteligentes que já foram desenvolvidos para Ethereum.

O Padrão de Token ERC-20

O token padrão ERC20 é uma API padrão para tokens em contratos inteligentes. Esta interface padrão permite que qualquer tokens sejam reutilizados por diferentes aplicações. O padrão ERC20 é agnóstico de blockchain, então tokens ERC20 podem ser implementados em qualquer blockchain.

O padrão inclui as funções opcionais

function name() public view returns (string)
function symbol() public view returns (string)
function decimals() public view returns (uint8)

e as funções necessárias

function totalSupply() public view returns (uint256)
function balanceOf(address _owner) public view returns (uint256 balance)
function transfer(address _to, uint256 _value) public returns (bool success)
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
function approve(address _spender, uint256 _value) public returns (bool success)
function allowance(address _owner, address _spender) public view returns (uint256 remaining)

e inclui os seguintes eventos

event Transfer(address indexed _from, address indexed _to, uint256 _value)
event Approval(address indexed _owner, address indexed _spender, uint256 _value)

Um contrato compatível com o ERC20 deve incluir as funções e eventos obrigatórios no mínimo __. Pode incluir funções e eventos adicionais e ainda ser compatível com o ERC20.

O Ativo Nativo de Celo e o Dólar de Celo

Esta interface é relevante para dois ativos importantes na rede Celo, o ativo nativo do Celo (CELO) e o Dólar do Celo (cUSD).

CELO foi chamado de Celo Gold (cGLD) quando o contrato foi implementado, então você muitas vezes verá referências ao Celo Gold no código. CELO e cGLD são a mesma coisa. Você pode ver a implementação do CELO aqui.

CELO tem uma interface ERC20, então os usuários podem interagir com CELO através do padrão token, mas é importante notar que nem todas as transferências CELO são necessárias para passar pelo contrato do token. CELO também pode ser transferido especificando o campo de valor de uma transação, da mesma forma que o ETH pode ser transferido na Ethereum. Para monitorar corretamente a mudança de saldo das operações do CELO, pode ser útil usar o Celo Rosetta. Celo Rosetta fornece uma maneira fácil de obter mudanças que não são facilmente consultáveis usando o RPC celo-blockchain.

O Celo Dollar (cUSD) é implementado apenas como um contrato inteligente, então todas as ações cUSD são mediadas pelo contrato inteligente. Você pode ver a implementação aqui.

Diferenças principais entre Celo e Ethereum

Características exclusivas para o Celo

  1. Celo permite que os usuários paguem taxas de transação em criptomoedas diferentes do ativo nativo. Na Ethereum, os usuários devem pagar taxas de transação com Ether. Por exemplo, usuários podem enviar cUSD, e então pagar qualquer taxa de transação em cUSD também.
  2. O protocolo Celo usa o modelo BFT para manter o consenso. Isto permite que blocos no Celo sejam criados em 5 segundos, em comparação com ~12+ segundos na Ethereum. Além disso, todos os blocos são finalizados imediatamente, então não há necessidade de esperar por mais de 1 bloco de confirmação para garantir que uma transação não seja revertida.

Alguns cuidados

  1. Como foi mencionado anteriormente, as transferências do CELO não são necessárias através da interface do ERC20. O saldo do CELO de um usuário pode mudar sem qualquer interação com o contrato CELO, pois ele pode transferir o CELO nativamente.

  2. Objetos de transação Celo são ligeiramente diferentes dos objetos de transação na Ethereum. Os objetos de transação Ethereum incluem campos de, valor, gás, gasolina, dados, nenhuma assinatura, (v,r,s). Os objetos de transação Celo incluem os mesmos campos que os objetos de transação Ethereum, mais feeCurrency, gatewayFee e gatewayFeeRecipient. Esses campos adicionais são incluídos para fornecer incentivos completos do nó e para permitir que os usuários paguem taxas de transação em moedas diferentes. A partir de 19 de maio, 2021, com o hardfork Donut, a rede Celo aceita ambos os objetos de transação Celo e objetos de transação Ethereum como transações válidas do Celo. Isso significa que você pode usar a maioria das ferramentas Ethereum com Celo, apenas aponte-as para a rede do Celo no seu site. Ao enviar transações formatadas na Ethereum para Celo, você não poderá usar recursos do Celo para especificar taxas de transação ou incentivos de nó completos.

Ao usar frases mnemônicas (ou frases secretas), contas Celo (uma chave privada e endereço correspondente) são derivadas de forma diferente das contas Ethereum. O caminho de derivação da chave Celo é m/44'/52752'/0'/0 considerando que a Ethereum é m/44'/60'/0'/0. Isso significa que passar de uma frase inicial para contas será diferente ao usar carteiras Ethereum vs Celo.

2) A carteira Valora usa dois tipos de contas: contas de propriedade externa e carteiras meta-transação. Existem importantes consequências para os desenvolvedores de carteira e desenvolvedores de dapp construindo no Celo como Valora é uma das principais interfaces para os usuários do Celo. Você pode encontrar mais informações sobre a conta Valora aqui.

Implementando Contratos Ethereum para Celo

Celo roda o EVM, o que significa que contratos inteligentes escritos para Ethereum podem facilmente ser implantados no Celo, a principal diferença sendo que você só precisa se conectar a um nó Celo em vez de um nó Ethereum. Você pode se conectar ao seu próprio nó Celo ou a um provedor de serviço de nó Celo como Figment Datahub.

Este tutorial passa por como iniciar um nó ultralight que é executado localmente e o usa para publicar um contrato na testnet do Alfajores usando o Truffle.

Este tutorial vai adiante como se conectar a um nó remoto e usar o ContractKit para implantar um contrato ao Alfajores usando o Truffle.

Diferenças de Protocolo

OPCODES & Block headers

Celo não suporta as opções DIFFICULTY ou GASLIMIT. Esses campos também estão ausentes dos cabeçalhos dos blocos Celo.

Contratos pré-compilados

Celo inclui todos os contratos pré-compilados na Ethereum, mas também adiciona contratos adicionais. Aqui está a lista de contratos pré-compilados por Celo a partir da versão 1.3.2. Você pode encontrar as últimas atualizações selecionando a versão mais recente.

Chamadas principais do contrato

O cliente blockchain faz algumas chamadas de contrato principais no final de um bloco, fora das transações. Muitos são feitos em blocos de epoch (recompensas de época, eleições de validador, etc.), mas não todos. Por exemplo, a atualização mínima do preço de gás pode acontecer em qualquer bloco. Registros criados por essas alterações de contrato são incluídos em um único recibo adicional desse bloco, que faz referência ao hash do bloco como seu hash de transação, mesmo que não haja nenhuma transação com esse hash. Se nenhum registro foi criado por tais chamadas naquele bloco, nenhum recibo será adicionado.

Gerenciamento de nós de APIs

Os nós de Celo possuem uma interface RPC ligeiramente diferente dos nós de geth. Existem alguns endpoints RPC adicionais para ajudar os validadores a gerenciar seus nós, eles podem ser encontrados aqui e aqui.

Você pode encontrar a lista completa de endpoints da API RPC em este arquivo.