Plataformas de contratos inteligentes [una investigación en profundidad]

En esta guía, revisaremos algunas plataformas de contratos inteligentes y veremos qué las distingue. Algunos de ellos ya están funcionando, mientras que otros están en desarrollo..

Vivimos en la era del contrato inteligente. Mientras que Bitcoin puede habernos demostrado que un sistema de pago puede existir en una atmósfera descentralizada de igual a igual. Sin embargo, fue con el advenimiento de Ethereum, que las compuertas se abrieron bien y realmente. Ethereum marcó el comienzo de la era de la cadena de bloques de segunda generación, y la gente finalmente vio el verdadero potencial de Dapps y contrato inteligentes.

Una mirada más profunda a las diferentes plataformas de contratos inteligentes

Sin embargo, antes de hacer eso, hagámonos una pregunta.

¿Qué son exactamente los contratos inteligentes??

Los contratos inteligentes son contratos automatizados. Son autoejecutables con instrucciones específicas escritas en su código que se ejecutan cuando se cumplen ciertas condiciones..

Una mirada más profunda a las diferentes plataformas de contratos inteligentes

Puede obtener más información sobre los contratos inteligentes en nuestra guía detallada aquí.

Entonces, ¿cuáles son las propiedades deseables que queremos en nuestro contrato inteligente??

Todo lo que se ejecuta en una cadena de bloques debe ser inmutable y debe tener la capacidad de ejecutarse a través de múltiples nodos sin comprometer su integridad. Como resultado de lo cual, la funcionalidad del contrato inteligente debe ser tres cosas:

  • Determinista.
  • Terminable.
  • Aislado.

Característica # 1: determinista

Un programa es determinista si da la misma salida a una entrada dada cada vez. P.ej. Si 3 + 1 = 4 entonces 3 + 1 SIEMPRE será 4 (asumiendo la misma base). Entonces, cuando un programa da la misma salida al mismo conjunto de entradas en diferentes computadoras, el programa se llama determinista.

Hay varios momentos en los que un programa puede actuar de manera no determinista:

  • Llamar a funciones de sistema no deterministas: Cuando un programador llama a una función no determinista en su programa.

  • Recursos de datos no deterministas: Si un programa adquiere datos durante el tiempo de ejecución y esa fuente de datos no es determinista, el programa se vuelve no determinista. P.ej. Supongamos un programa que adquiere las 10 principales búsquedas de Google de una consulta en particular. La lista puede seguir cambiando.

  • Llamadas dinámicas: Cuando un programa llama al segundo programa, se denomina llamada dinámica. Dado que el destino de la llamada se determina solo durante la ejecución, no es de naturaleza determinista.

Característica # 2: Terminable

En lógica matemática, tenemos un error llamado “problema de detención”. Básicamente, establece que hay una incapacidad para saber si un programa dado puede ejecutar su función dentro de un límite de tiempo. En 1936, Alan Turing dedujo, utilizando el problema diagonal de Cantor, que no hay forma de saber si un programa dado puede terminar en un límite de tiempo o no..

Obviamente, esto es un problema con los contratos inteligentes porque, los contratos por definición, deben poder rescindirse en un límite de tiempo determinado. Se han tomado algunas medidas para garantizar que exista una manera de “matar” externamente el contrato y no entrar en un bucle sin fin que agote los recursos:

  • Turing incompleto: Una cadena de bloques Turing Incompleta tendrá una funcionalidad limitada y no será capaz de realizar saltos y / o bucles. Por tanto, no pueden entrar en un bucle sin fin.

  • Medidor de pasos y tarifas: Un programa puede simplemente realizar un seguimiento del número de “pasos” que ha realizado, es decir, el número de instrucciones que ha ejecutado, y luego finalizar una vez que se ha ejecutado un recuento de pasos en particular. Otro método es el medidor de tarifas. Aquí los contratos se ejecutan con una tarifa prepaga. Cada ejecución de instrucción requiere una tarifa particular. Si la tarifa gastada excede la tarifa prepaga, el contrato se rescinde.

  • Temporizador: Aquí se mantiene un temporizador predeterminado. Si la ejecución del contrato excede el límite de tiempo, se cancela externamente.

Característica # 3: Aislado

En una cadena de bloques, cualquiera y todos pueden cargar un contrato inteligente. Sin embargo, debido a esto, los contratos pueden, a sabiendas y sin saberlo, contener virus y errores..

