Skip to main content

Integração Blockchain

Guia completo para integração com a infraestrutura blockchain do Ekonavi, incluindo contratos inteligentes, tokens ERC1155, e integração multi-chain.

Visão Geral

Arquitetura Blockchain

┌─────────────────────────────────────────────────────────────────┐
│ Blockchain Architecture │
├─────────────────────────────────────────────────────────────────┤
│ Application Layer (Frontend + API) │
│ ├── ekonavi.com ├── admin.ekonavi.com │
│ ├── Web3 Wallet Integration (MetaMask, WalletConnect) │
│ └── ABCI Routes (/abci/contracts/*) │
├─────────────────────────────────────────────────────────────────┤
│ Smart Contract Layer │
│ ├── EkosisTokens.sol (ERC1155 Main Contract) │
│ ├── EkosisTokenManager.sol (Workflow Helper) │
│ ├── Upgradeable Proxy (UUPS Pattern) │
│ └── Access Control (Role-based permissions) │
├─────────────────────────────────────────────────────────────────┤
│ Blockchain Networks │
│ ├── Ethereum Mainnet (Production) │
│ ├── Polygon (Low-cost operations) │
│ ├── Ethereum Sepolia (Testing) │
│ └── Hardhat Local Network (Development) │
└─────────────────────────────────────────────────────────────────┘

Token Economics

Token Ranges e Tipos

// Role Tokens (Soulbound) - Range: 10000-19999
uint256 public constant PRODUCER_ROLE_TOKEN = 10000;
uint256 public constant VERIFIER_ROLE_TOKEN = 10100;
uint256 public constant VALUATOR_ROLE_TOKEN = 10200;
uint256 public constant CERTIFIER_ROLE_TOKEN = 10300;
uint256 public constant ADMIN_ROLE_TOKEN = 10400;

// Entity Tokens (Transferable) - Range: 1000-9999
uint256 public constant REPORT_TOKEN = 1000;
uint256 public constant VERIFICATION_TOKEN = 1100;
uint256 public constant VALUATION_TOKEN = 1200;
uint256 public constant CERTIFICATE_TOKEN = 1300;
uint256 public constant PROJECT_TOKEN = 1400;

// System Tokens - Range: 20000+
uint256 public constant CARBON_CREDIT_TOKEN = 20000;
uint256 public constant METHODOLOGY_TOKEN = 20100;

Token Metadata Structure

interface TokenMetadata {
tokenId: number;
tokenType: 'role' | 'entity' | 'system';
name: string;
description: string;
image: string;
attributes: Array<{
trait_type: string;
value: string | number;
}>;
external_url?: string;
}

Contratos Inteligentes

EkosisTokens.sol - Contrato Principal

Contrato ERC1155 upgradável com suporte a tokens soulbound (não-transferíveis) para papéis e tokens transferíveis para entidades ESG.

Funcionalidades:

  • mintRoleToken() - Minta tokens de papel (soulbound)
  • mintEntityToken() - Minta tokens de entidade (transferíveis)
  • Prevenção de transferência de tokens soulbound
  • Controle de acesso baseado em papéis (MINTER_ROLE, UPGRADER_ROLE)
  • Padrão de proxy UUPS para upgrades

EkosisTokenManager.sol - Helper de Workflows

Automação de workflows ESG:

  • createProject() - Cria projeto e minta token
  • submitReport() - Submete relatório e minta token
  • completeVerification() - Completa verificação e minta token
  • issueCertificate() - Emite certificado e minta token

ABCI Routes - Abstração Blockchain

As rotas ABCI (Application Blockchain Interface) fornecem abstração blockchain para que a API possa interagir com qualquer rede sem conhecer detalhes específicos.

Endpoints ABCI

EndpointMétodoDescrição
/abci/contracts/mint-role-tokenPOSTMintar token de papel na carteira do usuário
/abci/contracts/mint-entity-tokenPOSTMintar token de entidade
/abci/contracts/transfer-tokenPOSTTransferir token entre carteiras
/abci/contracts/revoke-tokenPOSTRevogar token
/abci/blockchains/listGETListar redes blockchain suportadas
/abci/contracts/token-balanceGETConsultar saldo de tokens
/abci/tokens/user-balanceGETRecuperar todos os tokens de um usuário

Integração com Carteiras Web3

MetaMask Integration

A plataforma suporta conexão com MetaMask para:

  • Autenticação via assinatura de mensagem
  • Visualização de tokens na carteira
  • Troca de rede blockchain

WalletConnect Integration

Suporte a WalletConnect para carteiras móveis e desktop.

Wallet Authentication Flow

sequenceDiagram
participant U as User
participant W as Wallet (MetaMask)
participant F as Frontend
participant API as API
participant BC as Blockchain

U->>F: Click "Connect Wallet"
F->>W: Request wallet connection
W->>U: Prompt for approval
U->>W: Approve connection
W->>F: Return account address

F->>API: Request authentication challenge
API->>F: Return nonce + challenge message
F->>W: Request message signature
W->>U: Prompt to sign message
U->>W: Sign message
W->>F: Return signature

F->>API: Submit address + signature
API->>API: Verify signature
API->>BC: Check role tokens
BC->>API: Return token balances
API->>F: Return JWT + user roles
F->>U: Authenticated session

Multi-Chain Support

Redes Suportadas

RedeChain IDUsoBlock Explorer
Ethereum Mainnet1Produçãoetherscan.io
Polygon137Operações low-costpolygonscan.com
Ethereum Sepolia11155111Testessepolia.etherscan.io
Hardhat31337Desenvolvimento local

Segurança ABCI

Middleware de Segurança

  • Todas as rotas ABCI requerem autenticação JWT
  • Permissões elevadas (admin ou sistema) necessárias
  • Logging de todas as operações para auditoria de segurança

Rate Limiting

  • 10 requests por minuto para operações ABCI
  • Rate limiting por usuário ou IP

Validação de Transações

Pre-flight checks antes de cada operação de minting:

  1. Validar formato do endereço Ethereum
  2. Verificar associação do usuário com o endereço
  3. Validar se a blockchain é suportada e ativa
  4. Verificar duplicidade de tokens de papel
  5. Verificar status do contrato

Workflows de Integração

Fluxo de Aprovação de Papel

sequenceDiagram
participant A as Admin
participant API as API
participant ABCI as ABCI Layer
participant BC as Blockchain

A->>API: PUT /v1/admin/role-requests/{id}/approve
API->>API: Update role request status
API->>ABCI: POST /abci/contracts/mint-role-token
ABCI->>BC: Call mintRoleToken()
BC->>BC: Mint token to user wallet
BC->>ABCI: Return transaction receipt
ABCI->>API: Return transaction details
API->>API: Update user roles in database
API->>A: Return success response

Fluxo de Certificação ESG

sequenceDiagram
participant C as Certifier
participant API as API
participant ABCI as ABCI Layer
participant IPFS as IPFS
participant BC as Blockchain

C->>API: POST /v1/certifiers/certificates
API->>IPFS: Store certificate metadata
IPFS->>API: Return IPFS hash
API->>ABCI: POST /abci/contracts/mint-entity-token
ABCI->>BC: Call mintEntityToken()
BC->>BC: Mint certificate NFT
BC->>ABCI: Return transaction receipt
ABCI->>API: Return token details
API->>API: Update database with token info
API->>C: Return certificate with NFT details