Terceiro Tutorial: Programando Ethereum com Java

Neste terceiro tutorial, vou abordar a criação de carteiras offline, ou seja, não estaremos executando um nó cliente de Ethereum como fizemos com o Parity nos outros tutoriais.

Utilizar um nó local ou dentro da sua infra-estrutura é interessante, mas também pode ser um problema, você deverá se preocupar com a escalabilidade deste servidor, disponibilidade, segurança entre outros aspectos que talvez para uma startup não faça sentido.

Então, neste tutorial vou utilizar o Infura que é um cloud de nós Ethereum e atualmente tem suportando 500 milhões de requisições por dia.

 

No infura você se cadastra e obtém um endereço em cada ambiente para utilizar a rede Ethereum.

Você sabe a diferença entre as redes de teste do Ethereum?

Morden = Lançada em julho de 2015 foi a primeira testnet pública oficial do Ethereum, apresentava problemas de sincronização, e ao ingressar nesta rede o usuário precisava esperar muito tempo, além de que algumas transações não eram totalmente compatíveis entre os clientes do Geth e do Parity. Em novembro de 2016, renasceu e foi rebatizada com o nome de Ropsten.

Ropsten = A rede Ropsten funcionou bem até fevereiro de 2017, como utiliza PoW (Proof of work) algumas pessoas utilizavam FAUCETS (moedas para testnet) para inflar o valor do Gas Limit do valor normal de 4 milhões, chegando à 9 bilhões. Outro ataque foi a criação de transações gigantes, que praticamente paralisava a rede, o que inviabilizou a criação de transações nesta rede de teste.

Kovan = Por conta dos ataques, a equipe do Parity criou de forma emergencial uma rede que não utiliza PoW, ao invés disso utiliza o mecanismo de consenso conhecido como Proof-of-Authority, onde alguns participantes da rede, tem autoridade para validar as transações. Esta rede é compatível apenas com o Parity e os participantes com autoridade para validar transações são empresas que participam do desenvolvimento do Ethereum, neste link, você encontra uma lista destas empresas.

Rinkeby = Esta rede é uma versão da rede Kovan, que utiliza Proof-of-Authority e é compatível com todos os demais clientes Ethereum.

 

Voltando ao Infura, é muito interessante a possibilidade de você não precisar de um nó rodando, o que para ambiente de produção pode ser muito válido, desde que se garanta que não esteja ocorrendo nenhum tipo de centralização.

 

Para este tutorial, criei a classe TestInfura, no projeto que está no GitHub.

Setup do nó:

String URL = “Aqui vai a url que você obteve no infura.io”;
Web3j web3 = Parity.build(new InfuraHttpService(URL));

Obtem a wallet com saldo:

Credentials credentials = WalletUtils.loadCredentials(“a senha de sua wallet existente”,
“o arquivo onde está sua PK no meu caso está em /home/asimas/.local/share/io.parity.ethereum/keys/kovan/UTC–2017-08-02T22-13-37Z–560d903d-14d5-a015-048f-754bfd5b8788”);
String from = credentials.getAddress(); // Pego o endereço da carteira

Cria uma nova wallet:

String fileName = WalletUtils.generateNewWalletFile(
senha, // A senha que você deseja utilizar nesta nova carteira
new File(diretorio), true); // diretório é o local onde será criado o arquivo com a PK desta carteira

Faz o envio de 1 Ether para a nova wallet:

/**
* Transfere um valor de uma conta para outra, utilizando as credenciais.
*/
private static void transferir(Web3j web3, String from, String to, Credentials credentials, BigInteger value) {
try {

BigInteger nonce = getNonce(from, web3);
BigInteger gasPrice = BigInteger.valueOf(20_000_000_000L);
BigInteger gasLimit = BigInteger.valueOf(4_300_000);

RawTransaction rawTransaction = RawTransaction.createEtherTransaction(nonce, gasPrice, gasLimit, to, value);

byte[] signedMessage = TransactionEncoder.signMessage(rawTransaction, credentials);
String hexValue = Numeric.toHexString(signedMessage);

EthSendTransaction ethSendTransaction = web3.ethSendRawTransaction(hexValue).sendAsync().get();
String transactionHash = ethSendTransaction.getTransactionHash();

EthGetTransactionReceipt transacao = web3.ethGetTransactionReceipt(transactionHash).sendAsync().get();
System.out.println(transacao.getId());
System.out.println(transacao.getJsonrpc());
System.out.println(transactionHash);

} catch (Exception e) {
e.printStackTrace();
//Faz o tratamento de erro
}
}

A parte mais interessante deste tutorial é a criação de uma wallet offline, onde a PK desta wallet fica armazenada no diretório de sua escolha.

Guarde com muito cuidado este arquivo pois sem ele você não consegue abrir a wallet e caso haja saldo nesta wallet, você não conseguirá movimentá-lo.

Espero que tenham gostado, baixem o código completo do Github.

Dúvidas, sugestões entrem em contato, até a próxima.

0 Comentários

Envie uma Resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

*

Fazer login com suas credenciais

Esqueceu sua senha?

Pular para a barra de ferramentas