Si el contrato no es aislado, esto puede obstaculizar todo el sistema. Por lo tanto, es fundamental que un contrato se mantenga aislado en una caja de arena para salvar a todo el ecosistema de cualquier efecto negativo..

Ahora que hemos visto estas funciones, es importante saber cómo se ejecutan. Por lo general, los contratos inteligentes se ejecutan utilizando uno de los dos sistemas:

  • Maquinas virtuales: Ethereum y Neo usan esto
  • Estibador: La tela usa esto.

Comparemos estos dos y determinemos cuál contribuye a un mejor ecosistema. En aras de la simplicidad, vamos a comparar Ethereum (máquina virtual) con Fabric (Docker).

Una mirada más profunda a las diferentes plataformas de contratos inteligentes

Entonces, como se puede ver, las Máquinas Virtuales brindan un mejor ambiente determinista, rescindible y aislado para los contratos inteligentes..

Bien, ahora sabemos qué son los contratos inteligentes y el hecho de que las máquinas virtuales son mejores plataformas para los contratos inteligentes. Veamos qué requieren exactamente las Dapps para funcionar de manera eficiente.

Que requieren las Dapps?

O, para enmarcarlo más específicamente, ¿qué requiere un DAPP para tener éxito y ser un éxito entre la audiencia general? ¿Cuáles son sus requisitos mínimos absolutos??

Soporte para millones de usuarios

Debería ser lo suficientemente escalable para que lo usen millones de usuarios. Esto es especialmente cierto para los DAPP que buscan la aceptación generalizada..

Uso gratuito

La plataforma debería permitir a los desarrolladores crear Dapps que sean de uso gratuito para sus usuarios. Ningún usuario debería tener que pagar la plataforma para obtener los beneficios de un Dapp.

Fácilmente actualizable

La plataforma debería permitir a los desarrolladores la libertad de actualizar el Dapp cuando lo deseen. Además, si algún error afecta al Dapp, los desarrolladores deberían poder arreglar el DAPP sin afectar la plataforma..

Baja latencia

Un DAPP debe ejecutarse de la manera más fluida posible y con la menor latencia posible.

Rendimiento paralelo

Una plataforma debe permitir que sus Dapps se procesen en paralelo para distribuir la carga de trabajo y ahorrar tiempo..

Rendimiento secuencial

Sin embargo, no todas las funciones en una cadena de bloques deben realizarse de esa manera. Piense en la ejecución de la transacción en sí. No se pueden ejecutar varias transacciones en paralelo; debe hacerse uno a la vez para evitar errores como gastos dobles.

Entonces, ¿cuáles son las plataformas disponibles para nosotros cuando se trata de la creación de DAPP??

BitShares y Graphene tienen un buen rendimiento, pero definitivamente no son adecuados para contratos inteligentes.

Ethereum es claramente la opción más obvia del mercado. Tiene increíbles capacidades de contrato inteligente, pero la baja velocidad de transacción es un problema importante. Además, el precio del gas también puede ser problemático.

Bien, ahora que sabemos lo que requieren las Dapps, veamos algunas plataformas de contratos inteligentes.

Estaremos mirando:

  • Ethereum

  • EOS

  • Estelar

  • Cardano

  • Neo

  • Tejido Hyperledger

Una mirada más profunda a las diferentes plataformas de contratos inteligentes

Ethereum

En primer lugar, tenemos Ethereum, el que lo inició todo..

Así es como lo define el sitio web de Ethereum:

“Ethereum es una plataforma descentralizada que ejecuta contratos inteligentes: aplicaciones que se ejecutan exactamente según lo programado sin ninguna posibilidad de tiempo de inactividad, censura, fraude o tercero interferencia. Estas aplicaciones se ejecutan en una cadena de bloques personalizada, una infraestructura global compartida enormemente poderosa que puede mover el valor y representar la propiedad de la propiedad “.

Pero en términos más simples, Ethereum planea ser la plataforma de software definitiva del futuro. Si el futuro está descentralizado y las Dapps se vuelven algo común, entonces Ethereum tiene que ser el centro y el frente..

La Máquina Virtual Ethereum o EVM es la máquina virtual en la que funcionan todos los contratos inteligentes en Ethereum. Es una máquina virtual Turing Complete de 256 bits simple pero potente. Turing Complete significa que, dados los recursos y la memoria, cualquier programa ejecutado en el EVM puede resolver cualquier problema..

