Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
393bb31
chore: sanitize code and docs (remove emojis)
DGuedz Feb 11, 2026
ababf84
chore: remove remaining emojis from docs and src
DGuedz Feb 11, 2026
4c6e359
feat: update platform design with premium team page and modern UI
DGuedz Feb 11, 2026
20eeed5
feat: backend api setup with hono and eas integration
DGuedz Feb 13, 2026
ea23f51
chore: add temporary test files for backend verification
DGuedz Feb 13, 2026
e4833b5
feat(security): implement pausable contracts, AWS KMS support and CI …
DGuedz Feb 13, 2026
e2ca543
chore(release): harden deploy and publish institutional whitepaper up…
DGuedz Feb 27, 2026
7f93d59
feat: enable juror-focused evaluation mode for institutional site
DGuedz Feb 27, 2026
3e2c6eb
docs: refine 2026 Centelha roadmap narrative in project presentation
DGuedz Feb 27, 2026
4bf94e4
docs: align presentation and whitepaper rationale, roadmap, and KPI f…
DGuedz Feb 27, 2026
936f89d
feat: harden KMS/Web3 ops and add certification system-status controls
DGuedz Feb 27, 2026
4db68a9
docs: add web3 security plan and institutional sepolia deploy checklist
DGuedz Feb 27, 2026
94ecc3a
chore(eval-mode): enforce public route allowlist
DGuedz Feb 27, 2026
5343117
security: harden public repo with secret scan gates
DGuedz Feb 27, 2026
62664ba
security: sanitize public repo and add history audit tooling
DGuedz Feb 27, 2026
d8f2585
security: add public PII audit and centelha go-no-go gate
DGuedz Feb 27, 2026
4058d04
docs(security): add branch protection automation and blocker note
DGuedz Feb 27, 2026
249047d
docs(readme): align public narrative with whitepaper and centelha eva…
DGuedz Feb 27, 2026
beda023
docs: reorganize README for juror-first evaluation and add licensing …
DGuedz Feb 28, 2026
94270a4
docs: split README into intro + detailed guide (#1)
DGuedz Feb 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Binary file added .DS_Store
Binary file not shown.
35 changes: 35 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@

# --- FRONTEND CONFIG ---
VITE_USE_MOCK=true
VITE_API_URL="http://localhost:3001/api/v1"

# --- BACKEND CONFIG ---
PORT=3001
NODE_ENV=development

# --- BLOCKCHAIN & CONTRACTS ---
RPC_URL="https://sepolia.infura.io/v3/YOUR_INFURA_KEY" # Standard RPC variable
SEPOLIA_RPC_URL="https://sepolia.infura.io/v3/YOUR_INFURA_KEY" # Fallback/Specific variable
GEMLAB_NFT_ADDRESS="0x..."
GEMLAB_RESOLVER_ADDRESS="0x..."
EAS_CONTRACT_ADDRESS="0xC2679fBD37d54388Ce493F1DB75320D236e1815e" # Sepolia EAS
SCHEMA_REGISTRY_ADDRESS="0x0a7E2Ff54e76B8E6659aedc9103FB21c038050D0" # Sepolia Registry

# --- KMS CONFIGURATION ---
# Options: 'local' (Development) | 'aws' (Production)
KMS_PROVIDER="local"

# [LOCAL]
# Private Key for local development (sender/signer)
GEMLAB_PRIVATE_KEY="0x..."

# [AWS KMS] - Required if KMS_PROVIDER='aws'
# Ensure the Key Spec is 'ECC_SECG_P256K1' (Sign and Verify)
AWS_REGION="us-east-1"
AWS_KMS_KEY_ID="alias/gemlab-signer-key"
AWS_ACCESS_KEY_ID=""
AWS_SECRET_ACCESS_KEY=""

# --- SECURITY ---
# Pausable Roles
ADMIN_ADDRESS="0x..."
32 changes: 32 additions & 0 deletions .github/workflows/contracts-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: Contracts CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm install --legacy-peer-deps
- run: npm run test:contracts

security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Slither
uses: crytic/slither-action@v0.4.0
continue-on-error: true
with:
node-version: 20
sarif: results.sarif

- name: Upload SARIF file
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarif
25 changes: 25 additions & 0 deletions .github/workflows/secret-scan.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: Secret Scan

on:
push:
branches:
- main
- release/**
pull_request:
branches:
- main
- release/**

jobs:
gitleaks:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Run Gitleaks
uses: gitleaks/gitleaks-action@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
18 changes: 18 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
.env
.env.local
.env.generated
.env.*.local
node_modules/
build/
coverage/
cache/
artifacts/
.vercel/
vercel-debug.log
.DS_Store
*.pem
*.key
gcp-oauth.keys.json
.gdrive-server-credentials.json
.vercel
security/reports/
20 changes: 20 additions & 0 deletions .gitleaks.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
title = "GEMLAB gitleaks config"

[allowlist]
description = "Allow placeholders and mock values in docs/tests"
paths = [
'''^\.env\.example$''',
'''^docs/DEPLOY_SEPOLIA_CHECKLIST.*\.md$''',
'''^src/ORACLE_FISCAL_DOCUMENTATION\.md$''',
'''^src/supabase/functions/server/user-data\.tsx$''',
'''^test-kms-capabilities\.ts$''',
'''^test-offchain-flow\.ts$'''
]
regexes = [
'''0x\.\.\.''',
'''<YOUR_[A-Z0-9_]+>''',
'''YOUR_[A-Z0-9_]+''',
'''SUA_[A-Z0-9_]+''',
'''mock-secret-key''',
'''mock-access-key'''
]
3 changes: 3 additions & 0 deletions .npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@

@jsr:registry=https://npm.jsr.io

Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
## Objetivos
- Implementar contratos GEMLAB (ERC-1155/721, Resolver, Validator, FiscalOracle, Metadata)
- Registrar e operar Schemas EAS (Origem, Ciência, Custódia) com RBAC
- Backend de emissão/consulta de atestados e integração com UI
- Garantir verificação on-chain e mintagem condicional do NFT

## Escopo e Coordenadas
- Diretórios: `contracts/`, `scripts/`, `test/`, `backend/`
- Rede alvo inicial: Sepolia (EAS: `0xC2679fBD...e1815e`)
- Frontend: substituir mocks por hooks/serviços que consultam EAS e contratos

## Fase 1 — Contratos Solidity
- GemlabBatch (ERC-1155): `mint/split/merge`
- GemlabNFT (ERC-721): `mintWithProof`, armazenamento `originUID/scienceUID/custodyUID`
- GemlabMetadata: `tokenURI` dinâmico com UIDs EAS
- GemlabResolver: resolver EAS + RBAC por `schemaUID`
- TokenValidator: `requireValidAttestations`, `getStatus`, leitura de UIDs por `tokenId`
- FiscalOracle: `onTrade` (CFEM/ISS, Fundo 2050)
- Entregáveis: 6 contratos + 15 testes (Hardhat) + `hardhat.config.ts`

## Fase 2 — Registro EAS + RBAC
- Script `scripts/deploy_schemas.ts`: registrar 3 schemas no `SchemaRegistry`
- Script `scripts/configure_rbac.ts`: apontar `GemlabResolver` e roles (Prefeitura, GEMLAB Tech, Vault)
- Entregáveis: 3 `schemaUIDs` válidos, RBAC ativo, logs de UIDs

## Fase 3 — Backend de Atestações
- Serviço `backend/services/attestation/*` (Origin/Science/Custody)
- Uso de `@ethereum-attestation-service/eas-sdk` + `SchemaEncoder`
- Rotas REST: `POST /api/attest/origin`, `POST /api/attest/science`, `POST /api/attest/custody`
- Integração com carteiras institucionais (signers) e validação de dados (CNPJ/NFe)
- Entregáveis: API funcional + UID real retornado + auditoria de transações

## Fase 4 — Integração Frontend
- Hook `useEASAttestation(tokenId)`: ler UIDs do `GemlabNFT` e consultar EAS
- Atualizar `EASVerificationBadge`, `QRVerificationSystem`, `OracleFiscalDashboard` para usar dados reais
- Substituir SCHEMA/UID placeholders por valores do deploy
- Entregáveis: UI conectada à blockchain, status dinâmico por atestados

## Fase 5 — Auditoria e Segurança
- Revisão de RBAC, revogação, pausas e estados (`Legal/Risco/Inválido`)
- Testes de revogação/expiração (Custódia), tentativas de atestar indevidas (Resolver)
- Auditoria de gas/cobertura de testes; checagem de overflow/underflow e reentrância

## Fase 6 — Deploy e Operação
- Deploy em Sepolia (contratos + schemas + RBAC), scripts de verificação
- Integração CI (GitHub Actions) para build/test/deploy
- Documentar addresses/UIDs no repo e atualizar `GemlabMetadata`

## Dependências e Ferramentas
- Hardhat + OpenZeppelin + EAS SDK
- Node.js backend (ethers.js); carteira institucional
- GraphQL EAS (`https://sepolia.easscan.org/graphql`) para verificação

## Entregáveis por Fase
- F1: Contratos + testes + config Hardhat
- F2: Schemas registrados + RBAC
- F3: API de atestação + logs/UID real
- F4: UI conectada + hooks reais
- F5: Relatório de auditoria + correções
- F6: Deploy Sepolia + CI + documentação de endpoints/addresses

## Métricas de Sucesso
- `mintWithProof` só executa com Origem/Ciência válidos
- `getStatus(tokenId)` reflete revogação/expiração de Custódia
- UI mostra UIDs/attesters/timestamps reais (EAS)

## Próximas Ações (Imediatas)
- Criar estrutura `contracts/`, `scripts/`, `test/`, `backend/`
- Inicializar Hardhat e instalar EAS SDK
- Esboçar `TokenValidator` e `GemlabResolver` primeiro; depois `GemlabNFT`

Confirma se devo iniciar pela Fase 1 com criação dos contratos e configuração do Hardhat no repositório.
24 changes: 24 additions & 0 deletions .vercelignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Local/runtime secrets
.env
.env.*
!.env.example

# Development artifacts
node_modules
coverage
cache
artifacts
build
dist

# Tooling/meta
.git
.github
.trae
*.log
.DS_Store

# Non-deployment folders
test
scripts
backend
63 changes: 63 additions & 0 deletions GEMLAB_VSC_Audit_Report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# RELATÓRIO DE AUDITORIA VSC — PROTOCOLO GEMLAB

**Data:** 10/02/2026
**Auditor:** Agente de Arquitetura VSC
**Status:** ✅ COMPLIANT (Conforme)
**Referência:** `Regras Globais e do Projeto – Modelo GEMLAB (Padrões VSC)`

---

## 1. Eficiência Computacional (Economy-First)
> **Requisito:** "Custo computacional reduzido", "Dados só podem ser armazenados se reutilizados".

* **Evidência de Código:**
* **Schemas Otimizados:** Em [deploy_schemas.js](file:///Users/doublegreen/Documents/GEMLAB/Gemlab/scripts/deploy_schemas.js), os schemas EAS foram definidos utilizando `bytes32` (hashes) em vez de strings longas, reduzindo drasticamente o custo de *gas* para armazenamento e validação.
* `originSchema = "bytes32 originUID, ..."` (32 bytes vs ~200 bytes de texto).
* **Otimizador Solidity:** Configurado em [hardhat.config.js](file:///Users/doublegreen/Documents/GEMLAB/Gemlab/hardhat.config.js) com `runs: 200`, garantindo bytecode enxuto para execução recorrente.

## 2. Segurança Criptográfica (KMS & Zero Trust)
> **Requisito:** "Chaves privadas nunca podem ser versionadas", "Segurança criptográfica".

* **Evidência de Código:**
* **Isolamento de Segredos:** O arquivo [.env.example](file:///Users/doublegreen/Documents/GEMLAB/Gemlab/.env.example) impõe o padrão de carregar `PRIVATE_KEY` apenas em memória via variáveis de ambiente, nunca hardcoded.
* **Validação Delegada:** O contrato [TokenValidator.sol](file:///Users/doublegreen/Documents/GEMLAB/Gemlab/contracts/TokenValidator.sol) não gerencia chaves; ele verifica assinaturas criptográficas externas (EAS Attestations), delegando a custódia das chaves para os agentes off-chain (KMS).

## 3. Falhas Previsíveis (Fail Fast)
> **Requisito:** "Fail fast if not attested", "Falhas previsíveis".

* **Evidência de Código:**
* **Barreira de Entrada:** No método `requireValidAttestations` de [TokenValidator.sol](file:///Users/doublegreen/Documents/GEMLAB/Gemlab/contracts/TokenValidator.sol), o sistema falha imediatamente (`revert`) se:
* O Schema for inválido.
* O Atestador não for autorizado.
* O Atestado estiver revogado (`revocationTime != 0`).
* **Bloqueio de Mint:** O contrato [GemlabNFT.sol](file:///Users/doublegreen/Documents/GEMLAB/Gemlab/contracts/GemlabNFT.sol) chama essa validação *antes* de qualquer alteração de estado (`_mint`), prevenindo gasto de gas inútil em transações inválidas.

## 4. Rastreabilidade Imutável
> **Requisito:** "Registros imutáveis para auditoria", "Integração de Camadas Física, Digital e Legal".

* **Evidência de Código:**
* **Link Permanente:** [GemlabNFT.sol](file:///Users/doublegreen/Documents/GEMLAB/Gemlab/contracts/GemlabNFT.sol) grava permanentemente os UIDs (`tokenOriginUID`, `tokenScienceUID`) mapeados ao ID do Token.
* **Triangulação:** A estrutura garante que cada NFT possui um link verificável para:
* **Origem (Físico/Fiscal):** Via `originUID` (Nota Fiscal + Localização).
* **Ciência (Digital/Espectro):** Via `scienceUID` (SpectralHash).

## 5. Governança Multiatores
> **Requisito:** "Governança descentralizada", "Justa divisão de roles".

* **Evidência de Código:**
* **Separação de Poderes:** O construtor de [TokenValidator.sol](file:///Users/doublegreen/Documents/GEMLAB/Gemlab/contracts/TokenValidator.sol) exige endereços distintos para `originAttester` (Prefeitura/Mina) e `scienceAttester` (Universidade/Lab). Um ator não pode forjar a validação do outro.

## 6. Integração Fiscal (Compliance Automático)
> **Requisito:** "Compliance fiscal automático".

* **Evidência de Código:**
* **Motor Fiscal:** O contrato [FiscalOracle.sol](file:///Users/doublegreen/Documents/GEMLAB/Gemlab/contracts/FiscalOracle.sol) implementa a lógica de cálculo de tributos (CFEM, ISS, Fundo2050) diretamente on-chain, garantindo que a regra legal seja executada como código (`Law as Code`).

---

## Conclusão da Auditoria

O código atual **ATENDE (COMPLIANT)** a todos os requisitos críticos do Prompt VSC.
A arquitetura implementada é segura, econômica e utiliza padrões institucionais de desenvolvimento blockchain (EAS, OpenZeppelin, Hardhat).

**Próximo Passo Recomendado:** Deploy em rede de teste (Sepolia) para validação de integração real.
35 changes: 35 additions & 0 deletions JURORS_START_HERE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# GEMLAB | Start Here for Jurors

Este guia foi desenhado para avaliacao objetiva em 3-7 minutos.

## 1) Problema que resolvemos

A cadeia de esmeraldas ainda sofre com baixa padronizacao tecnica e fragilidade documental. Isso reduz confianca, dificulta diligencia e limita acesso a mercados premium.

## 2) Solucao GEMLAB

Infraestrutura B2B de certificacao e rastreabilidade com trilha verificavel:
`Origem -> Raman -> SpectralHash -> EAS -> Certificado + QR`.

## 3) Evidencias diretas

- Plataforma institucional: https://gemlab-platform.vercel.app
- Whitepaper: [`public/docs/whitepaper_tecnico_gemlab_fase2_centelha_2026-02-26.pdf`](./public/docs/whitepaper_tecnico_gemlab_fase2_centelha_2026-02-26.pdf)
- Arquitetura EAS: [`docs/EAS_GEMLAB_ARQUITETURA.md`](./docs/EAS_GEMLAB_ARQUITETURA.md)
- GO/NO-GO de submissao: [`docs/CENTELHA_SUBMISSION_GO_NO_GO_2026-02-27.md`](./docs/CENTELHA_SUBMISSION_GO_NO_GO_2026-02-27.md)

## 4) TRL e execucao

- TRL atual: 4-5 (prototipo funcional e validacoes tecnicas)
- Meta: 5-6 (piloto operacional em ambiente real)
- Marco: MVP validado em campo na Feira das Esmeraldas 2026

## 5) Limites e compliance

- Nao e oferta publica de investimento
- Nao promete rentabilidade
- Nao atua como instituicao financeira

## 6) Leitura aprofundada

- Guia tecnico completo: [`src/README.md`](./src/README.md)
35 changes: 35 additions & 0 deletions LICENSING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# LICENSING - GEMLAB

## 1) Objetivo

Definir escopo de uso para evitar ambiguidade entre conteudo institucional e codigo tecnico.

## 2) Conteudo sob Creative Commons

Materiais institucionais e editoriais (quando identificados como conteudo):

- textos do whitepaper
- materiais de pitch/apresentacao
- documentacao institucional nao sensivel

Licenca aplicavel:

- **Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0)**
- Termos: https://creativecommons.org/licenses/by-nc/4.0/

## 3) Codigo-fonte e artefatos tecnicos

Codigo-fonte, scripts, componentes de software, integrações, schemas, contratos, automacoes e demais artefatos tecnicos do repositorio **nao estao liberados para uso comercial por padrao neste instrumento de conteudo**.

Qualquer uso, redistribuicao, fork comercial, adaptacao produtiva ou exploracao economica depende de autorizacao expressa e por escrito dos titulares do projeto GEMLAB.

## 4) Marcas e propriedade intelectual

Nomes, marcas, identidade visual, desenho industrial, metodologia proprietaria e know-how operacional associados ao GEMLAB permanecem reservados.

## 5) Contato institucional

Para autorizacoes de uso tecnico/comercial:

- Repositorio: https://github.com/DGuedz/Gemlab
- Plataforma: https://gemlab-platform.vercel.app
Loading
Loading