04 core objects data model
Overview
This document defines the core data entities and their relationships that form the foundation of the platform. These objects exist both on-chain (for immutability) and off-chain (for performance and rich data).
Core Entities
Project
Purpose: Represents a carbon project that can issue credits.
Attributes:
id(string): Unique project identifiername(string): Project nametype(enum): Project type (e.g., Renewable Energy, Reforestation, Carbon Capture)geography(string): Location/countrymethodology(string): Verification methodology standardvintageYear(integer): Year of credit generationverifierName(string): Name of verification bodyverifierRefId(string): Reference ID from verifierdocuments(array of URIs): Links to project documentsstatus(enum): Project lifecycle status
Status Values:
Draft: Project created but not submittedPendingPoAI: Submitted, awaiting PoAI reviewPendingDAO: PoAI approved, awaiting governance voteApproved: Fully approved, can issue creditsRejected: Failed verification or governanceSuspended: Temporarily suspended (can be reactivated)
On-Chain Representation:
Stored in
ProjectRegistrycontractImmutable metadata hash
PoAI proof hash references
Off-Chain Representation:
Full document storage
Rich metadata
Status tracking
ProjectRecord (Non-Fungible Project Record)
Purpose: Immutable on-chain anchor for each approved project.
Attributes:
onChainTokenId(uint256): Unique NFT token IDprojectId(string): Reference to Project entitymetadataHash(bytes32): Hash of immutable project metadatamaxIssuableUnits(uint256): Maximum credits that can be issued (in UNIT scale)poaiBundleHash(bytes32): Reference to PoAI proof bundlepoaiAssetHash(bytes32): Asset integrity proof hashpoaiDataHash(bytes32): Data integrity proof hashpoaiProcessHash(bytes32): Process integrity proof hashcreatedAt(uint256): Timestamp of mintingcreatedBy(address): Address that triggered minting
Key Properties:
Non-Fungible: Each project gets exactly one record
Immutable: Cannot be modified after minting
Non-Tradable: Utility record, not a speculative asset
1:1 Relationship: One ProjectRecord per Project
Contract Standard: ERC-721 or ERC-1155 (supply = 1)
Credit Units (Semi-Fungible)
Purpose: Represents carbon credits that can be owned, transferred, and retired.
Attributes:
projectTokenId(uint256): Reference to ProjectRecord tokenIdprojectId(string): Reference to Project entitybalance(mapping): Balance per wallet/organization (in UNIT scale)totalIssued(uint256): Total units minted for this projecttotalRetired(uint256): Total units burned for this projectcap(uint256): Maximum issuable units (from ProjectRecord)
Key Properties:
Semi-Fungible: Fungible within project, non-fungible across projects
Decimal Support: Uses fixed-point units (UNIT = 1e6 or 1e18)
Project-Segregated: Credits from Project A ≠ Credits from Project B
Transferable: Subject to project transfer policy
Contract Standard: ERC-1155 (multi-token)
Balance Storage:
PoAI Proof
Purpose: Verification proof bundle ensuring project integrity.
Attributes:
poaiCaseId(string): Reference to PoAI review caseprojectId(string): Reference to Project entitybundleURI(string): Encrypted storage location of full proof bundlebundleHash(bytes32): SHA256 hash of canonical proof bundle JSONassetProofHash(bytes32): Asset integrity proof hashdataProofHash(bytes32): Data integrity proof hashprocessProofHash(bytes32): Process integrity proof hashreviewerSignature(bytes): Optional reviewer signaturereviewerSignatureHash(bytes32): Hash of signaturetimestamp(uint256): When proof was generatedvalidUntil(uint256): Optional expiration timestamp
On-Chain Storage:
Only hashes stored on-chain (gas efficiency)
Full bundle stored off-chain (encrypted)
Proof Bundle Structure:
Order / Purchase
Purpose: Records credit purchase transactions.
Attributes:
orderId(string): Unique order identifieruserOrOrgId(string): Buyer identifierprojectId(string): Project being purchasedunits(uint256): Amount purchased (in UNIT scale)price(uint256): Price per unit (in payment token)totalPrice(uint256): Total payment amountpaymentMethod(enum): Payment type (crypto, fiat, etc.)status(enum): Order statustransactionHash(string): On-chain transaction hash (if applicable)createdAt(timestamp): Order creation timecompletedAt(timestamp): Order completion time
Status Values:
Pending: Order created, payment pendingProcessing: Payment received, credits transferringCompleted: Credits successfully transferredFailed: Order failed (refund if applicable)Cancelled: User cancelled order
Retirement
Purpose: Records permanent credit retirement (burn).
Attributes:
retirementId(string): Unique retirement identifierprojectId(string): Project whose credits were retiredprojectTokenId(uint256): On-chain project token IDunitsRetired(uint256): Amount retired (in UNIT scale)retiredBy(string): User or organization identifierretiredByAddress(address): Wallet address that executed retirementtimestamp(uint256): On-chain block timestamptransactionHash(string): Retirement transaction hashcertificateURI(string): Link to generated certificatecertificateHash(bytes32): Hash of certificate contentpoaiBundleHash(bytes32): Reference to PoAI proof (for audit)
Key Properties:
Irreversible: Credits are burned, cannot be undone
Auditable: On-chain event + certificate
Traceable: Links back to project and PoAI
On-Chain Event:
Governance Proposal
Purpose: Represents a governance vote on platform decisions.
Attributes:
proposalId(string): Unique proposal identifiertype(enum): Proposal typestatus(enum): Proposal statusprojectId(string): Related project (if applicable)parameters(object): Proposal-specific parameterscreatedBy(address): Proposer addresscreatedAt(timestamp): Proposal creation timevotingStart(timestamp): Voting window startvotingEnd(timestamp): Voting window endvotesFor(uint256): Votes in favorvotesAgainst(uint256): Votes againstexecutedAt(timestamp): Execution time (if passed)executionTxHash(string): On-chain execution transaction
Proposal Types:
OnboardProject: Approve new projectIssueUnits: Approve credit issuanceSuspendProject: Suspend a projectParameterUpdate: Update platform parameters (fees, limits, thresholds)
Status Values:
Open: Voting in progressPassed: Vote passed, awaiting executionFailed: Vote failedExecuted: Successfully executed on-chainCancelled: Proposal cancelled
Data Relationships
Entity Relationship Diagram (Conceptual)
Key Relationships
Project → ProjectRecord: One-to-one (immutable anchor)
ProjectRecord → Credit Units: One-to-many (one project can issue many credits)
Credit Units → Orders: Many-to-many (credits can be purchased multiple times)
Credit Units → Retirements: One-to-many (credits can be retired in batches)
Project → PoAI Proof: One-to-one (one proof per project approval)
Governance Proposal → Project: One-to-many (proposals can affect projects)
Database Schema (Off-Chain)
Core Tables
projects
project_records (on-chain sync)
credit_balances (on-chain sync)
poai_proofs
retirements
Last updated