Para codificar contratos inteligentes en el EVM, es necesario aprender el lenguaje de programación Solidity..

Solidity es un lenguaje deliberadamente adelgazado y de tipo libre con una sintaxis muy similar a ECMAScript (Javascript). Hay algunos puntos clave para recordar del documento Ethereum Design Rationale, a saber, que estamos trabajando dentro de un modelo de pila y memoria con un tamaño de palabra de instrucción de 32 bytes, la EVM (Ethereum Virtual Machine) nos da acceso al programa ” pila ”que es como un espacio de registro donde también podemos pegar direcciones de memoria para hacer que el Contador de Programa se repita / salte (para el control secuencial del programa), una“ memoria ”temporal expandible y un“ almacenamiento ”más permanente que en realidad se escribe en el blockchain, y lo más importante, el EVM requiere un determinismo total dentro de los contratos inteligentes.

Entonces, antes de continuar, veamos un ejemplo básico de contrato de Solidez. (Los códigos se tomaron de github).

Ejecutemos un ciclo while simple en solidez:

contrato BasicIterator

{

creador de direcciones; // reservar uno "habla a"-tipo de lugar

uint8 [10] números enteros; // reserva una porción de almacenamiento para 10 enteros sin signo de 8 bits en una matriz

función BasicIterator ()

{

creador = msg.sender;

uint8 x = 0;

// Sección 1: Asignación de valores

mientras (x < integers.length) {

enteros [x] = x;

x ++;

}}

función getSum () devoluciones constantes (uint) {

uint8 suma = 0;

uint8 x = 0;

// Sección 2: Sumando los enteros en una matriz.

mientras (x < integers.length) {

suma = suma + enteros [x];

x ++;

}

devolución de suma;

}

// Sección 3: Matar el contrato

función kill ()

{

si (msg.sender == creador)

{

suicidio (creador);

}

}

}

Entonces, analicemos el código. Para facilitar la comprensión, hemos dividido el código en 3 secciones..

Sección 1: Asignación de valores

En el primer paso, estamos llenando una matriz llamada “enteros” que toma 10 enteros sin signo de 8 bits. La forma en que lo estamos haciendo es mediante un bucle while. Veamos lo que sucede dentro del bucle while..

mientras (x < integers.length) {

enteros [x] = x;

x ++;

}

Recuerde, ya le hemos asignado un valor de “0” al entero x. El ciclo while va de 0 a integers.length. Integers.length es una función que devuelve la capacidad máxima de la matriz. Entonces, si decidimos que una matriz tendrá 10 enteros, arrayname.length devolverá un valor de 10. En el ciclo anterior, el valor de x va de 0 a 9 (<10) y también asigna el valor de sí mismo a la matriz de enteros. Entonces, al final del ciclo, los números enteros tendrán el siguiente valor:

0,1,2,3,4,5,6,7,8,9.

Sección 2: Agregar el contenido de la matriz

Dentro de la función getSum () vamos a sumar el contenido de la propia matriz. La forma en que lo vamos a hacer es repitiendo el mismo ciclo while anterior y usando la variable “suma” para agregar el contenido de la matriz..

Sección 3: Matar el contrato

Esta función anula el contrato y envía los fondos restantes del contrato al creador del contrato..

Que es el gas?

El “gas” es el elemento vital del ecosistema Ethereum, no hay otra forma de decirlo. El gas es una unidad que mide la cantidad de esfuerzo computacional que se necesitará para ejecutar ciertas operaciones..

Cada operación que participa en Ethereum, ya sea una transacción simple, un contrato inteligente o incluso una ICO, requiere cierta cantidad de gas. El gas es lo que se utiliza para calcular la cantidad de tarifas que se deben pagar a la red para ejecutar una operación..

Cuando alguien envía un contrato inteligente, tiene un valor de gas predeterminado. Cuando se ejecuta el contrato, todos y cada uno de los pasos del contrato requieren una cierta cantidad de gas para ejecutarse.

Esto puede conducir a dos escenarios:

  1. El gas requerido supera el límite establecido. Si ese es el caso, el estado del contrato se revierte a su estado original y se agota todo el gas..

        2. El gas requerido es menor que el límite establecido. Si ese es el caso, entonces el contrato se completa y el gas sobrante se entrega al contratante..

