(* Content-type: application/vnd.wolfram.mathematica *)

(*** Wolfram Notebook File ***)
(* http://www.wolfram.com/nb *)

(* CreatedBy='Wolfram 15.0' *)

(*CacheID: 234*)
(* Internal cache information:
NotebookFileLineBreakTest
NotebookFileLineBreakTest
NotebookDataPosition[       154,          7]
NotebookDataLength[     33691,        915]
NotebookOptionsPosition[     27036,        810]
NotebookOutlinePosition[     29559,        862]
CellTagsIndexPosition[     29516,        859]
WindowTitle->Chain
WindowFrame->Normal*)

(* Beginning of Notebook Content *)
Notebook[{
Cell[BoxData[GridBox[{
   {GridBox[{
      {
       ItemBox[Cell[BoxData[
         RowBox[{
          TemplateBox[{12},
           "Spacer1"], Cell[
          "WOLFRAM INSTITUTE/ PUZZLES GUIDE", "PacletNameCell",
           TextAlignment->Center,ExpressionUUID->
           "1cc4f363-3bbf-43ed-a2b2-28e7a90bc7ca"], 
          TemplateBox[{8},
           "Spacer1"]}]],
         TextAlignment->Center,ExpressionUUID->
         "82e7bbf1-2b7c-473d-81ba-f71e5ef03699"],
        Background->LightDarkSwitched[
          RGBColor[0.85098, 0.396078, 0]],
        ItemSize->Full], ""}
     },
     GridBoxAlignment->{"Rows" -> {{Center}}},
     GridBoxItemSize->{"Columns" -> {Full, 
         Scaled[0.02]}, "Rows" -> {{2.5}}}], Cell[TextData[Cell[BoxData[
     TagBox[
      ActionMenuBox[
       FrameBox[Cell[TextData[{
         "URL",
         " ",
         Cell[BoxData[
          GraphicsBox[
           {GrayLevel[0.66667], Thickness[0.13], 
            LineBox[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]},
           AspectRatio->1,
           ImageSize->20,
           PlotRange->{{-3, 4}, {-1, 1}}]],ExpressionUUID->
          "1cefa794-3e22-4b9f-b3c1-43e8d29405ab"]
        }],ExpressionUUID->"de5b1f7c-2afd-4c23-abde-02c3173fd764"],
        StripOnInput->False],{
       "\"WolframInstitute/Puzzles/guide/Chain\"" :> None, 
        "\"Copy Wolfram Documentation Center URL\"" :> 
        CopyToClipboard["WolframInstitute/Puzzles/guide/Chain"], Delimiter, 
        "\"Copy web URL\"" :> 
        Module[{DocumentationSearch`Private`nb$}, 
          DocumentationSearch`Private`nb$ = 
           NotebookPut[
            Notebook[{
              Cell[BoxData[
                MakeBoxes[
                 Hyperlink[
                  "http://reference.wolfram.com/language/WolframInstitute/\
Puzzles/guide/Chain.html"], StandardForm]], "Input", TextClipboardType -> 
                "PlainText"]}, Visible -> False]]; 
          SelectionMove[DocumentationSearch`Private`nb$, All, Notebook]; 
          FrontEndTokenExecute[DocumentationSearch`Private`nb$, "Copy"]; 
          NotebookClose[DocumentationSearch`Private`nb$]; Null], 
        "\"Go to web URL\"" :> 
        FrontEndExecute[{
          NotebookLocate[{
            URL[If[TrueQ[False], 
                "http://reference.wolfram.com/system-modeler/", 
                "http://reference.wolfram.com/language/"] <> 
              "WolframInstitute/Puzzles/guide/Chain" <> ".html"], None}]}]},
       Appearance->None,
       MenuAppearance->Automatic,
       MenuStyle->"URLMenu"],
      MouseAppearanceTag["LinkHand"]]],
     LineSpacing->{1.4, 0},ExpressionUUID->
     "16e0cbe1-167f-4bce-bb93-b1f67628fb7a"]], "AnchorBar",
     CacheGraphics->False,ExpressionUUID->
     "dffe17df-421e-41bf-a78a-8f380d2fd77d"]}
  }]], "AnchorBarGrid",
 GridBoxOptions->{GridBoxItemSize->{"Columns" -> {
     Scaled[0.65], {
      Scaled[0.34]}}, "ColumnsIndexed" -> {}, "Rows" -> {{1.}}, 
   "RowsIndexed" -> {}}},
 CellID->1,ExpressionUUID->"6481dae5-0045-45f8-8f42-f61014b2bce8"],

Cell[CellGroupData[{

Cell["Chain", "GuideTitle",
 CellID->942062912,ExpressionUUID->"86396585-859d-433a-b258-479774a7ea40"],

Cell["\<\
Chain answers the question a puzzle ends on: is the money still there. It \
reads Bitcoin and Ethereum addresses from several independently operated \
block explorers, normalizes what they say into one shape whose amounts are \
exact Integer counts of satoshis or wei, caches every response on disk so a \
sweep does not re-hit a public service, and refuses to state a verdict that \
two backends did not agree on. A backend that is unreachable, rate-limited or \
unparsable produces a Failure naming the backend, the URL and the status \
code. It never produces a zero, because a zero balance is a claim about the \
chain and an explorer that did not answer has not made one.\
\>", "GuideAbstract",
 CellID->2001916300,ExpressionUUID->"49331db6-0b66-4056-a3d2-01516287d3fd"],

Cell["\t", "GuideDelimiterSubsection",ExpressionUUID->"6c861089-6fc2-46b7-adca-7971c297602a"],

Cell[CellGroupData[{

Cell["Deciding whether a prize is still unclaimed", "GuideFunctionsSubsection",ExpressionUUID->"1f9a71e2-0b32-409d-98c2-725c88de5552"],

Cell[TextData[{
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData["ChainPrizeUnclaimedQ"]], 
    "paclet:WolframInstitute/Puzzles/ref/ChainPrizeUnclaimedQ", 
    "WolframInstitute/Puzzles Package Symbol"},
   "PackageLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "11cf5575-2b41-4dc7-82b4-257a88867f12"],
 " ",
 StyleBox["\[LongDash]", "GuideEmDash"],
 " ",
 Cell["True", "InlineFunctionSansUnlinked",
  FontSize->0.9 Inherited,ExpressionUUID->
  "ba8e5fd4-8cf7-49fe-a62f-913974981834"],
 " only when two independent backends agree the address holds a positive \
confirmed balance, and a ",
 Cell["Failure", "InlineFunctionSansUnlinked",
  FontSize->0.9 Inherited,ExpressionUUID->
  "592ae895-4140-4376-8b91-eb597339a970"],
 " rather than ",
 Cell["False", "InlineFunctionSansUnlinked",
  FontSize->0.9 Inherited,ExpressionUUID->
  "97be1d97-6d11-4ca8-8762-34fcd86af346"],
 " when they do not settle it"
}], "GuideText",ExpressionUUID->"f8d4b4b6-bf28-483c-9ce8-096a968ed481"],

Cell[TextData[{
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData["ChainAddressCrossCheck"]], 
    "paclet:WolframInstitute/Puzzles/ref/ChainAddressCrossCheck", 
    "WolframInstitute/Puzzles Package Symbol"},
   "PackageLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "42671a63-9995-4712-b1b6-b14377084772"],
 " ",
 StyleBox["\[LongDash]", "GuideEmDash"],
 " ",
 "the full evidence: what each backend said, whether the balances agree, how \
many API families answered, and the verdicts ",
 Cell["\"HasBalance\"", "InlineFunctionSansUnlinked",
  FontSize->0.9 Inherited,ExpressionUUID->
  "1b5faf16-eb2c-415c-8389-a12a5552d0cb"],
 " and ",
 Cell["\"NeverSpent\"", "InlineFunctionSansUnlinked",
  FontSize->0.9 Inherited,ExpressionUUID->
  "ea7e6592-2f37-4c87-a4d5-9b0fca42a9ce"]
}], "GuideText",ExpressionUUID->"1465abf0-ca69-4dc0-ade0-d95249a62052"]
}, Open  ]],

Cell[CellGroupData[{

Cell["Reading one address", "GuideFunctionsSubsection",ExpressionUUID->"8e76e254-e066-4b86-a470-d1b199a44a4d"],

Cell[TextData[{
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData["ChainAddressSummary"]], 
    "paclet:WolframInstitute/Puzzles/ref/ChainAddressSummary", 
    "WolframInstitute/Puzzles Package Symbol"},
   "PackageLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "4f168f31-99f3-4fd6-a302-ff84a95dc734"],
 " ",
 StyleBox["\[LongDash]", "GuideEmDash"],
 " ",
 "the normalized balance, received and sent totals, spend counts and \
transaction count from the first backend that answers"
}], "GuideText",ExpressionUUID->"b2cb9dda-b4e7-4539-a944-715bfeb15324"],

Cell[TextData[{
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData["ChainAddressBalance"]], 
    "paclet:WolframInstitute/Puzzles/ref/ChainAddressBalance", 
    "WolframInstitute/Puzzles Package Symbol"},
   "PackageLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "33037cb7-46dc-46ca-9dd0-6ad945259dfc"],
 " ",
 StyleBox["\[LongDash]", "GuideEmDash"],
 " ",
 "the confirmed balance as an exact ",
 Cell["Quantity", "InlineFunctionSansUnlinked",
  FontSize->0.9 Inherited,ExpressionUUID->
  "f2f747d9-9c08-43b1-84d4-6296fcefbda2"],
 " of satoshis or wei"
}], "GuideText",ExpressionUUID->"520424e4-16f9-4b0a-9f32-9ffd84866b55"],

Cell[TextData[{
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData["ChainAddressTransactions"]], 
    "paclet:WolframInstitute/Puzzles/ref/ChainAddressTransactions", 
    "WolframInstitute/Puzzles Package Symbol"},
   "PackageLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "d31ffc0d-28a2-4e0d-920b-f8692ab3b181"],
 " ",
 StyleBox["\[LongDash]", "GuideEmDash"],
 " ",
 "the recent transactions of an address, with block height, time and \
confirmation state"
}], "GuideText",ExpressionUUID->"0bb6c3f9-97f2-4262-b488-7fcec33bfde5"],

