Anyone storing files
Users
purchaseStorage()
Pay exactly storagePrice, once per wallet. Wrong amounts and repeat purchases revert.
StorageIncentive · Robinhood Chain
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.
Storage price
Protocol fee
Reward pool
Owed to operators
Owner
Settler (coordinator)
Money flow
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.
Exactly storagePrice, once per wallet.
Reserved for node operators.
Withdrawable by the owner only.
Credited by the settler from the pool, withdrawn whenever they like.
rewardNode() → withdraw()Roles
Anyone storing files
purchaseStorage()Pay exactly storagePrice, once per wallet. Wrong amounts and repeat purchases revert.
People running nodes
registerNode()withdraw()Register a payout wallet once, then withdraw the full credited balance at any time.
The coordinator's key
rewardNode(node, amount)Can only move funds from the reward pool to registered operators, and never more than the pool holds.
The deployer
setStoragePrice()setSettler()withdrawProtocolFees()transferOwnership()Can take protocol fees only. Can never touch the reward pool or operator balances.
Wallet lookup
Guarantees
Events
| Event | Meaning |
|---|---|
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