Si bien Ethereum puede haber allanado el camino para los contratos inteligentes. Se enfrenta a algunos problemas de escalabilidad. Sin embargo, innovaciones como plasma, raiden, fragmentación, etc. pueden resolver este problema..

EOS

Una mirada más profunda a las diferentes plataformas de contratos inteligentes

EOS tiene como objetivo convertirse en un sistema operativo descentralizado que pueda admitir aplicaciones descentralizadas a escala industrial.

Eso suena bastante sorprendente, pero lo que realmente ha cautivado la imaginación del público son las dos afirmaciones siguientes:

  • Están planeando eliminar por completo las tarifas de transacción.

  • Afirman tener la capacidad de realizar millones de transacciones por segundo.

Estas dos características son las razones por las que los desarrolladores de Dapp están fascinados con EOS. Veamos cómo EOS logra ambas cosas.

Eliminación de tarifas

EOS funciona con un modelo de propiedad en el que los usuarios poseen y tienen derecho a utilizar recursos proporcionales a su participación, en lugar de tener que pagar por cada transacción. Entonces, en esencia, si tiene N tokens de EOS, entonces tiene derecho a N * k transacciones. Esto, en esencia, elimina las tarifas de transacción..

Los costos de ejecutar y alojar aplicaciones en Ethereum pueden ser altos para un desarrollador que quiera probar su aplicación en la cadena de bloques. El precio del gas involucrado en las primeras etapas de desarrollo puede ser suficiente para desanimar a los nuevos desarrolladores..

La diferencia fundamental entre la forma en que operan Ethereum y EOS es que mientras Ethereum alquila su poder computacional a los desarrolladores, EOS otorga la propiedad de sus recursos. Entonces, en esencia, si posee 1/1000 de la participación en EOS, entonces tendrá la propiedad de 1/1000 de la potencia y los recursos computacionales totales en EOS.

Como afirma ico-reviews en su artículo:

“El modelo de propiedad de EOS proporciona a los desarrolladores de DAPP costos de alojamiento predecibles, requiriéndoles solo mantener un cierto porcentaje o nivel de participación, y hace posible crear aplicaciones freemium. Además, dado que los titulares de tokens EOS podrán alquilar / delegar su parte de los recursos a otros desarrolladores, el modelo de propiedad vincula el valor de los tokens EOS con la oferta y la demanda de ancho de banda y almacenamiento “.

Mayor escalabilidad

EOS obtiene su escalabilidad de su mecanismo de consenso DPOS. DPOS significa prueba de participación delegada y así es como funciona:

En primer lugar, cualquiera que tenga tokens en una cadena de bloques integrada en el software EOS puede seleccionar a los productores de bloques a través de un sistema de votación de aprobación continua. Cualquiera puede participar en la elección de productores en bloque y se les dará la oportunidad de producir bloques proporcionales al total de votos que reciben en relación con todos los demás productores..

Como funciona?

  • Los bloques se producen en rondas de 21.

  • Al comienzo de cada ronda se eligen 21 productores de bloques. Los 20 mejores se eligen automáticamente mientras que el 21 se elige proporcionalmente al número de sus votos en relación con los otros productores..

  • Luego, los productores se barajan utilizando un número pseudoaleatorio derivado del tiempo de bloque. Esto se hace para garantizar que se mantenga un equilibrio de conectividad con todos los demás productores..

  • Para garantizar que se mantenga la producción regular de bloques y que el tiempo de bloque se mantenga en 3 segundos, los productores son castigados por no participar al ser excluidos de la consideración. Un productor tiene que producir al menos un bloque cada 24 horas para ser considerado.

Dado que hay tan pocas personas involucradas en el consenso, es más rápido y más centralizado que Ethereum y Bitcoin, que utilizan toda la red para el consenso..

El lenguaje WASM

EOS usa WebAssembly, también conocido como lenguaje de programación WASM. La razón por la que lo usan es por sus siguientes propiedades (tomadas de webassembly.org):

  • Rapidez y eficiencia: WebAssembly se ejecuta a velocidad nativa al aprovechar las capacidades de hardware comunes disponibles en una amplia gama de plataformas.

  • Abierto y depurable: Está diseñado para imprimirse en un formato textual para depurar, probar, experimentar, optimizar, aprender, enseñar y escribir programas a mano..

  • A salvo: WebAssembly describe un entorno de ejecución de espacio aislado y seguro para la memoria que incluso puede implementarse dentro de máquinas virtuales JavaScript existentes..

