Skip to content

Raqio / Elysium Testnet / tokens have no value

THE DETAILS.
IN PLAIN SIGHT.

Getting started, core concepts, contract reference, and security. The complete protocol manual.

Art: anonymous, 1888, public domain. Dithered by Raqio. ↗

DOCUMENT / 01

Getting Started

What is Raqio

Raqio is a token vesting and streaming protocol deployed on Elysium L2. It enables senders to create linear vesting streams with cliff periods for any ERC-20 token. Recipients claim tokens as they vest, fully on-chain.

The protocol consists of two contracts: RaqioStream.sol handles stream creation, vesting math, claims, and cancellations. FeeRouter.sol collects a 25 basis point fee on deposits and routes it to the protocol treasury.

Network Setup

NetworkElysium Testnet
Chain ID99801
RPC URLhttps://testnet-rpc.elysium.kinetiq.xyz
CurrencyHYPE (18 decimals)
Block time100 ms
Explorerhttps://elysium.kinetiq.xyz/testnet-explorer

Connect Your Wallet

Raqio works with any injected wallet: MetaMask, Rabby, Coinbase Wallet, or any browser extension that supports custom networks. Add the Elysium Testnet network using the details above, then navigate to /sign-in and connect.

Get Testnet HYPE

You need HYPE to pay gas on Elysium. Claim testnet HYPE from the Elysium faucet. Testnet tokens have no real value.

DOCUMENT / 02

Core Concepts

Streams

A stream is a deposit of ERC-20 tokens that vest linearly to a recipient over a defined period. The sender deposits tokens into the RaqioStream contract. The contract holds the tokens and releases them to the recipient according to the vesting schedule. The sender is never the custodian after deposit.

Linear Vesting

Tokens vest proportionally from the start time to the end time. If a stream runs from January 1 to January 31 with a deposit of 310 tokens, approximately 10 tokens vest per day. The recipient can claim whatever has vested at any point.

Cliff Period

A cliff is an initial waiting period during which nothing vests. Once the cliff passes, all tokens that would have vested during that period become claimable at once (catch-up). After the cliff, vesting continues linearly to the end time.

Example: a 12-month stream with a 3-month cliff. Nothing vests for 3 months. On day 91, 25% of the deposit becomes claimable. From then on, tokens vest daily until the end.

Cancelable Streams

Streams can be created with a cancelable flag. If cancelable, the sender can cancel the stream at any time. On cancellation, the already-vested portion goes to the recipient and the unvested remainder returns to the sender.

Non-Cancelable Streams

A non-cancelable stream is a permanent commitment. Once created, neither the sender nor anyone else can stop the vesting. The tokens will vest to the recipient on schedule, guaranteed by the contract.

DOCUMENT / 03

Creating Streams

Single Stream

To create a stream, call createStream with the following parameters:

ParameterTypeDescription
recipientaddressThe address that will receive vested tokens
tokenaddressThe ERC-20 token to stream
deposituint256Total amount to vest (before fee deduction)
startTimeuint256Unix timestamp when vesting begins
cliffDurationuint256Seconds before any tokens vest (0 for no cliff)
totalDurationuint256Total vesting duration in seconds
cancelableboolWhether the sender can cancel the stream

Batch Create

Create up to 200 streams in one transaction with createBatch. All streams share the same token, start time, cliff duration, total duration, and cancelable flag. Only the recipients and deposit amounts differ. One token approval covers the entire batch.

Token Approval

Before creating a stream, you must approve the RaqioStream contract to spend your tokens. Call approve(raqioStreamAddress, amount) on the ERC-20 token contract. The approval amount must cover the full deposit including the protocol fee.

Protocol Fee

A fee of 25 basis points (0.25%) is deducted from each deposit and routed to the protocol treasury via FeeRouter.sol. For a deposit of 10,000 tokens, 25 tokens go to the treasury and 9,975 tokens vest to the recipient.

DOCUMENT / 04

Claiming Tokens

When to Claim

Recipients can claim vested tokens at any time after the cliff period has passed. There is no requirement to claim at specific intervals. Unclaimed tokens remain in the contract and continue to vest.

Partial Claims

Each call to claim(streamId) transfers whatever has vested since the last claim. The contract tracks total claimed amount. You can claim once a day, once a week, or wait until the stream completes. Call claimable(streamId) to check the current claimable amount without sending a transaction.

Gas Costs

