Segundo Tutorial: Java e Ethereum - Smart Contracts
Agora que já vimos uma operação simples de envio e recebimento de valores entre contas / wallets no Ethereum, vamos entrar no mundo dos contratos inteligentes.
Um contrato inteligente é um software cujo deploy é feito na rede Ethereum, ou seja, é distribuido ao redor de todos os nós da rede.
Para este exemplo vamos utilizar a linguagem Solidity para criação do contrato, você também pode utilizar a linguagem Serpent.
Vamos criar um contrato bem simples, que já está no repositório do GitHub:
https://github.com/alexjavabraz/javaParity
Inicializar o Parity:
parity --chain testnet --rpcapi "eth,net,web3,personal,parity"
O Smart Contract de exemplo está dentro do projeto Maven.
src/main/resources/ContratoAlex.sol
1-Instalando o solc no Linux Ubuntu:
O Solc é o solidity comand line compiler, é com ele que iremos compilar nossos smart contracts, gerando então os arquivos .abi e .bin.
O arquivo .abi (application binary interface specification) é a especificação do Smart Contract, por meio desta especificação é que outros contratos saberão quais métodos estão disponíveis. É um arquivo no formato JSON.
O arquivo .bin é o contrato compilado contento hex-encoded binarizado.
sudo add-apt-repository ppa:ethereum/ethereum sudo apt-get updatesudo apt-get install solc
Neste link você pode baixar a versão para windows:
2-Baixando o projeto web3J:
Vamos baixar o zip web3J :
No momento o último release é o v2.2.2
Descompacte o arquivo ZIP:
Dentro do diretório DIRETORIO_WEB3J\bin você encontrará o executável web3j (linux), ou o arquivo em lotes (web3j.bat para windows).
Sendo DIRETORIO_WEB3J o local onde você descompactou o arquivo do web3j.
3-Compilando o contrato .SOL:
solc ./CAMINHO/ContratoAlex.sol --bin --abi --overwrite --optimize -o /CAMINHO_RESOURCES/
Onde /CAMINHO_RESOURCES é o caminho dentro do seu projeto Maven onde ficam os resources dentro do projeto, exemplo:
c:\projetos\ethereum\parity\projetoJava\src\main\resources\ - No Windows
/home/alexjavabraz/projetos/javaParity/src/main/resources/ - No Linux
Este comando irá criar os arquivos:
ContratoAlex.abi - Um arquivo JSON com as
ContratoAlex.bin - O arquivo binário do seu contrato

4-Gerando o objeto Java:
Muito bem, agora que você já tem o Smart Contract (arquivo .sol) e á partir dele já criou os arquivos bin e abi no passo 3, agora você precisa gerar os wrappers Java, para poder interagir com seu contrato, dentro do código Java.
Para isso, vá até o local onde baixou o web3j no passo 2.
./DIRETORIO_WEB3J/bin/web3j solidity generate /CAMINHO_RESOURCES/ContratoAlex.bin /CAMINHO_RESOURCES/ContratoAlex.abi -o /src/main/java -p nome_do_seu_pacote
5- Fazendo deploy do contrato no Parity:
Você pode fazer deploy do seu contrato dentro do Parity, na opção Develop => New.
O parity gera a interface ABI, e o binário, e também avisa se o seu código contém algo de errado, veja a mensagem no campo COMPILER MESSAGES.
Mas você pode fazer o teste chamando o meu contrato, ou o de algum amigo, já que você está num ambiente decentralizado para o teste é bem mais interessante chamar outro contrato.
Depois do deploy o contrato recebe um endereço:
0x1E386bF4Ed55ca0e4FA1F551f92b2ef8369Af774
6- Interagindo com o contrato dentro do código Java:
Agora você tem o endereço do contrato na rede Ethereum.Vamos utilizar este endereço para interagir com o Smart Contract.
0x1E386bF4Ed55ca0e4FA1F551f92b2ef8369Af774
Explicando um pouco sobre este método:
O objeto accountFile é o arquivo onde se encontram as informações referentes á sua conta, deixei a minha como um exemplo de onde você obtém este arquivo no Linux, na rede de teste, o Parity irá criar um arquivo para cada ambiente.
O objeto accountFile é o arquivo onde se encontram as informações referentes á sua conta, deixei a minha como um exemplo de onde você obtém este arquivo no Linux, na rede de teste, o Parity irá criar um arquivo para cada ambiente.
7 - Alterando o programa:
static final String WALLET_ORIGEN = a sua carteira
static final String WALLET_PASSWORD = a senha da sua carteira
8 - Consultando o novo valor da variável lastMessage:
Dentro do Parity, clique em Contractss => Watch
Selecione a opção Custom Contract
Você precisará preencher os campos, network address, com o endereço do contrato:
0x1E386bF4Ed55ca0e4FA1F551f92b2ef8369Af774
Contract Name: Com algum nome para o contrato
Contract Description: Com alguma descrição para o contrato
Contract ABI, com o ABI do contrato deployado, que está aqui.
9 - Obtendo Ethers para teste:
http://faucet.ropsten.be:3001
https://github.com/kovan-testnet/faucet
https://kovan.etherscan.io/
10 - Referências:
http://solidity.readthedocs.io/en/develop/installing-solidity.html
https://ethereumbuilders.gitbooks.io/guide/content/en/solidity_tutorials.html
https://web3j.readthedocs.io/en/latest/smart_contracts.html
https://github.com/web3j/web3j#java-smart-contract-wrappers
https://github.com/web3j/web3j
https://solidity.readthedocs.io/en/develop/units-and-global-variables.html
https://github.com/kovan-testnet/faucet
https://web3j.io/
https://docs.web3j.io/command_line.html
https://github.com/web3j/web3j/releases/tag/v2.2.2
Comentários
Postar um comentário