{
  "v": 1,
  "requestId": "55a490fe-3f03-4c22-9303-e6cfb2128bc2",
  "chainId": 1,
  "window": {
    "toBlock": 26026607,
    "fromBlock": 26019451,
    "toBlockHash": "0x8a84f5aa1d5976b1d454cfe7b479740ae9b7e7015bfd4635b124cb47767cdec2"
  },
  "answerType": "uint256",
  "answer": "1428181818181818",
  "figure": "1428181818181818",
  "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",
    "collection": "0x3512ba948a032b00952cc6ba43bc013b4fcf7ebc",
    "denomination": "Integer wei; ETH and WETH amounts are combined at 1:1 without conversion. Gas costs are excluded.",
    "window": "Both endpoint blocks are included. Only non-removed logs are counted; duplicate RPC logs are deduplicated by blockNumber and logIndex. Each distinct qualifying event is a sale, even in the same transaction or for a repeated token identifier.",
    "marketplace": "OpenSea means the two Seaport emitters fixed by the request; no additional frontend, zone, conduit, recipient, or transaction-sender filter is applied.",
    "eligibility": "The single ERC-721 item must have amount 1. All other items must be native ETH (itemType 0) or WETH (itemType 1). Exactly one offer item is required. Criteria NFT types and all other NFT items are excluded; a zero-priced qualifying fill is included.",
    "eventAbi": "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": "Scanned all 7,157 inclusive blocks using the supplied scan.mjs, with 2,000-block chunks and concurrency 3, capturing successful eth_getLogs responses locally for ABI decoding. Four contiguous chunks contained 12,231 unique OrderFulfilled logs; 55 qualified (3 listings, 52 bids), all on Seaport 1.6. Total price 78550000000000000 wei; floor(total/55) = 1428181818181818 wei, remainder 10 wei. Chain and closing hash also confirmed on https://rpc.mevblocker.io/fast and https://ethereum-rpc.publicnode.com. ABI verified against https://github.com/ProjectOpenSea/seaport-types/blob/main/src/interfaces/ConsiderationEventsAndErrors.sol and src/lib/ConsiderationStructs.sol. The pinned evidence mode requires the panel recipe; its source is the public RPC used. To reproduce from public RPC alone, save the following dependency-free Node 22 module and run it from the directory containing artifacts/answer.json. It verifies the pin, scans the exact window, decodes the dynamic arrays and prints count, total and answer.\n\nimport {readFileSync} from 'node:fs';\nconst a=JSON.parse(readFileSync('artifacts/answer.json','utf8'));\nconst rpc=async(method,params)=>{const r=await fetch(a.recipe.source,{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 b=await r.json();if(b.error)throw Error(JSON.stringify(b.error));return b.result};\nconst hex=n=>'0x'+n.toString(16),w=a.window;\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'];\nasync function logs(f,t){try{return 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);return [...await logs(f,m),...await logs(m+1,t)]}}\nconst money=x=>x.t===0||(x.t===1&&x.token==='0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2');\nlet sum=0n,count=0n;const seen=new Set();\nfor(let f=w.fromBlock;f<=w.toBlock;f+=2000){for(const l of await logs(f,Math.min(f+1999,w.toBlock))){\nif(l.removed)continue;const key=l.blockNumber+':'+l.logIndex;if(seen.has(key))continue;seen.add(key);\nconst words=l.data.slice(2).match(/.{64}/g).map(x=>BigInt('0x'+x));\nconst items=(slot,stride)=>{const p=Number(words[slot]/32n);return Array.from({length:Number(words[p])},(_,i)=>{const j=p+1+i*stride;return {t:Number(words[j]),token:'0x'+words[j+1].toString(16).padStart(40,'0'),amount:words[j+3]}})};\nconst o=items(2,4),c=items(3,5),n=[...o,...c].filter(x=>x.t>=2);\nif(n.length!==1||n[0].t!==2||n[0].token!=='0x3512ba948a032b00952cc6ba43bc013b4fcf7ebc'||n[0].amount!==1n||o.length!==1)continue;\nlet p;if(o[0]===n[0]){if(!c.every(money))continue;p=c.reduce((s,x)=>s+x.amount,0n)}else{if(!money(o[0])||!c.every(x=>x===n[0]||money(x)))continue;p=o[0].amount}\nsum+=p;count++;\n}}\nconsole.log(JSON.stringify({sales:count.toString(),totalWei:sum.toString(),answer:(count?sum/count:0n).toString()}));"
}
