{
  "scope": "Local NFT assignment module compilation and mock lifecycle only; no ERC-721 integration, live VRF verification or deployment.",
  "sdk": "0.6.2",
  "protocolSourceCommit": "b733d8d144649bd92a16158fe0b5d48eb6b27b1f",
  "compiler": "0.8.28+commit.7893614a.Emscripten.clang",
  "evmVersion": "cancun",
  "diagnostics": [],
  "nftRevealSourceSha256": "976caf7c710473e7ca95a892b63d445f768ac5f5b889d70d3109781055a1b9a8",
  "creationBytecodeBytes": 6192,
  "runtimeBytecodeBytes": 4911,
  "importedSourceHashesVerified": true,
  "roundCoordinatorInterfaceCompatible": true,
  "checks": [
    "reject empty, mismatched, duplicate-token, zero-hash and 65-item lists, and coordinator/collection addresses without code",
    "token ID zero is valid; exact ordered token IDs and content hashes are stored and committed with the collection; reordering or changing bytes changes the commitment/hash",
    "assignment is unavailable before reveal; only the collection may request, its test mint-close gate is enforced, and zero/module-self refund recipients are rejected",
    "a mined underpayment revert rolls back Pending and request ID, leaving no request or trapped fee",
    "result and refund entry points authenticate the coordinator and reject unsolicited request ID zero",
    "request binds commitment, Shuffle(n,n), original sponsor and 100,000-gas callback; funded reentry through the authorized collection fails with AlreadyStarted",
    "all value reaches the coordinator; excess belongs only to the original sponsor, who can withdraw it to another recipient",
    "bounded callback stores the final word; a non-self-inverse permutation proves forward token-position-to-metadata-index direction; out-of-range positions, replacement words, wrong IDs and repeat reveals fail",
    "one-token collection with token ID zero and an all-zero random word reveals successfully",
    "64 items match the SDK exactly and form a bijection; duplicate nonzero metadata hashes are allowed; failed callback retries the same zero word within 100,000 gas without another request or service fee",
    "expiry refunds the fixed sponsor; failed notification leaves Pending but blocks rerolls; notification retry pays nothing again and terminal Expired rejects late results and repeat requests",
    "failed native refund is backed credit owned by the original contract sponsor and recoverable to another address"
  ],
  "directionExample": {
    "tokenIds": [
      "0",
      "7",
      "42"
    ],
    "word": "0x464aa1764a15e9f76a8640e02759aeebbf490e2f1c296eb632cef801a9e340b1",
    "permutation": [
      2,
      0,
      1
    ],
    "metadataHashes": [
      "0x79a1b04a8b6440c2d56b5790bc38c061b906dd6d273994e99c3a43454cbfac18",
      "0x23f21b8d3bd2b36f2ca4259c0e705708219d93562ca4c267b175e530b72cf66d",
      "0xf3dca82dec2f16d1ab2750426e4740860152135992930c31200d5f3a76a9c715"
    ]
  },
  "permutationViewGasAt64": 114057,
  "network": "isolated local Anvil, chain 31337",
  "callbackGasTested": 100000
}