Claims require HYPE gas on Elysium. At 100 ms block time and 300 Mgas/s throughput, gas costs are significantly lower than L1. Each claim is a single contract call.

DOCUMENT / 05

Canceling Streams

Who Can Cancel

Only the original sender can cancel a stream, and only if the stream was created with cancelable=true. Non-cancelable streams cannot be stopped by anyone.

What Happens on Cancellation

The contract calculates the split at the moment of cancellation:

  • Vested tokens (including any unclaimed from earlier) transfer to the recipient
  • Unvested tokens return to the sender
  • The stream is marked as canceled and no further vesting occurs
  • The protocol fee (already collected at deposit time) is not refunded

After Cancellation

A canceled stream remains on-chain as a record. The recipient can still claim any vested tokens that were not yet claimed at the time of cancellation. No new tokens vest.

DOCUMENT / 06

Contract Reference

RaqioStream.sol

Write Functions

FunctionDescription
createStream(recipient, token, deposit, startTime, cliffDuration, totalDuration, cancelable)Create a single vesting stream. Returns the stream ID.
createBatch(recipients[], token, deposits[], startTime, cliffDuration, totalDuration, cancelable)Create up to 200 streams in one transaction. Returns stream IDs.
claim(streamId)Claim all vested tokens for a stream. Caller must be the recipient. Returns amount claimed.
cancel(streamId)Cancel a cancelable stream. Caller must be the sender. Splits vested/unvested.
changeRecipient(streamId, newRecipient)Transfer recipient rights to a new address. Caller must be the current recipient.

Read Functions

FunctionReturns
getStream(streamId)Full stream struct: sender, recipient, token, deposit, claimed, startTime, cliffTime, endTime, cancelable, canceled
claimable(streamId)Amount currently claimable by the recipient (uint256)
nextStreamId()The next stream ID that will be assigned (uint256)

Events

EventIndexed FieldsData Fields
StreamCreatedstreamId, sender, recipienttoken, deposit, startTime, cliffTime, endTime, cancelable
ClaimedstreamId, recipientamount
CanceledstreamIdsenderAmount, recipientAmount
RecipientChangedstreamId, oldRecipient, newRecipient—

FeeRouter.sol

FeeRouter manages the protocol fee. The fee is collected automatically when a stream is created. Key parameters:

Current fee25 basis points (0.25%)
Hard cap50 basis points (0.50%)
Timelock48 hours on fee changes
EventFeeTaken(streamId, token, amount)

DOCUMENT / 07

Security

Current Status

  • Raqio is deployed on Elysium Testnet only. Testnet tokens have no real value.
  • The contracts have not been formally audited. A security audit will be completed before any mainnet deployment.
  • All stream data (amounts, addresses, timing) is public on-chain.

On-Chain Transparency

Stream amounts, token addresses, sender and recipient addresses, start times, cliff times, end times, and every claim and cancellation event are recorded on-chain and visible to anyone. Do not use Raqio for streams that require confidentiality.

Threat Model

For a detailed analysis of threats, mitigations, and accepted risks, see the security and threat model page.

DOCUMENT / 08

FAQ

Can I change the recipient of a stream?

Yes. The current recipient can call changeRecipient(streamId, newRecipient)to transfer their claim rights to a different address. Only the current recipient can initiate this transfer.

What happens if the token contract is paused?

The stream continues to vest according to its schedule. However, claim transactions will revert because the token transfer will fail. Once the token is unpaused, the recipient can claim all accumulated vested tokens.

Is there a minimum deposit?

There is no minimum deposit enforced by the contract. However, very small deposits may not be practical given gas costs for creation and claiming.

Can I stream native HYPE?

No. Raqio supports ERC-20 tokens only. To stream HYPE, you would need to wrap it as WHYPE (wrapped HYPE) first, if such a wrapper contract exists on Elysium.

What if I send tokens to the wrong recipient?

If the stream is cancelable, you can cancel it immediately. The unvested portion returns to you. Any tokens that have already vested belong to the recipient. If the stream is non-cancelable, you cannot recover the tokens.

Can multiple streams use the same token?

Yes. You can create any number of streams for the same ERC-20 token, to the same or different recipients, with the same or different schedules. Each stream is independent.

When will Raqio deploy to mainnet?

A mainnet deployment on Elysium (Chain ID 99901) will follow after a completed security audit. No timeline has been announced. Follow the roadmap for updates.