reading robinhood chain

the contracts

back

addresses

wallet0xcca46cb7866ebbae75c77c49ffbdc0a355963490
fund
token
agent key
co-signer
deployed at block
chain id4663

fixed at deploy

fund addressset once, immutable
deploy blockset once, immutable
epoch lengthcan only shrink
per payment capcan only shrink
epoch budgetcan only shrink
cooldowncan only grow
floorcan only grow
tightenings so far

selectors

functionselector
agentKey()0xd35619ca
coSigner()0x312c66cd
fund()0xb60d4288
deployBlock()0xa3ec191a
cooldown()0x787a08a6
epochLength()0x57d775f8
tightenCount()0x1e8387ca
lastTransferBlock()0x8b54127a
perTxCap()0xad82cbea
epochBudget()0xc144fa05
floorBalance()0x10fe9dda
epochStart()0x15e5a1e5
spentThisEpoch()0x95dff702
attemptCount()0x7a154ef4
allowedAt(address)0xdf08af55
totalFunded()0xad044f49
wallet()0x521eb273

events

eventtopic
Attempted(uint256,address,uint256,bytes32)0xedd1e0280715600d3d2cb984b57f67946d21601a12716df1ad896489cf32a4f7
Refused(uint256,bytes32)0x4e7c839a705d77b93dc3d91dfaf3949924130310a24c00b494c6a22223e11f27
Executed(uint256,address,uint256)0x12c8907d32b752d626a36cf18f31719e25f1a3b6f750ee948c22c036373d48aa
Tightened(bytes32,uint256,uint256)0xb0ca4deff7f0b4ea0ce219dbee689ae2814e3e3dd09f79ed84d89eae22119656
AllowProposed(address,uint64)0x8df60443587221871ee1719ab6cccfc62bfeb605b1f71fcaf903f5165eae9f04
AllowActive(address)0xd38693d25078d3ded9fd448a2fedb1a790e1554ab5e16b2e9f6d0e0dcc412aed
CoSigned(uint256,address)0xc7bad0334c7e90d48fa9c90bfdc35fd9008220acf5b28933df627ba3ba6b166b
EpochRolled(uint256)0x1aef00e516d58ced6baf53a6966cc2bec8edeceb4ebdc6521c8bd49a4cf31705
Funded(address,uint256)0x5af8184bef8e4b45eb9f6ed7734d04da38ced226495548f46e0c8ff8d7d9a524

storage

slot 0agentKey, cooldown, epochLength, tightenCountslot 1coSigner, lastTransferBlockslot 2perTxCapslot 3epochBudgetslot 4floorBalanceslot 5epochStartslot 6spentThisEpochslot 7attemptCountslot 8allowedAt mapping basepacked the way the contract stores it. wide rows are single numbers. slot 8 is the root of the allowlist mapping.

nothing in these slots can be written by the agent key.

abi

wallet abi