Cell[TextData[{
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData[
      StyleBox["UnitConvert", FontSlant -> "Italic"]]], 
    "paclet:ref/UnitConvert"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "01adac4c-3074-4090-a7e3-f43d76382911"],
 " (WL)",
 " ",
 StyleBox["\[LongDash]", "GuideEmDash"],
 " ",
 "rescales a satoshi or wei balance to bitcoins or ethers at the point of \
display"
}], "GuideText",ExpressionUUID->"48f310fc-4ce9-448a-af7e-3f1ee4526aa4"],

Cell[TextData[{
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData[
      StyleBox["Quantity", FontSlant -> "Italic"]]], "paclet:ref/Quantity"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "b45e1129-7f73-4cef-8e6b-f8f17f99a998"],
 " (WL)",
 " ",
 StyleBox["\[LongDash]", "GuideEmDash"],
 " ",
 "the unit-carrying amount every balance is reported as"
}], "GuideText",ExpressionUUID->"470b4d4a-59eb-44fd-ba33-1c49c514d8f8"]
}, Open  ]],

Cell[CellGroupData[{

Cell["Backends", "GuideFunctionsSubsection",ExpressionUUID->"d63d7245-303e-4340-9062-80c14d074fbf"],

Cell[TextData[{
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData["$ChainExplorers"]], 
    "paclet:WolframInstitute/Puzzles/ref/$ChainExplorers", 
    "WolframInstitute/Puzzles Package Symbol"},
   "PackageLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "ad8e303e-3b8b-4181-ba9d-02c66bead413"],
 " ",
 StyleBox["\[LongDash]", "GuideEmDash"],
 " ",
 "the registry: which backends exist, which networks and properties each \
serves, and which are queried by default"
}], "GuideText",ExpressionUUID->"8ad47aaf-5da7-4814-80d4-433efa3c3045"],

Cell[TextData[{
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData["ChainExplorerQuery"]], 
    "paclet:WolframInstitute/Puzzles/ref/ChainExplorerQuery", 
    "WolframInstitute/Puzzles Package Symbol"},
   "PackageLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "f34046d9-df51-499e-bcce-2e97b9f29871"],
 " ",
 StyleBox["\[LongDash]", "GuideEmDash"],
 " ",
 "one backend, one property, one address, normalized; the seam every other \
function here goes through"
}], "GuideText",ExpressionUUID->"a51faa7a-7188-47ed-b834-86a555e1a778"],

