La Relay Chain de Polkadot no soportará smart contracts (contratos inteligentes) de forma nativa, sin embargo, las parachains en Polkadot
soportarán smart contracts.
Diferencia entre desarrollar un smart contract y una parachain #
Capa de Abstracción #
Cuando escribes un smart contract, estás creando las instrucciones que se asocian y deployan en una dirección de cadena específica.
En comparación, un módulo de runtime es toda la lógica de las transiciones de estado de una cadena (lo que se denomina una función de transición de estado).
Los smart contracts deben implementar conscientemente la capacidad de actualización, mientras que las parachains tendrán la capacidad de intercambiar su código por completo a través de un comando raíz o a través de un pallet de gobernanza.
Cuando construyes un smart contract, eventualmente se deployará en una cadena objetivo con su propio entorno. Las parachains permiten al desarrollador declarar el entorno de su propia cadena, permitiendo incluso que otros escriban smart contracts para ella.
Tarifas de gas #
Los smart contracts deben encontrar una manera de limitar su propia ejecución, o de lo contrario los nodos completos son vulnerables a ataques DOS. Un loop infinito en un smart contract, por ejemplo, podría consumir los recursos computacionales de toda una cadena, impidiendo que otros la utilicen. El problema de la parada (halting problem) muestra que, con un lenguaje lo suficientemente potente, es imposible saber de antemano si un programa dejará o no de ejecutarse. Algunas plataformas, como Bitcoin, sortean esta limitación proporcionando un lenguaje de scripting muy restringido. Otras, como Ethereum, “cobran” el “gas” al smart contract por los derechos de ejecución de su código. Si un smart contract llega a un estado en el que la ejecución nunca se detendrá, eventualmente se queda sin gas, cesa la ejecución, y cualquier transición de estado que el smart contract hubiera hecho se retrocede. Polkadot utiliza un modelo de tarifa por peso (weight-fee model) y no un modelo de medición de gas (gas-metering model).
Las parachains pueden implementar lenguajes de programación arbitrariamente potentes y no contener noción de gas para su propia lógica nativa. Esto significa que algunas funcionalidades son más fáciles de implementar para el desarrollador, pero algunas construcciones, como un loop sin condición de terminación, nunca deberían implementarse. Dejar cierta lógica, como loops complejos que podrían ejecutarse indefinidamente, a una capa de non-smart contract, o incluso intentar eliminarla, será a menudo una elección más sabia. Las parachains intentan ser proactivas, mientras que las plataformas de smart contracts se basan en eventos.
Construir un smart contract #
La relay chain de Polkadot por sí misma no soportará smart contracts. Sin embargo, dado que las parachains que se conectan a Polkadot pueden soportar transiciones de estado arbitrarias, pueden soportar smart contracts.
Actualmente, Substrate soporta smart contracts de dos maneras:
- El pallet EVM ofrecido por Frontier.
- El pallet Contracts de la librería FRAME para contratos basados en Wasm.
Contratos EVM de Frontier #
Frontier es el conjunto de herramientas que permite a una cadena Substrate ejecutar contratos Ethereum (EVM) de forma nativa con la misma interfaz API/RPC que Ethereum expone en Substrate. Las direcciones Ethereum también pueden ser mapeadas directamente hacia y desde el esquema SS58 de Substrate desde las cuentas existentes.
Contratos de Substrate #
Substrate ofrece un pallet de contratos incorporado; a medida que pase el tiempo, más parachains soportarán smart contracts WebAssembly. Además, existe el pallet EVM, que permite a una parachain implementar la Ethereum Virtual Machine (Máquina Virtual Ethereum), soportando así puertos casi directos de contratos Ethereum.
Una versión en video de la recapitulación de la situación de los smart contracts está disponible en el canal de YouTube de Polkadot.
Recursos
¿Cuándo debo construir un runtime de Substrate frente a un smart contract de Substrate? Este post responde a la pregunta más técnica de cuándo un desarrollador puede optar por desarrollar un runtime frente a un smart contract.
Aquí está la lista de recursos actuales disponibles para los desarrolladores que quieran empezar a escribir smart contract para hacer deploy en parachains basadas en Substrate.
- ink! – La tinta (ink) de Parity para escribir smart contracts.
- ¡Substrate ink! Workshop – Te guiará a través de los conceptos básicos de escritura y deploy de un token ERC-20 utilizando
ink!
.
Pallets de contratos #
La experiencia de hacer deploy en una cadena basada en EVM puede ser más familiar para los desarrolladores que han escrito smart contracts antes. Sin embargo, el pallet Contracts introduce algunas mejoras notables en el diseño del EVM:
1. Wasm. El pallet de Contratos utiliza WebAssembly como su objetivo de compilación. Cualquier lenguaje que compile con Wasm puede ser potencialmente utilizado para escribir smart contracts. ¡Sin embargo, es mejor tener un lenguaje específico de dominio dedicado, y por esa razón Parity ofrece el lenguaje ink! (ver infra).
2. Depósito. Los contratos deben tener un depósito (llamado ContractDeposit) lo suficientemente grande como para justificar su existencia on-chain. Un deployer necesita depositar esto en el nuevo contrato sobre el ExistentialDeposit.
3.- Almacenamiento en caché. Los contratos se almacenan en caché por defecto, lo que significa que sólo tienen que desplegarse una vez y después instanciarse tantas veces como se desee. Esto ayuda a mantener la carga de almacenamiento en la cadena al mínimo. Además, cuando un contrato ya no se utilice y se agote el depósito existencial, el código se borrará del almacenamiento (lo que se conoce como cosecha -reaping-).
Alquiler de almacenamiento: deprecadopallet_contracts
se diseñó inicialmente para combatir el crecimiento ilimitado del estado cobrando a los contratos por el estado que consumen, pero desde entonces ha quedado deprecado (obsoleto).
Ver el pull request asociado para más detalles.
Propuestas de Estándares Polkadot (PSPs) #
La Fundación Web3 apoya las propuestas para Polkadot que definen un conjunto de estándares para ajustarse a las necesidades del ecosistema. Estos estándares pasan por varias fases de aceptación, en las que es necesario el compromiso de toda la comunidad para construir estándares valiosos y preparados para el futuro. Todos los equipos que se beneficiarán de una norma tienen que estar de acuerdo con su contenido.
Algunas de estas PSP se dirigen al pallet contracts
de Substrate:
- PSP22 – Fungible Token Standard Por favor, visita Polkadot Standards Proposals (PSPs) Github para más información.
Ink #
ink! es un lenguaje específico de dominio para escribir smart contracts en Rust y compila a código Wasm. Como se indica en su README, todavía está en fase experimental, por lo que los desarrolladores valientes deben ser conscientes de que podrían tener una experiencia de desarrollo accidentada – pero factible. Hay algunos proyectos que han construido proyectos en ink! con un nivel decente de complejidad, como los contratos Plasma de Plasm, por lo que es lo suficientemente maduro como para empezar a construir cosas interesantes.
Los desarrolladores interesados pueden empezar a escribir smart contracts utilizando ink! estudiando los ejemplos ya escritos. Éstos se pueden utilizar como guía para escribir una lógica más compleja que se pueda deployar en parachains de smart contracts.
ink! ha sentado gran parte de las bases para una nueva pila de smart contracts basada en una máquina virtual Wasm y compatible con cadenas Substrate.
¡Librerías para smart contracts en ink!
¡A continuación se recogen algunos ejemplos de la comunidad de smart contracts en ink!
¿Estás trabajando en un ejemplo de smart contract? ¡Pídenos que lo añadamos a esta página!
- OpenBrush: una librería de
ink!
que proporciona contratos estándar basados en PSP con contratos útiles y macros para construir. - Metis: una librería estándar de contratos Wasm, desarrollada por Patract Labs.
Los entornos de smart contracts aún están madurando #
Aún es pronto para los smart contracts en Polkadot y el desarrollo sólo se está estabilizando ahora. Estamos produciendo activamente contenido para ayudar a los desarrolladores a ponerse al día y mantendremos la Wiki con los últimos recursos. También deberías mantenerte al día con los siguientes enlaces:
Parity Tech #
Parachains #
Muchas plataformas de smart contracts están construyendo para convertirse en una parachain en el ecosistema. En PolkaProjects se puede encontrar una lista creada y mantenida por la comunidad de diferentes plataformas de smart contracts que se están construyendo sobre Polkadot.
Moonbeam
Moonbeam es otro proyecto que está planeando hacer deploy en Polkadot como parachain y soportará smart contracts compatibles con Ethereum. (N.d.T. Moonbeam ya hizo deploy en Polkadot y es parachain).
Dado que Moonbeam utiliza Frontier, una capa de interoperabilidad con las herramientas Ethereum existentes, soportará todas las aplicaciones que se escriban para dirigirse al entorno EVM con poca fricción.
Moonriver, una red complementaria de Moonbeam, se lanzó como parachain en Kusama. Las funciones de parachain ya están activas y se van añadiendo progresivamente. La fase final del lanzamiento incluirá la funcionalidad EVM y las transferencias de saldo.
Intenta deployar un smart contract en Moonbeam siguiendo su documentación.
Astar
Astar Network soporta la construcción de dApps con smart contracts EVM y WASM y ofrece a los desarrolladores verdadera interoperabilidad. Verdadera interoperabilidad con mensajería de consenso cruzado XCM y máquina virtual cruzada XVM. Estamos hechos por desarrolladores y para desarrolladores. El modelo único Build2Earn de Astar permite a los desarrolladores recibir pagos a través de un mecanismo de staking de dApp para el código que escriben y dApps que construyen.
Shiden Network es la red canaria de Astar Network, activa como parachain en Kusama, y soporta el entorno EVM y WASM para todos los desarrolladores que quieran construir casos de uso en una red canaria con valor económico. Shiden actúa como un playground para los desarrolladores.
Intenta desplegar un smart contract Ethereum o ink! siguiendo su documentación.
Acala
Acala es un consorcio financiero descentralizado y una cadena de infraestructura DeFi que ofrece un conjunto de protocolos para servir como DeFi hub en Polkadot. Karura, la red canaria de Acala está activa como parachain en Kusama. Los equipos interesados ya pueden hacer deploy de DApps y smart contracts en la plataforma de Karura. Acala también está implementando el Acala EVM.
Intenta deployar un smart contract Acala EVM siguiendo su documentación.
Phala
Phala es una plataforma de computación en la nube que preserva la privacidad y tiene como objetivo proporcionar fuertes garantías de confidencialidad como una plataforma de cadena cruzada. Como plataforma de smart contracts, Phala permitirá el uso de smart contracts confidenciales en Polkadot. Khala es la red canaria de Phala y está activa como parachain en Kusama.
Intenta desplegar un smart contract confidencial siguiendo su documentación.
Mantente en contacto #
Aunque las herramientas todavía están madurando, la ventaja de ser pionero será la familiaridad y la ventaja inicial en tu proyecto, lo que te permitirá innovar y crear algo nuevo.
Si tienes ideas interesantes para smart contracts en Polkadot, no dudes en pasar por el Polkadot Watercooler para hablar de ellas. Los desarrolladores pueden estar interesados en unirse al Polkadot Beginners Lounge o al Substrate Technical para hacer sus preguntas. Como siempre, mantente al día sobre Polkadot y Kusama siguiendo los canales sociales.