Página 1 de 1

Tutorial Blockchain - Go Ethereum (geth)

Enviado: 23 Set 2016 19:26
por kazuuu
Pessoal,

Estou escrevendo um roteirinho de como configurar o Go Ethereum e levantar um Private Blockchain ou Blockchain Privado com o Ethereum.

Eu fiz no meu Macbook Pro / OSX

**** Initial Setup ****
    Instalar o NVM (Node JS Version Manager)
    Verificar antes se existe o arquivo ~/.bash_profile pois ele precisa configurar a shell
    Usar o script para instalar https://github.com/creationix/nvm#install-script
    Instalar a versão desejada do nvm (normalmente o stable).
    $ nvm install v4.5.0
    Definir a versão default:
    $ nvm alias default v4.5.0
    Conferir a instalação do node.js
    $ node -v
    $ npm -v
    Com o nvm, nunca usar o "$ sudo npm”, usar -g para instalar global em todos os usuarios.
    $ npm install -g
    Instalar o Brew http://brew.sh/ instalador de pacotes.
    Agora você pode instalar o go Ethereum.
    $ brew tap ethereum/ethereum
    $ brew install ethereum
    Conferir a instalação do Go Ethereum
    $ geth version
***** Fim Initial Setup *****

Para rodar o ethereum em modo developer (pre-configured private network with several debugging flags):
$ geth —dev
Para listar as opções:
$ geth help
Definir uma genesis (existente ou não) para a blockchain.
Criar o arquivo genesis.json com o seguinte conteúdo onde o nonce define o id da blockchain que todos os miner precisam usar:
    {
    "nonce": "0xinnova7COMm", "timestamp": "0x0",
    "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "extraData": "0x0", "gasLimit": "0x8000000", "difficulty": "0x400",
    "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "coinbase": "0x3333333333333333333333333333333333333333", "alloc": { }
    }

Inicializar o blockchain dessa genesis através do comando:
$ geth init genesis.json
Rodar o serviço do blockchain
$ geth
Caso queira utilizar diretórios de dados diferente do padrão para não sobrepor o blockchain original use:
$ geth --datadir ~/diretorio/ init genesis.json
$ geth --datadir ~/diretorio/
Agora anote o IPC e o endereço Enode que aparecerá na tela do ethereum
ipc:///Users/kazuuu/ethereum/geth.ipc
node://0b3defd6415df26ac965033c7abd3dc7 ... 34eb39ad5@[::]:30303
Precisa trocar a string: [::] pelo ip da máquina, ficaria algo assim:
node://0b3defd6415df26ac965033c7abd3dc7 ... .182:30303
Conecte em outra shell no IPC do Ethereum utilizando o Attach
$ geth attach ipc:///Users/kazuuu/ethereum/geth.ipc
Agora você está no console do seu nó de ethereum.
Se houver um outro nó adicione pelo menos 1 nó através do enode do outro nó.
> admin.addPeer(‘enode://xxxxxxx@111.111.111.111:3030')
agora se você pode verificar os nós em que seu nó você está conectado
> admin.peers
Ou para verificar em quantos nós você está conectado
> net.peerCount
É necessário criar uma conta.
> persoal.newAccount()
Pronto, agora você tem uma Wallet, para ver seu endereço:
> eth.coinbase
Minere um pouco para gerar umas moedas em sua carteira:
> miner.start()
espere um tempo e já pode parar
> miner.stop()
Para verificar quantas moedas em wei você tem na sua carteira, utilize este comando
> eth.getBalance(eth.coinbase)
Mas se você quiser ver em eth utilize esta função do web3
> web3.fromWei(eth.getBalance(eth.coinbase), "ether")
Para qualquer transação é necessário destravar sua carteira antes
> personal.unlockAccount(eth.coinbase)
Transferir ou executar uma transação de moedas.
> eth.sendTransaction({from: eth.coinbase, to: '0xd241cf8bd8cc2d5d987cbf8cc0853885c7dafe76', value: web3.toWei(1, "ether")})
Algumas funções úteis:
Para ver o total de blocos:
> eth.blockNumber
Para ver o número do bloco
> eth.getBlock(##)
**** Dev Setup ****
    brew update
    brew upgrade
    brew tap ethereum/ethereum
    brew install solidity
    brew linkapps solidity
**** Fim Dev Setup ****