Cell[TextData[{
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData[
      StyleBox["BlockchainAddressData", FontSlant -> "Italic"]]], 
    "paclet:ref/BlockchainAddressData"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "46ba50f7-667b-4b3d-a9a6-2e34b2f7f60d"],
 " (WL)",
 " ",
 StyleBox["\[LongDash]", "GuideEmDash"],
 " ",
 "the kernel's own address reader, through the Wolfram Cloud, registered here \
as the opt-in ",
 Cell["\"WolframBlockchain\"", "InlineFunctionSansUnlinked",
  FontSize->0.9 Inherited,ExpressionUUID->
  "3dbaa410-f43c-42c5-957e-44796d105135"],
 " backend"
}], "GuideText",ExpressionUUID->"2c3ee289-f938-414c-b0fc-950b8b85583b"],

Cell[TextData[{
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData[
      StyleBox["BlockchainTransactionData", FontSlant -> "Italic"]]], 
    "paclet:ref/BlockchainTransactionData"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "f9691a11-31e3-4b08-911c-8dd4f651c5d2"],
 " (WL)",
 " ",
 StyleBox["\[LongDash]", "GuideEmDash"],
 " ",
 "the kernel's reader for a single transaction by id"
}], "GuideText",ExpressionUUID->"251a6b74-b03b-4a7b-a026-4eee65621e6e"],

Cell[TextData[{
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData[
      StyleBox["BlockchainBase", FontSlant -> "Italic"]]], 
    "paclet:ref/BlockchainBase"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "b3ee973b-c8f8-4106-ba93-3e705b0f9118"],
 " (WL)",
 " ",
 StyleBox["\[LongDash]", "GuideEmDash"],
 " ",
 "selects the chain a built-in blockchain function reads"
}], "GuideText",ExpressionUUID->"d712d400-d61c-45fa-8060-4378f2d0c7af"],

