Curso de Arduino – Gerencie Contratos Inteligentes Com Arduino

Texto de Takahiro Okada, baseado no curso de Arduino publicado em medium.com

Certamente muitos de vocês já conhecem blockchains e bitcoin. A blockchain do Ethereum permite a programação de “contratos inteligentes”, um protocolo que permite que pessoas desconhecidas façam negócios entre si pela internet, sem a necessidade de intermédio de uma autoridade central.

Decerto, muitos também podem achar que esse tipo de blockchain requer computadores de alta performance. Mas isso não é verdade. Simples microcontroladores como o Arduino e o ESP32 por exemplo, podem lidar com blockchains e contratos inteligentes. Aliás, existe uma biblioteca no Arduino capaz de gerenciar contratos inteligentes na rede Ethereum.

Confira o melhor canal do YouTube sobre curso de Arduino

O Arduino é um micro sistema de computador muito barato, podendo ser encontrado por R$30 . O EPS32 é um chip semelhante que inclui sistema Wi-Fi e antena de rádio ( o preço também gira em torno de R$30 ).

curso de arduino

De fato, a biblioteca web3-arduino permite o funcionamento das seguintes funções abaixo:

  • Obter algumas informações sobre o Ethereum como o preço atual do gás ou o número do bloco
  • Chamar uma função e obter o status atual do contrato
  • Enviar uma transação para o contrato e atualizar o status do contrato

Desse modo, se você já desenvolveu contratos inteligentes no Ethereum, você pode agora gerenciá-los a partir do seu microcontrolador. Porém se você não está familiarizado em desenvolver contratos inteligentes, por favor, confira esse tutorial (em inglês).

curso de arduino

Nota: Este sistema não pode fazer

  • Mineração
  • Compilar e emitir contratos inteligentes
  • Um contrato inteligente (você deve instalar o client utilizado para interagir com a rede Ethereum como o geth)

Guia Passo a Passo do Curso de Arduino

Antes de tudo, você deve preparar os itens abaixo para começar:

  • Ambiente de desenvolvimento para o ESP32
  • Um endereço Ethereum
  • Acesso direto ao seu próprio client Ethereum

1º Passo: Implemente Seu Contrato Inteligente na Mainnet ou na Testnet do Ethereum

Como escrito acima, você tem que desenvolver e implantar seu contrato inteligente com o PC. Como exemplo, implantei o contrato abaixo como uma amostra.

pragma solidity ^0.4.18;

contract Sample {
    uint data;

    function set(uint d) public{
        data = d;
    }

    function get() public constant returns (uint retVal) {
        return data;
    }
}

O contrato foi implantado na rede Rinkeby, cujo endereço do contrato é 0x868d93bf82b9047574af4297d4af0fbaa012bbcd

2º Passo: Instalar o web3-arduino no Seu Arduino IDE

O web3-arduino é uma biblioteca do Arduino que permite a interação entre blockchain e contratos inteligentes da rede Ethereum.

Você pode baixar o web3-arduino direto do github.

E você pode instalar a biblioteca seguindo esse tutorial.

3º Passo: Desenvolver o Software ESP32

Em seguida você pode escrever o código fonte do Arduino. O código fonte inteiro está aqui.

Em resumo, você criará uma instância web3. Aqui, eu usei o rinkeby.infura.io como host, mas você pode usar outro serviço de client ou seu próprio servidor.

#define INFURA_HOST "rinkeby.infura.io"
#define INFURA_PATH "/<YOUR_INFURA_ID>"

Web3 web3(INFURA_HOST, INFURA_PATH);

Primeiramente, vamos tentar chamar o Web3ClientVersion () como um teste. Se você conseguir se conectar ao host, você pode obter a versão do cliente Ethereum

web3.Web3ClientVersion(result);
USE_SERIAL.println(result); // Geth/v1.7.3-stable-4bb3c89d/linux-amd64/go1.9

Em seguida, você pode enviar transações para um contrato inteligente, conforme abaixo.

// Generate contract instance. Pass contract address as 2nd parameter.
Contract contract(&web3, CONTRACT_ADDRESS);

// Set your secret to contract.
// This secret will not send to server (of course!) but use in local to sign.
contract.SetPrivateKey((uint8_t*)PRIVATE_KEY);

// set required data to execute sendTransaction
// nonce can be get with web3.EthGetTransactionCount() API
uint32_t nonceVal = (uint32_t)web3.EthGetTransactionCount((char *)MY_ADDRESS);
uint32_t gasPriceVal = 141006540;
uint32_t  gasLimitVal = 3000000;
uint8_t toStr[] = CONTRACT_ADDRESS;
uint8_t valueStr[] = "0x00";
uint8_t dataStr[100];
memset(dataStr, 0, 100);

// Generate binary data to send contract.
// In this case, generate data to send to "set(uint256)" and use "123" as first parameter.
contract.SetupContractData((char*)dataStr, "set(uint256)", 123);

// send transaction
contract.SendTransaction((uint8_t *) result,
                         nonceVal, gasPriceVal, gasLimitVal, toStr, valueStr, dataStr);

Se funcionar bem, a transação será recebida na blockchain e você poderá verificar o resultado no Etherscan.

De acordo com o teste, a transação enviada foi verificada

curso de arduino

Conclusão

Enfim, com a biblioteca, o ESP32 pode controlar contratos inteligentes na rede Ethereum.

Contudo, esta biblioteca ainda está em testes. No entanto, esse sistema logo estará maduro e em breve conseguiremos desfrutar de blockchains e contratos inteligentes com um microcontrolador.

curso de arduino

Este artigo foi originalmente publicado em medium.com

Confira outros projetos nesse Curso de Arduino

Deixe uma resposta