Este guia mostra deploy na BrightCity Chain Testnet com Hardhat, usando o contrato de exemplo HelloWorld (não é ERC-20). A rede está no fork Berlin. Compile com evmVersion: "berlin" para evitar opcodes de forks posteriores (por exemplo PUSH0 do Shanghai), que causam Invalid opcode: 0x5f na execução.

Pré-requisitos

  • Node.js 20+
  • Carteira deployer com saldo nativo ETH na testnet
  • RPC: https://rpc-develop.pgubright.com
  • Chain ID: 20260520
Use uma chave de deployer dedicada. Nunca use chave de validador QBFT como deployer.

Contrato de exemplo

Salve em contracts/HelloWorld.sol.

Configuração do projeto

1

Instalar dependências

2

Variáveis de ambiente

Crie .env a partir do exemplo abaixo. Não commite .env com chave real.
3

hardhat.config.ts

Defina rede, chain ID, evmVersion: "berlin" e conta deployer.

Script de deploy

Crie scripts/deploy-hello-world.ts:
Execute:

Validar o deploy

1

Explorer

Abra o endereço do contrato em explorer-develop.pgubright.com e confira bytecode e transações de criação.
2

eth_getCode

Resposta diferente de 0x indica código implantado.
3

Chamada read-only

Erros comuns

Próximos passos

Deploy book-only (Energy Market)

Após merge de blockchain-contracts #8, redeploy de EnergyMarket e EnergySettlement na Besu develop:
O script actualiza deployments/besu.json com os novos endereços.

Actualizar infra (obrigatório)

  1. Editar blockchain-infra-common/k8s/charts/blockchain/backend/values/values-develop.yaml:
    • ENERGY_MARKET_ADDRESS
    • ENERGY_SETTLEMENT_ADDRESS
  2. Commit + push na infra-common
  3. Sync ArgoCD do stack blockchain develop
  4. Confirmar transactions-service e indexer-service com os novos endereços

Contratos de ativos

Contratos implantados na BrightCity Chain

Consultar no explorer

Blocos, transações e contratos

Diferenças vs Ethereum

Fork Berlin e limitações EVM

Boas práticas

RPC, indexação e chaves