Cell[TextData[{
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData[
      StyleBox["BlockchainData", FontSlant -> "Italic"]]], 
    "paclet:ref/BlockchainData"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "a5405a22-cff2-4dff-b267-eb77aec9bfb6"],
 " (WL)",
 ", ",
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData[
      StyleBox["BlockchainBlockData", FontSlant -> "Italic"]]], 
    "paclet:ref/BlockchainBlockData"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "1293eaf6-d023-47a7-8e4c-455d04233cd1"],
 " (WL)",
 ", ",
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData[
      StyleBox["BlockchainTokenData", FontSlant -> "Italic"]]], 
    "paclet:ref/BlockchainTokenData"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "5f69ecc6-3558-4f77-b71b-e12509691c9f"],
 " (WL)",
 ", ",
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData[
      StyleBox["BlockchainContractValue", FontSlant -> "Italic"]]], 
    "paclet:ref/BlockchainContractValue"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "0948c242-5b3d-45e5-b3a8-141bf31af9e2"],
 " (WL)",
 ", ",
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData[
      StyleBox["$BlockchainBase", FontSlant -> "Italic"]]], 
    "paclet:ref/$BlockchainBase"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "31a25ec0-f369-43f5-b800-ac741e485a13"],
 " (WL)"
}], "GuideText",ExpressionUUID->"8dbc0034-4ab6-45f6-b131-ad4c221644e7"]
}, Open  ]],

Cell[CellGroupData[{

Cell["Caching and offline replay", "GuideFunctionsSubsection",ExpressionUUID->"497b50fa-9e5a-4eda-8220-00b34abd9c12"],

Cell[TextData[{
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData["$ChainCacheDirectory"]], 
    "paclet:WolframInstitute/Puzzles/ref/$ChainCacheDirectory", 
    "WolframInstitute/Puzzles Package Symbol"},
   "PackageLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "271fe4f3-7139-4435-8c52-10a6dfb2df35"],
 " ",
 StyleBox["\[LongDash]", "GuideEmDash"],
 " ",
 "where raw responses are stored, one WXF record per backend, property and \
address"
}], "GuideText",ExpressionUUID->"44a7d826-3172-4817-9d7c-b0ec178dc70c"],

Cell[TextData[{
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData["$ChainCacheDuration"]], 
    "paclet:WolframInstitute/Puzzles/ref/$ChainCacheDuration", 
    "WolframInstitute/Puzzles Package Symbol"},
   "PackageLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "339e6764-54f8-44d2-a617-bbecd4575e86"],
 " ",
 StyleBox["\[LongDash]", "GuideEmDash"],
 " ",
 "how long a stored response is reused before the backend is asked again"
}], "GuideText",ExpressionUUID->"261edfa9-6425-47c4-a479-53c76b9a850b"],

Cell[TextData[{
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData["$ChainNetworkEnabled"]], 
    "paclet:WolframInstitute/Puzzles/ref/$ChainNetworkEnabled", 
    "WolframInstitute/Puzzles Package Symbol"},
   "PackageLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "5f7820fa-92d9-469c-a2bc-bcaa624c9000"],
 " ",
 StyleBox["\[LongDash]", "GuideEmDash"],
 " ",
 "set to ",
 Cell["False", "InlineFunctionSansUnlinked",
  FontSize->0.9 Inherited,ExpressionUUID->
  "48b471c9-6621-46a3-bdfb-52a4017c3cd0"],
 ", every read answers from the cache alone and a miss is a ",
 Cell["Failure", "InlineFunctionSansUnlinked",
  FontSize->0.9 Inherited,ExpressionUUID->
  "d7c0e647-b143-43a6-b1bf-2e603527ac82"],
 ", not a guess"
}], "GuideText",ExpressionUUID->"8600406e-197a-40c8-b0ed-8d474376a582"],

Cell[TextData[{
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData["ClearChainCache"]], 
    "paclet:WolframInstitute/Puzzles/ref/ClearChainCache", 
    "WolframInstitute/Puzzles Package Symbol"},
   "PackageLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "2e4976e1-93e7-433d-9c8a-928e534b3d6f"],
 " ",
 StyleBox["\[LongDash]", "GuideEmDash"],
 " ",
 "deletes the stored records, all of them or one backend's, and counts them"
}], "GuideText",ExpressionUUID->"98dc17de-ed86-4bb0-9746-08a503a1cd4a"],

Cell[TextData[{
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData[
      StyleBox["TimeConstraint", FontSlant -> "Italic"]]], 
    "paclet:ref/TimeConstraint"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "1ea97b13-a1ee-4ef3-b5c5-7f952a96fae1"],
 " (WL)",
 ", ",
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData[
      StyleBox["MaxItems", FontSlant -> "Italic"]]], "paclet:ref/MaxItems"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "d04ffdbc-ab33-43f6-9480-5990762bce16"],
 " (WL)",
 ", ",
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData[
      StyleBox["ClearSystemCache", FontSlant -> "Italic"]]], 
    "paclet:ref/ClearSystemCache"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "b24b567b-fea4-4536-ae81-47cedbe5e7b2"],
 " (WL)",
 ", ",
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData[
      StyleBox["$AllowInternet", FontSlant -> "Italic"]]], 
    "paclet:ref/$AllowInternet"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "c9c86311-5337-49f7-846a-9e2234e63746"],
 " (WL)"
}], "GuideText",ExpressionUUID->"b29abb42-de07-4096-a2c7-b4f1dac43402"]
}, Open  ]],

