StorageIncentive · Robinhood Chain

The rules, written in code.

One contract takes storage payments and pays the people who run nodes. Here is its live state, who can do what, and what nobody can do.

Contract address · chain 46630x305A4b17C7D55B5956B348469f61113D764B0e53
LiveExplorer

Storage price

Protocol fee

Reward pool

Owed to operators

Owner

Settler (coordinator)

Money flow

Every wei is accounted for.

Funds can only come in through a purchase or a pool top-up. The contract tracks exactly who each wei belongs to, and plain transfers are rejected.

User pays

Exactly storagePrice, once per wallet.

purchaseStorage()

Reward pool · 90%

Reserved for node operators.

Protocol fees · 10%

Withdrawable by the owner only.

Operators withdraw

Credited by the settler from the pool, withdrawn whenever they like.

rewardNode() → withdraw()

Roles

Who can call what

Anyone storing files

Users

  • purchaseStorage()

Pay exactly storagePrice, once per wallet. Wrong amounts and repeat purchases revert.

People running nodes

Operators

  • registerNode()
  • withdraw()

Register a payout wallet once, then withdraw the full credited balance at any time.

The coordinator's key

Settler

  • rewardNode(node, amount)

Can only move funds from the reward pool to registered operators, and never more than the pool holds.

The deployer

Owner

  • setStoragePrice()
  • setSettler()
  • withdrawProtocolFees()
  • transferOwnership()

Can take protocol fees only. Can never touch the reward pool or operator balances.

Wallet lookup

Check any address

Guarantees

  • Rewards can never exceed the pool
  • Credited balances can't be revoked
  • Owner can't reach pool or balances
  • Withdrawals are re-entrancy safe
  • Ownership moves in two steps
  • Fee fixed at deploy, max 20%

Events

What the contract announces

EventMeaning
StoragePurchased(user, amount)A wallet bought storage. The backend requires this event before granting it.
NodeRegistered(node)An operator registered a payout wallet.
NodeRewarded(node, amount)The settler credited earnings from the reward pool.
Withdraw(node, amount)An operator withdrew their balance.
RewardPoolFunded(from, amount)Someone topped up the reward pool directly.
ProtocolFeesWithdrawn(to, amount)The owner withdrew protocol fees.

Source: contracts/src/StorageIncentive.sol, with 20 unit tests in contracts/test. Not externally audited yet. How payments are verified