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