Page 27 - Revista_60.pub
P. 27
A PROGRAMAR
Blockchain
Muitos dizem que vai mudar o mundo, outros acreditam Um exemplo do ficheiro genesis.json seria:
que pode vir a ser um problema. A verdade é que está a revo-
lucionar a forma como se fazem e pensam algumas coisas, {
mas é um tecnologia tão recente que ainda faz com que haja "config": {
pouca informação. Blockchain é um conceito, um conceito defi- "chainId": 15,
nido como "base de dados descentralizada". A primeira imple- "homesteadBlock": 0,
"eip155Block": 0,
mentação deste conceito foi o bitcoin e desde então muita coi- "eip158Block": 0
sa aconteceu. },
"nonce": "0x0000000000000042",
Mas sobre isso não me vou alongar muito porque a in- "timestamp": "0x0",
ternet está repleta destas definições. Onde me pretendo alon- "parentHash":
"0x000000000000000000000000000000000000000000000
gar um pouco mais é mostrando ao leitor como pode fazer para 0000000000000000000",
criar/desenvolver algo. "gasLimit": "0xffffffff",
"difficulty": "0x400",
Existem muitas implementações do conceito de "mixhash":
blockchain, mas o que vai ser usado aqui é a ethereum, que foi "0x000000000000000000000000000000000000000000000
a primeira a trazer smart contracts. De forma muito breve, os 0000000000000000000",
"coinbase":
smart contracts permitem desenvolver ações dentro da "0x3333333333333333333333333333333333333333",
blockchain. "alloc": { }
}
Para que o leitor entenda melhor porque é que estas
"ações dentro da blockchain" são tão importantes, passo a Cada um destes parâmetros tem um significado, o
explicar. Sem os smart contracts as unicas ações realizadas qual devem procurar na internet.
numa blockchain eram transações, ou seja, funcionava apenas
como banco descentralizado. Os smart contracts permitem Posto isto, deve iniciar-se o nó, como o comando:
programar, dando a possibilidade de se fazer qualquer coisa.
$ geth --identity "MyTestNetNode" --nodiscover
Para não alongar muito, não irei entrar em muitos deta- --networkid 15 --maxpeers 0 --datadir
lhes, mas numa blockchain (base de dados descentralizada) ~/.ethereum_private init genesis.json
todos os dados são partilhados por todos os nós que estiverem
ligados entre si e todos terão os mesmo dados. Este comando apenas gera os dados necessários
Posto isto, vamos começar com o exemplo. Note-se que para posteriormente poder correr o nó. De seguida, adiciona-
apesar de ser uma tecnologia muito recente, já existem formas se uma nova conta:
diferentes de para fazer as mesmas ações, logo, o que vou $ geth account new --datadir ~/.ethereum_private/
apresentar aqui não é a única ferramenta existente, mas na
minha opinião a melhor. apenas colocando a senha. No final da execução será apre-
sentado um código hash do género 0x9c39fve54w(...). Esse
Antes de começar aqui apresento o que é necessário código deve ser utilizado para executar o seguinte comando:
instalar: nodejs, geth, ethereum wallet, metamask (chrome ou
firefox), ganache (com interface), truffle. $ geth --mine --etherbase "0x9c39fve54w(...)"
-rpccorsdomain "*" --ipcpath
~/.ethereum/geth.ipc --rpc --networkid 15
--datadir ~/.ethereum_private -maxpeers 5 --
Básico minerthreads 1
Antes de iniciar o desenvolvimento, o leitor deve enten- que irá iniciar o nó e começar a minar, dando assim ETH (da
der um pouco do funcionamento do mesmo. Para tal, e como rede privada) ao utilizador.
primeiro exemplo, o leitor deve correr um nó da ethereum, inici- Neste momento o leitor poderá abrir a ethereum wal-
ando uma rede privada, e assim podendo executar ações na let onde verá a conta principal, a ganhar ETH. É possível
mesma. criar outras contas, fazer deploy de contractos e interagir
Para tal, em primeiro lugar deve existir um ficheiro ge- com eles (se é iniciante, recomendo que o faça).
nesis.json. Sendo a blockchain um conjunto de blocos onde Para terminar esta parte vamos só importar a conta
cada bloco contém referência ao bloco anterior, é necessário que está na rede privada para o metamask (no browser) para
que para gerar o primeiro bloco exista um anterior, e por isso mais tarde poder ser utilizada numa aplicação web.
mesmo existe o genesis block, que é o primeiro e a referência
para o bloco anterior é 0. Para importar, basta ir ao icon do metamask, selecio-
nar "importar conta", no tipo selecione "json file", escolher o
ficheiro correspondente á conta desejada (esse ficheiro json
27