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). Los objetos de transacci贸n de Celo incluyen los mismos campos que los objetos de transacci贸n de Ethereum, y adicionalmente feeCurrency, gatewayFee y gatewayFeeRecipient. Estos campos adicionales se incluyen para proporcionar incentivos de nodo completo y para permitir a los usuarios pagar tarifas de transacci贸n en diferentes monedas. A partir del 19 de mayo de 2021, con el Donut hardfork, la red Celo acepta tanto objetos de transacci贸n Celo como objetos de transacci贸n Ethereum como transacciones Celo v谩lidas. 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.