EOS es la plataforma perfecta para crear Dapps a escala industrial. Imaginemos que está creando un Twitter descentralizado. Si creó eso en Ethereum, entonces el usuario tendría que gastar algo de gas mientras ejecuta todos y cada uno de los pasos de un tweet..

Si hizo lo mismo en EOS, los usuarios no necesitarán gastar gasolina porque las tarifas de transacción son 0. Sin embargo, dado que EOS no está tan descentralizado como Ethereum, las Dapps que requieren altos grados de resistencia a la censura pueden no ser adecuadas para ello..

Estelar

Una mirada más profunda a las diferentes plataformas de contratos inteligentesStellar es una creación de Jed McCaleb y Joyce Kim se formó en 2014 cuando se bifurcó del protocolo Ripple. Stellar, según su sitio web,

“Es una plataforma que conecta bancos, sistemas de pago y personas. Integre para mover dinero de manera rápida, confiable y casi sin costo “.

Con Stellar, se puede mover dinero a través de las fronteras de forma rápida, fiable y por fracciones de un centavo..

A diferencia de Ethereum, los Stellar Smart Contracts (SSC) no son Turing completos. La siguiente tabla le da una buena idea de las diferencias entre los contratos inteligentes Stellar y Ethereum:

Una mirada más profunda a las diferentes plataformas de contratos inteligentes

Crédito de la imagen: Hackernoon

Algunas estadísticas pueden aparecer de inmediato.

En particular, el tiempo de confirmación de 5 segundos y el hecho de que una sola transacción en la red Stellar cuesta solo ~ $ 0.0000002!

$ stellarNetwork->buildTransaction ($ customerKeypair)

->addCreateAccountOp ($ escrowKeypair, 100.00006) // 100 XLM después de las tarifas de instalación + transacción de transferencia

->enviar ($ customerKeypair);

}

imprimir "Cuenta de depósito en garantía creada: " . $ escrowKeypair->getPublicKey (). PHP_EOL;

/ *

* Para que esta sea una cuenta de depósito en garantía, debemos demostrarle al trabajador que

* nadie puede retirar fondos mientras el trabajador está buscando

* una dirección personalizada.

*

* Esto se logra mediante:

* – Hacer que el trabajador y el cliente sean firmantes de igual peso (1)

* – Exigir que ambos firmantes estén de acuerdo en cualquier transacción (los umbrales se establecen en 2)

*

* Sin embargo, también necesitamos manejar el caso en el que ningún trabajador acepta el trabajo y

* Necesito reclamar la cuenta. Esto se puede hacer agregando una combinación preautorizada

* transacción que no es válida hasta dentro de 30 días.

*

* Esto le permite al trabajador saber que los fondos están garantizados para estar disponibles

* por 30 días.

* /

// Cargar la cuenta de depósito en garantía

$ cuenta = $ stellarNetwork->getAccount ($ escrowKeypair);

// Calcule previamente algunos números de secuencia ya que son necesarios para las transacciones

$ startSequenceNumber = $ cuenta->getSequence ();

// Realice un seguimiento de cuántas transacciones son necesarias para configurar la cuenta de depósito en garantía

// Necesitamos esto para poder calcular correctamente el "reclamar cuenta" secuencia de números

$ numSetupTransactions = 5;

$ reclaimAccountOrPaySeqNum = $ startSequenceNumber + $ numSetupTransactions + 1;

// Actualice la cuenta con un valor de datos que indique qué dirección personalizada buscar

imprimir "Agregar entrada de datos para solicitar una dirección personalizada…";

$ stellarNetwork->buildTransaction ($ escrowKeypair)

->setAccountData (‘solicitud: generateVanityAddress’, ‘G * ZULU’)

->enviar ($ escrowKeypair);

imprimir "HECHO" . PHP_EOL;

// Transacción de respaldo: reclame la cuenta de depósito en garantía si ningún trabajador genera el

// dirección personalizada en 30 días

$ reclaimTx = $ stellarNetwork->buildTransaction ($ escrowKeypair)

->setSequenceNumber (nuevo BigInteger ($ reclaimAccountOrPaySeqNum))

// todo: descomenta esto en una implementación real

//->setLowerTimebound (nuevo \ DateTime (‘+ 30 días’))

->setAccountData (‘solicitud: generateVanityAddress’)

