Page 28 - Revista_60.pub
P. 28

A PROGRAMAR







                                                                                                BLOCKCHAIN

           encontra-se  em  ~/.ethereum_private/keystore,  se  não  souber   deployer.deploy(UserCar);
         qual é o ficheiro, basta abrir e verificar o address), por fim colo-  };
         car  a  senha  e  importar  (provavelmente  terá  um  problema
         aquando de importar o ficheiro json, a solução está no readme   e  de  seguida  executar  dois  comandos  (na  raiz  do  projeto)
         em github.com/MetaMask/faq).                           para fazer deploy do contrato na rede.


                                                                $ truffle compile
         Desenvolvimento                                        $ truffle migrate --network development
              Agora passando para algo um pouco mais a sério. Va-  Após isto, na consola deve aparecer algo como:
         mos de seguida usar o ganache e o truffle. Neste momento se
         ainda tem o geth a executar, termine e então inicie o ganache.   Using network 'development'.
         Esta ferramenta inicia um serviço já com várias contas e saldo   Running migration: 1_initial_migration.js
                                                                Deploying Migrations...
         em todas elas. Para além disso, tem uma interface, facilitando   ... 0xe34d750671aa4beb7f7da9dcf8baa932486cef33
         bastante  o  manuseamento  e  é  possível  ainda  ver  os  blocos                           14bc418b9c710d3eaf676c6f
         que vão sendo gerados, assim como transações e logs.
                                                                no ganache, em transações deve ser vista a transação que
              Antes de mais, nas definições, troca-se o porto de 7545   gerou o contrato. Caso isso não se verifique, tente utilizar o
         para 8545, para utilizar o porto padrão e utiliza-se a opção res-  comando:
         tart.
                                                                truffle migrate --reset
              Com isto tudo já temos uma rede blockchain privada a
         executar e agora pode-se executar ações sobre a mesma. Va-     Neste momento, os contractos estão na blockchain e
         mos  então  fazer  deploy  do  primeiro  contrato.  Para  simplificar   podem ser consultados. Para os consultar, vamos criar uma
         esta passo, vamos recorrer ao truffle. Com o comando truffle   webapp utilizando a framework nodejs juntamente com algu-
         init, geram-se os ficheiros base.                      mas packages.
              Sem  mexer  em  nada,  vamos  apenas  alterar  o  ficheiro   Cria-se uma nova pasta, executa-se o comando:
         truffle.js com o seguinte:
                                                                $ npm init
         module.exports = {                                     e  inicia-se  um  ficheiro  packages.json.  Nas  dependências
             networks: {                                        deve estar:
                 development: {
                     host: "127.0.0.1",
                     port: 8545,                                "dependencies": {
                     network_id: "*"                            "body-parser": "1.18.2",
                 }                                              "express": "4.16.3",
             }                                                  "net": "1.0.2",
         };                                                     "pug": "2.0.3",
                                                                "web3": "1.0.0-beta.34"
                                                                }
         e adicionar também dois novos ficheiros para criar dois smart
         contracts, sendo um deles:
                                                                      Note-se  que  é  necessário  instalar  as  dependências
                                                                através de $ npm install no diretório em que se encontra o
         pragma solidity ^ 0.4.17;
         contract UserCar {                                     ficheiro packages.json. Para além disso será necessário um
             struct LibraryCars {                               ficheiro javascript com o código, um pug para a interface web
                 string[] car;                                  e ainda um json com o abi do contracto. O ficheiro javascript
             }                                                  será como o seguinte:
             mapping(address => LibraryCars) private cars;
             constructor() public {
             }                                                  const bodyParser = require('body-parser')
             function addUserCar(string carName) public {       var path = require('path');
                 cars[msg.sender].car.push(carName);            var fs = require('fs');
             }                                                  const express = require('express')
             function getUserCar(address userAddress, uint      const app = express()
                           index) public view returns(string    app.set('view engine', 'pug')
                                                  carName) {    app.set('views', path.join(__dirname, './
                 return (cars[userAddress].car[index]);         views'));
             }                                                  var Web3 = require('web3');
         }                                                      app.use(bodyParser.json())
                                                                app.use(bodyParser.urlencoded({ extended:
         Colocando-o num ficheiro com o nome MetaCoin.sol, dentro da                                           true }))
         pasta  contracts.  E  dentro  da  pasta  migrations,  colocar  um  fi-  if (typeof web3 !== 'undefined') {
         cheiro com o nome 2_initial_migration.js com o seguinte conte-  web3 = new Web3(web3.currentProvider);
         údo:                                                   } else {
                                                                web3 = new Web3(new Web3.providers.HttpProvider
                                                                                     ("http://localhost:8545"));
         var UserCar = artifacts.require("./UserCar.sol");      }
         module.exports = function(deployer) {



                                                           28
   23   24   25   26   27   28   29   30   31   32   33