- Signed terms. Launching a coin, registering a strategy: you sign a short text message that pins the exact terms. These calls come as a
prepare/submitpair. - Signed transactions. Sending a launch, routing fees: the transaction itself is what you sign, in your wallet, and that is the authorisation. No message.
1
Prepare
POST …/prepare with the terms. It returns the exact text to sign as message, and ts, the timestamp embedded in it. Nothing is stored or spent.2
Sign
Sign
message in your wallet. The message embeds a hash of the terms, so nothing can change between the two calls.3
Submit
POST …/submit with the same terms, plus ts and signature. Signatures are valid for five minutes.Solana
Sign the message’s UTF-8 bytes with ed25519, exactly as a wallet’ssignMessage does. No prefix, no hashing. Send the signature as base58.
const sig = await wallet.signMessage(bytes) gives the same bytes to base58-encode.
Robinhood Chain
Sign withpersonal_sign (EIP-191). With viem:
creatorWallet in any case and we lower-case it the same way.
Transactions
We never sign a transaction. On Solana, submit returns unsigned transactions as base64; you sign them and send them throughPOST /transactions/send, which only forwards to the launchpad programs. On Robinhood Chain, submit returns EVM transactions as { to, data, value, chainId } steps that you send from your own wallet.
When a flow gives you more than one transaction, send them in order and wait for each to confirm before sending the next: a later one spends what an earlier one produced. /transactions/send waits up to 8 seconds and tells you confirmed; if false, poll GET /transactions/{signature} every couple of seconds until it is.
A launch’s create transaction also needs the mint keypair’s signature. Submit returns it as mintSecret; it has no power beyond that one transaction.