Cell[CellGroupData[{

Cell["Requests and parsing underneath", "GuideFunctionsSubsection",ExpressionUUID->"973c524f-61ed-4cbb-9d92-f874003f0728"],

Cell[TextData[{
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData[
      StyleBox["URLRead", FontSlant -> "Italic"]]], "paclet:ref/URLRead"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "019f40a7-be44-482b-a92b-d737c0ebacb0"],
 " (WL)",
 " ",
 StyleBox["\[LongDash]", "GuideEmDash"],
 " ",
 "the HTTP exchange every REST and JSON-RPC backend goes through"
}], "GuideText",ExpressionUUID->"287832fe-41f4-462d-b45f-89f2c088d8ad"],

Cell[TextData[{
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData[
      StyleBox["HTTPRequest", FontSlant -> "Italic"]]], 
    "paclet:ref/HTTPRequest"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "9bbf15b0-c9d2-407b-b68f-ceaab06977bd"],
 " (WL)",
 " ",
 StyleBox["\[LongDash]", "GuideEmDash"],
 " ",
 "the request objects the backends are addressed with"
}], "GuideText",ExpressionUUID->"9ced77f2-e46a-42a6-947e-1c37a92c037a"],

Cell[TextData[{
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData[
      StyleBox["ImportString", FontSlant -> "Italic"]]], 
    "paclet:ref/ImportString"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "c089106c-0dd9-42e6-96f8-b8e0d3a46245"],
 " (WL)",
 " ",
 StyleBox["\[LongDash]", "GuideEmDash"],
 " ",
 "reads the ",
 Cell["\"RawJSON\"", "InlineFunctionSansUnlinked",
  FontSize->0.9 Inherited,ExpressionUUID->
  "6862f285-a114-495b-b3a0-15a409f258e1"],
 " bodies the explorers return"
}], "GuideText",ExpressionUUID->"bb23ed87-ac2d-4819-bdb2-864b7a1be58b"],

Cell[TextData[{
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData[
      StyleBox["Failure", FontSlant -> "Italic"]]], "paclet:ref/Failure"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "dbc7ca19-fcca-4837-b3b5-c7401b14a5cf"],
 " (WL)",
 " ",
 StyleBox["\[LongDash]", "GuideEmDash"],
 " ",
 "the shape every unanswered chain question comes back in"
}], "GuideText",ExpressionUUID->"b699d80b-3b23-439f-a21a-205aeeb7bab1"],

Cell[TextData[{
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData[
      StyleBox["HTTPResponse", FontSlant -> "Italic"]]], 
    "paclet:ref/HTTPResponse"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "91864cc2-759c-44ab-ba0b-ab6bc24c56bb"],
 " (WL)",
 ", ",
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData[
      StyleBox["FailureQ", FontSlant -> "Italic"]]], "paclet:ref/FailureQ"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "f4f62446-5371-43e5-a742-9da1aa273905"],
 " (WL)",
 ", ",
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData[
      StyleBox["FromUnixTime", FontSlant -> "Italic"]]], 
    "paclet:ref/FromUnixTime"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "5b80d7c6-3557-4b64-b59c-69501bf55a7d"],
 " (WL)",
 ", ",
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData[
      StyleBox["DateObject", FontSlant -> "Italic"]]], 
    "paclet:ref/DateObject"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "f8c238d4-876f-45e1-8901-ad690ccfe65b"],
 " (WL)",
 ", ",
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData[
      StyleBox["Hash", FontSlant -> "Italic"]]], "paclet:ref/Hash"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "4af8451e-7d09-47b7-81fb-3f754a44d9ec"],
 " (WL)",
 ", ",
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData[
      StyleBox["Export", FontSlant -> "Italic"]]], "paclet:ref/Export"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFunctionSansUnlinked",ExpressionUUID->
  "e48b4fd2-c33e-42fd-8679-8f21bd8f3eb4"],
 " (WL)",
 "\[Ellipsis]"
}], "GuideText",ExpressionUUID->"6fa6052f-aa42-4cb7-b9a0-8ae3514baa9a"]
}, Open  ]]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[GridBox[{
   {
    DynamicBox[FEPrivate`ImportImage[
      FrontEnd`FileName[{"Documentation", "FooterIcons"}, 
       "RelatedGuide.png"]]], GridBox[{
      {
       StyleBox[
        RowBox[{"Related", " ", "Guides"}], "GuideMoreAboutSection"]},
      {
       RowBox[{"\[FilledVerySmallSquare]", Cell[TextData[Cell[BoxData[
         TemplateBox[{
           Cell[
            TextData["Puzzles"]], 
           "paclet:WolframInstitute/Puzzles/guide/Puzzles"},
          "RefLinkPlain",
          BaseStyle->{"InlineFormula"}]], "InlineFormula",
         FontFamily->"Source Sans Pro",ExpressionUUID->
         "45b52c30-0eaf-4397-b670-d144a9ac1a76"]], "GuideMoreAbout",
         ExpressionUUID->"2879bfe6-3cd7-4c43-bb13-50cfd26bf5f7"]}]},
      {
       RowBox[{"\[FilledVerySmallSquare]", Cell[TextData[Cell[BoxData[
         TemplateBox[{
           Cell[
            TextData["Oracles"]], 
           "paclet:WolframInstitute/Puzzles/guide/Oracles"},
          "RefLinkPlain",
          BaseStyle->{"InlineFormula"}]], "InlineFormula",
         FontFamily->"Source Sans Pro",ExpressionUUID->
         "25f42844-d2e4-4198-8ff4-1ffd2782bd0a"]], "GuideMoreAbout",
         ExpressionUUID->"63c979d2-69a3-4829-91b7-649df6a72e56"]}]},
      {
       RowBox[{"\[FilledVerySmallSquare]", Cell[TextData[Cell[BoxData[
         TemplateBox[{
           Cell[
            TextData["Search"]], 
           "paclet:WolframInstitute/Puzzles/guide/Search"},
          "RefLinkPlain",
          BaseStyle->{"InlineFormula"}]], "InlineFormula",
         FontFamily->"Source Sans Pro",ExpressionUUID->
         "5481d8e6-66fe-41c3-9176-509d8cf2c08a"]], "GuideMoreAbout",
         ExpressionUUID->"bbff7ce1-ff17-4d97-bb99-2db61e8c5654"]}]},
      {
       RowBox[{"\[FilledVerySmallSquare]", Cell[TextData[Cell[BoxData[
         TemplateBox[{
           Cell[
            TextData["Derivation"]], 
           "paclet:WolframInstitute/Puzzles/guide/Derivation"},
          "RefLinkPlain",
          BaseStyle->{"InlineFormula"}]], "InlineFormula",
         FontFamily->"Source Sans Pro",ExpressionUUID->
         "c7d7e983-e304-4121-8bff-28630450cfb4"]], "GuideMoreAbout",
         ExpressionUUID->"0894de84-21a6-4703-81a5-a9f06d094f03"]}]},
      {
       RowBox[{"\[FilledVerySmallSquare]", Cell[TextData[Cell[BoxData[
         TemplateBox[{
           Cell[
            TextData["Encodings"]], 
           "paclet:WolframInstitute/Puzzles/guide/Encodings"},
          "RefLinkPlain",
          BaseStyle->{"InlineFormula"}]], "InlineFormula",
         FontFamily->"Source Sans Pro",ExpressionUUID->
         "9bc3b284-b28f-4407-9e6c-9336b97e38ea"]], "GuideMoreAbout",
         ExpressionUUID->"176a5536-dcbd-4fb1-8549-1ef76db8f30f"]}]}
     }]}
  }]], "GuideMoreAboutSection",ExpressionUUID->"7a5fd77d-0292-4dee-973e-\
742de750b41c"],

