Las mejores herramientas para el desarrollo de contratos inteligentes (parte 2)

Descripción general: las mejores herramientas para el desarrollo de contratos inteligentes (Web3 y cadena de bloques privada de ethereum)

Esta es una publicación invitada de KC TAM sobre el uso de varias herramientas para el desarrollo de contratos inteligentes: Remix, Web3 en TestRPC.

Esta configuración es muy parecida a la anterior. La diferencia es implementar el contrato en una cadena de bloques Ethereum privada que se ejecuta en localhost en lugar de usar TestRPC.

La parte de la consola del nodo es casi idéntica, pero necesitamos algunas tareas en la cadena de bloques privada antes de que las cosas funcionen como deseamos. Son la inicialización de la cadena de bloques y la ejecución de la cadena de bloques, la creación de cuentas y la minería. Todas estas tareas las realiza TestRPC en la sesión anterior..

Parte 1: Las mejores herramientas para el desarrollo de contratos inteligentes 

Desarrollo de contratos inteligentes (parte 2)

Preparación: Cliente Ethereuem (geth)

Hay varias implementaciones del cliente Ethereum. El más popular es el cliente Go (llamado geth). Se puede encontrar la instalación de geth Aquí. Elija uno que se adapte a su sistema operativo.

Archivo Genesis.json

Este es el archivo utilizado para inicializar la cadena de bloques privada de ethereum. Solo muestro el que estoy usando.

{

"coinbase" : "0x0000000000000000000000000000000000000001",

"dificultad" : "0x20000",

"extraData" : "",

"gasLimit" : "0x4c4b40",

"mientras tanto" : "0x0000000000000042",

"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",

"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",

"marca de tiempo" : "0x00",

"alloc": {},

"config": {

"chainId": 15,

"HomesteadBlock": 0,

"eip155Block": 0,

"eip158Block": 0

}

}

Deberías tener esto ya. Consulte la sesión de preparación en la configuración anterior. Módulo Nodo y Web3

Configurar una cadena de bloques privada de Ethereum

1. Inicializar Blockchain

Aquí solo enumero los pasos lo suficientemente buenos para esta demostración, con una breve explicación. Para obtener más detalles, puede encontrar en este wiki.

Abre el directorio de trabajo. En aras de la simplicidad, utilizamos el directorio de la sesión anterior, en el que ya se han instalado los módulos de nodo. Asegúrese de que el archivo genesis.json se mantenga aquí. Cree un directorio aquí llamado “chaindata”. Este directorio mantendrá toda la información de blockchain y las cuentas de usuario..

Las mejores herramientas para el desarrollo de contratos inteligentes (parte 2)

A partir de ahora dividiremos nuestra pantalla en tres, para diferentes propósitos..

Las mejores herramientas para el desarrollo de contratos inteligentes (parte 2)

Ahora ponga sus iniciales en la cadena de bloques con geth init. Tenga en cuenta que necesitamos especificar el directorio de datos para el directorio en el que estamos almacenando la cadena de bloques.

blockchain

$ geth –datadir = ~ // datos de cadena / init genesis.json

Las mejores herramientas para el desarrollo de contratos inteligentes (parte 2)

Después de la inicialización, en el directorio chaindata se crean dos directorios:

  • geth contiene todos los datos relacionados con blockchain
  • keystore contiene la información de la cuenta del usuario (vacía en este momento).

2. Inicie Blockchain

Podemos iniciar la cadena de bloques ahora.

blockchain

$ geth –datadir = ~ // datos de cadena / s.json

Las mejores herramientas para el desarrollo de contratos inteligentes (parte 2)

La cadena de bloques está en funcionamiento. No interactuamos con blockchain en este terminal. Durante nuestra configuración, veremos que sigue apareciendo información útil en este terminal..

3. Accede a Blockchain con Geth Console

Podemos acceder a la cadena de bloques que iniciamos a través de la consola geth. Tenga en cuenta la última línea en la terminal de la cadena de bloques: allí está abierto el punto final de IPC (la ruta del archivo geth.ipc). Usamos este punto final de IPC para acceder a la consola.

La consola geth está en la terminal inferior derecha.

consola geth

$ geth adjuntar ipc: /chaindata/geth.ipc

