Launch a layer
The configuration
| Field | Rule |
|---|---|
name | 3 to 32 characters |
slug | 3 to 24 characters, a to z, 0 to 9 and dashes, unique. It becomes /rpc/<slug>. |
gasToken | "USDG" or the address of an ERC-20 on Robinhood Chain with 18 decimals or fewer |
blockTimeSec | 1, 2, 5 or 10 |
creatorShareBps | 0 to 9000 (0 to 90% of every gas fee) |
The payment
The plan is paid with a USDG transfer(treasury, amount) on Robinhood Chain, from the wallet that will be recorded as the creator. The transaction carries 32 extra bytes after the ABI-encoded arguments: the config hash. ERC-20 contracts ignore trailing calldata, so the transfer behaves normally while binding the payment to one configuration.
configHash = keccak256(utf8(JSON.stringify({
name, slug, gasToken, blockTimeSec, creatorShareBps
}))) // keys in exactly this order
data = 0xa9059cbb
++ abi.encode(treasury, 20_000000 * periods)
++ configHashThen submit the transaction hash with the configuration:
POST /api/launch
{ "config": { ... }, "txHash": "0x..." }The service checks that the transaction is a successful USDG transfer to the treasury, that the memo matches the config hash, that the amount covers at least one period and that the hash was never used. The node starts at once; the response is the layer.
Renewing
Anyone can extend a layer: the same transfer with bytes32(chainId) as the memo, then POST /api/renew with { slug, txHash }. A layer whose plan has lapsed refuses new transactions except withdrawals to its bridge address.