{
  "v": 1,
  "requestId": "75a4a0d2-aec4-48ff-8b8e-3df639720ce0",
  "chainId": 1,
  "window": {
    "toBlock": 26026608,
    "fromBlock": 26019452,
    "toBlockHash": "0x84272223fc64b8c836b51b2c341b61a03bfe7728fa6d655347f56dbf837fbf3f"
  },
  "answerType": "uint256",
  "answer": "1884938888888888",
  "figure": "1884938888888888",
  "definitions": {
    "sale": "an OrderFulfilled event emitted by Seaport 1.5 (0x00000000000000adc04c56bf30ac9d3c0aaf14dc) or Seaport 1.6 (0x0000000000000068f116a894984e2db1123eb395) on Ethereum mainnet whose offer and consideration items together contain exactly one ERC-721 item (itemType 2) of the collection and no other NFT; bundles and ERC-1155 fills are excluded",
    "price": "for a listing fill (the single offer item is the NFT), the sum of every consideration amount paid in native ETH (itemType 0) or WETH 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 (itemType 1), fees included, and only if every consideration item is ETH or WETH; for a bid fill (the single offer item is ETH or WETH), the offer amount; fills paid in any other token are excluded",
    "source": "the chain itself: eth_getLogs for the OrderFulfilled topic on both Seaport contracts over exactly the pinned blocks, decoded with the Seaport ABI",
    "average": "the arithmetic mean, rounded down to an integer number of wei, of the price of every qualifying sale in the pinned block window; 0 only if there was no qualifying sale",
    "denomination": "Integer wei; ETH and canonical WETH amounts are combined 1:1 without a market conversion.",
    "window": "Both endpoints are inclusive: 26019452 through 26026608. Verify chainId 1 and the pinned closing hash before reading logs.",
    "counting": "Count each distinct non-removed log once by blockNumber and logIndex. Each qualifying event counts separately, including repeated sales of a token; do not deduplicate by order hash or transaction.",
    "eligibility": "Require exactly one offer item and exactly one NFT item across both arrays, with itemType 2, the collection address, and amount 1. Exclude any other NFT (itemType >= 2). For bids, every consideration item other than that NFT must also be ETH or canonical WETH.",
    "opensea": "Use the two Seaport contracts specified by the request; impose no additional zone, recipient, frontend, or aggregator filter.",
    "abi": "OrderFulfilled(bytes32 orderHash,address indexed offerer,address indexed zone,address recipient,(uint8 itemType,address token,uint256 identifier,uint256 amount)[] offer,(uint8 itemType,address token,uint256 identifier,uint256 amount,address recipient)[] consideration)."
  },
  "recipe": {
    "kind": "panel",
    "source": "https://rpc.flashbots.net/fast"
  },
  "notes": "Computed using a scratch extension of the supplied scan.mjs to decode dynamic Seaport arrays: 12232 events, 4 chunks of at most 2000 blocks, 18 qualifying sales (13 listings, 5 bids), total 33928900000000000 wei. floor(33928900000000000/18)=1884938888888888. Source https://rpc.flashbots.net/fast; chain and closing hash also confirmed at https://ethereum-rpc.publicnode.com. The brief requires panel, whose catalogue shape permits only source; the catalogue has no executable average recipe. For full public-RPC reproduction, save the following dependency-free JavaScript as reproduce.mjs and run node reproduce.mjs beside artifacts/answer.json (Node 22+):\n\nimport {readFileSync} from 'node:fs';\nconst a=JSON.parse(readFileSync('artifacts/answer.json','utf8'));\nconst url=a.recipe.source, w=a.window, hex=n=>'0x'+n.toString(16);\nasync function rpc(method,params){const r=await fetch(url,{method:'POST',headers:{'content-type':'application/json'},body:JSON.stringify({jsonrpc:'2.0',id:1,method,params}),signal:AbortSignal.timeout(60000)});if(!r.ok)throw Error('HTTP '+r.status);const j=await r.json();if(j.error)throw Error(JSON.stringify(j.error));return j.result;}\nif(Number(await rpc('eth_chainId',[]))!==a.chainId)throw Error('chain');\nif((await rpc('eth_getBlockByNumber',[hex(w.toBlock),false])).hash!==w.toBlockHash)throw Error('pin');\nconst address=['0x00000000000000adc04c56bf30ac9d3c0aaf14dc','0x0000000000000068f116a894984e2db1123eb395'];\nconst topics=['0x9d9af8e38d66c62e2c12f0225249fd9d721c54b83f48d9352c97c6cacdcb6f31'];\nconst collection='0x7d89c4fee188259e6debefa225b2a6de55fcbeb4',weth='0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2';\nconst seen=new Set();let count=0n,sum=0n;\nfunction take(l){if(l.removed)return;const key=l.blockNumber+':'+l.logIndex;if(seen.has(key))return;seen.add(key);\nconst word=i=>BigInt('0x'+l.data.slice(2+64*i,66+64*i));\nfunction items(k,width){const p=Number(word(k))/32;return Array.from({length:Number(word(p))},(_,i)=>{const j=p+1+i*width;return {t:Number(word(j)),token:'0x'+word(j+1).toString(16).padStart(40,'0'),amount:word(j+3)};});}\nconst o=items(2,4),c=items(3,5),n=[...o,...c].filter(i=>i.t>=2),money=i=>i.t===0||(i.t===1&&i.token===weth);\nif(n.length!==1||n[0].t!==2||n[0].token!==collection||n[0].amount!==1n||o.length!==1)return;\nlet price;if(o[0]===n[0]&&c.every(money))price=c.reduce((s,i)=>s+i.amount,0n);else if(money(o[0])&&c.every(i=>i===n[0]||money(i)))price=o[0].amount;else return;\ncount++;sum+=price;}\nasync function range(f,t){let logs;try{logs=await rpc('eth_getLogs',[{address,topics,fromBlock:hex(f),toBlock:hex(t)}]);}catch(e){if(f===t)throw e;const m=Math.floor((f+t)/2);await range(f,m);await range(m+1,t);return;}logs.forEach(take);}\nfor(let f=w.fromBlock;f<=w.toBlock;f+=2000)await range(f,Math.min(f+1999,w.toBlock));\nconsole.log(JSON.stringify({sales:String(count),totalWei:String(sum),answer:String(count?sum/count:0n)}));\n"
}
