Este projeto demonstra a integração entre um Smart Contract desenvolvido em Solidity e uma API em Flask, que interage com a blockchain para criar e gerenciar tokens de item. A blockchain local é executada com Ganache, e a comunicação é feita utilizando a biblioteca Web3.py no backend e Hardhat no ambiente de desenvolvimento.
O repositório está dividido em duas pastas principais:
SmartContract
: Código em Solidity responsável pelo contrato inteligenteItemToken
.Flask-Python
: API em Flask responsável por interagir com a blockchain e registrar tokens.
- Clone este repositório.
- Navegue até a pasta
SmartContract
. - Instale as dependências do Hardhat:
npm init -y
npm install --save-dev hardhat
- Compile o contrato com Hardhat:
npx hardhat compile
- Navegue até a pasta Flask-Python.
- Crie e ative um ambiente virtual Python:
python3 -m venv venv
source venv/bin/activate
- Instale as dependências do Flask e Web3.py:
pip install -r requirements.txt
- Abra o Ganache e crie uma nova blockchain local.
- Conecte-se à blockchain local utilizando a URL RPC fornecida (ex:
http://127.0.0.1:7545
).
Para implantar o contrato inteligente na blockchain local do Ganache, utilize o Hardhat:
npx hardhat run scripts/deploy.js --network ganache
- Navegue até a pasta Flask-Python.
- Crie um arquivo de configuração (por exemplo, config.py) para conectar à blockchain local utilizando a URL RPC do Ganache.
- Execute a API Flask:
flask run
O servidor estará rodando na porta 5000 por padrão.
Para implantar o contrato inteligente na blockchain local do Ganache, utilize o Hardhat:
npx hardhat run scripts/deploy.js --network ganache
A API Flask oferece um ponto de entrada para cadastrar tokens de itens na blockchain. A comunicação entre a API e a blockchain ocorre através da biblioteca Web3.py, que interage diretamente com o contrato inteligente.
Com isso, é possível registrar tokens personalizados na blockchain, enviando dados como:
- Nome
- Descrição
- Preço inicial
- Proprietário (endereço Ethereum)
Para cadastrar um token de item, faça uma requisição POST para o endpoint /api/items/ com o corpo da requisição contendo as informações do token:
Exemplo de requisição:
curl -X POST http://127.0.0.1:5000/api/items/ -H "Content-Type: application/json" -d "{\"name\":\"LucasHouse\",\"description\":\"Escritura da Casa\",\"initial_price\":400000,\"owner\":\"0x35ae815027a2DA0595ad9Ac782583fDCfb2bB100\"}"
Explicação da Requisição
- name: Nome do item (exemplo: "LucasHouse").
- description: Descrição do item (exemplo: "Escritura da Casa").
- initial_price: Preço inicial do item (exemplo: 400000).
- owner: Endereço do proprietário do item na blockchain (exemplo: "0x35ae815027a2DA0595ad9Ac782583fDCfb2bB100").
Essa requisição faz com que a API Flask interaja com o contrato inteligente e registre o token de item na blockchain.
Sinta-se à vontade para contribuir com melhorias ou correções. Abra um pull request ou issue caso tenha sugestões.