{ "cells": [ { "cell_type": "markdown", "id": "d4e5f6a7-0004-0000-0000-000000000001", "metadata": {}, "source": [ "# The Trust Proof\n", "\n", "This notebook reconstructs the entire AnchorRegistry from on-chain events alone.\n", "\n", "> **No AnchorRegistry API. No Supabase. No account.**\n", "> Just an RPC endpoint and the contract address.\n", "> If AnchorRegistry's servers disappeared tomorrow, this notebook would still work.\n", "\n", "> These examples run against Sepolia testnet (`network=\"sepolia\"`).\n", "> To run against Base mainnet: replace `configure(network=\"sepolia\")` with `configure(network=\"base\")`.\n", "> All function calls, record structures, and output shapes are identical across networks." ] }, { "cell_type": "code", "execution_count": 1, "id": "d4e5f6a7-0004-0000-0000-000000000002", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Contract: TBD\n", "Scanning from block: None\n" ] } ], "source": [ "# Cell 1 — what you need\n", "# - An Ethereum RPC endpoint (Infura, Alchemy, or your own node)\n", "# - The contract address (public on Etherscan forever)\n", "# Nothing else.\n", "\n", "from anchorregistry import configure, get_all, to_dataframe, BASE_SEPOLIA_RPC, V1A_BASE_SEPOLIA\n", "from anchorregistry.constants import CONTRACT_ADDRESS, DEPLOY_BLOCK, RPC_URL\n", "\n", "configure(\n", " network=\"base-sepolia\",\n", " contract_address=V1A_BASE_SEPOLIA,\n", " rpc_url=BASE_SEPOLIA_RPC, # swap for Infura / Alchemy URL for faster scans\n", ")\n", "print(f\"Contract: {CONTRACT_ADDRESS}\")\n", "print(f\"Scanning from block: {DEPLOY_BLOCK}\")\n", "print(f\"RPC endpoint: {RPC_URL}\")" ] }, { "cell_type": "code", "execution_count": 2, "id": "d4e5f6a7-0004-0000-0000-000000000003", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total anchors recovered: 5\n" ] } ], "source": [ "# Cell 2 — reconstruct the full registry\n", "records = get_all()\n", "print(f\"Total anchors recovered: {len(records)}\")" ] }, { "cell_type": "code", "execution_count": 3, "id": "d4e5f6a7-0004-0000-0000-000000000004", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'ar_id': 'AR-2026-dPXazj6',\n", " 'registered': True,\n", " 'artifact_type_index': 1,\n", " 'artifact_type_name': 'RESEARCH',\n", " 'tx': '0x826f623ce984a9cadeb5d72c710d279e7385cd83ee4815d092e393d5d574ec57',\n", " 'block': 40225238,\n", " 'registrant': '0xc7a7afde1177fbf0bb265ea5a616d1b8d7ed8c44',\n", " 'manifest_hash': '981e16e83f1e0068d87a89e04962b9287bb5f024782beca6fec837304e8c308e',\n", " 'parent_ar_id': '',\n", " 'descriptor': '',\n", " 'title': 'test sepolia anchor',\n", " 'author': '',\n", " 'tree_id': '0xf07140ce4deaf3b5dac859091a079f82e9656f173593feda7895d940b8fa5d13',\n", " 'token_commitment': '0xf07140ce4deaf3b5dac859091a079f82e9656f173593feda7895d940b8fa5d13',\n", " 'data': {'doi': '',\n", " 'institution': '',\n", " 'co_authors': '',\n", " 'url': 'https://anchorregistry.com/'}}" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Cell 3 — inspect a single record (raw dict)\n", "records[0]" ] }, { "cell_type": "code", "execution_count": 4, "id": "d4e5f6a7-0004-0000-0000-000000000005", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
| \n", " | ar_id | \n", "registered | \n", "artifact_type_index | \n", "artifact_type_name | \n", "tx | \n", "block | \n", "registrant | \n", "manifest_hash | \n", "parent_ar_id | \n", "descriptor | \n", "... | \n", "data_data_version | \n", "data_format | \n", "data_row_count | \n", "data_schema_url | \n", "data_url | \n", "code_git_hash | \n", "code_license | \n", "code_language | \n", "code_version | \n", "code_url | \n", "
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | \n", "AR-2026-dPXazj6 | \n", "True | \n", "1 | \n", "RESEARCH | \n", "0x826f623ce984a9cadeb5d72c710d279e7385cd83ee48... | \n", "40225238 | \n", "0xc7a7afde1177fbf0bb265ea5a616d1b8d7ed8c44 | \n", "981e16e83f1e0068d87a89e04962b9287bb5f024782bec... | \n", "\n", " | \n", " | ... | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "
| 1 | \n", "AR-2026-86pNXz1 | \n", "True | \n", "2 | \n", "DATA | \n", "0xb050ffe1e882221230d5d2d7c5f68a2eaab9309c065f... | \n", "40225277 | \n", "0xc7a7afde1177fbf0bb265ea5a616d1b8d7ed8c44 | \n", "e4fde52cce29d5efc0cd0d4a076d410e568937d7d2007f... | \n", "AR-2026-dPXazj6 | \n", "\n", " | ... | \n", "\n", " | \n", " | \n", " | \n", " | https://anchorregistry.com/ | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "
| 2 | \n", "AR-2026-yPZBgoP | \n", "True | \n", "0 | \n", "CODE | \n", "0x4935e22226509ac7bba092a15f01646d252b22ffe242... | \n", "40253950 | \n", "0xc7a7afde1177fbf0bb265ea5a616d1b8d7ed8c44 | \n", "7befa395c06769bdaf5ddfd3e94a3f79ac6ff67a367dfd... | \n", "\n", " | \n", " | ... | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "\n", " | \n", " | \n", " | \n", " | \n", " |
| 3 | \n", "AR-2026-A5kgam5 | \n", "True | \n", "0 | \n", "CODE | \n", "0x01c336d30186a283a767d1830bdaf2a8ccecd52142db... | \n", "40254559 | \n", "0xc7a7afde1177fbf0bb265ea5a616d1b8d7ed8c44 | \n", "40a11cdd88c0df54d1be354dc54e927360376e6080ab76... | \n", "\n", " | \n", " | ... | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "\n", " | \n", " | \n", " | \n", " | \n", " |
| 4 | \n", "AR-2026-L5RMQQ6 | \n", "True | \n", "0 | \n", "CODE | \n", "0x9532d06aaa4d802b09a387531116641436f42743e4dd... | \n", "40254684 | \n", "0xc7a7afde1177fbf0bb265ea5a616d1b8d7ed8c44 | \n", "19b09e8ff3e6ae46cfd3c98bc9983ee89d4c319cf4538b... | \n", "\n", " | \n", " | ... | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "\n", " | \n", " | \n", " | \n", " | \n", " |
5 rows × 28 columns
\n", "