Ir al contenido principal

Celo para desarrolladores de Ethereum

Resumen de las similitudes y diferencias entre los blockchains de Celo y Ethereum.


consejo

Para obtener una visión general de la red y arquitectura de Celo, consulta la página Visión General de Celo.

¿Cuál es la relación de Celo con Ethereum?

Celo es una plataforma de protocolo y blockchain de capa 1, y la red principal de Celo está completamente separada de la red Ethereum. Si bien el cliente de Celo se originó como un fork de Ethereum del cliente del lenguaje Go, go-ethereum (o geth), tiene varias diferencias significativas, incluyendo un mecanismo de consenso PBFT basado en prueba de participación. Todos los criptoactivos en Celo tienen interfaces compatibles con ERC-20, lo que significa que si bien no son tokens ERC-20 en Ethereum Mainnet, todas las herramientas y códigos familiares que admiten tokens ERC-20 se pueden adaptar fácilmente para los activos de Celo, incluido el activo nativo de Celo Native (CELO) y el Celo Dólar (cUSD).

En términos de programabilidad, Celo es similar a Ethereum. Ambas redes ejecutan la máquina virtual de Ethereum (EVM) para soportar la funcionalidad de contratos inteligentes. Esto significa que todos los lenguajes de programación, herramientas para desarrolladores y estándares que apuntan a la EVM son relevantes tanto para Celo como para Ethereum. Los desarrolladores que se basen en Celo pueden escribir contratos inteligentes en Solidity, usar Truffle para la gestión de contratos inteligentes y aprovechar los estándares de contratos inteligentes que ya se han desarrollado para Ethereum.

El estándar de Token ERC-20

El ERC20 token standard es una API estándar para tokens dentro de contratos inteligentes. Esta interfaz estándar permite que cualquier token sea reutilizado por diferentes aplicaciones. El estándar de token ERC20 es agnóstico de un blockchain en particular, por lo que los tokens ERC20 se pueden implementar en cualquier cadena de bloques.

El estándar incluye funciones opcionales

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

y las funciones requeridas

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 incluye los siguientes eventos

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

Un contrato que cumpla con ERC20 debe incluir las funciones y eventos requeridos como mínimo. Puede incluir funciones y eventos adicionales y seguir siendo compatible con ERC20.

El activo nativo de Celo y el Celo Dólar

Esta interfaz es relevante para dos activos importantes en la red Celo, el activo nativo Celo (CELO) y el Celo Dólar (cUSD).

CELO se llamaba Celo Gold (cGLD) cuando se implementó el contrato, por lo que a menudo verás referencias a Celo Gold en el código base. CELO y cGLD son lo mismo. Puedes ver la implementación de CELO aquí.

CELO tiene una interfaz ERC20, por lo que los usuarios pueden interactuar con CELO a través del estándar del token, pero es importante tener en cuenta que no todas las transferencias de CELO deben pasar por el contrato del token. CELO también puede ser transferido especificando el campo de valor de una transacción, de la misma manera que ETH puede ser transferido en Ethereum. Para monitorear adecuadamente las operaciones de cambio de balance de CELO, puede ser útil usar Celo Rosetta. Celo Rosetta proporciona una manera fácil de obtener cambios que no son fácilmente consultables usando el RPC del blockchain Celo.

El Celo Dólar (cUSD) se implementa únicamente como un contrato inteligente, por lo que todas las acciones de cUSD son mediadas por el contrato inteligente. Puedes ver la implementación aquí.

Diferencias clave entre Celo y Ethereum

Características exclusivas de Celo

  1. Celo permite a los usuarios pagar comisiones de transacción en criptoactivos distintos del activo nativo. En Ethereum, los usuarios deben pagar las comisiones de transacción en Ether. Por ejemplo, los usuarios pueden enviar cUSD, y luego pagar cualquier comisión de transacción en cUSD también.
  2. El protocolo Celo utiliza la prueba de participación BFT para mantener el consenso. Esto permite crear bloques en Celo en 5 segundos, en comparación con ~12+ segundos en Ethereum. Además, todos los bloques se finalizan inmediatamente, así que no hay necesidad de esperar más de 1 confirmación de bloque para asegurar que una transacción no será revertida.

