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
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