Smart Contracts for OGCR DCR
Individual Carbon Projects (ERC721)
↓
Batch NFTs with Token-Bound Accounts (ERC6551)
CarbonProjectNFT- Individual carbon projects (reforestation, renewable energy, etc.)CarbonBatchNFT- Batch NFTs that own multiple projects via ERC6551CarbonERC6551Account- Token-bound account implementationCarbonERC6551Registry- Registry for creating accountsCarbonBatchController- Orchestration and batch operations
# Install Foundry
curl -L https://foundry.paradigm.xyz | bash
foundryup
# Clone and setup
git clone <repo-url>
cd carbon-credits
forge install# Copy environment template
cp .env.example .env
# Edit with your values
nano .envRequired in .env:
PRIVATE_KEY=your_wallet_private_key
RPC_URL=your_blockchain_rpc_endpointExperience the complete ERC6551 workflow:
# Run interactive demonstration
./erc6551_demo.shThis demo shows:
- Minting individual carbon project NFTs
- Creating batch NFTs with token-bound accounts
- Transferring projects into batch accounts
- Portfolio management operations
- ERC6551 account functionality
forge script script/DeployCarbonERC6551System.s.sol \
--rpc-url $RPC_URL \
--private-key $PRIVATE_KEY \
--broadcastcast send $CARBON_PROJECT_NFT \
"mintCarbonProject(address,address,uint256,address,uint256,address,string,string,string,string)" \
$RECIPIENT \
$PARCEL_CONTRACT \
$PARCEL_ID \
$ERC20_TOKEN \
$CARBON_AMOUNT \
$TOKEN_RECIPIENT \
"Reforestation" \
"VCS" \
"2024" \
"https://metadata.example.com/project1" \
--private-key $PRIVATE_KEY \
--rpc-url $RPC_URL \
--legacycast send $CARBON_BATCH_NFT \
"createBatch(string,string)" \
"Renewable Energy Portfolio Q1 2025" \
"https://metadata.example.com/batch1" \
--private-key $PRIVATE_KEY \
--rpc-url $RPC_URL \
--legacy# Approve batch to transfer project
cast send $CARBON_PROJECT_NFT \
"approve(address,uint256)" \
$CARBON_BATCH_NFT \
$PROJECT_ID \
--private-key $PRIVATE_KEY \
--rpc-url $RPC_URL \
--legacy
# Transfer to batch's token-bound account
cast send $CARBON_BATCH_NFT \
"transferProjectToAccount(uint256,uint256)" \
$PROJECT_ID \
$BATCH_ID \
--private-key $PRIVATE_KEY \
--rpc-url $RPC_URL \
--legacyRun the comprehensive test suite:
forge testTest Coverage:
- Contract deployment
- Carbon project creation
- ERC6551 account functionality
- Batch operations
- Access control
- Portfolio management
- Token transfers
forge build# Deploy to local network
forge script script/DeployCarbonERC6551System.s.sol \
--rpc-url http://localhost:8545 \
--private-key 0xyourprivatekey \
--broadcast- ERC6551_README.md - Technical documentation
- INTERACTIVE_DEMO_GUIDE.md - Demo usage guide
- SETUP_GUIDE.md - Quick setup instructions
After deployment, update your .env with the contract addresses:
CARBON_PROJECT_NFT=0x...
CARBON_BATCH_NFT=0x...
ERC6551_REGISTRY=0x...
BATCH_CONTROLLER=0x...
ERC6551_ACCOUNT_IMPL=0x...- ERC6551 Standard - Token Bound Accounts
- OpenZeppelin - Smart contract framework