Cosas a tener cuidado

  1. Como ya se mencionó anteriormente, las transferencias de CELO no están obligadas a pasar a través de la interfaz ERC20. El balance CELO del usuario puede cambiar sin ninguna interacción con el contrato CELO ya que puede transferir CELO nativamente.

  2. Los objetos de transacción de Celo son ligeramente diferentes de los objetos de transacción en Ethereum. Los objetos de transacción en Ethereum incluyen los campos to, value, gas, gasPrice, data, nonce, signature(v,r,s). Celo transaction objects include the same fields as Ethereum transaction objects, plus the feeCurrency field. This additional field is included to allow users to pay transaction fees in different currencies. As of May 19th, 2021, with the Donut hardfork, the Celo network accepts both Celo transaction objects and Ethereum transaction objects as valid Celo transactions. Esto significa que puedes utilizar la mayoría de las herramientas de Ethereum con Celo, de manera rápida (sólo apuntando a la red de Celo). Al enviar las transacciones con formato Ethereum en Celo, no podrás utilizar las características de Celo de las especificación de la moneda para comisiones de transacción o los incentivos a los nodos completos.

1) Cuando se utilizan frases de semillas mnemónicas (o frases secretas), las cuentas de Celo (una clave privada y una dirección correspondiente) se derivan de forma diferente de las cuentas de Ethereum. La ruta de derivación de clave de Celo es m/44'/52752'/0'/0 mientras que la de Ethereum es m/44'/60'/0'/0. Esto significa que pasar de una frase semilla a cuentas será diferente cuando se usen billeteras Ethereum vs Celo.

2) La billetera Valora utiliza dos tipos de cuentas: cuentas de propiedad externa y meta-transaction wallets. Hay importantes consecuencias para los desarrolladores de cartera y los desarrolladores de dapps que construyen en Celo ya que Valora es una de las interfaces principales para los usuarios de Celo. Puedes encontrar más información sobre cuentas de Valora aquí.

Desplegando contratos de Ethereum a Celo

Celo ejecuta la EVM, lo que significa que los contratos inteligentes escritos para Ethereum pueden ser fácilmente desplegados en Celo, la diferencia principal es que sólo necesita conectarse a un nodo Celo, en lugar de un nodo Ethereum. Puedes conectarte a tu propio nodo Celo o a un proveedor de servicios de nodo Celo como Figment Datahub.

Este tutorial explica cómo iniciar un nodo ultraligero que se ejecuta localmente y usarlo para desplegar un contrato a la red de pruebas de Alfajores usando Truffle.

Este tutorial revisa cómo conectarte a un nodo remoto y usa ContractKit para desplegar un contrato a Alfajores usando Truffle.

Diferencias de protocolos

OPCODES & Cabeceras de bloque

Celo no soporta los códigos de operación (opcodes) DIFFICULTY o GASLIMIT. Estos campos también están ausentes en las cabeceras de bloques de Celo.

Contratos precompilados

Celo incluye todos los contratos precompilados en Ethereum, pero también añade contratos adicionales. Aquí está la lista de contratos precompilados de Celo a partir de la versión 1.3.2. Puedes encontrar las últimas actualizaciones seleccionando la etiqueta de publicación más reciente.

Llamadas a Contratos Principales

El cliente blockchain hace algunas llamadas a contratos principales al final de un bloque, fuera de las transacciones. Muchas son hechas en bloques de epoch (recompensas de epoch, elecciones de validador, etc.), pero no todas. Por ejemplo, la actualización de precio mínimo de gas puede ocurrir en cualquier bloque. Los registros creados por estos cambios de contrato se incluyen en un solo recibo adicional en ese bloque, que hace referencia al hash de bloque como su hash de transacción, aunque no haya ninguna transacción con este hash. Si no se han creado registros por tales llamadas en ese bloque, no se añadirá ningún recibo.

APIs de gestión de nodos

Los nodos de Celo tienen una interfaz RPC ligeramente diferente a los nodos geth. Hay algunos endpoints RPC adicionales para ayudar a los validadores a gestionar sus nodos, que se pueden encontrar aquí y aquí.

Puedes encontrar la lista completa de endpoints de la API RPC en este archivo.