[{"data":1,"prerenderedAt":1431},["ShallowReactive",2],{"navigation_docs":3,"-guide-records":96,"-guide-records-surround":1426},[4,48],{"title":5,"path":6,"stem":7,"children":8,"icon":47},"Guide","\u002Fguide","1.guide\u002F01.index",[9,11,15,19,23,27,31,35,39,43],{"title":10,"path":6,"stem":7},"Getting Started",{"title":12,"path":13,"stem":14},"Puzzle records","\u002Fguide\u002Frecords","1.guide\u002F02.records",{"title":16,"path":17,"stem":18},"Registry","\u002Fguide\u002Fregistry","1.guide\u002F03.registry",{"title":20,"path":21,"stem":22},"Lookups and views","\u002Fguide\u002Flookups","1.guide\u002F04.lookups",{"title":24,"path":25,"stem":26},"Verification","\u002Fguide\u002Fverification","1.guide\u002F05.verification",{"title":28,"path":29,"stem":30},"Balances","\u002Fguide\u002Fbalances","1.guide\u002F06.balances",{"title":32,"path":33,"stem":34},"CLI","\u002Fguide\u002Fcli","1.guide\u002F07.cli",{"title":36,"path":37,"stem":38},"Agents","\u002Fguide\u002Fagents","1.guide\u002F08.agents",{"title":40,"path":41,"stem":42},"Custom collections","\u002Fguide\u002Fcustom","1.guide\u002F09.custom",{"title":44,"path":45,"stem":46},"Playground","\u002Fguide\u002Fplayground","1.guide\u002F10.playground","i-lucide-book-open",{"title":49,"path":50,"stem":51,"children":52,"icon":95},"Collections","\u002Fcollections","2.collections\u002F00.index",[53,55,59,63,67,71,75,79,83,87,91],{"title":54,"path":50,"stem":51},"Overview",{"title":56,"path":57,"stem":58},"Bitcoin puzzle transaction","\u002Fcollections\u002Fb1000","2.collections\u002F01.b1000",{"title":60,"path":61,"stem":62},"RushWallet contest","\u002Fcollections\u002Frushwallet","2.collections\u002F02.rushwallet",{"title":64,"path":65,"stem":66},"Zden's puzzles","\u002Fcollections\u002Fzden","2.collections\u002F03.zden",{"title":68,"path":69,"stem":70},"Arweave bounties","\u002Fcollections\u002Farweave","2.collections\u002F04.arweave",{"title":72,"path":73,"stem":74},"WarpWallet challenges","\u002Fcollections\u002Fwarp","2.collections\u002F05.warp",{"title":76,"path":77,"stem":78},"Hash collision bounties","\u002Fcollections\u002Fhash_collision","2.collections\u002F06.hash_collision",{"title":80,"path":81,"stem":82},"Ballet wallets","\u002Fcollections\u002Fballet","2.collections\u002F07.ballet",{"title":84,"path":85,"stem":86},"Bitimage","\u002Fcollections\u002Fbitimage","2.collections\u002F08.bitimage",{"title":88,"path":89,"stem":90},"Bitaps mnemonic challenge","\u002Fcollections\u002Fbitaps","2.collections\u002F09.bitaps",{"title":92,"path":93,"stem":94},"GSMG.io puzzle","\u002Fcollections\u002Fgsmg","2.collections\u002F10.gsmg","i-lucide-layers",{"id":97,"title":12,"body":98,"description":1419,"extension":1420,"links":1421,"meta":1422,"navigation":180,"path":13,"seo":1424,"stem":14,"__hash__":1425},"docs\u002F1.guide\u002F02.records.md",{"type":99,"value":100,"toc":1411},"minimark",[101,106,439,458,462,496,730,734,737,1089,1111,1115,1130,1134,1147,1385,1393,1397,1407],[102,103,105],"h2",{"id":104},"one-file-one-literal","One file, one literal",[107,108,114],"pre",{"className":109,"code":110,"filename":111,"language":112,"meta":113,"style":113},"language-ts shiki shiki-themes github-light github-light vitesse-dark","import { bitcoinPuzzle, bits, funding, increase, p2pkh } from \"@agntn\u002Fpuzzles\";\n\nexport const b1000Puzzle71 = bitcoinPuzzle({\n  id: \"b1000\u002F71\",\n  address: p2pkh(\"1PWo3JeB9jrGwfHDNpdGK54CRas7fsVzXU\", \"f6f5431d25bbf7b12e8add9af5e3475c44a0a5b8\"),\n  sourceUrl: \"https:\u002F\u002Fbitcointalk.org\u002Findex.php?topic=5218972\",\n  startedAt: \"2015-01-15 18:07:14\",\n  prize: 7.100226,\n  key: bits(71),\n  transactions: [\n    funding(\n      \"08389f34c98c606322740c0be6a7125d9860bb8d5cb182c02f98461e5fa6cd15\",\n      \"2015-01-15 18:07:14\",\n      0.071,\n    ),\n    increase(\n      \"5d45587cfd1d5b0fb826805541da7d94c61fe432259e68ee26f4a04544384164\",\n      \"2017-07-11 05:00:53\",\n      0.639,\n    ),\n  ],\n});\n","src\u002Fcollections\u002Fb1000\u002F71.ts","ts","",[115,116,117,175,182,206,226,260,277,294,308,326,335,344,357,368,376,382,390,402,414,422,427,433],"code",{"__ignoreMap":113},[118,119,122,126,130,134,137,140,142,145,147,150,152,155,158,161,165,169,172],"span",{"class":120,"line":121},"line",1,[118,123,125],{"class":124},"sds8u","import",[118,127,129],{"class":128},"s14qF"," {",[118,131,133],{"class":132},"s9qSu"," bitcoinPuzzle",[118,135,136],{"class":128},",",[118,138,139],{"class":132}," bits",[118,141,136],{"class":128},[118,143,144],{"class":132}," funding",[118,146,136],{"class":128},[118,148,149],{"class":132}," increase",[118,151,136],{"class":128},[118,153,154],{"class":132}," p2pkh",[118,156,157],{"class":128}," }",[118,159,160],{"class":124}," from",[118,162,164],{"class":163},"s2tGe"," \"",[118,166,168],{"class":167},"skmWX","@agntn\u002Fpuzzles",[118,170,171],{"class":163},"\"",[118,173,174],{"class":128},";\n",[118,176,178],{"class":120,"line":177},2,[118,179,181],{"emptyLinePlaceholder":180},true,"\n",[118,183,185,188,192,196,200,203],{"class":120,"line":184},3,[118,186,187],{"class":124},"export",[118,189,191],{"class":190},"sO_1p"," const",[118,193,195],{"class":194},"sHhh0"," b1000Puzzle71",[118,197,199],{"class":198},"sLuFV"," =",[118,201,133],{"class":202},"sTnI0",[118,204,205],{"class":128},"({\n",[118,207,209,213,216,218,221,223],{"class":120,"line":208},4,[118,210,212],{"class":211},"sC822","  id",[118,214,215],{"class":128},": ",[118,217,171],{"class":163},[118,219,220],{"class":167},"b1000\u002F71",[118,222,171],{"class":163},[118,224,225],{"class":128},",\n",[118,227,229,232,234,237,240,242,245,247,250,252,255,257],{"class":120,"line":228},5,[118,230,231],{"class":211},"  address",[118,233,215],{"class":128},[118,235,236],{"class":202},"p2pkh",[118,238,239],{"class":128},"(",[118,241,171],{"class":163},[118,243,244],{"class":167},"1PWo3JeB9jrGwfHDNpdGK54CRas7fsVzXU",[118,246,171],{"class":163},[118,248,249],{"class":128},", ",[118,251,171],{"class":163},[118,253,254],{"class":167},"f6f5431d25bbf7b12e8add9af5e3475c44a0a5b8",[118,256,171],{"class":163},[118,258,259],{"class":128},"),\n",[118,261,263,266,268,270,273,275],{"class":120,"line":262},6,[118,264,265],{"class":211},"  sourceUrl",[118,267,215],{"class":128},[118,269,171],{"class":163},[118,271,272],{"class":167},"https:\u002F\u002Fbitcointalk.org\u002Findex.php?topic=5218972",[118,274,171],{"class":163},[118,276,225],{"class":128},[118,278,280,283,285,287,290,292],{"class":120,"line":279},7,[118,281,282],{"class":211},"  startedAt",[118,284,215],{"class":128},[118,286,171],{"class":163},[118,288,289],{"class":167},"2015-01-15 18:07:14",[118,291,171],{"class":163},[118,293,225],{"class":128},[118,295,297,300,302,306],{"class":120,"line":296},8,[118,298,299],{"class":211},"  prize",[118,301,215],{"class":128},[118,303,305],{"class":304},"sw1C9","7.100226",[118,307,225],{"class":128},[118,309,311,314,316,319,321,324],{"class":120,"line":310},9,[118,312,313],{"class":211},"  key",[118,315,215],{"class":128},[118,317,318],{"class":202},"bits",[118,320,239],{"class":128},[118,322,323],{"class":304},"71",[118,325,259],{"class":128},[118,327,329,332],{"class":120,"line":328},10,[118,330,331],{"class":211},"  transactions",[118,333,334],{"class":128},": [\n",[118,336,338,341],{"class":120,"line":337},11,[118,339,340],{"class":202},"    funding",[118,342,343],{"class":128},"(\n",[118,345,347,350,353,355],{"class":120,"line":346},12,[118,348,349],{"class":163},"      \"",[118,351,352],{"class":167},"08389f34c98c606322740c0be6a7125d9860bb8d5cb182c02f98461e5fa6cd15",[118,354,171],{"class":163},[118,356,225],{"class":128},[118,358,360,362,364,366],{"class":120,"line":359},13,[118,361,349],{"class":163},[118,363,289],{"class":167},[118,365,171],{"class":163},[118,367,225],{"class":128},[118,369,371,374],{"class":120,"line":370},14,[118,372,373],{"class":304},"      0.071",[118,375,225],{"class":128},[118,377,379],{"class":120,"line":378},15,[118,380,381],{"class":128},"    ),\n",[118,383,385,388],{"class":120,"line":384},16,[118,386,387],{"class":202},"    increase",[118,389,343],{"class":128},[118,391,393,395,398,400],{"class":120,"line":392},17,[118,394,349],{"class":163},[118,396,397],{"class":167},"5d45587cfd1d5b0fb826805541da7d94c61fe432259e68ee26f4a04544384164",[118,399,171],{"class":163},[118,401,225],{"class":128},[118,403,405,407,410,412],{"class":120,"line":404},18,[118,406,349],{"class":163},[118,408,409],{"class":167},"2017-07-11 05:00:53",[118,411,171],{"class":163},[118,413,225],{"class":128},[118,415,417,420],{"class":120,"line":416},19,[118,418,419],{"class":304},"      0.639",[118,421,225],{"class":128},[118,423,425],{"class":120,"line":424},20,[118,426,381],{"class":128},[118,428,430],{"class":120,"line":429},21,[118,431,432],{"class":128},"  ],\n",[118,434,436],{"class":120,"line":435},22,[118,437,438],{"class":128},"});\n",[440,441,442,443,446,447,449,450,453,454,457],"p",{},"That's the whole record. No status, because unsolved is the default. No solver, no assets, no ",[115,444,445],{},"null"," anywhere. The factory picks the chain. ",[115,448,236],{}," picks the address kind. ",[115,451,452],{},"bits(71)"," says the key is somewhere in ",[115,455,456],{},"[2^70, 2^71 - 1]"," and nothing more. Typo in a field name? The type checker rejects it before any test runs.",[102,459,461],{"id":460},"six-factories","Six factories",[440,463,464,249,467,249,470,249,473,249,476,479,480,483,484,487,488,491,492,495],{},[115,465,466],{},"bitcoinPuzzle",[115,468,469],{},"ethereumPuzzle",[115,471,472],{},"litecoinPuzzle",[115,474,475],{},"decredPuzzle",[115,477,478],{},"arweavePuzzle"," and ",[115,481,482],{},"moneroPuzzle"," take the same ",[115,485,486],{},"PuzzleSpec"," and answer ",[115,489,490],{},"chain()"," for it. Monero has a factory and no puzzles yet. Behind each one sits an abstract base, ",[115,493,494],{},"BitcoinPuzzle"," and so on. A puzzle that needs behavior of its own can extend a base directly. None of the 332 records do.",[497,498,499,515],"table",{},[500,501,502],"thead",{},[503,504,505,509,512],"tr",{},[506,507,508],"th",{},"Field",[506,510,511],{},"Required",[506,513,514],{},"Built with",[516,517,518,542,566,593,613,630,646,679,700,718],"tbody",{},[503,519,520,532,535],{},[521,522,523,249,526,249,529],"td",{},[115,524,525],{},"id",[115,527,528],{},"sourceUrl",[115,530,531],{},"startedAt",[521,533,534],{},"yes",[521,536,537,538,541],{},"strings, ",[115,539,540],{},"YYYY-MM-DD HH:MM:SS"," in UTC",[503,543,544,549,551],{},[521,545,546],{},[115,547,548],{},"address",[521,550,534],{},[521,552,553,249,555,249,558,561,562,565],{},[115,554,236],{},[115,556,557],{},"p2sh",[115,559,560],{},"p2wpkh"," or ",[115,563,564],{},"standard",", each with the optional HASH160",[503,567,568,573,579],{},[521,569,570],{},[115,571,572],{},"status",[521,574,575,576],{},"no, ",[115,577,578],{},"unsolved",[521,580,581,249,584,249,587,249,590],{},[115,582,583],{},"Status.Solved",[115,585,586],{},"Status.Claimed",[115,588,589],{},"Status.Swept",[115,591,592],{},"Status.Expired",[503,594,595,603,606],{},[521,596,597,249,600],{},[115,598,599],{},"prize",[115,601,602],{},"currency",[521,604,605],{},"no",[521,607,608,609,612],{},"a number in the chain's native token, or ",[115,610,611],{},"currency: \"DAI\""," when it isn't",[503,614,615,620,622],{},[521,616,617],{},[115,618,619],{},"pubkey",[521,621,605],{},[521,623,624,561,627],{},[115,625,626],{},"compressed(\"02…\")",[115,628,629],{},"uncompressed(\"04…\")",[503,631,632,637,639],{},[521,633,634],{},[115,635,636],{},"key",[521,638,605],{},[521,640,641,642,645],{},"the ",[115,643,644],{},"Key"," builder below",[503,647,648,653,655],{},[521,649,650],{},[115,651,652],{},"transactions",[521,654,605],{},[521,656,657,249,660,249,663,249,666,249,669,249,672,675,676],{},[115,658,659],{},"funding",[115,661,662],{},"increase",[115,664,665],{},"decrease",[115,667,668],{},"pubkeyReveal",[115,670,671],{},"claim",[115,673,674],{},"sweep",", each ",[115,677,678],{},"(txid, date, amount)",[503,680,681,692,694],{},[521,682,683,249,686,249,689],{},[115,684,685],{},"solvedAt",[115,687,688],{},"solveTime",[115,690,691],{},"solver",[521,693,605],{},[521,695,696,697],{},"when, seconds, and ",[115,698,699],{},"party(name, { addresses, profiles })",[503,701,702,707,709],{},[521,703,704],{},[115,705,706],{},"assets",[521,708,605],{},[521,710,711,714,715],{},[115,712,713],{},"assets({ puzzle, solver, hints, sourceUrl })",", file names under ",[115,716,717],{},"assets\u002F\u003Ccollection>\u002F",[503,719,720,725,727],{},[521,721,722],{},[115,723,724],{},"preGenesis",[521,726,605],{},[521,728,729],{},"the address predates the puzzle thread, so the funding date is the thread's",[102,731,733],{"id":732},"keys-are-a-chain-of-calls","Keys are a chain of calls",[440,735,736],{},"Key material comes in more shapes than any other field. So it's a builder, not a literal:",[107,738,740],{"className":109,"code":739,"language":112,"meta":113,"style":113},"import { bits, derivation, encryptedWif, hex, seed, share } from \"@agntn\u002Fpuzzles\";\n\nhex(\"00…01\", 1).wif(\"KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFU73sVHnoWn\"); \u002F\u002F b1000\u002F1\nhex(\"af9a…4a0d\").wif(\"5K9d…U7g\").passphrase(\"5784623964023 578462396402\"); \u002F\u002F a brainwallet\nencryptedWif(\"6PnW…4cH\", { passphrase: \"335Y-K745-C8WT-4D2W-80WP\" }); \u002F\u002F a BIP38 Ballet wallet\nderivation(\"m\u002F84'\u002F0'\u002F0'\u002F0\u002F0\")\n  .xpub(\"zpub6qd…JCqL\")\n  .shares(3, 5, [share(1, \"session cigar …\")]); \u002F\u002F Bitaps\nderivation(\"m\u002F84'\u002F0'\u002F0'\u002F0\u002F0\").entropy(\n  \"1808…32ed\",\n  source(\"https:\u002F\u002Ftwitter.com\u002Faantonop\u002Fstatus\u002F603701870482300928\"),\n); \u002F\u002F Bitimage\nseed(\"abandon abandon … about\", \"m\u002F44'\u002F0'\u002F0'\u002F0\u002F0\"); \u002F\u002F a full BIP39 record, none in the dataset yet\nbits(71); \u002F\u002F a search width and nothing else\n",[115,741,742,787,791,832,877,913,930,949,994,1013,1025,1041,1048,1076],{"__ignoreMap":113},[118,743,744,746,748,750,752,755,757,760,762,765,767,770,772,775,777,779,781,783,785],{"class":120,"line":121},[118,745,125],{"class":124},[118,747,129],{"class":128},[118,749,139],{"class":132},[118,751,136],{"class":128},[118,753,754],{"class":132}," derivation",[118,756,136],{"class":128},[118,758,759],{"class":132}," encryptedWif",[118,761,136],{"class":128},[118,763,764],{"class":132}," hex",[118,766,136],{"class":128},[118,768,769],{"class":132}," seed",[118,771,136],{"class":128},[118,773,774],{"class":132}," share",[118,776,157],{"class":128},[118,778,160],{"class":124},[118,780,164],{"class":163},[118,782,168],{"class":167},[118,784,171],{"class":163},[118,786,174],{"class":128},[118,788,789],{"class":120,"line":177},[118,790,181],{"emptyLinePlaceholder":180},[118,792,793,796,798,800,803,805,807,810,813,816,818,820,823,825,828],{"class":120,"line":184},[118,794,795],{"class":202},"hex",[118,797,239],{"class":128},[118,799,171],{"class":163},[118,801,802],{"class":167},"00…01",[118,804,171],{"class":163},[118,806,136],{"class":128},[118,808,809],{"class":304}," 1",[118,811,812],{"class":128},").",[118,814,815],{"class":202},"wif",[118,817,239],{"class":128},[118,819,171],{"class":163},[118,821,822],{"class":167},"KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFU73sVHnoWn",[118,824,171],{"class":163},[118,826,827],{"class":128},");",[118,829,831],{"class":830},"sjj-T"," \u002F\u002F b1000\u002F1\n",[118,833,834,836,838,840,843,845,847,849,851,853,856,858,860,863,865,867,870,872,874],{"class":120,"line":208},[118,835,795],{"class":202},[118,837,239],{"class":128},[118,839,171],{"class":163},[118,841,842],{"class":167},"af9a…4a0d",[118,844,171],{"class":163},[118,846,812],{"class":128},[118,848,815],{"class":202},[118,850,239],{"class":128},[118,852,171],{"class":163},[118,854,855],{"class":167},"5K9d…U7g",[118,857,171],{"class":163},[118,859,812],{"class":128},[118,861,862],{"class":202},"passphrase",[118,864,239],{"class":128},[118,866,171],{"class":163},[118,868,869],{"class":167},"5784623964023 578462396402",[118,871,171],{"class":163},[118,873,827],{"class":128},[118,875,876],{"class":830}," \u002F\u002F a brainwallet\n",[118,878,879,882,884,886,889,891,893,896,898,900,902,905,907,910],{"class":120,"line":228},[118,880,881],{"class":202},"encryptedWif",[118,883,239],{"class":128},[118,885,171],{"class":163},[118,887,888],{"class":167},"6PnW…4cH",[118,890,171],{"class":163},[118,892,136],{"class":128},[118,894,895],{"class":128}," { ",[118,897,862],{"class":211},[118,899,215],{"class":128},[118,901,171],{"class":163},[118,903,904],{"class":167},"335Y-K745-C8WT-4D2W-80WP",[118,906,171],{"class":163},[118,908,909],{"class":128}," });",[118,911,912],{"class":830}," \u002F\u002F a BIP38 Ballet wallet\n",[118,914,915,918,920,922,925,927],{"class":120,"line":262},[118,916,917],{"class":202},"derivation",[118,919,239],{"class":128},[118,921,171],{"class":163},[118,923,924],{"class":167},"m\u002F84'\u002F0'\u002F0'\u002F0\u002F0",[118,926,171],{"class":163},[118,928,929],{"class":128},")\n",[118,931,932,935,938,940,942,945,947],{"class":120,"line":279},[118,933,934],{"class":128},"  .",[118,936,937],{"class":202},"xpub",[118,939,239],{"class":128},[118,941,171],{"class":163},[118,943,944],{"class":167},"zpub6qd…JCqL",[118,946,171],{"class":163},[118,948,929],{"class":128},[118,950,951,953,956,958,961,963,966,968,971,974,976,979,981,983,986,988,991],{"class":120,"line":296},[118,952,934],{"class":128},[118,954,955],{"class":202},"shares",[118,957,239],{"class":128},[118,959,960],{"class":304},"3",[118,962,136],{"class":128},[118,964,965],{"class":304}," 5",[118,967,136],{"class":128},[118,969,970],{"class":128}," [",[118,972,973],{"class":202},"share",[118,975,239],{"class":128},[118,977,978],{"class":304},"1",[118,980,136],{"class":128},[118,982,164],{"class":163},[118,984,985],{"class":167},"session cigar …",[118,987,171],{"class":163},[118,989,990],{"class":128},")]);",[118,992,993],{"class":830}," \u002F\u002F Bitaps\n",[118,995,996,998,1000,1002,1004,1006,1008,1011],{"class":120,"line":310},[118,997,917],{"class":202},[118,999,239],{"class":128},[118,1001,171],{"class":163},[118,1003,924],{"class":167},[118,1005,171],{"class":163},[118,1007,812],{"class":128},[118,1009,1010],{"class":202},"entropy",[118,1012,343],{"class":128},[118,1014,1015,1018,1021,1023],{"class":120,"line":328},[118,1016,1017],{"class":163},"  \"",[118,1019,1020],{"class":167},"1808…32ed",[118,1022,171],{"class":163},[118,1024,225],{"class":128},[118,1026,1027,1030,1032,1034,1037,1039],{"class":120,"line":337},[118,1028,1029],{"class":202},"  source",[118,1031,239],{"class":128},[118,1033,171],{"class":163},[118,1035,1036],{"class":167},"https:\u002F\u002Ftwitter.com\u002Faantonop\u002Fstatus\u002F603701870482300928",[118,1038,171],{"class":163},[118,1040,259],{"class":128},[118,1042,1043,1045],{"class":120,"line":346},[118,1044,827],{"class":128},[118,1046,1047],{"class":830}," \u002F\u002F Bitimage\n",[118,1049,1050,1053,1055,1057,1060,1062,1064,1066,1069,1071,1073],{"class":120,"line":359},[118,1051,1052],{"class":202},"seed",[118,1054,239],{"class":128},[118,1056,171],{"class":163},[118,1058,1059],{"class":167},"abandon abandon … about",[118,1061,171],{"class":163},[118,1063,136],{"class":128},[118,1065,164],{"class":163},[118,1067,1068],{"class":167},"m\u002F44'\u002F0'\u002F0'\u002F0\u002F0",[118,1070,171],{"class":163},[118,1072,827],{"class":128},[118,1074,1075],{"class":830}," \u002F\u002F a full BIP39 record, none in the dataset yet\n",[118,1077,1078,1080,1082,1084,1086],{"class":120,"line":370},[118,1079,318],{"class":202},[118,1081,239],{"class":128},[118,1083,323],{"class":304},[118,1085,827],{"class":128},[118,1087,1088],{"class":830}," \u002F\u002F a search width and nothing else\n",[440,1090,1091,1094,1095,1098,1099,1102,1103,1106,1107,1110],{},[115,1092,1093],{},"key()"," hands back the builder. ",[115,1096,1097],{},"keyData()"," gives its serialized record. ",[115,1100,1101],{},"secretOf(keyData)"," picks the one representation verification will use, in this order: a hex key, a decrypted WIF, an encrypted WIF, a seed phrase, a mini key. A record with only a derivation path or an xpub has no secret. ",[115,1104,1105],{},"hasPrivateKey()"," says ",[115,1108,1109],{},"false"," for it, and verification agrees.",[102,1112,1114],{"id":1113},"status-is-explicit","Status is explicit",[440,1116,1117,1118,1121,1122,1125,1126,1129],{},"A claim transaction plus a published key still means ",[115,1119,1120],{},"solved",". A sweep by a stranger after the public key leaked means ",[115,1123,1124],{},"swept",". A prize the author took back means ",[115,1127,1128],{},"expired",". Those are judgments, and the record writes them down. The library refuses to guess them from the transaction list. It would guess wrong on exactly the puzzles people care about.",[102,1131,1133],{"id":1132},"no-nulls","No nulls",[440,1135,1136,1139,1140,1142,1143,1146],{},[115,1137,1138],{},"toJSON()"," omits what a puzzle never claimed to have. No solver, no assets, no prize? Then no keys for them either. The data gate fails the build if the string ",[115,1141,445],{}," shows up anywhere in the dataset. Consumers check ",[115,1144,1145],{},"=== undefined"," once and move on.",[107,1148,1152],{"className":1149,"code":1150,"language":1151,"meta":113,"style":113},"language-json shiki shiki-themes github-light github-light vitesse-dark","{\n  \"id\": \"b1000\u002F71\",\n  \"chain\": \"bitcoin\",\n  \"address\": { \"value\": \"1PWo3JeB9jrGwfHDNpdGK54CRas7fsVzXU\", \"kind\": \"p2pkh\", \"hash160\": \"f6f5…a5b8\" },\n  \"status\": \"unsolved\",\n  \"key\": { \"bits\": 71 },\n  \"prize\": 7.100226,\n  \"start_date\": \"2015-01-15 18:07:14\",\n  \"source_url\": \"https:\u002F\u002Fbitcointalk.org\u002Findex.php?topic=5218972\",\n  \"transactions\": [ ... ]\n}\n","json",[115,1153,1154,1159,1180,1200,1265,1283,1308,1323,1342,1361,1380],{"__ignoreMap":113},[118,1155,1156],{"class":120,"line":121},[118,1157,1158],{"class":128},"{\n",[118,1160,1161,1164,1167,1169,1172,1174,1176,1178],{"class":120,"line":177},[118,1162,1017],{"class":1163},"sq9Yo",[118,1165,525],{"class":1166},"sXmn8",[118,1168,171],{"class":1163},[118,1170,1171],{"class":128},":",[118,1173,164],{"class":163},[118,1175,220],{"class":167},[118,1177,171],{"class":163},[118,1179,225],{"class":128},[118,1181,1182,1184,1187,1189,1191,1193,1196,1198],{"class":120,"line":184},[118,1183,1017],{"class":1163},[118,1185,1186],{"class":1166},"chain",[118,1188,171],{"class":1163},[118,1190,1171],{"class":128},[118,1192,164],{"class":163},[118,1194,1195],{"class":167},"bitcoin",[118,1197,171],{"class":163},[118,1199,225],{"class":128},[118,1201,1202,1204,1206,1208,1210,1212,1214,1217,1219,1221,1223,1225,1227,1229,1231,1234,1236,1238,1240,1242,1244,1246,1248,1251,1253,1255,1257,1260,1262],{"class":120,"line":208},[118,1203,1017],{"class":1163},[118,1205,548],{"class":1166},[118,1207,171],{"class":1163},[118,1209,1171],{"class":128},[118,1211,129],{"class":128},[118,1213,164],{"class":1163},[118,1215,1216],{"class":1166},"value",[118,1218,171],{"class":1163},[118,1220,1171],{"class":128},[118,1222,164],{"class":163},[118,1224,244],{"class":167},[118,1226,171],{"class":163},[118,1228,136],{"class":128},[118,1230,164],{"class":1163},[118,1232,1233],{"class":1166},"kind",[118,1235,171],{"class":1163},[118,1237,1171],{"class":128},[118,1239,164],{"class":163},[118,1241,236],{"class":167},[118,1243,171],{"class":163},[118,1245,136],{"class":128},[118,1247,164],{"class":1163},[118,1249,1250],{"class":1166},"hash160",[118,1252,171],{"class":1163},[118,1254,1171],{"class":128},[118,1256,164],{"class":163},[118,1258,1259],{"class":167},"f6f5…a5b8",[118,1261,171],{"class":163},[118,1263,1264],{"class":128}," },\n",[118,1266,1267,1269,1271,1273,1275,1277,1279,1281],{"class":120,"line":228},[118,1268,1017],{"class":1163},[118,1270,572],{"class":1166},[118,1272,171],{"class":1163},[118,1274,1171],{"class":128},[118,1276,164],{"class":163},[118,1278,578],{"class":167},[118,1280,171],{"class":163},[118,1282,225],{"class":128},[118,1284,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1306],{"class":120,"line":262},[118,1286,1017],{"class":1163},[118,1288,636],{"class":1166},[118,1290,171],{"class":1163},[118,1292,1171],{"class":128},[118,1294,129],{"class":128},[118,1296,164],{"class":1163},[118,1298,318],{"class":1166},[118,1300,171],{"class":1163},[118,1302,1171],{"class":128},[118,1304,1305],{"class":304}," 71",[118,1307,1264],{"class":128},[118,1309,1310,1312,1314,1316,1318,1321],{"class":120,"line":279},[118,1311,1017],{"class":1163},[118,1313,599],{"class":1166},[118,1315,171],{"class":1163},[118,1317,1171],{"class":128},[118,1319,1320],{"class":304}," 7.100226",[118,1322,225],{"class":128},[118,1324,1325,1327,1330,1332,1334,1336,1338,1340],{"class":120,"line":296},[118,1326,1017],{"class":1163},[118,1328,1329],{"class":1166},"start_date",[118,1331,171],{"class":1163},[118,1333,1171],{"class":128},[118,1335,164],{"class":163},[118,1337,289],{"class":167},[118,1339,171],{"class":163},[118,1341,225],{"class":128},[118,1343,1344,1346,1349,1351,1353,1355,1357,1359],{"class":120,"line":310},[118,1345,1017],{"class":1163},[118,1347,1348],{"class":1166},"source_url",[118,1350,171],{"class":1163},[118,1352,1171],{"class":128},[118,1354,164],{"class":163},[118,1356,272],{"class":167},[118,1358,171],{"class":163},[118,1360,225],{"class":128},[118,1362,1363,1365,1367,1369,1371,1373,1377],{"class":120,"line":328},[118,1364,1017],{"class":1163},[118,1366,652],{"class":1166},[118,1368,171],{"class":1163},[118,1370,1171],{"class":128},[118,1372,970],{"class":128},[118,1374,1376],{"class":1375},"sPrNH"," ...",[118,1378,1379],{"class":128}," ]\n",[118,1381,1382],{"class":120,"line":337},[118,1383,1384],{"class":128},"}\n",[440,1386,1387,1388,479,1390,1392],{},"The serialized names are snake case, ",[115,1389,1329],{},[115,1391,1348],{},". That's what the JSON dataset looked like before this was a TypeScript package. Nothing downstream should have to care about the rewrite.",[102,1394,1396],{"id":1395},"the-data-gate","The data gate",[440,1398,1399,1402,1403,1406],{},[115,1400,1401],{},"pnpm test"," re-checks every record. Identifiers are unique and owned by their collection. Every address and every txid fits its chain's format. A published private key derives the stored address. A decrypted WIF matches its hex. A BIP38 payload decrypts to the declared key when the passphrase is known. A claimed or swept puzzle carries a public key. Every asset path exists. Nothing serializes as null. A wrong hex digit doesn't reach ",[115,1404,1405],{},"main",".",[1408,1409,1410],"style",{},"html pre.shiki code .sds8u, html code.shiki .sds8u{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#4D9375}html pre.shiki code .s14qF, html code.shiki .s14qF{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#666666}html pre.shiki code .s9qSu, html code.shiki .s9qSu{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#BD976A}html pre.shiki code .s2tGe, html code.shiki .s2tGe{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#C98A7D77}html pre.shiki code .skmWX, html code.shiki .skmWX{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#C98A7D}html pre.shiki code .sO_1p, html code.shiki .sO_1p{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#CB7676}html pre.shiki code .sHhh0, html code.shiki .sHhh0{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#BD976A}html pre.shiki code .sLuFV, html code.shiki .sLuFV{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#666666}html pre.shiki code .sTnI0, html code.shiki .sTnI0{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#80A665}html pre.shiki code .sC822, html code.shiki .sC822{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#B8A965}html pre.shiki code .sw1C9, html code.shiki .sw1C9{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#4C9A91}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sjj-T, html code.shiki .sjj-T{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#758575DD}html pre.shiki code .sq9Yo, html code.shiki .sq9Yo{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#B8A96577}html pre.shiki code .sXmn8, html code.shiki .sXmn8{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#B8A965}html pre.shiki code .sPrNH, html code.shiki .sPrNH{--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}",{"title":113,"searchDepth":177,"depth":177,"links":1412},[1413,1414,1415,1416,1417,1418],{"id":104,"depth":177,"text":105},{"id":460,"depth":177,"text":461},{"id":732,"depth":177,"text":733},{"id":1113,"depth":177,"text":1114},{"id":1132,"depth":177,"text":1133},{"id":1395,"depth":177,"text":1396},"One PuzzleSpec literal per puzzle handed to a factory for its chain. Builders for addresses and keys and transactions. Absent means absent and never null.","md",null,{"icon":1423},"i-lucide-file-json",{"title":12,"description":1419},"U-ZuZv_pRqpLML8kmZ-qEKeWgZn_Cyc3rgbWVC12J2k",[1427,1429],{"title":10,"path":6,"stem":7,"description":1428,"children":-1},"Install the package. Load one puzzle. Read its address and its key range. Every puzzle is a record and every answer comes from a method on it.",{"title":16,"path":17,"stem":18,"description":1430,"children":-1},"A manifest of ten keys and ten lazy imports. Keys and aliases answer at once. Records load on the first lookup for their collection. How to register yours.",1789734790029]