Mint verified carbon-credit batches, trade them on a transparent marketplace, and retire them forever — with an immutable on-chain offset certificate to prove it.
CarbonMint is a tokenized carbon-credit marketplace built on Soroban, the smart-contract platform for Stellar. Issuers mint verified carbon-credit batches as on-chain assets, buyers trade them on an open marketplace, and holders retire (burn) credits to claim a permanent, tamper-proof offset certificate. Every minted and retired credit is recorded in a transparent on-chain registry — so double-counting is impossible and every offset is auditable by anyone, forever.
- ✨ Why CarbonMint?
- 🚀 Features
- 🏗️ Architecture
- ♻️ Credit Lifecycle
- 🧩 Repositories
- 🛠️ Tech Stack
- ⚡ Quick Start
- 🗺️ Roadmap
- 🤝 Contributing
- 📜 License
Legacy carbon registries are opaque spreadsheets behind closed doors — slow to settle, hard to audit, and notorious for credits being sold (or retired) twice. CarbonMint puts the entire ledger on-chain, where the rules are enforced by code, not trust.
| Capability | 🗄️ Legacy Carbon Registries | 🌱 CarbonMint |
|---|---|---|
| Transparency | Private databases, periodic PDF reports | Public, real-time on-chain registry |
| Double-counting prevention | Manual reconciliation, prone to error | Enforced by contract — a retired credit can never be re-spent |
| Settlement speed | Days to weeks via intermediaries | Seconds, with Stellar finality |
| Auditability | Trust the registry operator | Verify every mint & retirement on Stellar |
| Offset proof | Certificate emailed by a third party | Immutable on-chain certificate owned by you |
| Fees | High brokerage & administrative overhead | Low, predictable Stellar network fees |
| Feature | Description | |
|---|---|---|
| 🏭 | Mint verified batches | Accredited issuers mint carbon-credit batches with verifiable metadata (project, vintage, methodology, tonnage). |
| 🛒 | Marketplace trading | List, browse, and buy credits in an open, on-chain order flow — settled atomically on Stellar. |
| 🔥 | On-chain retirement | Burn credits to offset emissions and permanently remove them from circulating supply. |
| 🧾 | Immutable certificate | Each retirement emits a tamper-proof offset certificate bound to the retiring account. |
| 📒 | Transparent registry | Track minted vs. retired vs. circulating supply for every batch, in real time. |
| 🛡️ | Double-retirement prevention | The contract guarantees a credit can be retired exactly once — no replays, no fraud. |
flowchart TD
Issuer([🏭 Issuer])
Buyer([🛒 Buyer / Holder])
subgraph Client["🖥️ CarbonMint-Frontend · React + Vite"]
UI["Marketplace UI<br/>mint · trade · retire"]
end
subgraph Server["⚙️ CarbonMint-Backend · Node + Express"]
API["REST API"]
Registry["📒 Registry Indexer<br/>minted vs retired supply"]
end
subgraph Chain["🔗 Soroban · CarbonMint-Contract (Rust)"]
Contract["Credit Registry &<br/>Marketplace Contract"]
end
Stellar[("⭐ Stellar Network")]
Issuer -->|connect wallet| UI
Buyer -->|connect wallet| UI
UI <-->|query listings & supply| API
API --> Registry
Registry -. indexes events .- Contract
UI -->|"mint_batch()"| Contract
UI -->|"buy()"| Contract
UI -->|"retire() → burn"| Contract
Contract -->|"emits certificate"| UI
Contract <-->|submit & settle txns| Stellar
Registry -. reads ledger .- Stellar
A carbon-credit batch flows through four on-chain states. Once Retired, it is gone forever — and the offset certificate is yours to keep.
stateDiagram-v2
[*] --> Minted: issuer calls mint_batch()
Minted --> Listed: issuer lists on marketplace
Listed --> Traded: buyer calls buy()
Traded --> Listed: holder re-lists for resale
Traded --> Retired: holder calls retire() 🔥 (burn)
Listed --> Retired: holder calls retire() 🔥 (burn)
Retired --> [*]: 🧾 immutable certificate issued
note right of Retired
Burned & removed from supply.
Cannot be re-traded or re-retired.
end note
| Repository | Description | Tech |
|---|---|---|
| 🖥️ CarbonMint-Frontend | The marketplace dApp — mint, trade, and retire credits with a wallet-connected UI. | |
| ⚙️ CarbonMint-Backend | REST API and registry indexer tracking minted vs. retired supply across all batches. | |
| 🔗 CarbonMint-Contract | The Soroban credit-registry & marketplace contract — mint, buy, and retire logic in Rust. |
Frontend
Backend
Smart Contracts & Chain
📦 Clone & run all three repos
1. Smart contract — CarbonMint-Contract
git clone https://github.com/CarbonMint/CarbonMint-Contract.git
cd CarbonMint-Contract
# Build & test the Soroban contract
stellar contract build
cargo test
# Deploy to testnet
stellar contract deploy \
--wasm target/wasm32-unknown-unknown/release/carbonmint.wasm \
--network testnet2. Backend API & registry — CarbonMint-Backend
git clone https://github.com/CarbonMint/CarbonMint-Backend.git
cd CarbonMint-Backend
npm install
cp .env.example .env # set CONTRACT_ID, STELLAR_RPC_URL, NETWORK
npm run dev # API on http://localhost:30003. Frontend marketplace — CarbonMint-Frontend
git clone https://github.com/CarbonMint/CarbonMint-Frontend.git
cd CarbonMint-Frontend
npm install
cp .env.example .env # set VITE_API_URL, VITE_CONTRACT_ID
npm run dev # dApp on http://localhost:5173- Core Soroban contract:
mint_batch,buy,retire - On-chain offset certificates on retirement
- Transparent minted-vs-retired registry indexer
- React marketplace MVP with wallet connect
- Issuer verification & accreditation workflow
- Batch metadata standard (project, vintage, methodology)
- Secondary-market order book & price discovery
- Third-party auditor dashboard & public API
- Mainnet launch 🚀
Contributions are welcome and appreciated! 🌱
- Fork the relevant repository and create a feature branch.
- Make your changes with clear, conventional commits.
- Ensure tests pass (
cargo test/npm test). - Open a Pull Request describing your change and the problem it solves.
Found a bug or have an idea? Open an issue on the appropriate repo — every contribution helps make carbon markets more transparent.
Distributed under the MIT License. See the LICENSE file in each repository for full details.