¿Cómo redactar tu primer contrato inteligente?



Aprenda los conceptos básicos del desarrollo de contratos inteligentes y comience a escribir su primer contrato inteligente. También sabrá cómo probar el contrato inteligente.

En el , aprendió qué son los contratos inteligentes, los diferentes lenguajes de contratos inteligentes y cómo configurar un entorno de desarrollo de contratos inteligentes. En este artículo, aprenderá a crear su primer contrato inteligente. Yo usaréRemix IDE para desarrollar y probar un contrato inteligente.

Los siguientes temas se tratan en este tutorial de desarrollo de contratos inteligentes:





Construyendo su contrato inteligente

Se desarrollará un contrato inteligente de orden de compra simple como parte de esta serie de blogs. A medida que avanza esta serie y se introducen nuevos conceptos de lenguaje de programación de solidez, el contrato inteligente de la orden de compra evolucionará y mejorará.



Estructura del contrato inteligente

El contrato inteligente de solidez, en esencia, es una colección de siguientes

  • datos - que mantiene el estado actual del contrato
  • función - que aplican la lógica para la transición del estado del contrato

Los contratos inteligentes de solidez siguen una estructura estándar. Cualquier contrato inteligente comienza con la siguiente declaración



Directiva Pragma

La palabra clave 'pragma' se puede utilizar para habilitar determinadas funciones o comprobaciones del compilador. La siguiente declaración define que el archivo de origen (contrato inteligente) no se compilará con el compilador anterior a 0.4.0 y la versión del compilador posterior a 0.6.0. Esta declaración garantiza que no se introduzca ningún comportamiento no deseado cuando se introduzca una nueva versión del compilador.

solidez del pragma> = 0.4.0<=0.6.0 

Declaración de contrato

El contrato se declara utilizando la palabra clave 'contrato'. Esto declara un contrato vacío que se identifica con el nombre 'Pedido de compra'.

contrato PurchaseOrder {}

Almacenamiento de datos relevantes para el contrato

Cada contrato o en términos genéricos, cada programa puede requerir almacenar algunos datos. Agregar datos al programa le proporciona un nivel de flexibilidad. Pasar de los valores codificados en el programa a los valores proporcionados por el usuario es una característica importante. Las variables le permiten almacenar los datos, etiquetarlos, recuperarlos y manipularlos.

Desarrollo de contratos inteligentes: introducción de variables

En solidez, las variables son de dos tipos

  1. Tipo de valor: Este tipo de variables se pasan por valor, es decir, siempre se copian cuando se utilizan como argumentos de función o en asignaciones. Por ejemplo: números enteros, dirección booleana, etc.
  2. Tipos de referencia: Este tipo de variables son de tipos complejos y se pasan por referencia, estas variables no encajan en 256 bits y deben manejarse con cuidado ya que copiarlas es costoso.

Agregar datos a Smart Contract

Agreguemos alguna variable de datos al contrato. Para cada orden de compra, tiene que haber alguna cantidad de producto asociada. Agreguemos una variable product_quantity que será del tipo de datos integer o number.

combinación de datos en Tableau 10

La variable que estamos introduciendo ahora es un entero sin signo y está representada por uint256, 256 aquí significa el almacenamiento de 256 bits.

  • U - no firmado (lo que significa que este tipo solo puede representar números enteros positivos, no números enteros positivos y negativos)
  • INT - entero
  • 256-256 bits de tamaño
  • El valor mínimo que se puede asignar a uint256 es 0
  • El valor máximo que se puede asignar a uint256 es 2 ^ 256-1 [un número muy grande]

La cantidad de producto es solo un valor positivo y el supuesto actual es que vamos a atender a un valor muy grande para la cantidad de producto.

que es la clase anonima en java

La variable 'product_quantity' declarada es parte del estado del contrato y, por lo tanto, se conserva o se almacena en el espacio del contrato. Actualmente, esta variable tendrá el valor 0 por defecto.

contrato PurchaseOrder {uint256 product_quantity}

Definiendo el constructor

Se llama al constructor cuando se implementa el contrato. El constructor inicializa el contrato con algunos valores. En el escenario actual, la cantidad de producto se establece en 100, cuando se implementa el contrato. También se puede crear un constructor parametrizado pasando una variable e inicializando product_quantity usando el valor pasado.

El punto clave que debe tenerse en cuenta aquí es el modificador de acceso 'público' asociado con el constructor. La palabra clave pública especifica que cualquiera puede acceder a esta función, esta no es una función restringida.

constructor () public {product_quantity = 100}

Agregar funciones

Agreguemos ahora una función para que nuestro programa sea interactivo. Las funciones son capacidades controladas que se pueden agregar a un programa. Cualquier función está precedida por función de palabra clave. En general, así es como se ve la declaración de función función ”.

Obtener función

Uno de los requisitos más comunes, para cualquiera de los programas, es leer el valor almacenado. En el siguiente contrato, necesitaremos leer el valor 'product_quantity'. Para proporcionar esta capacidad, se agrega una función de lectura o una función de obtención. En esta función no estamos haciendo ninguna manipulación al valor almacenado, solo estamos recuperando el valor almacenado.