Las mejores herramientas para el desarrollo de contratos inteligentes (parte 2)

Aquí está la consola geth, y podemos emitir los comandos geth aquí.

4. Agregue algunas cuentas para demostración

Cuando se inicializa esta cadena de bloques privada de Ethereum, no hay cuentas. Para esta demostración, crearemos cuatro.

La primera es nuestra base, responsable del despliegue del contrato y la ejecución de funciones. Además, esta cuenta es responsable de la minería, ya que, en la blockchain privada de ethereum, necesitamos que alguien extraiga el bloque..

Se crean tres cuentas más solo para demostrar el reparto de ingresos.

Tenga en cuenta que cada cuenta requiere protección parafraseada.

consola geth

$ eth.ccounts

$ personal.newAccount () // repetir cuatro veces

$ eth.ccounts

Y si revisa el directorio en chaindata / keystore, verá las cuatro cuentas.

Las mejores herramientas para el desarrollo de contratos inteligentes (parte 2)

Aquí están las cuentas. Los referiremos más tarde.

"0x822539842f2d65f7f6e45ef913ab6eb226cd1056"

"0x57f6b66543c6a5650809f5ba2d3e0e808201fe8b"

"0xf1314446d331a023a95e6e5ff5302ccf7a73adec"

"0x595c788ba7b408afeee4cd4e359568dbcd5a5617"

5. Verificar el saldo de la cuenta

Ahora podemos verificar el saldo de la cuenta de estas cuatro direcciones. No es una sorpresa, no hay éteres en estas cuentas, ya que son de nueva creación..

consola geth

$ eth.getBalance (eth.accounts [0]) // repetir con 1, 2 y 3

Las mejores herramientas para el desarrollo de contratos inteligentes (parte 2)

6. Minería

Estamos listos para ver cómo se hace la minería. La blockchain privada de Ethereum requiere minería para construir el bloque. Como hemos establecido una dificultad muy baja en genesis.json, no se necesita demasiado tiempo para extraer un bloque. Después de agregar un bloque a la cadena de bloques, se recompensan 5 ethers a las cuentas [0] (que también se denomina cuenta etherbase o coinbase).

El primer bloque puede tardar un poco. Al examinar el saldo de las cuentas [0] y lo que aparece en la ventana de la cadena de bloques (terminal superior derecha), sabrá que la minería está funcionando bien..

consola geth

$ miner.start ()

$ eth.getBalance (eth.accounts [0])

$ web3.fromWei (eth.getBalance (eth.accounts [0])) // convertir weis en ethers

Las mejores herramientas para el desarrollo de contratos inteligentes (parte 2)

Observe que todos los ethers van a eth.accounts [0], y podemos usar web3.fromWei para convertir el saldo de wei en ethers. Y podemos detener y comenzar a minar en cualquier momento. Lo detenemos primero y podemos iniciarlo más tarde cuando implementamos el contrato y ejecutamos la función. (En la vida real, algunos mineros harán el trabajo, y usted no necesita minar por su cuenta a menos que desee ganar algunos éteres a través de la minería).

Tenemos algunos ethers para eth.accounts [0], y se pueden usar para la implementación de contratos y la ejecución de la función. Y mi blockchain privada está lista para usar. Ahora pasamos al despliegue del contrato.

Implementar el contrato

El procedimiento es casi idéntico al que hicimos en la sesión anterior. Sin embargo, hay algunos trabajos adicionales en la consola geth, y destacaremos esto.

1. Prepare la consola de nodo

En la consola del nodo, la terminal del lado izquierdo, primero accedemos a la consola del nodo y definimos el objeto web3 para acceder a la cadena privada..

consola de nodo

$ nodo

> Web3 = require (‘web3’)

> web3 = new Web3 (nuevo Web3.providers.HttpProvider ("http: // localhost: 8545"))

Las mejores herramientas para el desarrollo de contratos inteligentes (parte 2)

2. Encienda RPC en la consola Geth