[
 {
  "type": "function",
  "name": "agentKey",
  "stateMutability": "view",
  "inputs": [],
  "outputs": [
   {
    "type": "address"
   }
  ]
 },
 {
  "type": "function",
  "name": "coSigner",
  "stateMutability": "view",
  "inputs": [],
  "outputs": [
   {
    "type": "address"
   }
  ]
 },
 {
  "type": "function",
  "name": "fund",
  "stateMutability": "view",
  "inputs": [],
  "outputs": [
   {
    "type": "address"
   }
  ]
 },
 {
  "type": "function",
  "name": "deployBlock",
  "stateMutability": "view",
  "inputs": [],
  "outputs": [
   {
    "type": "uint256"
   }
  ]
 },
 {
  "type": "function",
  "name": "cooldown",
  "stateMutability": "view",
  "inputs": [],
  "outputs": [
   {
    "type": "uint32"
   }
  ]
 },
 {
  "type": "function",
  "name": "epochLength",
  "stateMutability": "view",
  "inputs": [],
  "outputs": [
   {
    "type": "uint32"
   }
  ]
 },
 {
  "type": "function",
  "name": "tightenCount",
  "stateMutability": "view",
  "inputs": [],
  "outputs": [
   {
    "type": "uint32"
   }
  ]
 },
 {
  "type": "function",
  "name": "lastTransferBlock",
  "stateMutability": "view",
  "inputs": [],
  "outputs": [
   {
    "type": "uint64"
   }
  ]
 },
 {
  "type": "function",
  "name": "perTxCap",
  "stateMutability": "view",
  "inputs": [],
  "outputs": [
   {
    "type": "uint256"
   }
  ]
 },
 {
  "type": "function",
  "name": "epochBudget",
  "stateMutability": "view",
  "inputs": [],
  "outputs": [
   {
    "type": "uint256"
   }
  ]
 },
 {
  "type": "function",
  "name": "floorBalance",
  "stateMutability": "view",
  "inputs": [],
  "outputs": [
   {
    "type": "uint256"
   }
  ]
 },
 {
  "type": "function",
  "name": "epochStart",
  "stateMutability": "view",
  "inputs": [],
  "outputs": [
   {
    "type": "uint256"
   }
  ]
 },
 {
  "type": "function",
  "name": "spentThisEpoch",
  "stateMutability": "view",
  "inputs": [],
  "outputs": [
   {
    "type": "uint256"
   }
  ]
 },
 {
  "type": "function",
  "name": "attemptCount",
  "stateMutability": "view",
  "inputs": [],
  "outputs": [
   {
    "type": "uint256"
   }
  ]
 },
 {
  "type": "function",
  "name": "allowedAt",
  "stateMutability": "view",
  "inputs": [
   {
    "type": "address"
   }
  ],
  "outputs": [
   {
    "type": "uint64"
   }
  ]
 },
 {
  "type": "event",
  "name": "Attempted",
  "inputs": [
   {
    "name": "id",
    "type": "uint256",
    "indexed": true
   },
   {
    "name": "to",
    "type": "address",
    "indexed": true
   },
   {
    "name": "value",
    "type": "uint256",
    "indexed": false
   },
   {
    "name": "dataHash",
    "type": "bytes32",
    "indexed": false
   }
  ]
 },
 {
  "type": "event",
  "name": "Refused",
  "inputs": [
   {
    "name": "id",
    "type": "uint256",
    "indexed": true
   },
   {
    "name": "rule",
    "type": "bytes32",
    "indexed": true
   }
  ]
 },
 {
  "type": "event",
  "name": "Executed",
  "inputs": [
   {
    "name": "id",
    "type": "uint256",
    "indexed": true
   },
   {
    "name": "to",
    "type": "address",
    "indexed": true
   },
   {
    "name": "value",
    "type": "uint256",
    "indexed": false
   }
  ]
 },
 {
  "type": "event",
  "name": "Tightened",
  "inputs": [
   {
    "name": "rule",
    "type": "bytes32",
    "indexed": true
   },
   {
    "name": "fromValue",
    "type": "uint256",
    "indexed": false
   },
   {
    "name": "toValue",
    "type": "uint256",
    "indexed": false
   }
  ]
 },
 {
  "type": "event",
  "name": "AllowProposed",
  "inputs": [
   {
    "name": "who",
    "type": "address",
    "indexed": true
   },
   {
    "name": "readyAt",
    "type": "uint64",
    "indexed": false
   }
  ]
 },
 {
  "type": "event",
  "name": "AllowActive",
  "inputs": [
   {
    "name": "who",
    "type": "address",
    "indexed": true
   }
  ]
 },
 {
  "type": "event",
  "name": "CoSigned",
  "inputs": [
   {
    "name": "id",
    "type": "uint256",
    "indexed": true
   },
   {
    "name": "signer",
    "type": "address",
    "indexed": true
   }
  ]
 },
 {
  "type": "event",
  "name": "EpochRolled",
  "inputs": [
   {
    "name": "newStart",
    "type": "uint256",
    "indexed": false
   }
  ]
 }
]

fund abi

[
 {
  "type": "function",
  "name": "totalFunded",
  "stateMutability": "view",
  "inputs": [],
  "outputs": [
   {
    "type": "uint256"
   }
  ]
 },
 {
  "type": "function",
  "name": "wallet",
  "stateMutability": "view",
  "inputs": [],
  "outputs": [
   {
    "type": "address"
   }
  ]
 },
 {
  "type": "event",
  "name": "Funded",
  "inputs": [
   {
    "name": "from",
    "type": "address",
    "indexed": true
   },
   {
    "name": "amount",
    "type": "uint256",
    "indexed": false
   }
  ]
 }
]