§ Docs · T.02
Verify a burn proof.
Every ADM minted during the launch phase has a public source-chain transaction behind it. This task walks through verifying a burn ↔ mint pair end-to-end.
§ 01 / Steps
Three checks.
- Source confirmation. Fetch the source-chain transaction by hash; check that the destination is the verifiably-unspendable burn address for that asset and that the required confirmation count has passed (BTC 6, ETH 32 epochs, USDT/USDC 64).
- Adamant mint record. Query adamant_getBurns(from, to) for the corresponding mint event; verify the src_tx field matches the source-chain hash and the adm amount equals (USD-equivalent × 20).
- Cap-window invariant. The minted amount must respect the per-address cap for its launch-month window (1 / 2 / 4 / 8 % then uncapped). The validator set rejects burns that would exceed.
§ 02 / In code
TypeScript SDK.
import { Client } from '@adamant/sdk';
const c = new Client('https://rpc.adamantprotocol.com');
const burn = await c.getBurnByMintTx('0xadm...mint-hash');
// { src_chain: 'eth', src_tx: '0xeth...', usd_eq: 2500, adm: 50000, dest: 'adm1...', cap_window: 3 }
// 1. confirm source-chain finality (here using viem)
const ethTx = await viem.getTransactionReceipt({ hash: burn.src_tx });
const confs = await viem.getBlockNumber() - ethTx.blockNumber;
if (confs < 32n * 32n) throw new Error('insufficient confirmations');
// 2. confirm Adamant mint matches USD-eq × 20
if (burn.adm !== burn.usd_eq * 20n) throw new Error('rate mismatch');
// 3. cap window check
const month = monthsSinceGenesis(burn.activated_at);
const capPct = month < 1 ? 1 : month < 3 ? 2 : month < 6 ? 4 : month < 12 ? 8 : 100;
// ...verify dest's cumulative mints stay below capPct % of 70_000_000