plop documentation
plop hands a token's supply back to its holders one drop at a time, by rule, on Robinhood Chain. A creator locks part of the supply in a dropper contract, publishes the split rules on chain, and a keeper fires a drop every interval to every wallet that qualifies. Anyone can read the rules, recompute who qualifies, and audit every drop from chain data alone.
These pages are written for people who want to build on top of plop: integrate it into a wallet or launchpad, run their own instance, visualise the data, or verify a drop.
Start here#
| If you want to… | Read |
|---|---|
| Understand the moving parts in five minutes | Overview |
| Call the contracts directly (ABI, addresses, semantics) | Contracts |
| Know exactly who gets what and why | Split rules |
| Index, chart or audit the data | Reading the data |
| Consume JSON instead of raw RPC | HTTP API |
| Launch an airdrop for your own token, from a UI or from code | Create a dropper |
| Run the keeper, or act as the executor for your own dropper | Keeper and executor |
| Host the whole stack yourself (contracts, web, keeper) | Self-hosting |
| Know what is enforced by code and what is only declared | Trust model |
| Quick answers | FAQ |
Deployment on Robinhood Chain#
| Chain | Robinhood Chain, chain id 4663 (0x1237), an Arbitrum Orbit rollup |
Registry (Fabryka) | 0x1CE8f5785617eaf9B6BB3c77CE7d242D86Dd0502, deployed at block 63645852 |
| Default executor (plop keeper) | 0x5e25b93C6454C10E4110B70DAFa76C6934cDee03 |
| Public RPC | https://rpc.mainnet.chain.robinhood.com |
| Explorer | https://robinhoodchain.blockscout.com |
| Multicall3 | 0xcA11bde05977b3631167028862bE2a173976CA11 |
The registry is permissionless: anyone can create a dropper and it appears in the list. Nothing in the list is "verified". The only reliable identifier of a coin is its contract address.
Three ideas to keep in mind#
- The dropper holds the money, the registry holds the rules. A dropper (
Kroplomierz) is a small contract that holds one token's supply and pays it out in capped, rate-limited batches. The registry (Fabryka) never touches tokens; it only lists droppers and stores their split rules so that anyone can recompute the next drop. - The split is computed off chain, deterministically, from public data. The keeper builds a holder snapshot from
Transferlogs, applies the on-chain rules, and calls the dropper with the resulting list. The dropper records a hash of the list and a hash of the rules in everyKroplaevent, so any third party can recompute both and compare. - Amounts are integers, time comes from block headers. Every amount in the contracts, the API and these docs is an integer in the token's base units (
decimalsis always read from the token, never assumed). Every timestamp isblock.timestampof a block header, never a wall clock and never theblockTimestampfield of a log, which this chain sometimes reports as zero.
Conventions used in these docs#
- Solidity identifiers, storage fields and JSON keys are Polish, because the code is. Every page introduces the English meaning next to the identifier the first time it appears, and the glossary lists all of them.
- Code samples use viem 2.x and Foundry's
cast. Any EVM library works; nothing here depends on viem. - Example addresses that are not the registry or the default executor are placeholders such as
0x1234….