Como os comentamos en el post anterior, nuestra idea es ir paso a paso contando todo el flujo de vida de un Smart Contract dentro de un gran proyecto.
Y, en este caso, empezaremos por crear un entorno de trabajo local que, como siempre, podréis ver completo en este proyecto de Github.
Lo primero que hay que hacer es inicializar el proyecto con Node y Truffle, así como todos los módulos necesarios para el proyecto.
1 2 3 |
npm init npm install --save truffle npm install --save-dev ganache-cli |
Recordar que lo hemos instalado todo de forma local, así que tendremos que crear, en el package.json, los comandos necesarios para poder acceder a truffle y a ganache-cli:
1 2 3 4 5 6 7 |
{ "scripts": { "t": "truffle", "test": "truffle test", "testnet": "ganache-cli" } } |
Ahora podréis ejecutarlos mediante:
1 2 3 |
npm run t npm run test npm run testnet |
Los dos primeros fallarán ya que todavía no está configurado truffle. El tercero, la testnet, es recomendable que la abráis en un terminal diferente, ya que tendrá que estar siempre arrancada.
Nota: Recordar que podéis añadir flags a los comandos añadiendo dos guiones “–” antes de los flags que queráis pasar al comando.
Por ahora, poco podemos hacer, así que vamos a arrancar truffle para que nos instale toda su configuración base.
1 |
npm run t init |
Esto nos genera un fichero y los tres directorios que necesita truffle para trabajar.
- Contracts: es el directorio donde irán todos los contratos de Solidity que realicemos.
- Migrations: En este directorio se guardan los scripts necesarios para hacer el deploy de los contratos a la blockchain.
Hay que tener en cuenta que nuestro código no está directamente en la blockchain sino que hay que hacer una serie de transacciones para que sea accesible desde la misma, también es importante porque, en caso de que se necesiten varios Smart Contracts, es aquí donde diremos como se deben subir y cual es la relación entre todos ellos. - Test: Porque ya no sabemos programar sin hacer test!!
En nuestro caso usaremos los test en JS (usa por debajo Mocha), aunque también los hay en formato Solidity. - truffle.js En este fichero debe estar la configuración básica de truffle para hablar con las diferentes redes blockchain con las que trabajes. En la documentación de Truffle os indican como podéis configurarlo. Por ahora usaremos la configuración básica.
La propia suite de truffle trae por defecto una testnet que parte de la de ganache-cli, podríamos usar esta por defecto con el comando “npm run t — develop”, esta testnet, en nuestro caso, está usando el puerto 9545, mientras que la blockchain de ganache-cli corre bajo el 8545, y la app de Ganache está en el puerto 7545, por lo que en la configuración de truffle.js podréis poner:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
module.exports = { // See <http://truffleframework.com/docs/advanced/configuration> // to customize your Truffle configuration! networks: { truffle: { host: 'localhost', port: 9545, network_id: '*' // Match any network id }, ganache: { host: 'localhost', port: 7545, network_id: 5777 }, development: { host: 'localhost', port: 8545, network_id: '*' // Match any network id }, } }; |
Por otro lado, aquí os cuentan un poco sobre los network_id, no entraremos mucho en detalle para no salir de contexto, pero hay que saber que hay una lista definida de los principales network ids y que las redes testnet suelen poner el suyo de forma aleatoría, de ahí que se suela poner el asterísco “*” para los de desarrollo.
Podrás elegir cualquiera de las redes simplemente nombrándolas, por ejemplo:
1 2 3 4 5 |
# Probar la red de ganacha-cli npm run t console # Probar la red testnet de truffle npm run t console -- --network truffle |
Y, para comprobar que todo funciona correctamente sólo tenemos que arrancar las dos redes blockchain en dos terminales distintos y, sin cerrarlas, arrancar la consola de truffle conectándose a cada una de ellas:
1 2 3 4 5 |
# Para arrancar la red de ganacha-cli npm run testnet # Para arrancar la red testnet de truffle npm run t develop |
Y para problarlas
1 2 3 4 5 |
# Probar la red de ganacha-cli npm run t console # Probar la red testnet de truffle npm run t console -- --network truffle |
Deberías poder conectarte a ambas redes y ver algo similar a esto:
1 2 3 4 |
> solidity-boilerplate@1.0.0 t /home/gelito/WebstormProjects/solidity-Boilerplate > truffle "console" truffle(development)> |
Y, por último, el package.json debería acabar mostrando algo similar a esto:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
{ "name": "solidity-boilerplate", "version": "1.0.0", "description": "A basic boilerplate of a Solidity project", "main": "index.js", "scripts": { "t": "truffle", "test": "truffle test", "testnet": "ganache-cli" }, "repository": { "type": "git", "url": "git+https://github.com/Kubide/solidity-Boilerplate.git" }, "keywords": [ "solidity", "truffle", "open-zeppeling" ], "author": "Kubide", "license": "ISC", "bugs": { "url": "https://github.com/Kubide/solidity-Boilerplate/issues" }, "homepage": "https://github.com/Kubide/solidity-Boilerplate#readme", "dependencies": { "truffle": "^4.0.4" }, "devDependencies": { "ganache-cli": "^6.0.3" } } |
Con esto, más las recomendaciones que os pusimos en el anterior post, ya tendréis una estructura básica para empezar a trabajar. Seguiremos avanzando.
Y no os olvidéis del .gitignore!
Más al respecto:
- Trabajando con Smart Contracts en Ethereum – Parte I – Intro – Entornos de Implementación
- Trabajando con Smart Contracts en Ethereum – Parte II – Crear el entorno de trabajo local
- Trabajando con Smart Contracts en Ethereum – Parte III – Crear un Smart Contract, hacer tests y migrarlo a una red local
- Trabajando con Smart Contracts en Ethereum – Parte IV – Cómo integrar un Smart Contract con Node.js
- Si queréis estar informados y preguntar sobre desarrollo en blockchain, podéis visitar el canal de Telegram https://t.me/blockchainDevs
Foto cortesía de La Huella artworks.
© Todos los derechos reservados.