->addMergeOperation ($ customerKeypair)

->getTransactionEnvelope ();

// Agregar hash de $ reclaimTx como firmante en la cuenta

// Ver: https://www.stellar.org/developers/guides/concepts/multi-sig.html#pre-authorized-transaction

$ txHashSigner = nuevo firmante (

SignerKey :: fromPreauthorizedHash ($ reclaimTx->getHash ()),

2 // el peso debe ser suficiente para que no se necesiten otros firmantes

);

$ addReclaimTxSignerOp = nuevo SetOptionsOp ();

$ addReclaimTxSignerOp->updateSigner ($ txHashSigner);

imprimir "Agregar una transacción de reclamo preautorizada como firmante… ";

$ stellarNetwork->buildTransaction ($ escrowKeypair)

->addOperation ($ addReclaimTxSignerOp)

->enviar ($ escrowKeypair);

imprimir "HECHO" . PHP_EOL;

imprimir "Se agregó una transacción de reclamo previa a la autorización válida en la secuencia " . $ reclaimAccountOrPaySeqNum. PHP_EOL;

imprimir "Para reclamar la cuenta de depósito en garantía, ejecute 90-reclaim-escrow.php" . PHP_EOL;

// Agregar cuenta de trabajador como firmante de peso 1

$ workerSigner = nuevo firmante (

SignerKey :: fromKeypair ($ workerKeypair),

1 // requiere otro firmante

);

$ addSignerOp = new SetOptionsOp ();

$ addSignerOp->updateSigner ($ workerSigner);

$ stellarNetwork->buildTransaction ($ escrowKeypair)

->addOperation ($ addSignerOp)

->enviar ($ escrowKeypair);

// Agregar cuenta de cliente como segundo firmante de peso 1

$ workerSigner = nuevo firmante (

SignerKey :: fromKeypair ($ customerKeypair),

1 // requiere otro firmante

);

$ addSignerOp = new SetOptionsOp ();

$ addSignerOp->updateSigner ($ workerSigner);

$ stellarNetwork->buildTransaction ($ escrowKeypair)

->addOperation ($ addSignerOp)

->enviar ($ escrowKeypair);

// Aumente los umbrales y establezca el peso maestro en 0

// Todas las operaciones ahora requieren un umbral de 2

$resholdsOp = new SetOptionsOp ();

$ umbralesOp->setLowThreshold (2);

$ umbralesOp->setMediumThreshold (2);

$ umbralesOp->setHighThreshold (2);

$ umbralesOp->setMasterWeight (0);

$ stellarNetwork->buildTransaction ($ escrowKeypair)

->addOperation ($ umbralesOp)

->enviar ($ escrowKeypair);

imprimir PHP_EOL;

imprimir "Finalizó la configuración de la cuenta de depósito en garantía" . PHP_EOL;

Cardano

Una mirada más profunda a las diferentes plataformas de contratos inteligentes

Uno de los proyectos más interesantes que ha salido es Cardano. Al igual que Ethereum, Cardano es una plataforma de contrato inteligente, sin embargo, Cardano ofrece escalabilidad y seguridad a través de una arquitectura en capas. El enfoque de Cardano es único en el espacio en sí, ya que se basa en la filosofía científica y la investigación académica revisada por pares.

Cardano tiene como objetivo aumentar la escalabilidad a través de su mecanismo de consenso de prueba de participación de Ouroboros. Para codificar contratos inteligentes en Cardano, deberá usar Plutus, que se basa en Haskell, el lenguaje utilizado para codificar Cardano..

Mientras que C ++ y la mayoría de los lenguajes tradicionales son lenguajes de programación imperativos, Plutus y Haskell son lenguajes de programación funcionales.

Entonces, ¿cómo funciona la programación funcional??

Suponga que hay una función f (x) que queremos usar para calcular una función g (x) y luego queremos usarla para trabajar con una función h (x). En lugar de resolver todos esos en una secuencia, simplemente podemos agruparlos todos en una sola función como esta:

h (g (f (x)))

Esto hace que el enfoque funcional sea más fácil de razonar matemáticamente. Es por eso que se supone que los programas funcionales son un enfoque más seguro para la creación de contratos inteligentes. Esto también ayuda a una verificación formal más simple, lo que significa que es más fácil probar matemáticamente lo que hace un programa y cómo se comporta. Esto le da a Cardano su propiedad de “Código de alta seguridad”.