Analicemos ahora nuestra función get (get_quantity)

No. Palabra clave Valor
1 get_quantity (){no se pasan parámetros}
2 público{cualquiera puede acceder a la función}
3 ver{significa que la función solo lee el estado del contrato, no cambia el estado del contrato, por lo tanto, ver}
4 devuelve una variable de tipo uint256 {definido lo que devuelve la función}
función get_quantity () devoluciones de vista pública (uint256) {return product_quantity}

Funciones de setter

Leer los datos es necesario y lo hemos logrado en la última sección, pero la mayor parte del escenario también requiere la capacidad de escribir / actualizar los datos. Esta capacidad específica se proporciona agregando una función de establecedor. Esta función toma un valor del usuario en forma de parámetro de entrada. Usando el valor proporcionado a la función por el usuario, se escribe / actualiza el valor de la variable 'product_quantity'.

Analicemos ahora nuestra función de conjunto (update_quantity)

Agregar una función para actualizar el valor de la cantidad de producto

No. Palabra clave Valor
1 update_quantity (valor de uint256){se pasa el valor del parámetro de tipo uint256}
2 público{cualquiera puede acceder a la función}
3 No es necesario, ya que las funciones actualizan el estado.
4 devuelve una variable de tipo uint256 (definido lo que devuelve la función)
función update_quantity (valor uint256) public {product_quantity = product_quantity + value}

Conectando todo esto, así es como debería verse el contrato general.

