Dotwork
Layers

Launch a layer

The configuration

FieldRule
name3 to 32 characters
slug3 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
blockTimeSec1, 2, 5 or 10
creatorShareBps0 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)
     ++ configHash

Then 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.

NextRPC and chain settings ›