Cell[TextData[Cell[BoxData[
 TemplateBox[{
   Cell[
    TextData["Esplora HTTP API"]], 
   "https://github.com/Blockstream/esplora/blob/master/API.md"},
  "WebLink",
  BaseStyle->{
   "GuideRelatedLinks"}]],ExpressionUUID->"5852b10c-92fa-4376-acc4-\
04623c8698b3"]], "GuideRelatedLinks",ExpressionUUID->"f7911ee7-390c-4afa-9697-\
5239b75edec5"],

Cell[TextData[Cell[BoxData[
 TemplateBox[{
   Cell[
    TextData["mempool.space REST API"]], 
   "https://mempool.space/docs/api/rest"},
  "WebLink",
  BaseStyle->{
   "GuideRelatedLinks"}]],ExpressionUUID->"00c7787c-0cdd-4642-9e94-\
42ed58835797"]], "GuideRelatedLinks",ExpressionUUID->"716c4f37-7b91-4ecb-9c3f-\
e37a2ff69927"],

Cell[TextData[Cell[BoxData[
 TemplateBox[{
   Cell[
    TextData["BlockCypher Bitcoin API"]], 
   "https://www.blockcypher.com/dev/bitcoin/"},
  "WebLink",
  BaseStyle->{
   "GuideRelatedLinks"}]],ExpressionUUID->"2c3bf75c-ee06-4d55-a192-\
42226e62df66"]], "GuideRelatedLinks",ExpressionUUID->"9ee45a14-b04c-42e6-88f6-\
6860d7ef75c6"],

Cell[TextData[Cell[BoxData[
 TemplateBox[{
   Cell[
    TextData["Blockscout REST API"]], 
   "https://docs.blockscout.com/devs/apis/rest"},
  "WebLink",
  BaseStyle->{
   "GuideRelatedLinks"}]],ExpressionUUID->"53f0c3ba-8f27-4a76-9b10-\
c7e26ad80e53"]], "GuideRelatedLinks",ExpressionUUID->"012055ed-8638-4c37-956a-\
a54f46588f1a"],

Cell[TextData[Cell[BoxData[
 TemplateBox[{
   Cell[
    TextData["Ethereum JSON-RPC specification"]], 
   "https://ethereum.github.io/execution-apis/api-documentation/"},
  "WebLink",
  BaseStyle->{
   "GuideRelatedLinks"}]],ExpressionUUID->"29f1f9d7-fa59-49b5-b04a-\
9450df5841e6"]], "GuideRelatedLinks",ExpressionUUID->"21d1abb7-d611-42ae-a5e0-\
90af3112d55d"]
}, Open  ]],