solidez del pragma> = 0.4.0<=0.6.0 contract PurchaseOrder{ uint256 product_quantity //state variable /*Called with the contract is deployed and initializes the value*/ constructor() public{ product_quantity = 100 } // Get Function function get_quantity() public view returns(uint256){ return product_quantity } // Set Function function update_quantity(uint256 value) public { product_quantity = product_quantity + value } } 

Implementación del contrato inteligente

Es hora de probar el contrato inteligente. Para probar este contrato inteligente, usaremos Remix IDE en línea .

Remix es un campo de juegos en línea para contrato inteligente ethereum . Remix está completamente basado en navegador. Remix le proporciona un IDE (entorno de desarrollo integrado) en línea donde puede escribir sus contratos inteligentes. Remix le proporciona una capacidad de compilador de solidez en línea. El contrato inteligente en Remix IDE se puede compilar usando una versión de compilador específica sin problemas.

Remix también proporciona la capacidad de probar rápidamente el contrato inteligente.

Remix proporciona un conjunto de herramientas completo para comenzar el desarrollo de contratos inteligentes y pruebas unitarias del contrato inteligente, sin realizar ninguna instalación en su máquina local. Esto es de gran utilidad para comenzar con solidez, ya que los desarrolladores solo necesitan concentrarse en escribir un contrato inteligente, en lugar de preocuparse por la infraestructura.

Con Remix IDE, todo lo que necesita es un navegador y una conexión a Internet para comenzar con el desarrollo de contratos inteligentes. Desarrollo, prueba y validación rápidos de una idea para un contrato inteligente.

Remix ha actualizado recientemente su interfaz de usuario.

Remix-UI-Smart-Contracts-Edureka

Haga clic en el icono del archivo como se resalta en la imagen de arriba, se abrirá el explorador de archivos.

  1. Al hacer clic en el icono más, se puede crear un nuevo archivo, nombre el archivo PurchaseOrder.sol
  2. Esto creará un archivo vacío llamado PurchaseOrder.sol, haga clic y abra este archivo.
  3. Copiemos y peguemos todo el contrato en el PurchaseOrder.sol.
  4. Haga clic en el segundo icono, en el menú de la izquierda, justo debajo del icono del archivo, debería aparecer la opción del compilador de solidez.
  5. En la etiqueta Compilador, seleccione la versión del compilador. La versión seleccionada actualmente es 0.5.8.
  6. Después de la selección de la versión del compilador, haga clic en 'Compilar PurchaseOrder.sol'. Esto compilará el contrato inteligente.

7. Una vez que el contrato inteligente se compile correctamente, haga clic en el botón 'Detalles de la compilación' y aparecerán los siguientes detalles. Después de la compilación, se ponen a disposición dos datos clave

    • ABI: interfaz binaria de la aplicación. Este es un archivo json que detalla todos los métodos expuestos en el contrato inteligente junto con los metadatos de los métodos. Más sobre esto se discutirá en los blogs posteriores.
    • Bytecode- Código de operación EVM (máquina virtual Ethereum), la lógica de contrato inteligente se convierte en el código de bytes en la compilación.

8. Para probar el contrato inteligente, es necesario implementar el contrato inteligente. Para implementar el contrato inteligente, haga clic en el icono siguiente en el menú de la izquierda, debajo del icono de compilación. La siguiente pantalla aparecerá. Para probar el contrato inteligente, es necesario implementar el contrato inteligente. Para implementar el contrato inteligente, haga clic en el siguiente ícono en el menú de la izquierda, debajo del ícono de compilación. La siguiente pantalla aparecerá.

Opción de implementación

La pantalla de implementación ofrece un par de opciones, veámoslas una por una.

  • Entorno: se puede pensar en una opción similar a elegir comprar una computadora portátil en Amazon, Flipkart, Newegg (todos estos son minoristas en línea), usted elige dónde desea comprar, según sus requisitos. De manera similar, en el caso de Remix, tenemos una opción donde implementar el contrato inteligente y probar el contrato inteligente. El menú desplegable junto a la etiqueta del entorno proporciona tres selecciones
    • VM de JavaScript: un único nodo local de Ethereum se activa en la memoria del navegador y proporciona 5 cuentas de prueba prefinanciadas que se pueden usar para la transacción (implementación, invocación de funciones)
    • Suministro Web3 inyectado: se basa en MetaMask. Metamask es como un corredor o intermediario, que permite que las aplicaciones web interactúen con el contrato inteligente. Metamask proporciona la capacidad de administrar las identidades y también firmar las transacciones que se enviarán a la red ethereum. Este intermediario o 3rdparty proporciona ayuda para determinar la red blockchain en la que se implementará el contrato inteligente.
    • Proveedor Web3: si está ejecutando un nodo Ethereum local y el punto final RPC está disponible, se puede utilizar esta opción. El contrato inteligente se implementará en el nodo Ethereum local.
  • Cuentas: esta información se completa según el entorno seleccionado. Por ejemplo. La máquina virtual de JavaScript proporciona 5 cuentas de prueba prefinanciadas. En el caso del proveedor de Web3 y de Injected Web3, no proporcione cuentas de prueba prefinanciadas.
  • Límite de gas: define la cantidad máxima de gas que el iniciador está dispuesto a gastar en cualquier transacción. Este es el lugar para protegerse contra el bucle infinito y el agotamiento de todos los fondos de la cuenta en caso de una condición de bucle infinito.
  • Valor: el valor que puede ser necesario enviar mientras se implementa el contrato inteligente. Este es un valor opcional.

Para implementar el contrato, seleccione la opción JavaScript VM, seleccione la primera cuenta del menú desplegable de cuentas, observe el saldo de la cuenta (100 ether).

Asegúrese de que el nombre del contrato inteligente que aparece sea PurchaseOrder, haga clic en implementar. Acciones clave que sucederán

  1. El saldo de la cuenta cambia de 100 ether a 99,999999 ether, la cantidad deducida es el costo de transacción para implementar el contrato inteligente.
  2. Bajo contrato implementado, aparecerá un nuevo mosaico para contrato inteligente, que también proporcionará la dirección del nuevo contrato inteligente algo como esto (0x692a70d2e424a56d2c6c27aa97d1a86395877b3a)
  3. En la ventana de la consola aparecerá la siguiente información
    1. Hash de transacción: identifica de forma única la implementación del contrato
    2. Costo de la transacción
    3. Dirección del contrato

Interactuar con el contrato implementado

  1. Según el contrato implementado, los siguientes dos métodos de interacción están disponibles update_quantity y get_quantity.
  2. Ambos métodos de interacción son los métodos públicos definidos en el contrato de “Orden de compra”.
  3. El método 'update_quantity' de la cantidad de actualización requiere un parámetro de entrada, de ahí el cuadro de entrada.
  4. Obtener cantidad El método 'get_quantity' recupera el valor de product_quantity.
  5. Veamos qué sucede cuando se invoca get_quantity, se muestra el valor de retorno 100, que se inicializó en el constructor. Esto no provoca que se produzca una transacción
  6. Invoquemos update_quantity y proporcionemos 30 como entrada. Esto hace que suceda una transacción.

En pocas palabras, cualquier operación que provoque una operación de escritura en el estado del contrato (es decir, cambie las variables del contrato) resultará en una transacción.

Cualquier operación que solo lea el estado del contrato no causa una transacción.

Conclusión del desarrollo de contratos inteligentes

Con esto, acabamos de crear nuestro primer contrato inteligente, apenas rascando la superficie de la solidez. Acabamos de ver lo que se necesita para probar el contrato inteligente desde la implementación del contrato inteligente hasta el inicio de las transacciones.

cómo evitar el punto muerto en java

En el próximo blog, que es una continuación de la serie de desarrollo de contratos inteligentes, vamos a profundizar en los fundamentos de la solidez, profundizando en la implementación de contratos inteligentes.

Con eso, concluyo esto Contrato inteligente blog de desarrollo. Espero que haya disfrutado leyendo este blog y lo haya encontrado informativo.

yoSi desea aprender Contratos Inteligentes, desarrollar una carrera en el dominio de Blockchain y adquirir experiencia en la programación de Ethereum, inscríbase en Live-Online aquí, que viene con soporte 24 * 7 para guiarlo durante su período de aprendizaje.

Tienes una pregunta para nosotros? Menciónelo en la sección de comentarios de 'Desarrollo de contratos inteligentes' y nos comunicaremos con usted lo antes posible.S t.