Cuando iniciamos la blockchain privada, por defecto el RPC (accediendo a través de http: // localhost: 8545) está desactivado. Necesitamos encenderlo desde la consola geth.

consola geth

$ admin.startRPC ()

Las mejores herramientas para el desarrollo de contratos inteligentes (parte 2)

Y podemos ver en el terminal blockchain este mensaje:

Las mejores herramientas para el desarrollo de contratos inteligentes (parte 2)

Eso significa que web3 desde el nodo puede acceder a la cadena de bloques a través de RPC. Esto no es necesario para TestRPC ya que ya está abierto. También podemos activar RPC cuando iniciamos la cadena de bloques (con la opción –rpc).

3. Pruebe el acceso a Blockchain en la consola del nodo

Verifique las direcciones que hemos creado antes.

consola de nodo

> web3.eth.accounts

Las mejores herramientas para el desarrollo de contratos inteligentes (parte 2)

Vemos las direcciones exactas que hemos creado en la consola geth.

4. Compruebe la función práctica de balance

Reutilizamos el mismo checkAllBalances (), que se toma de Aquí.

function checkAllBalances () {

var i = 0;

web3.eth.accounts.forEach (function (e) {

console.log (" web3.eth.accounts ["+yo+"]: " + mi + " tbalance: " + web3.fromWei (web3.eth.getBalance (e), "éter") + " éter");

i ++;

})

};

Simplemente copie y pegue esta función en la consola del nodo. Ahora podemos llamar a la función checkAllBalances () en cualquier momento, y mostrará el saldo de todas las cuentas en ether..

Las mejores herramientas para el desarrollo de contratos inteligentes (parte 2)

El saldo es correcto. Los éteres de las cuentas [0] se deben a la minería. No nos referiremos a esto, ya que durante la minería, esta cantidad sigue aumentando. Comprobaremos el saldo de las otras tres cuentas, que actualmente es cero.

5. Implementar el contrato

Nuevamente, estamos siguiendo lo que hemos hecho antes. Y solo copio la información de la sesión anterior. Consulte la sesión anterior como los obtengo.

Cree una dirección variable, que contenga las tres cuentas de uso compartido de destino.

consola de nodo

> var direcciones = [web3.eth.accounts [1], web3.eth.accounts [2], web3.eth.accounts [3]];

> direcciones

Crear una clase para compartir ingresos Contrato basado en el ABI.

consola de nodo

> var revenueharingContract = web3.eth.contract ([{"constante":cierto,"entradas": [],"nombre":"creador","salidas": [{"nombre":"","escribe":"dirección"}],"pagadero":falso,"stateMutability":"vista","escribe":"función"}, {"constante":falso,"entradas": [],"nombre":"matar","salidas": [],"pagadero":falso,"stateMutability":"impagable","escribe":"función"}, {"constante":cierto,"entradas": [],"nombre":"numAccionistas","salidas": [{"nombre":"","escribe":"uint256"}],"pagadero":falso,"stateMutability":"vista","escribe":"función"}, {"constante":cierto,"entradas": [{"nombre":"","escribe":"uint256"}],"nombre":"accionistas","salidas": [{"nombre":"","escribe":"dirección"}],"pagadero":falso,"stateMutability":"vista","escribe":"función"}, {"constante":falso,"entradas": [],"nombre":"shareRevenue","salidas": [{"nombre":"éxito","escribe":"bool"}],"pagadero":cierto,"stateMutability":"pagadero","escribe":"función"}, {"entradas": [{"nombre":"direcciones","escribe":"dirección[]"}],"pagadero":falso,"stateMutability":"impagable","escribe":"constructor"}, {"anónimo":falso,"entradas": [{"indexado":falso,"nombre":"_Monto","escribe":"uint256"}, {"indexado":falso,"nombre":"_numAccionistas","escribe":"uint256"}],"nombre":"Desembolsar","escribe":"evento"}]);

Hasta este momento, todavía no hemos implementado nada en la cadena de bloques privada. Por lo tanto, no se necesita minería. Se requiere gas para la implementación del contrato y, por lo tanto, debemos desbloquear las eth.accounts [0] ya que usamos las cuentas [0] para implementar este contrato. Se hace en la consola geth..

consola geth

$ personal.unlockAccount (eth.accounts [0])

Las mejores herramientas para el desarrollo de contratos inteligentes (parte 2)

En caso de que se le solicite desbloquear la cuenta debido al tiempo de espera, debe hacerlo nuevamente..

Ahora podemos implementar el contrato con bytecode e información necesaria.

consola de nodo

> var reparto de ingresos = contrato de reparto de ingresos.nuevo (

direcciones,

{

de: web3.eth.accounts [0],

Datos: ‘0x6060604052341561000f57600080fd5b60405161049d38038061049d833981016040528080518201919050506000336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508151600281905550600090505b81518110156100f957818181518110151561009157fe5b906020019060200201516001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808060010191505061007a565b50506103938061010a6000396000f30060606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806302d05d3f1461007257806341c0e1b5146100c757806368eca613146100dc578063ab377daa14610105578063e579a0bd14610168575b600080fd5b341561007d57600080fd5b61008561018a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156100d257600080fd5b6100da6101af565b005b34156100e75760008 0fd5b6100ef610240565b6040518082815260200191505060405180910390f35b341561011057600080fd5b6101266004808035906020019091905050610246565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610170610279565b604051808215151515815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561023e576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b565b60025481565b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060006002543481151561028b57fe5b049150600090505b60025481101561031d576001600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673fffffffffffff fffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050151561031057600080fd5b8080600101915050610293565b7f9c26340b8d01b4e039192edfd25f4a56ed070d45afe866b8685658b1ed3cd74d34600254604051808381526020018281526020019250505060405180910390a1600192505050905600a165627a7a72305820f0e717ba935e00c43896cc9266a85af91a519061c044503be0a52b93f721d1610029’,

gas: ‘4700000’

}, función (e, contrato) {

console.log (e, contrato);

if (typeof contract.address! == ‘undefined’) {

console.log (‘¡Contrato minado! dirección:’ + contract.address + ‘transactionHash:’ + contract.transactionHash);

}

})

0])