Cell[" ", "FooterCell",ExpressionUUID->"04ec50d4-11a7-4291-ab45-07a2aa58a1d2"]
},
Saveable->False,
ScreenStyleEnvironment->"Working",
WindowSize->{900, 830},
WindowMargins->{{0, Automatic}, {Automatic, 0}},
WindowTitle->"Chain",
TaggingRules->{
 "ModificationHighlight" -> False, "ColorType" -> "", "LinkTrails" -> "", 
  "ExampleCounter" -> 1, 
  "Openers" -> {
   "PrimaryExamplesSection" -> Open, "ExampleSection" -> {"0" -> Open}}, 
  "NewStyles" -> True, "CitationPopupData" -> {$Failed, ""}, "ShowCitation" -> 
  False, "RootCaptions" -> "", "HeaderCoreAreaLink" -> {}, 
  "Metadata" -> {
   "built" -> "{2026, 8, 27, 0, 11, 5.984359}", 
    "history" -> {"XX", "", "", ""}, "context" -> "WolframInstitute`Puzzles`",
     "keywords" -> {
     "block explorer", "blockchain", "address balance", "unspent", 
      "unclaimed prize", "cross-check", "consensus", "bitcoin", "ethereum", 
      "esplora", "mempool.space", "blockstream", "blockcypher", "blockscout", 
      "json-rpc", "cache", "offline replay"}, "specialkeywords" -> {}, 
    "tutorialcollectionlinks" -> {}, "index" -> True, "label" -> 
    "Wolfram Institute/ Puzzles Guide", "language" -> "en", "paclet" -> 
    "WolframInstitute/Puzzles", "status" -> "None", "summary" -> 
    "Chain answers the question a puzzle ends on: is the money still there. \
It reads Bitcoin and Ethereum addresses from several independently operated \
block explorers, normalizes what they say into one shape whose amounts are \
exact Integer counts of satoshis or wei, caches every response on disk so a \
sweep does not re-hit a public service, and refuses to state a verdict that \
two backends did not agree on. A backend that is unreachable, rate-limited or \
unparsable produces a Failure naming the backend, the URL and the status \
code. It never produces a zero, because a zero balance is a claim about the \
chain and an explorer that did not answer has not made one.", 
    "synonyms" -> {}, "tabletags" -> {}, "title" -> "Chain", "titlemodifier" -> 
    "", "metadescription" -> "", "windowtitle" -> "Chain", "type" -> "Guide", 
    "uri" -> "WolframInstitute/Puzzles/guide/Chain", "WorkflowDockedCell" -> 
    ""}, "SearchTextTranslated" -> ""},
