07 project onboarding flow
Overview
The project onboarding flow is the critical path that ensures only verified, legitimate projects can issue carbon credits on the platform. This flow involves multiple stakeholders and strict verification gates.
Goal
Allow only verified projects to mint Project Records + issue credit units.
Complete Flow Diagram
Project Owner Submits Project
↓
Status: PendingPoAI
↓
PoAI Review (Verifier/Reviewer)
↓
Status: PendingDAO (if approved) OR Rejected
↓
DAO Governance Vote
↓
Status: Approved (if passed)
↓
Mint Project Record (Non-Fungible NFT)
↓
Issue Semi-Fungible Credit Units
↓
Credits Available for PurchaseStep-by-Step Flow
Project Owner Submits Project
Actor: Project Owner / Issuer
Actions:
Create project profile in platform
Enter project details:
Project name
Project type (Renewable Energy, Reforestation, etc.)
Geography/location
Methodology (VCS, Gold Standard, etc.)
Vintage year
Verifier name and reference ID
Upload required documents:
Ownership documents
Verifier reports
MRV (Monitoring, Reporting, Verification) data
Impact reports
GPS coordinates
Photos (optional)
Certificates
Submit for PoAI review
Inputs:
Project details form data
Document files (PDFs, JSON, images)
Verifier references
System Actions:
Create
Projectrecord with statusDraftStore documents in encrypted storage
Generate document hashes
Create
poai_casewith statusSUBMITTEDNotify PoAI reviewers
Status Transition: Draft → PendingPoAI
PoAI Review
Actor: Verifier / PoAI Reviewer
Actions:
Reviewer assigned to PoAI case
Reviewer accesses project documents
Reviewer performs integrity checks:
Asset Integrity Checks:
Verify project ownership
Verify geographic location (GPS coordinates)
Verify project exists in real world
Cross-reference with verifier database
Data Integrity Checks:
Verify verifier report validity
Check vintage year consistency
Validate MRV data
Verify methodology compliance
Check document consistency
Process Integrity Checks:
Verify submission workflow
Verify reviewer assignment
Verify all required documents present
Verify document authenticity
Reviewer marks each check as:
PASS: Check passedFAIL: Check failed (blocks approval)WARN: Warning (may require clarification)PENDING: Not yet checked
Reviewer decision:
Approve: All checks pass → proceed to governance
Request Changes: Missing info/clarifications needed
Reject: Fraud/inconsistency/unverifiable data
If Changes Required:
Status →
CHANGES_REQUIREDIssuer notified with reviewer comments
Issuer can update documents and resubmit
Flow returns to PoAI Review
If Approved:
PoAI service generates proof bundle
Creates proof hashes:
bundleHashassetProofHashdataProofHashprocessProofHash
Stores proof bundle (encrypted)
Reviewer signs approval (optional)
Status →
PendingDAO
Status Transition: PendingPoAI → PendingDAO (or Rejected)
DAO Governance Vote
Actor: DAO Voters / Governance Members
Actions:
Governance proposal created automatically:
Proposal type:
OnboardProjectProject details
PoAI proof hashes
Proposed issuance cap
Transfer policy recommendation
Proposal published to governance interface
Voters review:
Project details
PoAI status and proof hashes
Proposed cap
Project type and methodology
Voting window opens
Voters cast votes:
FOR: Approve projectAGAINST: Reject projectABSTAIN: No opinion
Voting window closes
Results calculated:
Check quorum threshold
Check majority threshold
Determine outcome
If Proposal Passes:
Status →
ApprovedProposal status →
PassedSystem prepares on-chain mint
If Proposal Fails:
Status →
RejectedProposal status →
FailedProject cannot proceed (can resubmit with changes)
Status Transition: PendingDAO → Approved (or Rejected)
Mint Project Record (Non-Fungible)
Actor: System / Admin (triggered by governance)
Actions:
System calls
ProjectRegistry.mintProjectRecord():Contract validates:
PoAI status is
APPROVEDPoAI hashes are non-zero
Cap is greater than zero
Project doesn't already exist
Contract mints NFT:
Generates unique
tokenIdStores metadata hash
Stores PoAI proof hashes
Stores issuance cap
Emits
ProjectRecordMintedevent
System updates database:
Link
ProjecttoProjectRecordStore
onChainTokenIdUpdate project status
Result: Project now has immutable on-chain identity.
Configure Credit Units Contract
Actor: System / Admin
Actions:
System calls
CarbonCredit1155.setProjectConfig():Contract validates:
ProjectRecord exists
PoAI approved
Cap matches ProjectRecord cap
Contract activates project for credit issuance
Emits
ProjectConfiguredevent
Result: Project is now "live" and can issue credits.
Issue Semi-Fungible Credit Units
Actor: Issuer / Admin
Actions:
Issuer/admin decides to issue credits
Determines amount to issue (must be ≤ cap)
Calls
CarbonCredit1155.mintCredits():Contract validates:
Project is active
issued + amount <= capCaller has
ISSUER_ROLE
Contract mints credits:
Increments
issued[projectTokenId]Transfers credits to treasury
Emits
CreditsMintedevent
System updates database:
Record issuance transaction
Update supply metrics
Result: Credits exist on-chain and are available for purchase/allocations.
Developer Notes
Critical Rules
The "Project Record" is the anchor for everything
All credit units reference the ProjectRecord
tokenIdNo credits can exist without a ProjectRecord
Credits must be non-interchangeable across projects
Credits from Project A ≠ Credits from Project B
Enforced by
tokenIdsegregation
PoAI is a hard gate
No ProjectRecord without PoAI approval
No credit issuance without ProjectRecord
Governance controls caps
Issuance cap set by governance vote
Cannot be exceeded by smart contract enforcement
State Transitions Summary
Error Handling
PoAI Rejection:
Project status →
RejectedCannot proceed to governance
Issuer can resubmit with changes
Governance Rejection:
Project status →
RejectedPoAI proof remains valid
Can resubmit to governance with different cap
Issuance Cap Exceeded:
Transaction reverts
Must request governance to increase cap
Acceptance Criteria
✅ Project cannot be submitted without required documents
✅ PoAI review must complete all checks before approval
✅ Project cannot proceed to governance without PoAI approval
✅ ProjectRecord cannot be minted without PoAI hashes
✅ Credit units cannot be issued without ProjectRecord
✅ Issuance cannot exceed governance-approved cap
✅ All state transitions are auditable
Last updated