Terceiro tutorial: Programando Ethereum com Java

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.

Comentários

  1. A curva de aprendizado para ser capaz de usar criptomoedas atualmente é muito difícil e assusta para longe a vasta maioria das pessoas.

    Por essa razão, nós do Projeto Divi sabemos que nunca poderemos alcançar a adoção em massa de nossa criptomoeda até a tornarmos uma ordem de magnitude mais fácil e intuitiva.

    Saiba mais em: https://medium.com/diviproject-portuguese/divi-facilidade-de-uso-79fbe1e5883a

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

Introdução ao Empreendedorismo

Economia - Princípio da Utilidade Marginal Decrescente

Redirecionando requisições http para https no tomcat