CellContext->CellGroup,
CacheGraphics->False,
FrontEndVersion->"15.0 for Mac OS X ARM (64-bit) (May 19, 2026)",
StyleDefinitions->FrontEnd`FileName[{"Wolfram"}, "Reference.nb"],
ExpressionUUID->"2486635a-58d5-4f48-97e7-c053683b6dfc"
]
(* End of Notebook Content *)

(* Internal cache information *)
(*CellTagsOutline
CellTagsIndex->{}
*)
(*CellTagsIndex
CellTagsIndex->{}
*)
(*NotebookFileOutline
Notebook[{
Cell[573, 21, 3026, 73, 70, "AnchorBarGrid",ExpressionUUID->"6481dae5-0045-45f8-8f42-f61014b2bce8",
 CellID->1],
Cell[CellGroupData[{
Cell[3624, 98, 102, 1, 70, "GuideTitle",ExpressionUUID->"86396585-859d-433a-b258-479774a7ea40",
 CellID->942062912],
Cell[3729, 101, 785, 11, 70, "GuideAbstract",ExpressionUUID->"49331db6-0b66-4056-a3d2-01516287d3fd",
 CellID->2001916300],
Cell[4517, 114, 93, 0, 70, "GuideDelimiterSubsection",ExpressionUUID->"6c861089-6fc2-46b7-adca-7971c297602a"],
Cell[CellGroupData[{
Cell[4635, 118, 134, 0, 70, "GuideFunctionsSubsection",ExpressionUUID->"1f9a71e2-0b32-409d-98c2-725c88de5552"],
Cell[4772, 120, 1021, 26, 70, "GuideText",ExpressionUUID->"f8d4b4b6-bf28-483c-9ce8-096a968ed481"],
Cell[5796, 148, 895, 22, 70, "GuideText",ExpressionUUID->"1465abf0-ca69-4dc0-ade0-d95249a62052"]
}, Open  ]],
Cell[CellGroupData[{
Cell[6728, 175, 110, 0, 70, "GuideFunctionsSubsection",ExpressionUUID->"8e76e254-e066-4b86-a470-d1b199a44a4d"],
Cell[6841, 177, 599, 15, 70, "GuideText",ExpressionUUID->"b2cb9dda-b4e7-4539-a944-715bfeb15324"],
Cell[7443, 194, 669, 18, 70, "GuideText",ExpressionUUID->"520424e4-16f9-4b0a-9f32-9ffd84866b55"],
Cell[8115, 214, 574, 15, 70, "GuideText",ExpressionUUID->"0bb6c3f9-97f2-4262-b488-7fcec33bfde5"],
Cell[8692, 231, 515, 16, 70, "GuideText",ExpressionUUID->"48f310fc-4ce9-448a-af7e-3f1ee4526aa4"],
Cell[9210, 249, 476, 14, 70, "GuideText",ExpressionUUID->"470b4d4a-59eb-44fd-ba33-1c49c514d8f8"]
}, Open  ]],
Cell[CellGroupData[{
Cell[9723, 268, 99, 0, 70, "GuideFunctionsSubsection",ExpressionUUID->"d63d7245-303e-4340-9062-80c14d074fbf"],
Cell[9825, 270, 582, 15, 70, "GuideText",ExpressionUUID->"8ad47aaf-5da7-4814-80d4-433efa3c3045"],
Cell[10410, 287, 576, 15, 70, "GuideText",ExpressionUUID->"a51faa7a-7188-47ed-b834-86a555e1a778"],
Cell[10989, 304, 706, 20, 70, "GuideText",ExpressionUUID->"2c3ee289-f938-414c-b0fc-950b8b85583b"],
Cell[11698, 326, 512, 15, 70, "GuideText",ExpressionUUID->"251a6b74-b03b-4a7b-a026-4eee65621e6e"],
Cell[12213, 343, 494, 15, 70, "GuideText",ExpressionUUID->"d712d400-d61c-45fa-8060-4378f2d0c7af"],
Cell[12710, 360, 1634, 55, 70, "GuideText",ExpressionUUID->"8dbc0034-4ab6-45f6-b131-ad4c221644e7"]
}, Open  ]],
Cell[CellGroupData[{
Cell[14381, 420, 117, 0, 70, "GuideFunctionsSubsection",ExpressionUUID->"497b50fa-9e5a-4eda-8220-00b34abd9c12"],
Cell[14501, 422, 561, 15, 70, "GuideText",ExpressionUUID->"44a7d826-3172-4817-9d7c-b0ec178dc70c"],
Cell[15065, 439, 547, 14, 70, "GuideText",ExpressionUUID->"261edfa9-6425-47c4-a479-53c76b9a850b"],
Cell[15615, 455, 831, 22, 70, "GuideText",ExpressionUUID->"8600406e-197a-40c8-b0ed-8d474376a582"],
Cell[16449, 479, 542, 14, 70, "GuideText",ExpressionUUID->"98dc17de-ed86-4bb0-9746-08a503a1cd4a"],
Cell[16994, 495, 1278, 43, 70, "GuideText",ExpressionUUID->"b29abb42-de07-4096-a2c7-b4f1dac43402"]
}, Open  ]],
Cell[CellGroupData[{
Cell[18309, 543, 122, 0, 70, "GuideFunctionsSubsection",ExpressionUUID->"973c524f-61ed-4cbb-9d92-f874003f0728"],
Cell[18434, 545, 483, 14, 70, "GuideText",ExpressionUUID->"287832fe-41f4-462d-b45f-89f2c088d8ad"],
Cell[18920, 561, 485, 15, 70, "GuideText",ExpressionUUID->"9ced77f2-e46a-42a6-947e-1c37a92c037a"],
Cell[19408, 578, 616, 19, 70, "GuideText",ExpressionUUID->"bb23ed87-ac2d-4819-bdb2-864b7a1be58b"],
Cell[20027, 599, 476, 14, 70, "GuideText",ExpressionUUID->"b699d80b-3b23-439f-a21a-205aeeb7bab1"],
Cell[20506, 615, 1834, 64, 70, "GuideText",ExpressionUUID->"6fa6052f-aa42-4cb7-b9a0-8ae3514baa9a"]
}, Open  ]]
}, Open  ]],
Cell[CellGroupData[{
Cell[22389, 685, 2835, 65, 70, "GuideMoreAboutSection",ExpressionUUID->"7a5fd77d-0292-4dee-973e-742de750b41c"],
Cell[25227, 752, 344, 9, 70, "GuideRelatedLinks",ExpressionUUID->"f7911ee7-390c-4afa-9697-5239b75edec5"],
Cell[25574, 763, 328, 9, 70, "GuideRelatedLinks",ExpressionUUID->"716c4f37-7b91-4ecb-9c3f-e37a2ff69927"],
Cell[25905, 774, 334, 9, 70, "GuideRelatedLinks",ExpressionUUID->"9ee45a14-b04c-42e6-88f6-6860d7ef75c6"],
Cell[26242, 785, 332, 9, 70, "GuideRelatedLinks",ExpressionUUID->"012055ed-8638-4c37-956a-a54f46588f1a"],
Cell[26577, 796, 362, 9, 70, "GuideRelatedLinks",ExpressionUUID->"21d1abb7-d611-42ae-a5e0-90af3112d55d"]
}, Open  ]],
Cell[26954, 808, 78, 0, 70, "FooterCell",ExpressionUUID->"04ec50d4-11a7-4291-ab45-07a2aa58a1d2"]
}
]
*)

(* End of internal cache information *)

