{"sources":{"src/ChronoVaultRig.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.28;\n\ninterface IBinanceAgentRegistry {\n    function balanceOf(address holder) external view returns (uint256);\n}\n\ninterface IERC165 {\n    function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n\ninterface IERC721Receiver {\n    function onERC721Received(\n        address operator,\n        address from,\n        uint256 tokenId,\n        bytes calldata data\n    ) external returns (bytes4);\n}\n\n/// @title ChronoWatt ($CWATT)\n/// @notice Companion compute-output ERC-20 token mined exclusively by active ChronoVault Rigs.\n/// @custom:website https://chronovault.surge.sh\ncontract ChronoWatt {\n    string public constant name = \"ChronoWatt Compute Credit\";\n    string public constant symbol = \"CWATT\";\n    string public constant website = \"https://chronovault.surge.sh\";\n    uint8 public constant decimals = 18;\n\n    address public immutable RIG_VAULT;\n    uint256 public totalSupply;\n\n    mapping(address => uint256) public balanceOf;\n    mapping(address => mapping(address => uint256)) public allowance;\n\n    event Transfer(address indexed from, address indexed to, uint256 value);\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n\n    error OnlyRigVault();\n    error InsufficientBalance();\n    error InsufficientAllowance();\n    error ZeroAddress();\n\n    constructor(address _rigVault) {\n        if (_rigVault == address(0)) revert ZeroAddress();\n        RIG_VAULT = _rigVault;\n    }\n\n    function mintCompute(address to, uint256 amount) external {\n        if (msg.sender != RIG_VAULT) revert OnlyRigVault();\n        if (to == address(0) || amount == 0) return;\n        totalSupply += amount;\n        unchecked {\n            balanceOf[to] += amount;\n        }\n        emit Transfer(address(0), to, amount);\n    }\n\n    function approve(address spender, uint256 amount) external returns (bool) {\n        allowance[msg.sender][spender] = amount;\n        emit Approval(msg.sender, spender, amount);\n        return true;\n    }\n\n    function transfer(address to, uint256 amount) external returns (bool) {\n        return _transfer(msg.sender, to, amount);\n    }\n\n    function transferFrom(address from, address to, uint256 amount) external returns (bool) {\n        uint256 allowed = allowance[from][msg.sender];\n        if (allowed != type(uint256).max) {\n            if (allowed < amount) revert InsufficientAllowance();\n            unchecked {\n                allowance[from][msg.sender] = allowed - amount;\n            }\n        }\n        return _transfer(from, to, amount);\n    }\n\n    function _transfer(address from, address to, uint256 amount) internal returns (bool) {\n        if (to == address(0)) revert ZeroAddress();\n        uint256 bal = balanceOf[from];\n        if (bal < amount) revert InsufficientBalance();\n        unchecked {\n            balanceOf[from] = bal - amount;\n            balanceOf[to] += amount;\n        }\n        emit Transfer(from, to, amount);\n        return true;\n    }\n}\n\n/// @title ChronoVaultRig (CVRG)\n/// @notice Redeemable BNB Floor Treasury + 16-Hour Lifespan Compute Miner on BNB Chain.\n/// @custom:website https://chronovault.surge.sh\n/// @dev Architecture & Verifiable Trust Guarantees (https://chronovault.surge.sh):\n///      1. No admin withdraw function exists for `floorReservePool` or `activeYieldPool`.\n///         Ownership is renounced (`owner() == address(0)`) immediately after genesis deployment.\n///      2. 30% of every rig deployment and ignition is hard-locked in `floorReservePool`.\n///         Any active rig holder can call `burnToRedeem(tokenId)` at any time to burn their rig\n///         and withdraw 88% of its proportional BNB floor backing (12% exit friction stays in\n///         `floorReservePool`, mathematically increasing Floor NAV per share for all remaining rigs).\n///      3. 15% of every deployment/ignition is distributed in real time to active rigs via `accYieldPerHash`.\n///      4. Every active rig operates on a 16-hour clock (`RIG_LIFESPAN = 16 hours`) and mines `$CWATT`\n///         at 1,000 CWATT/hour (scaled by hashrate). Calling `overclockRig(tokenId)` (`0.0010 BNB`)\n///         resets the 16-hour clock and permanently boosts hashrate by +20 TH/s.\n///      5. If a rig expires by more than 4 hours (`PURGE_GRACE_PERIOD`), any bot/keeper can call\n///         `purgeExpiredRig(tokenId)` to deactivate its hashrate and earn a 20% BNB bounty from\n///         its unclaimed yield (80% recycles back to online rigs).\ncontract ChronoVaultRig is IERC165 {\n    string public constant name = \"ChronoVault Rig\";\n    string public constant symbol = \"CVRG\";\n    string public constant website = \"https://chronovault.surge.sh\";\n    string public constant externalURL = \"https://chronovault.surge.sh\";\n\n    address public constant AGENT_REGISTRY = 0x60B9262456dE011F7d15a54CdD8c48bAaa8B022F;\n\n    uint256 public constant MAX_SUPPLY = 3333;\n    uint256 public constant MAX_DORMANT_CHASSIS = 180;\n    uint256 public constant PIONEER_CAP = 88;\n    uint256 public constant MAX_PER_TX = 15;\n    uint256 public constant MAX_PER_WALLET = 40;\n\n    // Pricing Constants\n    uint256 public constant PRICE = 0.0028 ether;\n    uint256 public constant RIG_PRICE = 0.0028 ether;\n    uint256 public constant REF_RIG_PRICE = 0.0025 ether;\n    uint256 public constant IGNITE_PRICE = 0.0018 ether;\n    uint256 public constant OVERCLOCK_PRICE = 0.0010 ether;\n\n    // Atomic Wei Splits per Direct Paid Rig (0.0028 BNB)\n    uint256 public constant FLOOR_RESERVE_ADD_WEI = 0.00084 ether; // 30% hard-locked in Floor Vault\n    uint256 public constant YIELD_POOL_ADD_WEI = 0.00042 ether;    // 15% to 16h Active Hashrate Pool\n    uint256 public constant REFERRER_REBATE_WEI = 0.00025 ether;   // 10% instant rebate on referred mint\n\n    // Atomic Wei Splits per Chassis Ignition (0.0018 BNB)\n    uint256 public constant IGNITE_FLOOR_WEI = 0.00054 ether;      // 30% to Floor Vault\n    uint256 public constant IGNITE_YIELD_WEI = 0.00027 ether;      // 15% to Active Hashrate Pool\n\n    // Atomic Wei Splits per 16h Overclock (0.0010 BNB)\n    uint256 public constant OVERCLOCK_FLOOR_WEI = 0.00015 ether;   // 15% to Floor Vault\n    uint256 public constant OVERCLOCK_YIELD_WEI = 0.00020 ether;   // 20% to Active Hashrate Pool\n\n    // Lifespan, Shares & Redemption Friction\n    uint256 public constant RIG_LIFESPAN = 16 hours;\n    uint256 public constant PURGE_GRACE_PERIOD = 4 hours;\n    uint256 public constant PIONEER_HASHRATE = 135;\n    uint256 public constant STANDARD_HASHRATE = 100;\n    uint256 public constant OVERCLOCK_HASH_BOOST = 20;\n    uint8 public constant MAX_OVERCLOCK_LEVEL = 5;\n\n    uint256 public constant PIONEER_REDEEM_SHARES = 120;\n    uint256 public constant STANDARD_REDEEM_SHARES = 100;\n    uint256 public constant IGNITED_REDEEM_SHARES = 64;\n    uint256 public constant OVERCLOCK_REDEEM_BOOST = 18;\n\n    uint256 public constant REDEEM_PAYOUT_BPS = 8800; // 88% paid out on burn, 12% stays in Floor Pool\n    uint256 public constant PURGE_BOUNTY_BPS = 2000;  // 20% of expired rig's unclaimed yield to liquidator\n    uint256 public constant CWATT_PER_SECOND_BASE = 1000 ether / uint256(1 hours); // 16,000 CWATT per 16h at 100 TH/s\n\n    uint256 private constant ACC_PRECISION = 1e18;\n\n    address public immutable REVENUE_RECEIVER;\n    ChronoWatt public immutable cwattToken;\n\n    address private _owner;\n\n    uint256 public totalSupply;\n    uint256 public burnedSupply;\n    uint256 public dormantMinted;\n    uint256 public paidRigsMinted;\n    uint256 public ignitedCount;\n    uint256 public totalOverclocks;\n    uint256 public totalPurges;\n\n    // Immutable On-Chain Reserve Pools (never withdrawable by admin)\n    uint256 public floorReservePool;\n    uint256 public totalFloorRedeemed;\n    uint256 public totalRedeemShares;\n\n    uint256 public accYieldPerHash;\n    uint256 public totalActiveHashrate;\n    uint256 public totalYieldDistributed;\n    uint256 public totalYieldClaimed;\n    uint256 public unallocatedYieldReserve;\n\n    struct RigInfo {\n        uint8 status;          // 1 = Dormant Chassis, 2 = Online Rig, 3 = Purged/Overheated, 4 = Burned\n        uint8 overclockLevel;  // 0..5\n        bool isPioneer;        // First 88 paid rigs\n        uint32 bornAt;\n        uint32 lastCwattAt;\n        uint32 expiresAt;\n        uint64 hashrate;       // Active TH/s shares contributing to totalActiveHashrate\n        uint64 baseHashrate;   // Restorable TH/s shares when overclocked after purge\n        uint64 redeemShares;   // Shares in floorReservePool\n    }\n\n    mapping(uint256 => address) private _owners;\n    mapping(address => uint256) private _balances;\n    mapping(uint256 => address) private _tokenApprovals;\n    mapping(address => mapping(address => bool)) private _operatorApprovals;\n\n    mapping(uint256 => RigInfo) public rigs;\n    mapping(uint256 => uint256) public tokenRewardDebt;\n    mapping(uint256 => uint256) public tokenPendingYield;\n\n    mapping(address => uint256) public dormantClaimed;\n    mapping(address => uint256) public walletMinted;\n    mapping(address => uint256) public referralEarnedWei;\n    mapping(address => uint256) public liquidatorEarnedWei;\n    mapping(address => uint256) public pendingReceiverBalance;\n    uint256 public totalPendingReceiverWei;\n\n    uint256 private _guard = 1;\n\n    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\n    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\n    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n    event DormantChassisClaimed(address indexed holder, uint256 indexed tokenId);\n    event ChassisIgnited(\n        address indexed holder,\n        uint256 indexed tokenId,\n        uint256 hashrate,\n        uint256 redeemShares,\n        uint256 expiresAt\n    );\n    event ChronoRigDeployed(\n        address indexed buyer,\n        uint256 indexed tokenId,\n        bool isPioneer,\n        uint256 hashrate,\n        uint256 redeemShares,\n        uint256 expiresAt,\n        address indexed referrer\n    );\n    event RigOverclocked(\n        address indexed caller,\n        uint256 indexed tokenId,\n        uint8 newLevel,\n        uint256 newHashrate,\n        uint256 newExpiresAt\n    );\n    event YieldAndWattClaimed(\n        address indexed holder,\n        uint256 indexed tokenId,\n        uint256 bnbAmount,\n        uint256 cwattAmount\n    );\n    event ExpiredRigPurged(\n        address indexed liquidator,\n        uint256 indexed tokenId,\n        uint256 bountyWei,\n        uint256 recycledWei\n    );\n    event RigBurnedForFloor(\n        address indexed redeemer,\n        uint256 indexed tokenId,\n        uint256 floorPayoutWei,\n        uint256 yieldPayoutWei,\n        uint256 retainedFloorWei\n    );\n\n    error ReentrancyLocked();\n    error NotAuthorized();\n    error ZeroAddress();\n    error InvalidQuantity();\n    error ExceedsSupplyCap();\n    error DormantQuotaFull();\n    error AlreadyClaimedDormant();\n    error AgentIdRequired();\n    error InsufficientPayment();\n    error TokenDoesNotExist();\n    error NotRigOwner();\n    error NotDormantChassis();\n    error RigNotActive();\n    error NotYetPurgeable();\n    error NoRedeemShares();\n    error TransferFailed();\n\n    modifier nonReentrant() {\n        if (_guard != 1) revert ReentrancyLocked();\n        _guard = 2;\n        _;\n        _guard = 1;\n    }\n\n    constructor(address _revenueReceiver) {\n        if (_revenueReceiver == address(0)) revert ZeroAddress();\n        REVENUE_RECEIVER = _revenueReceiver;\n        _owner = msg.sender;\n        cwattToken = new ChronoWatt(address(this));\n        emit OwnershipTransferred(address(0), msg.sender);\n    }\n\n    // -------------------------------------------------------------------------\n    // Ownership (Only used for initial deployment & immediate renounceOwnership)\n    // -------------------------------------------------------------------------\n\n    function owner() external view returns (address) {\n        return _owner;\n    }\n\n    function renounceOwnership() external {\n        if (msg.sender != _owner) revert NotAuthorized();\n        address prev = _owner;\n        _owner = address(0);\n        emit OwnershipTransferred(prev, address(0));\n    }\n\n    // -------------------------------------------------------------------------\n    // Tier 0: Free Dormant Chassis Hook (180 Cap for .ai Agent ID Holders)\n    // -------------------------------------------------------------------------\n\n    function claimChassis() external nonReentrant returns (uint256 tokenId) {\n        return _claimDormant(msg.sender);\n    }\n\n    function freeMint(uint256 qty) external payable nonReentrant returns (uint256 tokenId) {\n        if (msg.value > 0) {\n            return _deployPaidRigs(msg.sender, qty, address(0));\n        }\n        if (qty != 1) revert InvalidQuantity();\n        return _claimDormant(msg.sender);\n    }\n\n    function freeMint() external nonReentrant returns (uint256 tokenId) {\n        return _claimDormant(msg.sender);\n    }\n\n    function claim() external nonReentrant returns (uint256 tokenId) {\n        return _claimDormant(msg.sender);\n    }\n\n    function _claimDormant(address recipient) internal returns (uint256 tokenId) {\n        if (dormantMinted >= MAX_DORMANT_CHASSIS) revert DormantQuotaFull();\n        if (dormantClaimed[recipient] != 0) revert AlreadyClaimedDormant();\n        if (totalSupply >= MAX_SUPPLY) revert ExceedsSupplyCap();\n        if (!_holdsAgentId(recipient)) revert AgentIdRequired();\n\n        dormantClaimed[recipient] = 1;\n        unchecked {\n            dormantMinted += 1;\n            totalSupply += 1;\n        }\n        tokenId = totalSupply;\n\n        _mintToken(recipient, tokenId);\n        rigs[tokenId] = RigInfo({\n            status: 1, // Dormant Chassis\n            overclockLevel: 0,\n            isPioneer: false,\n            bornAt: uint32(block.timestamp),\n            lastCwattAt: uint32(block.timestamp),\n            expiresAt: 0,\n            hashrate: 0,\n            baseHashrate: 0,\n            redeemShares: 0\n        });\n\n        emit DormantChassisClaimed(recipient, tokenId);\n    }\n\n    // -------------------------------------------------------------------------\n    // Tier 0 -> Tier 1 Conversion: Ignite Dormant Chassis (0.0018 BNB)\n    // -------------------------------------------------------------------------\n\n    function igniteChassis(uint256 tokenId) external payable nonReentrant {\n        _ignite(tokenId);\n    }\n\n    function activateMyChassis() external payable nonReentrant {\n        uint256 foundId = 0;\n        uint256 sup = totalSupply;\n        for (uint256 i = 1; i <= sup; ++i) {\n            if (_owners[i] == msg.sender && rigs[i].status == 1) {\n                foundId = i;\n                break;\n            }\n        }\n        if (foundId == 0) revert NotDormantChassis();\n        _ignite(foundId);\n    }\n\n    function _ignite(uint256 tokenId) internal {\n        if (_owners[tokenId] == address(0)) revert TokenDoesNotExist();\n        RigInfo storage rig = rigs[tokenId];\n        if (rig.status != 1) revert NotDormantChassis();\n        if (msg.value < IGNITE_PRICE) revert InsufficientPayment();\n\n        uint32 nowTs = uint32(block.timestamp);\n        uint32 expTs = nowTs + uint32(RIG_LIFESPAN);\n\n        rig.status = 2; // Online Rig\n        rig.bornAt = nowTs;\n        rig.lastCwattAt = nowTs;\n        rig.expiresAt = expTs;\n        rig.hashrate = uint64(STANDARD_HASHRATE);\n        rig.baseHashrate = uint64(STANDARD_HASHRATE);\n        rig.redeemShares = uint64(IGNITED_REDEEM_SHARES);\n\n        // Distribute yield to existing online rigs before adding this rig's debt\n        _distributeYield(IGNITE_YIELD_WEI);\n\n        tokenRewardDebt[tokenId] = (uint256(STANDARD_HASHRATE) * accYieldPerHash) / ACC_PRECISION;\n\n        unchecked {\n            ignitedCount += 1;\n            totalActiveHashrate += STANDARD_HASHRATE;\n            totalRedeemShares += IGNITED_REDEEM_SHARES;\n            floorReservePool += IGNITE_FLOOR_WEI;\n        }\n\n        if (unallocatedYieldReserve > 0 && totalActiveHashrate > 0) {\n            uint256 buffered = unallocatedYieldReserve;\n            unallocatedYieldReserve = 0;\n            accYieldPerHash += (buffered * ACC_PRECISION) / totalActiveHashrate;\n            totalYieldDistributed += buffered;\n        }\n\n        uint256 receiverCut = IGNITE_PRICE - IGNITE_FLOOR_WEI - IGNITE_YIELD_WEI;\n        _sendOrCreditReceiver(receiverCut);\n\n        uint256 excess = msg.value - IGNITE_PRICE;\n        if (excess > 0) {\n            _safeSendEth(msg.sender, excess);\n        }\n\n        emit ChassisIgnited(_owners[tokenId], tokenId, STANDARD_HASHRATE, IGNITED_REDEEM_SHARES, expTs);\n    }\n\n    // -------------------------------------------------------------------------\n    // Tier 1: Direct Paid Active Chrono Rig (0.0028 BNB / 0.0025 BNB w/ Ref)\n    // -------------------------------------------------------------------------\n\n    function mint(uint256 qty) external payable nonReentrant returns (uint256 firstTokenId) {\n        if (msg.value == 0) {\n            if (qty != 1) revert InvalidQuantity();\n            return _claimDormant(msg.sender);\n        }\n        // If user sends IGNITE_PRICE (0.0018 BNB) with qty==1 and owns a Dormant Chassis, auto-ignite it\n        if (qty == 1 && msg.value >= IGNITE_PRICE && msg.value < REF_RIG_PRICE) {\n            uint256 sup = totalSupply;\n            for (uint256 i = 1; i <= sup; ++i) {\n                if (_owners[i] == msg.sender && rigs[i].status == 1) {\n                    _ignite(i);\n                    return i;\n                }\n            }\n        }\n        return _deployPaidRigs(msg.sender, qty, address(0));\n    }\n\n    function deployRig(uint256 qty) external payable nonReentrant returns (uint256 firstTokenId) {\n        return _deployPaidRigs(msg.sender, qty, address(0));\n    }\n\n    function deployRigWithRef(uint256 qty, address referrer) external payable nonReentrant returns (uint256 firstTokenId) {\n        return _deployPaidRigs(msg.sender, qty, referrer);\n    }\n\n    function mint(address referrer, uint256 qty) external payable nonReentrant returns (uint256 firstTokenId) {\n        return _deployPaidRigs(msg.sender, qty, referrer);\n    }\n\n    function mint() external payable nonReentrant returns (uint256 firstTokenId) {\n        if (msg.value == 0) {\n            return _claimDormant(msg.sender);\n        }\n        return _deployPaidRigs(msg.sender, 1, address(0));\n    }\n\n    function _deployPaidRigs(\n        address buyer,\n        uint256 qty,\n        address referrer\n    ) internal returns (uint256 firstTokenId) {\n        if (qty == 0 || qty > MAX_PER_TX) revert InvalidQuantity();\n        if (totalSupply + qty > MAX_SUPPLY) revert ExceedsSupplyCap();\n        if (walletMinted[buyer] + qty > MAX_PER_WALLET) revert InvalidQuantity();\n\n        bool validRef = (referrer != address(0) && referrer != buyer);\n        uint256 totalCost = (validRef ? REF_RIG_PRICE : RIG_PRICE) * qty;\n        if (msg.value < totalCost) revert InsufficientPayment();\n\n        walletMinted[buyer] += qty;\n        firstTokenId = totalSupply + 1;\n\n        // Distribute yield to existing active rigs before adding new rigs' debt\n        _distributeYield(YIELD_POOL_ADD_WEI * qty);\n\n        address refToEmit = validRef ? referrer : address(0);\n        uint256 addedHash = 0;\n        uint256 addedRedeem = 0;\n\n        for (uint256 i = 0; i < qty; ++i) {\n            (uint64 hW, uint64 rW) = _createPaidRig(buyer, refToEmit);\n            addedHash += hW;\n            addedRedeem += rW;\n        }\n\n        unchecked {\n            totalActiveHashrate += addedHash;\n            totalRedeemShares += addedRedeem;\n            floorReservePool += FLOOR_RESERVE_ADD_WEI * qty;\n        }\n\n        // If these were the very first active rigs, allocate any unallocated yield reserve now\n        if (unallocatedYieldReserve > 0 && totalActiveHashrate > 0) {\n            uint256 buffered = unallocatedYieldReserve;\n            unallocatedYieldReserve = 0;\n            accYieldPerHash += (buffered * ACC_PRECISION) / totalActiveHashrate;\n            totalYieldDistributed += buffered;\n        }\n\n        uint256 totalRefPay = validRef ? (REFERRER_REBATE_WEI * qty) : 0;\n        if (totalRefPay > 0) {\n            referralEarnedWei[referrer] += totalRefPay;\n            _sendOrCreditAddress(referrer, totalRefPay);\n        }\n\n        _sendOrCreditReceiver(totalCost - (FLOOR_RESERVE_ADD_WEI * qty) - (YIELD_POOL_ADD_WEI * qty) - totalRefPay);\n\n        if (msg.value > totalCost) {\n            _safeSendEth(buyer, msg.value - totalCost);\n        }\n    }\n\n    function _createPaidRig(\n        address buyer,\n        address refToEmit\n    ) internal returns (uint64 hashWeight, uint64 redeemWeight) {\n        unchecked {\n            totalSupply += 1;\n            paidRigsMinted += 1;\n        }\n        uint256 tokenId = totalSupply;\n        bool pioneer = (paidRigsMinted <= PIONEER_CAP);\n        hashWeight = uint64(pioneer ? PIONEER_HASHRATE : STANDARD_HASHRATE);\n        redeemWeight = uint64(pioneer ? PIONEER_REDEEM_SHARES : STANDARD_REDEEM_SHARES);\n\n        _mintToken(buyer, tokenId);\n\n        uint32 nowTs = uint32(block.timestamp);\n        uint32 expTs = nowTs + uint32(RIG_LIFESPAN);\n\n        rigs[tokenId] = RigInfo({\n            status: 2, // Online Rig\n            overclockLevel: 0,\n            isPioneer: pioneer,\n            bornAt: nowTs,\n            lastCwattAt: nowTs,\n            expiresAt: expTs,\n            hashrate: hashWeight,\n            baseHashrate: hashWeight,\n            redeemShares: redeemWeight\n        });\n\n        tokenRewardDebt[tokenId] = (uint256(hashWeight) * accYieldPerHash) / ACC_PRECISION;\n\n        emit ChronoRigDeployed(buyer, tokenId, pioneer, hashWeight, redeemWeight, expTs, refToEmit);\n    }\n\n    // -------------------------------------------------------------------------\n    // Layer 4: 16h Overclock Renewal (0.0010 BNB) & Permissionless Bot Purge\n    // -------------------------------------------------------------------------\n\n    function overclockRig(uint256 tokenId) external payable nonReentrant {\n        address rigOwner = _owners[tokenId];\n        if (rigOwner == address(0)) revert TokenDoesNotExist();\n        RigInfo storage rig = rigs[tokenId];\n        if (rig.status != 2 && rig.status != 3) revert RigNotActive();\n        if (msg.value < OVERCLOCK_PRICE) revert InsufficientPayment();\n\n        // Settle existing BNB yield & $CWATT before mutating hashrate\n        _settleTokenRewards(tokenId, rigOwner, false);\n\n        uint64 oldHash = rig.hashrate;\n        uint64 newBaseHash = rig.baseHashrate;\n        if (rig.overclockLevel < MAX_OVERCLOCK_LEVEL) {\n            rig.overclockLevel += 1;\n            newBaseHash += uint64(OVERCLOCK_HASH_BOOST);\n            rig.baseHashrate = newBaseHash;\n        }\n\n        rig.status = 2; // Online\n        rig.hashrate = newBaseHash;\n        rig.redeemShares += uint64(OVERCLOCK_REDEEM_BOOST);\n\n        uint32 nowTs = uint32(block.timestamp);\n        uint32 baseStart = rig.expiresAt > nowTs ? rig.expiresAt : nowTs;\n        uint32 newExp = baseStart + uint32(RIG_LIFESPAN);\n        rig.expiresAt = newExp;\n        rig.lastCwattAt = nowTs;\n\n        totalActiveHashrate = totalActiveHashrate - oldHash + newBaseHash;\n        totalRedeemShares += OVERCLOCK_REDEEM_BOOST;\n        floorReservePool += OVERCLOCK_FLOOR_WEI;\n        totalOverclocks += 1;\n\n        _distributeYield(OVERCLOCK_YIELD_WEI);\n        tokenRewardDebt[tokenId] = (uint256(newBaseHash) * accYieldPerHash) / ACC_PRECISION;\n\n        uint256 receiverCut = OVERCLOCK_PRICE - OVERCLOCK_FLOOR_WEI - OVERCLOCK_YIELD_WEI;\n        _sendOrCreditReceiver(receiverCut);\n\n        uint256 excess = msg.value - OVERCLOCK_PRICE;\n        if (excess > 0) {\n            _safeSendEth(msg.sender, excess);\n        }\n\n        emit RigOverclocked(msg.sender, tokenId, rig.overclockLevel, newBaseHash, newExp);\n    }\n\n    /// @notice Permissionless liquidation for rigs expired past the 4-hour grace period.\n    /// @dev Pays 20% of the expired rig's unclaimed BNB yield to `msg.sender` (liquidator bot)\n    ///      and recycles 80% back to online rigs.\n    function purgeExpiredRig(uint256 tokenId) external nonReentrant returns (uint256 bountyWei) {\n        address rigOwner = _owners[tokenId];\n        if (rigOwner == address(0)) revert TokenDoesNotExist();\n        RigInfo storage rig = rigs[tokenId];\n        if (rig.status != 2 || rig.hashrate == 0) revert RigNotActive();\n        if (block.timestamp <= uint256(rig.expiresAt) + PURGE_GRACE_PERIOD) revert NotYetPurgeable();\n\n        // Settle accrued yield up to this moment\n        uint256 newlyAccrued = ((uint256(rig.hashrate) * accYieldPerHash) / ACC_PRECISION) - tokenRewardDebt[tokenId];\n        uint256 totalUnclaimed = tokenPendingYield[tokenId] + newlyAccrued;\n        tokenPendingYield[tokenId] = 0;\n\n        // Settle accrued $CWATT up to expiresAt for the rig owner\n        _mintAccruedCwatt(tokenId, rigOwner);\n\n        // Remove expired rig's hashrate from active pool\n        uint64 removedHash = rig.hashrate;\n        rig.hashrate = 0;\n        rig.status = 3; // Purged / Overheated\n        tokenRewardDebt[tokenId] = 0;\n        totalActiveHashrate -= removedHash;\n        totalPurges += 1;\n\n        uint256 recycledWei = 0;\n        if (totalUnclaimed > 0) {\n            bountyWei = (totalUnclaimed * PURGE_BOUNTY_BPS) / 10000;\n            recycledWei = totalUnclaimed - bountyWei;\n            if (recycledWei > 0) {\n                _distributeYield(recycledWei);\n            }\n            if (bountyWei > 0) {\n                totalYieldClaimed += bountyWei;\n                liquidatorEarnedWei[msg.sender] += bountyWei;\n                _sendOrCreditAddress(msg.sender, bountyWei);\n            }\n        }\n\n        emit ExpiredRigPurged(msg.sender, tokenId, bountyWei, recycledWei);\n    }\n\n    // -------------------------------------------------------------------------\n    // Layer 3: Verifiable BNB Floor Vault Redemption (`burnToRedeem`)\n    // -------------------------------------------------------------------------\n\n    function burnToRedeem(uint256 tokenId) external nonReentrant returns (uint256 totalBnbOut) {\n        address rigOwner = _owners[tokenId];\n        if (rigOwner == address(0)) revert TokenDoesNotExist();\n        if (msg.sender != rigOwner && !isApprovedForAll(rigOwner, msg.sender) && getApproved(tokenId) != msg.sender) {\n            revert NotRigOwner();\n        }\n\n        RigInfo storage rig = rigs[tokenId];\n        uint64 rShares = rig.redeemShares;\n        if (rShares == 0 || totalRedeemShares == 0) revert NoRedeemShares();\n\n        // 1. Settle pending BNB yield & $CWATT\n        uint256 yieldOut = _settleTokenRewards(tokenId, rigOwner, true);\n\n        // 2. Calculate proportional floor reserve share\n        uint256 grossFloorWei = (floorReservePool * uint256(rShares)) / totalRedeemShares;\n        uint256 floorPayoutWei;\n        if (totalRedeemShares == rShares) {\n            // Last remaining rig takes 100% of the reserve\n            floorPayoutWei = floorReservePool;\n        } else {\n            // 88% paid out, 12% retained in floorReservePool to boost Floor NAV for remaining rigs\n            floorPayoutWei = (grossFloorWei * REDEEM_PAYOUT_BPS) / 10000;\n        }\n        uint256 retainedWei = grossFloorWei - floorPayoutWei;\n\n        // 3. Update state & burn token before external transfer\n        floorReservePool -= floorPayoutWei;\n        totalFloorRedeemed += floorPayoutWei;\n        totalRedeemShares -= rShares;\n\n        if (rig.hashrate > 0) {\n            totalActiveHashrate -= rig.hashrate;\n        }\n        rig.status = 4; // Burned\n        rig.hashrate = 0;\n        rig.baseHashrate = 0;\n        rig.redeemShares = 0;\n        tokenRewardDebt[tokenId] = 0;\n\n        _burnToken(tokenId);\n\n        totalBnbOut = floorPayoutWei + yieldOut;\n        if (totalBnbOut > 0) {\n            _safeSendEth(rigOwner, totalBnbOut);\n        }\n\n        emit RigBurnedForFloor(rigOwner, tokenId, floorPayoutWei, yieldOut, retainedWei);\n    }\n\n    // -------------------------------------------------------------------------\n    // Yield & $CWATT Claiming\n    // -------------------------------------------------------------------------\n\n    function claimYield(uint256 tokenId) external nonReentrant returns (uint256 bnbOut, uint256 cwattOut) {\n        address rigOwner = _owners[tokenId];\n        if (rigOwner == address(0)) revert TokenDoesNotExist();\n        cwattOut = _pendingCwatt(tokenId);\n        bnbOut = _settleTokenRewards(tokenId, rigOwner, true);\n        if (bnbOut > 0) {\n            _safeSendEth(rigOwner, bnbOut);\n        }\n    }\n\n    function claimBatchYield(uint256[] calldata tokenIds) external nonReentrant returns (uint256 totalBnbOut) {\n        for (uint256 i = 0; i < tokenIds.length; ++i) {\n            uint256 tid = tokenIds[i];\n            address rigOwner = _owners[tid];\n            if (rigOwner == msg.sender) {\n                totalBnbOut += _settleTokenRewards(tid, msg.sender, true);\n            }\n        }\n        if (totalBnbOut > 0) {\n            _safeSendEth(msg.sender, totalBnbOut);\n        }\n    }\n\n    function withdrawPendingBalance() external nonReentrant {\n        uint256 amt = pendingReceiverBalance[msg.sender];\n        if (amt == 0) revert InsufficientPayment();\n        pendingReceiverBalance[msg.sender] = 0;\n        totalPendingReceiverWei -= amt;\n        _safeSendEth(msg.sender, amt);\n    }\n\n    // -------------------------------------------------------------------------\n    // Public View & Scanner Inspection Helpers\n    // -------------------------------------------------------------------------\n\n    function quote(uint256 qty) external pure returns (uint256) {\n        return qty * RIG_PRICE;\n    }\n\n    function mintPrice() external pure returns (uint256) {\n        return RIG_PRICE;\n    }\n\n    function freeSupplyRemaining() external view returns (uint256) {\n        return dormantMinted >= MAX_DORMANT_CHASSIS ? 0 : (MAX_DORMANT_CHASSIS - dormantMinted);\n    }\n\n    function previewRedeem(uint256 tokenId)\n        external\n        view\n        returns (\n            uint256 grossFloorWei,\n            uint256 netFloorPayoutWei,\n            uint256 pendingYieldWei,\n            uint256 pendingCwattAmount\n        )\n    {\n        RigInfo memory rig = rigs[tokenId];\n        if (rig.redeemShares > 0 && totalRedeemShares > 0) {\n            grossFloorWei = (floorReservePool * uint256(rig.redeemShares)) / totalRedeemShares;\n            netFloorPayoutWei = (totalRedeemShares == rig.redeemShares)\n                ? floorReservePool\n                : (grossFloorWei * REDEEM_PAYOUT_BPS) / 10000;\n        }\n        pendingYieldWei = pendingYieldOfToken(tokenId);\n        pendingCwattAmount = _pendingCwatt(tokenId);\n    }\n\n    function pendingYieldOfToken(uint256 tokenId) public view returns (uint256) {\n        RigInfo memory rig = rigs[tokenId];\n        if (rig.hashrate == 0) return tokenPendingYield[tokenId];\n        uint256 accrued = ((uint256(rig.hashrate) * accYieldPerHash) / ACC_PRECISION) - tokenRewardDebt[tokenId];\n        return tokenPendingYield[tokenId] + accrued;\n    }\n\n    function getProtocolMetrics()\n        external\n        view\n        returns (\n            uint256 mintedTotal,\n            uint256 activeSupply,\n            uint256 dormantRemaining,\n            uint256 floorVaultWei,\n            uint256 activeHashrateTotal,\n            uint256 redeemSharesTotal,\n            uint256 floorNavPer100SharesWei\n        )\n    {\n        mintedTotal = totalSupply;\n        activeSupply = totalSupply - burnedSupply;\n        dormantRemaining = dormantMinted >= MAX_DORMANT_CHASSIS ? 0 : (MAX_DORMANT_CHASSIS - dormantMinted);\n        floorVaultWei = floorReservePool;\n        activeHashrateTotal = totalActiveHashrate;\n        redeemSharesTotal = totalRedeemShares;\n        floorNavPer100SharesWei = totalRedeemShares > 0 ? (floorReservePool * 100) / totalRedeemShares : 0;\n    }\n\n    // -------------------------------------------------------------------------\n    // Internal Reward & Reserve Helpers\n    // -------------------------------------------------------------------------\n\n    function _distributeYield(uint256 amount) internal {\n        if (amount == 0) return;\n        if (totalActiveHashrate == 0) {\n            unallocatedYieldReserve += amount;\n        } else {\n            uint256 totalToDistribute = amount + unallocatedYieldReserve;\n            if (unallocatedYieldReserve > 0) {\n                unallocatedYieldReserve = 0;\n            }\n            accYieldPerHash += (totalToDistribute * ACC_PRECISION) / totalActiveHashrate;\n            totalYieldDistributed += totalToDistribute;\n        }\n    }\n\n    function _settleTokenRewards(\n        uint256 tokenId,\n        address rigOwner,\n        bool payoutYieldNow\n    ) internal returns (uint256 bnbPaid) {\n        RigInfo storage rig = rigs[tokenId];\n        if (rig.hashrate > 0) {\n            uint256 accrued = ((uint256(rig.hashrate) * accYieldPerHash) / ACC_PRECISION) - tokenRewardDebt[tokenId];\n            if (accrued > 0) {\n                tokenPendingYield[tokenId] += accrued;\n            }\n            tokenRewardDebt[tokenId] = (uint256(rig.hashrate) * accYieldPerHash) / ACC_PRECISION;\n        }\n\n        uint256 cwattAmt = _mintAccruedCwatt(tokenId, rigOwner);\n\n        if (payoutYieldNow) {\n            bnbPaid = tokenPendingYield[tokenId];\n            if (bnbPaid > 0) {\n                tokenPendingYield[tokenId] = 0;\n                totalYieldClaimed += bnbPaid;\n            }\n            if (bnbPaid > 0 || cwattAmt > 0) {\n                emit YieldAndWattClaimed(rigOwner, tokenId, bnbPaid, cwattAmt);\n            }\n        }\n    }\n\n    function _pendingCwatt(uint256 tokenId) internal view returns (uint256) {\n        RigInfo memory rig = rigs[tokenId];\n        if (rig.status != 2 || rig.hashrate == 0) return 0;\n        uint256 capTime = block.timestamp < rig.expiresAt ? block.timestamp : uint256(rig.expiresAt);\n        if (capTime <= rig.lastCwattAt) return 0;\n        uint256 elapsed = capTime - uint256(rig.lastCwattAt);\n        return (elapsed * CWATT_PER_SECOND_BASE * uint256(rig.hashrate)) / 100;\n    }\n\n    function _mintAccruedCwatt(uint256 tokenId, address rigOwner) internal returns (uint256 cwattAmt) {\n        RigInfo storage rig = rigs[tokenId];\n        if (rig.status != 2 || rig.hashrate == 0) return 0;\n        uint256 capTime = block.timestamp < rig.expiresAt ? block.timestamp : uint256(rig.expiresAt);\n        if (capTime <= rig.lastCwattAt) return 0;\n        uint256 elapsed = capTime - uint256(rig.lastCwattAt);\n        rig.lastCwattAt = uint32(capTime);\n        cwattAmt = (elapsed * CWATT_PER_SECOND_BASE * uint256(rig.hashrate)) / 100;\n        if (cwattAmt > 0 && rigOwner != address(0)) {\n            cwattToken.mintCompute(rigOwner, cwattAmt);\n        }\n    }\n\n    function _holdsAgentId(address user) internal view returns (bool) {\n        (bool ok, bytes memory data) = AGENT_REGISTRY.staticcall(\n            abi.encodeWithSelector(IBinanceAgentRegistry.balanceOf.selector, user)\n        );\n        if (!ok || data.length < 32) return false;\n        return abi.decode(data, (uint256)) > 0;\n    }\n\n    function _sendOrCreditReceiver(uint256 amount) internal {\n        if (amount == 0) return;\n        (bool ok, ) = REVENUE_RECEIVER.call{value: amount, gas: 30000}(\"\");\n        if (!ok) {\n            pendingReceiverBalance[REVENUE_RECEIVER] += amount;\n            totalPendingReceiverWei += amount;\n        }\n    }\n\n    function _sendOrCreditAddress(address to, uint256 amount) internal {\n        if (amount == 0) return;\n        (bool ok, ) = to.call{value: amount, gas: 30000}(\"\");\n        if (!ok) {\n            pendingReceiverBalance[to] += amount;\n            totalPendingReceiverWei += amount;\n        }\n    }\n\n    function _safeSendEth(address to, uint256 amount) internal {\n        (bool ok, ) = to.call{value: amount}(\"\");\n        if (!ok) revert TransferFailed();\n    }\n\n    // -------------------------------------------------------------------------\n    // ERC-721 Standard Implementation & Dynamic On-Chain SVG Telemetry\n    // -------------------------------------------------------------------------\n\n    function supportsInterface(bytes4 interfaceId) external pure override returns (bool) {\n        return\n            interfaceId == 0x01ffc9a7 || // ERC165\n            interfaceId == 0x80ac58cd || // ERC721\n            interfaceId == 0x5b5e139f;   // ERC721Metadata\n    }\n\n    function balanceOf(address holder) external view returns (uint256) {\n        if (holder == address(0)) revert ZeroAddress();\n        return _balances[holder];\n    }\n\n    function ownerOf(uint256 tokenId) public view returns (address) {\n        address holder = _owners[tokenId];\n        if (holder == address(0)) revert TokenDoesNotExist();\n        return holder;\n    }\n\n    function approve(address to, uint256 tokenId) external {\n        address holder = ownerOf(tokenId);\n        if (msg.sender != holder && !isApprovedForAll(holder, msg.sender)) revert NotAuthorized();\n        _tokenApprovals[tokenId] = to;\n        emit Approval(holder, to, tokenId);\n    }\n\n    function getApproved(uint256 tokenId) public view returns (address) {\n        if (_owners[tokenId] == address(0)) revert TokenDoesNotExist();\n        return _tokenApprovals[tokenId];\n    }\n\n    function setApprovalForAll(address operator, bool approved) external {\n        _operatorApprovals[msg.sender][operator] = approved;\n        emit ApprovalForAll(msg.sender, operator, approved);\n    }\n\n    function isApprovedForAll(address holder, address operator) public view returns (bool) {\n        return _operatorApprovals[holder][operator];\n    }\n\n    function transferFrom(address from, address to, uint256 tokenId) public {\n        if (to == address(0)) revert ZeroAddress();\n        address holder = ownerOf(tokenId);\n        if (holder != from) revert NotRigOwner();\n        if (msg.sender != from && !isApprovedForAll(from, msg.sender) && getApproved(tokenId) != msg.sender) {\n            revert NotAuthorized();\n        }\n        delete _tokenApprovals[tokenId];\n        unchecked {\n            _balances[from] -= 1;\n            _balances[to] += 1;\n        }\n        _owners[tokenId] = to;\n        emit Transfer(from, to, tokenId);\n    }\n\n    function safeTransferFrom(address from, address to, uint256 tokenId) external {\n        safeTransferFrom(from, to, tokenId, \"\");\n    }\n\n    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public {\n        transferFrom(from, to, tokenId);\n        if (to.code.length > 0) {\n            bytes4 retval = IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, data);\n            if (retval != IERC721Receiver.onERC721Received.selector) revert NotAuthorized();\n        }\n    }\n\n    function _mintToken(address to, uint256 tokenId) internal {\n        _owners[tokenId] = to;\n        unchecked {\n            _balances[to] += 1;\n        }\n        emit Transfer(address(0), to, tokenId);\n    }\n\n    function _burnToken(uint256 tokenId) internal {\n        address holder = _owners[tokenId];\n        delete _tokenApprovals[tokenId];\n        delete _owners[tokenId];\n        unchecked {\n            _balances[holder] -= 1;\n            burnedSupply += 1;\n        }\n        emit Transfer(holder, address(0), tokenId);\n    }\n\n    function tokenURI(uint256 tokenId) external view returns (string memory) {\n        if (_owners[tokenId] == address(0)) revert TokenDoesNotExist();\n        RigInfo memory rig = rigs[tokenId];\n\n        string memory statusLabel;\n        string memory accentColor;\n        if (rig.status == 1) {\n            statusLabel = \"DORMANT CHASSIS (0 TH/s - Call igniteChassis)\";\n            accentColor = \"#94a3b8\";\n        } else if (rig.status == 2 && block.timestamp <= rig.expiresAt) {\n            statusLabel = rig.isPioneer ? \"PIONEER RIG ONLINE (16H CYCLE)\" : \"CHRONO RIG ONLINE (16H CYCLE)\";\n            accentColor = rig.isPioneer ? \"#f59e0b\" : \"#10b981\";\n        } else {\n            statusLabel = \"OVERHEATED (Call overclockRig 0.001 BNB)\";\n            accentColor = \"#ef4444\";\n        }\n\n        uint256 floorWei = (rig.redeemShares > 0 && totalRedeemShares > 0)\n            ? (floorReservePool * uint256(rig.redeemShares)) / totalRedeemShares\n            : 0;\n\n        string memory svgPart1 = string(\n            abi.encodePacked(\n                '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 500 500\">',\n                '<rect width=\"500\" height=\"500\" rx=\"24\" fill=\"#090d16\"/>',\n                '<rect x=\"20\" y=\"20\" width=\"460\" height=\"460\" rx=\"16\" fill=\"none\" stroke=\"',\n                accentColor,\n                '\" stroke-width=\"2\"/>',\n                '<text x=\"42\" y=\"68\" fill=\"#f8fafc\" font-family=\"monospace\" font-size=\"22\" font-weight=\"bold\">CHRONOVAULT RIG #',\n                _toString(tokenId),\n                '</text><text x=\"42\" y=\"102\" fill=\"',\n                accentColor,\n                '\" font-family=\"monospace\" font-size=\"13\">',\n                statusLabel,\n                \"</text>\"\n            )\n        );\n\n        string memory svgPart2 = string(\n            abi.encodePacked(\n                '<rect x=\"42\" y=\"132\" width=\"416\" height=\"96\" rx=\"10\" fill=\"#111827\" stroke=\"#1f2937\"/>',\n                '<text x=\"60\" y=\"166\" fill=\"#9ca3af\" font-family=\"monospace\" font-size=\"13\">ACTIVE HASHRATE</text>',\n                '<text x=\"60\" y=\"202\" fill=\"#ffffff\" font-family=\"monospace\" font-size=\"24\" font-weight=\"bold\">',\n                _toString(rig.hashrate),\n                ' TH/s</text><text x=\"260\" y=\"166\" fill=\"#9ca3af\" font-family=\"monospace\" font-size=\"13\">REDEEM SHARES</text>',\n                '<text x=\"260\" y=\"202\" fill=\"#38bdf8\" font-family=\"monospace\" font-size=\"24\" font-weight=\"bold\">',\n                _toString(rig.redeemShares),\n                \"</text>\"\n            )\n        );\n\n        string memory svgPart3 = string(\n            abi.encodePacked(\n                '<rect x=\"42\" y=\"248\" width=\"416\" height=\"104\" rx=\"10\" fill=\"#111827\" stroke=\"#1f2937\"/>',\n                '<text x=\"60\" y=\"282\" fill=\"#9ca3af\" font-family=\"monospace\" font-size=\"13\">VERIFIABLE FLOOR BACKING (WEI)</text>',\n                '<text x=\"60\" y=\"320\" fill=\"#10b981\" font-family=\"monospace\" font-size=\"20\" font-weight=\"bold\">',\n                _toString(floorWei),\n                ' wei</text><text x=\"42\" y=\"405\" fill=\"#cbd5e1\" font-family=\"monospace\" font-size=\"12\">OVERCLOCK LVL: ',\n                _toString(rig.overclockLevel),\n                ' / 5 | 30% HARD-LOCKED FLOOR VAULT</text><text x=\"42\" y=\"435\" fill=\"#64748b\" font-family=\"monospace\" font-size=\"11\">https://chronovault.surge.sh | burnToRedeem() = 88% BNB Floor</text></svg>'\n            )\n        );\n\n        string memory attrs = string(\n            abi.encodePacked(\n                '[{\"trait_type\":\"Status\",\"value\":\"',\n                statusLabel,\n                '\"},{\"trait_type\":\"Hashrate TH/s\",\"value\":',\n                _toString(rig.hashrate),\n                '},{\"trait_type\":\"Redeem Shares\",\"value\":',\n                _toString(rig.redeemShares),\n                '},{\"trait_type\":\"Overclock Level\",\"value\":',\n                _toString(rig.overclockLevel),\n                \"}]}\"\n            )\n        );\n\n        return\n            string(\n                abi.encodePacked(\n                    'data:application/json;utf8,{\"name\":\"ChronoVault Rig #',\n                    _toString(tokenId),\n                    '\",\"external_url\":\"https://chronovault.surge.sh\",\"description\":\"ChronoVault Rig (CVRG) - Official Portal: https://chronovault.surge.sh | Verifiable 30% BNB Floor Reserve Vault + 16-Hour Lifespan Compute Miner on BNB Chain. Dormant Chassis (0 BNB) carry 0 TH/s and 0 Floor Shares until ignited via igniteChassis(tokenId) (0.0018 BNB) or deployed directly via deployRig(qty) (0.0028 BNB). Active rigs mine $CWATT, earn 15% real-time BNB yield, and can call burnToRedeem(tokenId) anytime to burn and withdraw 88% of their proportional BNB floor reserve.\",\"image\":\"data:image/svg+xml;utf8,',\n                    svgPart1,\n                    svgPart2,\n                    svgPart3,\n                    '\",\"attributes\":',\n                    attrs\n                )\n            );\n    }\n\n    function _toString(uint256 value) internal pure returns (string memory) {\n        if (value == 0) return \"0\";\n        uint256 temp = value;\n        uint256 digits;\n        while (temp != 0) {\n            digits++;\n            temp /= 10;\n        }\n        bytes memory buffer = new bytes(digits);\n        while (value != 0) {\n            digits -= 1;\n            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));\n            value /= 10;\n        }\n        return string(buffer);\n    }\n}\n"}},"abi":[{"type":"constructor","inputs":[{"name":"_revenueReceiver","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"name":"AgentIdRequired","type":"error","inputs":[]},{"name":"AlreadyClaimedDormant","type":"error","inputs":[]},{"name":"DormantQuotaFull","type":"error","inputs":[]},{"name":"ExceedsSupplyCap","type":"error","inputs":[]},{"name":"InsufficientPayment","type":"error","inputs":[]},{"name":"InvalidQuantity","type":"error","inputs":[]},{"name":"NoRedeemShares","type":"error","inputs":[]},{"name":"NotAuthorized","type":"error","inputs":[]},{"name":"NotDormantChassis","type":"error","inputs":[]},{"name":"NotRigOwner","type":"error","inputs":[]},{"name":"NotYetPurgeable","type":"error","inputs":[]},{"name":"ReentrancyLocked","type":"error","inputs":[]},{"name":"RigNotActive","type":"error","inputs":[]},{"name":"TokenDoesNotExist","type":"error","inputs":[]},{"name":"TransferFailed","type":"error","inputs":[]},{"name":"ZeroAddress","type":"error","inputs":[]},{"name":"Approval","type":"event","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"approved","type":"address","indexed":true,"internalType":"address"},{"name":"tokenId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"name":"ApprovalForAll","type":"event","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"operator","type":"address","indexed":true,"internalType":"address"},{"name":"approved","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"name":"ChassisIgnited","type":"event","inputs":[{"name":"holder","type":"address","indexed":true,"internalType":"address"},{"name":"tokenId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"hashrate","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"redeemShares","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"expiresAt","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"ChronoRigDeployed","type":"event","inputs":[{"name":"buyer","type":"address","indexed":true,"internalType":"address"},{"name":"tokenId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"isPioneer","type":"bool","indexed":false,"internalType":"bool"},{"name":"hashrate","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"redeemShares","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"expiresAt","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"referrer","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"name":"DormantChassisClaimed","type":"event","inputs":[{"name":"holder","type":"address","indexed":true,"internalType":"address"},{"name":"tokenId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"name":"ExpiredRigPurged","type":"event","inputs":[{"name":"liquidator","type":"address","indexed":true,"internalType":"address"},{"name":"tokenId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"bountyWei","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"recycledWei","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"OwnershipTransferred","type":"event","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"name":"RigBurnedForFloor","type":"event","inputs":[{"name":"redeemer","type":"address","indexed":true,"internalType":"address"},{"name":"tokenId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"floorPayoutWei","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"yieldPayoutWei","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"retainedFloorWei","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"RigOverclocked","type":"event","inputs":[{"name":"caller","type":"address","indexed":true,"internalType":"address"},{"name":"tokenId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"newLevel","type":"uint8","indexed":false,"internalType":"uint8"},{"name":"newHashrate","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"newExpiresAt","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"Transfer","type":"event","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"tokenId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"name":"YieldAndWattClaimed","type":"event","inputs":[{"name":"holder","type":"address","indexed":true,"internalType":"address"},{"name":"tokenId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"bnbAmount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"cwattAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"AGENT_REGISTRY","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"CWATT_PER_SECOND_BASE","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"FLOOR_RESERVE_ADD_WEI","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"IGNITED_REDEEM_SHARES","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"IGNITE_FLOOR_WEI","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"IGNITE_PRICE","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"IGNITE_YIELD_WEI","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"MAX_DORMANT_CHASSIS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"MAX_OVERCLOCK_LEVEL","type":"function","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"name":"MAX_PER_TX","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"MAX_PER_WALLET","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"MAX_SUPPLY","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"OVERCLOCK_FLOOR_WEI","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"OVERCLOCK_HASH_BOOST","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"OVERCLOCK_PRICE","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"OVERCLOCK_REDEEM_BOOST","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"OVERCLOCK_YIELD_WEI","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"PIONEER_CAP","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"PIONEER_HASHRATE","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"PIONEER_REDEEM_SHARES","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"PRICE","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"PURGE_BOUNTY_BPS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"PURGE_GRACE_PERIOD","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"REDEEM_PAYOUT_BPS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"REFERRER_REBATE_WEI","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"REF_RIG_PRICE","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"REVENUE_RECEIVER","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"RIG_LIFESPAN","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"RIG_PRICE","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"STANDARD_HASHRATE","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"STANDARD_REDEEM_SHARES","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"YIELD_POOL_ADD_WEI","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"accYieldPerHash","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"activateMyChassis","type":"function","inputs":[],"outputs":[],"stateMutability":"payable"},{"name":"approve","type":"function","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"balanceOf","type":"function","inputs":[{"name":"holder","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"burnToRedeem","type":"function","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"totalBnbOut","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"name":"burnedSupply","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"claim","type":"function","inputs":[],"outputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"name":"claimBatchYield","type":"function","inputs":[{"name":"tokenIds","type":"uint256[]","internalType":"uint256[]"}],"outputs":[{"name":"totalBnbOut","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"name":"claimChassis","type":"function","inputs":[],"outputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"name":"claimYield","type":"function","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"bnbOut","type":"uint256","internalType":"uint256"},{"name":"cwattOut","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"name":"cwattToken","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ChronoWatt"}],"stateMutability":"view"},{"name":"deployRig","type":"function","inputs":[{"name":"qty","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"firstTokenId","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"name":"deployRigWithRef","type":"function","inputs":[{"name":"qty","type":"uint256","internalType":"uint256"},{"name":"referrer","type":"address","internalType":"address"}],"outputs":[{"name":"firstTokenId","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"name":"dormantClaimed","type":"function","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"dormantMinted","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"externalURL","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"floorReservePool","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"freeMint","type":"function","inputs":[],"outputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"name":"freeMint","type":"function","inputs":[{"name":"qty","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"name":"freeSupplyRemaining","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"getApproved","type":"function","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"getProtocolMetrics","type":"function","inputs":[],"outputs":[{"name":"mintedTotal","type":"uint256","internalType":"uint256"},{"name":"activeSupply","type":"uint256","internalType":"uint256"},{"name":"dormantRemaining","type":"uint256","internalType":"uint256"},{"name":"floorVaultWei","type":"uint256","internalType":"uint256"},{"name":"activeHashrateTotal","type":"uint256","internalType":"uint256"},{"name":"redeemSharesTotal","type":"uint256","internalType":"uint256"},{"name":"floorNavPer100SharesWei","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"igniteChassis","type":"function","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"payable"},{"name":"ignitedCount","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"isApprovedForAll","type":"function","inputs":[{"name":"holder","type":"address","internalType":"address"},{"name":"operator","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"name":"liquidatorEarnedWei","type":"function","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"mint","type":"function","inputs":[],"outputs":[{"name":"firstTokenId","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"name":"mint","type":"function","inputs":[{"name":"referrer","type":"address","internalType":"address"},{"name":"qty","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"firstTokenId","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"name":"mint","type":"function","inputs":[{"name":"qty","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"firstTokenId","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"name":"mintPrice","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"name":"name","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"overclockRig","type":"function","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"payable"},{"name":"owner","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"ownerOf","type":"function","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"paidRigsMinted","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"pendingReceiverBalance","type":"function","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"pendingYieldOfToken","type":"function","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"previewRedeem","type":"function","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"grossFloorWei","type":"uint256","internalType":"uint256"},{"name":"netFloorPayoutWei","type":"uint256","internalType":"uint256"},{"name":"pendingYieldWei","type":"uint256","internalType":"uint256"},{"name":"pendingCwattAmount","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"purgeExpiredRig","type":"function","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"bountyWei","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"name":"quote","type":"function","inputs":[{"name":"qty","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"name":"referralEarnedWei","type":"function","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"renounceOwnership","type":"function","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"name":"rigs","type":"function","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"status","type":"uint8","internalType":"uint8"},{"name":"overclockLevel","type":"uint8","internalType":"uint8"},{"name":"isPioneer","type":"bool","internalType":"bool"},{"name":"bornAt","type":"uint32","internalType":"uint32"},{"name":"lastCwattAt","type":"uint32","internalType":"uint32"},{"name":"expiresAt","type":"uint32","internalType":"uint32"},{"name":"hashrate","type":"uint64","internalType":"uint64"},{"name":"baseHashrate","type":"uint64","internalType":"uint64"},{"name":"redeemShares","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"name":"safeTransferFrom","type":"function","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"safeTransferFrom","type":"function","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"setApprovalForAll","type":"function","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"approved","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"supportsInterface","type":"function","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"name":"symbol","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"tokenPendingYield","type":"function","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"tokenRewardDebt","type":"function","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"tokenURI","type":"function","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"totalActiveHashrate","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"totalFloorRedeemed","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"totalOverclocks","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"totalPendingReceiverWei","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"totalPurges","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"totalRedeemShares","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"totalSupply","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"totalYieldClaimed","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"totalYieldDistributed","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"transferFrom","type":"function","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"unallocatedYieldReserve","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"walletMinted","type":"function","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"website","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"withdrawPendingBalance","type":"function","inputs":[],"outputs":[],"stateMutability":"nonpayable"}],"matchId":"57695500","creationMatch":"exact_match","runtimeMatch":"exact_match","verifiedAt":"2026-10-30T15:49:26Z","match":"exact_match","chainId":"56","address":"0x1e16B084FDbf191a128B224E90983081FF215987"}