Tomemos un ejemplo de la vida real de esto y veamos por qué puede volverse extremadamente crítico e incluso salvar vidas en ciertas condiciones..

Supongamos que estamos codificando un programa que controla el tráfico aéreo.

Como puede imaginar, codificar un sistema de este tipo requiere un alto grado de precisión y exactitud. No podemos codificar algo ciegamente y esperar lo mejor cuando las vidas de las personas están en riesgo. En situaciones como estas, necesitamos un código que pueda demostrarse que funciona con un alto grado de certeza matemática..

Esta es precisamente la razón por la que el enfoque funcional es tan deseable.

Y eso es exactamente lo que Cardano está usando Haskell para codificar su ecosistema y Plutus para sus contratos inteligentes. Tanto Haskell como Plutus son lenguajes funcionales.

La siguiente tabla compara el enfoque imperativo con el enfoque funcional.

Una mirada más profunda a las diferentes plataformas de contratos inteligentes

Crédito de la imagen: Docs.Microsoft.com

Por tanto, veamos las ventajas del enfoque funcional:

  • Ayuda a crear un código de alta seguridad porque es más fácil probar matemáticamente cómo se comportará el código..

  • Aumenta la legibilidad y la facilidad de mantenimiento porque cada función está diseñada para realizar una tarea específica. Las funciones también son independientes del estado.

  • El código es más fácil de refractar y cualquier cambio en el código es más simple de implementar. Esto facilita el desarrollo reiterativo.

  • Las funciones individuales se pueden aislar fácilmente, lo que las hace más fáciles de probar y depurar..

Neo

Una mirada más profunda a las diferentes plataformas de contratos inteligentes

Neo, anteriormente conocido como Antshares, a menudo se conoce como el “Ethereum de China”.

Según su sitio web, Neo es un “proyecto de blockchain sin fines de lucro basado en la comunidad que utiliza la tecnología blockchain y la identidad digital para digitalizar activos, automatizar la gestión de activos digitales mediante contratos inteligentes y realizar una” economía inteligente “con un sistema distribuido. la red.”

El principal objetivo de Neo es ser la red distribuida para la “economía inteligente”. Como dice su sitio web:

Activos digitales + Identidad digital + Contrato inteligente = Economía inteligente.

Neo fue desarrollado por blockchain R con sede en Shanghai&Compañía D “OnChain”. Onchain fue fundada por el CEO Da Hongfei y el CTO Erik Zhang. La investigación sobre Neo comenzó alrededor de 2014. En 2016, Onchain fue incluida en la lista de las 50 principales empresas de tecnología financiera en China por KPMG.

Neo quería crear una plataforma de contrato inteligente que tuviera todas las ventajas de una máquina virtual Ethereum, sin paralizar a sus desarrolladores con barreras idiomáticas. En ethereum, necesitará aprender solidez para codificar contratos inteligentes, mientras que en Neo, incluso puede usar Javascript para codificar contratos inteligentes..

Neo Smart Contract 2.0

El sistema de contrato inteligente de Neo, también conocido como The Smart Contract 2.0, tiene tres partes:

  • NeoVM.
  • InteropService
  • DevPack

NeoVm

Esta es una representación pictórica de la máquina virtual Neo:

Una mirada más profunda a las diferentes plataformas de contratos inteligentes

Crédito de la imagen: Neo Whitepaper

Como dice el documento técnico de Neo, NeoVM o Neo Virtual Machine es una máquina virtual ligera de uso general cuya arquitectura se parece mucho a JVM y .NET Runtime. Es similar a una CPU virtual que lee y ejecuta instrucciones en el contrato en secuencia, realiza el control del proceso en función de la funcionalidad de las operaciones de instrucción, operaciones lógicas, etc. Es versátil con una buena velocidad de inicio, lo que lo convierte en un excelente entorno para ejecutar contratos inteligentes..

InteropService

InteropService aumenta la utilidad de los contratos inteligentes. Permite que los contratos accedan a datos fuera de NeoVM sin comprometer la estabilidad general y la eficiencia del sistema..

Actualmente, la capa de servicio interoperable proporciona algunas API para acceder a los datos en cadena del contrato inteligente. Los datos a los que puede acceder son:

  • Bloquear información.
  • Información de la transacción
  • Información del contrato.
  • Información de activos

….entre otros.

También proporciona espacio de almacenamiento para contratos inteligentes..

