Web App

Audit & ESG

Live onchain transaction ledger, three-way reconciliation, CSV export and a printable audit report.

Route: /app/audit. Reads every Carbonized event straight from the chain and checks it against the contracts' own counters. It sends no transactions and needs no wallet.

KPI cards

CardSource
TransactionsDistinct transaction hashes among the decoded events
Chain head (finality)Latest block number at load time; the card also shows the first scanned block
Last activity blockBlock (and time) of the newest decoded event
ReconciliationHow many of the checks below match

Three-way reconciliation

Event totals are recomputed from the log on every load and compared with values read from the contracts at the same block the scan stops at, so a transaction landing mid-load cannot cause a false mismatch. Each check shows expected, actual, the delta and MATCH or MISMATCH.

GroupChecks
A · Credit NFTMinted tonnes (CreditMinted + CreditBatchMinted) vs totalMintedTonnes(); retired tonnes vs totalRetiredTonnes(); net active tonnes; active credit count vs totalActiveCredits()
B · CCT tokenWrapped − unwrapped events (CreditWrapped, BatchWrapped, CreditUnwrapped) vs totalSupply(); locked NFT count vs totalNFTsWrapped(); 1:1 backing (totalTonnesWrapped() vs totalSupply()); NFTs held by the token contract vs totalNFTsWrapped()
C · MarketplaceCCT escrow = open sell orders + live auctions + AMM reserve vs the marketplace's CCT balance; payment token escrow (open buy orders + highest bids + AMM reserve) must be ≤ the payment token balance, the surplus being accrued fees; order and auction event counts vs nextOrderId − 1 / nextAuctionId − 1

The token checks cover the CCT contract configured in NEXT_PUBLIC_CARBON_CREDIT_TOKEN (the pool the marketplace trades). Escrow checks read the newest 400 orders and 400 auctions; a note appears when older ones were skipped.

Event window

Events are scanned from NEXT_PUBLIC_DEPLOY_BLOCK. If it is not set only the last 20,000 blocks are scanned, so checks marked depends on event window can show a false MISMATCH because older events are missing; the page shows an explicit warning in that case. Set the variable to the block in which the NFT contract was deployed to audit the full history. Checks that read only onchain state (backing, locked NFTs, escrow) do not depend on the window.

Ledger

All 11 event kinds (mint, retire, wrap, unwrap, order created/filled/cancelled, auction created/finalized/cancelled, bid), newest first, 15 per page. Filter by type, actor address (substring) and date range. Every row links to https://explorer.testnet.chain.robinhood.com/tx/<hash> (override with NEXT_PUBLIC_EXPLORER_URL).

Export

ButtonOutput
Export CSVThe filtered ledger: UTC time, block, log index, type, contract, actor, token ids, ref id, tonnes, USD, note, tx hash, explorer URL. Cells starting with =, +, - or @ are prefixed with ' so spreadsheets do not run them as formulas.
Download PDFOpens the browser print dialog (window.print()) with a dedicated report: summary, contract addresses, the reconciliation table and the filtered ledger (newest 250 rows). Choose Save as PDF. No PDF library is used.

States

StateBehaviour
Contracts not configuredEmpty state asking for NEXT_PUBLIC_CARBON_CREDIT_NFT
LoadingSkeleton cards and tables
RPC errorError alert with Try again
Some reads failedAmber alert listing the failing contracts; other checks still render