{
 "version": "v1",
 "generatedAt": "2026-10-15T21:09:14Z",
 "name": "Alandale V3 Factory",
 "named_from": "dashboard",
 "chain": "Robinhood Chain",
 "address": "0x16494a80e08bcb9285d87b67149d7b01774d82f8",
 "composite": 43,
 "band": "moderate",
 "keys_to_move": 3,
 "react_hours": 0,
 "money_per_key_usd": null,
 "not_assessed": [
  "the money behind one key (no money figure, or no key count)",
  "the protocol's total value locked (no DefiLlama match)"
 ],
 "sub": {
  "adminKeyScore": 65,
  "multisigScore": 55,
  "timelockScore": 0,
  "oracleAuthorityScore": 100,
  "crossExposureScore": 100
 },
 "requirements": [
  {
   "label": "Admin power is not a bare key",
   "met": true
  },
  {
   "label": "At least a 3-of-5 multisig",
   "met": true
  },
  {
   "label": "A confirmed delay before changes apply, no bypass",
   "met": false
  },
  {
   "label": "Bypass paths of the delay checked and ruled out",
   "met": false
  },
  {
   "label": "Price feed not under one hand",
   "met": true
  },
  {
   "label": "No key shared with another tracked protocol",
   "met": true
  }
 ],
 "exit_window": "none: a change applies at once",
 "tvl_usd": null,
 "category": null,
 "at_risk_usd": null,
 "narrative": {
  "summary": "One plain 3-of-5 Gnosis Safe (v1.4.1, no module, guard slot zero, five bare-EOA owners) is the factory\u2019s owner, its ProxyAdmin\u2019s owner and its sole DEFAULT_ADMIN_ROLE holder, so it controls both the factory\u2019s settings and the right to replace its logic, with no timelock in the path.",
  "tag": "~$1.14M TVL, recomputed from pool balances",
  "detail": "No source was read: the deployed logic matches Algebra Integral v1.0\u2019s factory interface (35 of 35 reference selectors present) plus about ten unrecognized selectors, so the score rests only on the ownership and upgrade chain. Pool plugins, any voter or gauge contracts and the separate Alandale V2 factory were not traced."
 },
 "score_account": null,
 "paused": null,
 "side_roles": null,
 "side_pending": null,
 "safe_activity": [
  {
   "safe": "robinhood:0x2a04\u20262b0e",
   "nonce": 155,
   "idle_since": "2026-10-15T19:02:41Z",
   "last_moved": "2026-10-15T19:02:41Z",
   "never_executed": false
  }
 ],
 "admin_probe": null,
 "held": null,
 "dispute": null,
 "independent_read_reproduce": {
  "rpc": "https://rpc.mainnet.chain.robinhood.com",
  "steps": [
   {
    "what": "the admin slot of the proxy (EIP-1967): the word is the admin address",
    "method": "eth_getStorageAt",
    "params": [
     "0x16494a80e08bcb9285d87b67149d7b01774d82f8",
     "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103",
     "0x55508a0"
    ]
   },
   {
    "what": "owner() on the address the slot returned (a ProxyAdmin): the holder",
    "method": "eth_call",
    "params": [
     {
      "to": "<address from the slot>",
      "data": "0x8da5cb5b"
     },
     "0x55508a0"
    ]
   },
   {
    "what": "getThreshold() on the holder (a Safe)",
    "method": "eth_call",
    "params": [
     {
      "to": "<holder>",
      "data": "0xe75235b8"
     },
     "latest"
    ]
   },
   {
    "what": "getOwners() on the holder: the signer set (word 2 is the count)",
    "method": "eth_call",
    "params": [
     {
      "to": "<holder>",
      "data": "0xa0e67e2b"
     },
     "latest"
    ]
   },
   {
    "what": "getModulesPaginated(0x1, 50) on the holder: the modules (a module executes without the signatures)",
    "method": "eth_call",
    "params": [
     {
      "to": "<holder>",
      "data": "0xcc2f845200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000032"
     },
     "latest"
    ]
   },
   {
    "what": "the guard slot of the holder (keccak of guard_manager.guard.address)",
    "method": "eth_getStorageAt",
    "params": [
     "<holder>",
     "0x4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c8",
     "latest"
    ]
   },
   {
    "what": "the implementation slot of the proxy (EIP-1967): the code behind it, an upgrade changes this word",
    "method": "eth_getStorageAt",
    "params": [
     "0x16494a80e08bcb9285d87b67149d7b01774d82f8",
     "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc",
     "latest"
    ]
   }
  ],
  "curl": "# the admin slot of the proxy (EIP-1967): the word is the admin address\ncurl -s -X POST https://rpc.mainnet.chain.robinhood.com -H 'content-type: application/json' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"eth_getStorageAt\",\"params\":[\"0x16494a80e08bcb9285d87b67149d7b01774d82f8\",\"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\",\"0x55508a0\"]}'\n# owner() on the address the slot returned (a ProxyAdmin): the holder\ncurl -s -X POST https://rpc.mainnet.chain.robinhood.com -H 'content-type: application/json' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"eth_call\",\"params\":[{\"to\":\"<address from the slot>\",\"data\":\"0x8da5cb5b\"},\"0x55508a0\"]}'\n# getThreshold() on the holder (a Safe)\ncurl -s -X POST https://rpc.mainnet.chain.robinhood.com -H 'content-type: application/json' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"eth_call\",\"params\":[{\"to\":\"<holder>\",\"data\":\"0xe75235b8\"},\"latest\"]}'\n# getOwners() on the holder: the signer set (word 2 is the count)\ncurl -s -X POST https://rpc.mainnet.chain.robinhood.com -H 'content-type: application/json' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"eth_call\",\"params\":[{\"to\":\"<holder>\",\"data\":\"0xa0e67e2b\"},\"latest\"]}'\n# getModulesPaginated(0x1, 50) on the holder: the modules (a module executes without the signatures)\ncurl -s -X POST https://rpc.mainnet.chain.robinhood.com -H 'content-type: application/json' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"eth_call\",\"params\":[{\"to\":\"<holder>\",\"data\":\"0xcc2f845200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000032\"},\"latest\"]}'\n# the guard slot of the holder (keccak of guard_manager.guard.address)\ncurl -s -X POST https://rpc.mainnet.chain.robinhood.com -H 'content-type: application/json' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"eth_getStorageAt\",\"params\":[\"<holder>\",\"0x4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c8\",\"latest\"]}'\n# the implementation slot of the proxy (EIP-1967): the code behind it, an upgrade changes this word\ncurl -s -X POST https://rpc.mainnet.chain.robinhood.com -H 'content-type: application/json' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"eth_getStorageAt\",\"params\":[\"0x16494a80e08bcb9285d87b67149d7b01774d82f8\",\"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\",\"latest\"]}'",
  "block": "0x55508a0",
  "note": "read between blocks 89458462 and 89458848 of the chain"
 },
 "history": [
  {
   "t": "2026-10-13T03:26:46Z",
   "composite": 43,
   "from": "push"
  }
 ],
 "feed": "https://raw.githubusercontent.com/RealSpap/authority-risk-oracle-showcase/watch-data/feed/robinhood-chain/0x16494a80e08bcb9285d87b67149d7b01774d82f8.xml",
 "reproduce": {
  "rpc": "https://rpc.testnet.chain.robinhood.com/rpc",
  "to": "0x9BF45734D09bC7CA39238e767B2af9AAc62a7f52",
  "data": "0xd47875d000000000000000000000000016494a80e08bcb9285d87b67149d7b01774d82f8",
  "block": "latest",
  "composite_word": 6,
  "block_honoured": false,
  "note": "this RPC cannot replay the block of the build (it ignores the block tag, or no longer serves old state): the call reproduces the current value, not the one of the build; compare the composite and lastUpdated with this page",
  "curl": "curl -s -X POST https://rpc.testnet.chain.robinhood.com/rpc -H 'content-type: application/json' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"eth_call\",\"params\":[{\"to\":\"0x9BF45734D09bC7CA39238e767B2af9AAc62a7f52\",\"data\":\"0xd47875d000000000000000000000000016494a80e08bcb9285d87b67149d7b01774d82f8\"},\"latest\"]}'"
 },
 "consumer_example": {
  "verdict": "zero",
  "collateral_factor_bps": 0,
  "text": "collateral factor 0 (score 43 is under MIN_SAFE_SCORE 60)"
 },
 "cheapest_fix": {
  "band": "decent",
  "next": 60,
  "axis": "timelock",
  "from": 0,
  "to": 57,
  "what": "a confirmed delay before changes apply"
 },
 "main_gap": {
  "requirement": "A confirmed delay before changes apply, no bypass",
  "reason": "Changes can apply with no waiting time"
 },
 "independent_read": {
  "path": "EIP-1967 admin -&gt; ProxyAdmin owner()",
  "holder": "0x2a04\u20262b0e",
  "pending_admin": null,
  "pending_via": null,
  "self_delay_seconds": null,
  "threshold": 3,
  "owners": 5,
  "keys_to_act": 3,
  "keys_lost_to_freeze": 3,
  "kind": "safe",
  "since": "2026-10-10T06:54:09Z",
  "owners_kinds": {
   "eoa": 5
  },
  "posture": "admin: Safe 3-of-5 of 5 plain keys; delay: none",
  "exposure": {
   "keys_to_move": 3,
   "react_hours": 0,
   "tvl_usd": null,
   "money_per_key_usd": null,
   "money_source": null,
   "held_symbol": null,
   "held_amount": null
  }
 },
 "score_cluster": null,
 "last_pushed": 1791862006,
 "stale": false,
 "methodology_hash": "0x667dc486af9557a83488110fdb18fe653ba6d3be4773420590ee53b4a052fa45",
 "block": 136039274,
 "live": "https://realspap.github.io/oracle/#chain=all&q=0x16494a80e08bcb9285d87b67149d7b01774d82f8",
 "page": "https://realspap.github.io/oracle/p/robinhood-0x16494a80e08bcb9285d87b67149d7b01774d82f8.html",
 "license": "CC BY 4.0, attribution: Authority Risk Oracle, realspap.github.io/oracle"
}