DevPack

DevPack incluye el compilador de lenguaje de alto nivel y el complemento IDE. Dado que la arquitectura de NeoVM es bastante similar a JVM y .NET Runtime, permite codificar contratos en otros idiomas. Como puede imaginar, esto redujo en gran medida el tiempo que los desarrolladores tardaron en aprender a crear contratos inteligentes..

Tejido Hyperledger

Una mirada más profunda a las diferentes plataformas de contratos inteligentes

Según su sitio web, “Hyperledger es un esfuerzo colaborativo de código abierto creado para promover las tecnologías de cadena de bloques entre industrias. Es una colaboración global, organizada por The Linux Foundation, que incluye líderes en finanzas, banca, Internet de las cosas, cadenas de suministro, fabricación y tecnología “.

Quizás el proyecto más interesante de la familia Hyperledger sea IBM’s Fabric. En lugar de un solo blockchain, Fabric es una base para el desarrollo de soluciones basadas en blockchain con una arquitectura modular.

Con Fabric, los diferentes componentes de Blockchains, como los servicios de consenso y membresía, pueden convertirse en plug-and-play. Fabric está diseñado para proporcionar un marco con el que las empresas pueden armar su propia red de blockchain individual que puede escalar rápidamente a más de 1,000 transacciones por segundo..

Una mirada más profunda a las diferentes plataformas de contratos inteligentes

¿Qué es Fabric y cómo funciona? El marco se implementa en Go. Está hecho para habilitar blockchains de consorcio con diferentes grados de permisos. Fabric depende en gran medida de un sistema de contrato inteligente llamado Chaincode, que todos los pares de las redes ejecutan en contenedores Docker..

Para escribir Chaincode, uno debe estar bien versado en cuatro funciones:

  • PutState: crea un nuevo activo o actualiza uno existente.

  • GetState: recuperar activo.

  • GetHistoryForKey: recuperar el historial de cambios.

  • DelState: “Eliminar” activo.

A continuación se muestra un ejemplo de un Chaincode:

// Definir la estructura del contrato inteligente

escriba SmartContract struct {}

// Definir la estructura del coche, con 4 propiedades.

type Car struct {

Hacer string `json:"hacer"’

Cadena de modelo `json:"modelo"’

Cadena de color `json:"color"’

Cadena de propietario `json:"dueño"’

}

/ *

* El método Invoke se llama como resultado de una solicitud de aplicación para ejecutar el contrato inteligente "fabcar"

* El programa de aplicación de llamada también ha especificado la función de contrato inteligente particular que se llamará, con argumentos

* /

func (s * SmartContract) Invoke (APIstub shim.ChaincodeStubInterface) sc.Response {

// Recuperar la función y los argumentos solicitados de Smart Contract

función, argumentos: = APIstub.GetFunctionAndParameters ()

// Dirigir a la función de controlador adecuada para interactuar con el libro de contabilidad de manera adecuada

si función == "initLedger" {

return s.initLedger (APIstub)

} else if función == "createCar" {

return s.createCar (APIstub, args)

}

return shim.Error ("Nombre de función de contrato inteligente no válido.")

}

func (s * SmartContract) initLedger (APIstub shim.ChaincodeStubInterface) sc.Response {

return shim.Success ([] byte ("Ledger ahora está funcionando, éxito!"))

}

// Agrega un auto nuevo a la base de datos con los argumentos obtenidos

func (s * SmartContract) createCar (APIstub shim.ChaincodeStubInterface, args [] cadena) sc.Response {

if len (argumentos)! = 5 {

return shim.Error ("Número incorrecto de argumentos. Esperando 5")

}

var car = Car {Marca: args [1], Modelo: args [2], Color: args [3], Propietario: args [4]}

carAsBytes, _: = json.Marshal (automóvil)

APIstub.PutState (args [0], carAsBytes)

return shim.Exito (nulo)

}

func main () {

// Crea un nuevo contrato inteligente

err: = shim.Start (nuevo (SmartContract))

if err! = nil {

fmt.Printf ("Error al crear un nuevo contrato inteligente:% s", errar)

}

}

Conclusión

Así que ahí lo tienes. Algunas de las plataformas de contratos inteligentes y las diversas propiedades que las hacen únicas. No existe una “talla única”, al menos por ahora. Deberá elegir la plataforma que mejor se adapte a las funcionalidades requeridas para su Dapp.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me