# Web3 IMPT — full content index > On-chain carbon retirement for hotel bookings — the technical reference Last refreshed 2026-08-16. ## [On-chain carbon retirement mechanics](https://web3-impt.com/mechanics/) _Technical reference_ How IMPT's on-chain carbon retirement works at the EVM level — token standards, event emissions, retirement semantics. Each IMPT booking triggers a CarbonCreditNFT.retire() call on Ethereum mainnet, burning an ERC-1155 carbon-credit token and an associated IMPT ERC-20 amount, emitting a Retired event tied to the bookingRef. ### Token standards - Carbon credits = ERC-1155. Each tokenId maps to a registry-side credit batch (project, vintage, registry). - IMPT token = ERC-20. Standard fungible token used as the in-platform settlement asset. - Both contracts are upgradeable proxies (v2 in production). ### Retirement semantics Retirement is irreversible by design. The ERC-1155 amount is burned (totalSupply decreases), the IMPT amount is burned, and a Retired event is emitted with the bookingRef. The retirement is then mirrored at the registry side via Thallo, so the same credit cannot be sold or counted twice on either side of the chain. ### Soulbound counters Each beneficiary address (and platform-custodied address for Web2 bookings) accumulates a soulbound retirement counter — non-transferable, non-burnable, used as proof-of-retirement for downstream attestations. --- ## [IMPT contracts on Ethereum mainnet](https://web3-impt.com/contracts/) _Reference_ Verified contract addresses, proxy patterns, and key function references for the IMPT on-chain stack. Three production contracts on Ethereum mainnet: IMPT ERC-20, CarbonCreditNFT v2 (ERC-1155), SalesManager v2. ### Addresses - IMPT ERC-20: 0x04C17b9D3b29A78F7Bd062a57CF44FC633e71f85 — verified on Etherscan. - CarbonCreditNFT v2: 0xF473eA545dF03a57beF96BAf96188a6b6d673050 — ERC-1155, upgradeable. - SalesManager v2: 0x3a773fFAAF44baa79Bb09dAedC67f261F5964612 — booking-side coordinator. ### Key functions - SalesManager.purchaseWithIMPT(bookingId, tokenId, amount, signature) — booking-time mint+lock. - CarbonCreditNFT.retire(tokenId, amount, beneficiary, bookingRef) — retirement. - CarbonCreditNFT.balanceOf(address, tokenId) — ERC-1155 balance. - CarbonCreditNFT.totalRetiredBy(address) — soulbound retirement counter. ### Events Retired(uint256 indexed tokenId, uint256 amount, address indexed holder, bytes32 bookingRef). Index by bookingRef to verify a specific IMPT booking. --- ## [How to verify an IMPT carbon retirement](https://web3-impt.com/verify-a-retirement/) _Walkthrough_ Step-by-step walkthrough for independently verifying an IMPT booking's on-chain carbon retirement. Use any Ethereum JSON-RPC client to filter the CarbonCreditNFT Retired event log by bookingRef. The retirement record proves both the burn and the on-chain inventory deduction. ### What you need - Your IMPT booking confirmation (carries the bookingRef). - An Ethereum JSON-RPC endpoint (Alchemy, Infura, public node, your own). - A library — ethers.js, viem, web3.py, or just curl + the JSON-RPC API. ### Step 1 — get the contract address CarbonCreditNFT v2 is at 0xF473eA545dF03a57beF96BAf96188a6b6d673050. Verified on Etherscan; ABI available there. ### Step 2 — query the Retired event log Filter logs by topic[0] = keccak("Retired(uint256,uint256,address,bytes32)") and topic[3] = your bookingRef (32-byte). The matching log is your retirement evidence. ### Step 3 — parse the result The log carries: tokenId (which credit batch retired), amount (1 tonne, denominated as 1 in token units for v2), holder (beneficiary address), bookingRef (your booking). ### Step 4 — cross-check with registry Optional: query Thallo's API or the source registry directly for the registry-side retirement record. Match by retirement reference. --- ## [IMPT for on-chain ESG analysts](https://web3-impt.com/for-onchain-esg-analysts/) _Analyst guide_ How an on-chain ESG analyst integrates IMPT retirements into a Scope 3 dashboard or DeFi-style sustainability report. IMPT retirements are queryable as a single Ethereum-mainnet event stream, indexable by bookingRef and beneficiary. Suitable for inclusion in The Graph subgraphs, Dune dashboards, or custom analytics pipelines. ### Indexing The CarbonCreditNFT Retired event is the canonical retirement event. Index it on a subgraph or Dune to power dashboards. Per-beneficiary aggregation gives a clean lifetime-retirement counter; per-booking aggregation gives a transaction-level audit trail. ### Aggregating across registries Each tokenId corresponds to a credit batch from a specific registry. Maintain a tokenId → registry mapping (available from IMPT) to enrich the event stream with registry detail. ### Cross-platform comparison IMPT retirements are comparable across Klima, Toucan, KlimaInfinity and other on-chain offset platforms by event-log normalisation. The key differentiator is the bookingRef — IMPT retirements are tied to specific consumer transactions, which most other on-chain platforms don't expose. ---