A diferencia de la sesión anterior, vemos que la transacción ya se muestra en el terminal blockchain pero aún no se extrae. Aún no se observa ningún mensaje de la consola del nodo.

Las mejores herramientas para el desarrollo de contratos inteligentes (parte 2)

Ahora tenemos que activar la minería en la consola geth.

Las mejores herramientas para el desarrollo de contratos inteligentes (parte 2)

A medida que activamos la minería, muy pronto vemos que se extraen algunos bloques y, en la consola del nodo, también aparece el mensaje, que muestra que el contrato se implementó correctamente..

Las mejores herramientas para el desarrollo de contratos inteligentes (parte 2)

Interactuar con el contrato implementado

Al igual que en la sesión anterior, se accede al contrato implementado a través del objeto reparto de ingresos.

1. Examina las variables públicas

El examen de las variables públicas no requiere gas y, por lo tanto, no necesitamos desbloquear cuentas y minar para realizar esto..

Las mejores herramientas para el desarrollo de contratos inteligentes (parte 2)

2. Ejecute la función shareRevenue ()

Como la ejecución de la función requiere costos de transacción y minería, podemos comenzar ambos desde la consola geth primero.

El comando que ejecutamos la función es el mismo. Como en la sesión anterior, revisamos el saldo antes y después del comando.

consola de nodo

> checkAllBalance ()

> Revenueharing.shareRevenue ({de: web3.eth.accounts [0], valor: web3.toWei (30), gas: 4700000});

> checkAllBalance ()

Las mejores herramientas para el desarrollo de contratos inteligentes (parte 2)

Tenemos el resultado deseado. Los 30 ethers de las cuentas [0] ahora se distribuyen a las cuentas [1] a las cuentas [3]. No podemos verificar las cuentas [0] ya que están llegando nuevos éteres debido a la minería.

Resumen

Hemos vuelto a utilizar web3 a través de la consola de nodos para implementar e interactuar con el contrato. Esta vez lo hacemos en una cadena de bloques Ethernet privada. El proceso general es casi el mismo en el lado de la consola del nodo, pero tenemos que encargarnos de las creaciones de cuentas, desbloqueo de cuentas, minería, etc. para completar todo el proceso. Esto no es necesario en TestRPC ya que TestRPC realiza todas estas tareas.

La próxima vez trabajaremos en MIST, una interfaz de usuario y nuevamente interactuaremos en una cadena de bloques privada de Ethereum..

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