Documentation

StockYields Protocol

Liquid staking for tokenized real-world assets on Robinhood Chain. Stake an asset, receive a 1:1 liquid sy-receipt, and earn yield paid in the same asset you stake — continuously, on-chain.

Overview

Introduction

Robinhood Chain hosts tokenized real-world assets (RWAs) — equities, ETFs, ETH and other supported tokens — that trade 24/7 but sit idle while simply held. StockYields is a liquid staking protocol that puts those assets to work.

When you stake a supported asset you get:

  • A liquid receipt (syToken) — e.g. syTESLA. Minted 1:1 against your deposit, it represents your staking position and stays transferable and composable across DeFi.
  • Yield in the same asset — stake Tesla, earn Tesla. Rewards accrue continuously at the pool's target APR and are claimable any time. $SYLD is the separate governance token, not a staking reward.
// value flow — stake Tesla, earn Tesla Stake StockYieldsPool mints syTESLA (receipt) + streams TESLA yield Unstake StockYieldsPool burns syTESLA → returns TESLA principal + earned TESLA
Overview

How it works

01

Stake collateral

Approve and deposit a supported asset (Tesla at launch) into its pool via stake().

02

Hold a liquid receipt

The pool is an ERC-20; it mints your syTESLA 1:1. Transfer it, use it as collateral — rewards always follow the current holder.

03

Earn & claim yield

Yield accrues in the staked asset (Tesla) every second. Call getReward() to claim, or exit() to withdraw your principal and rewards in one transaction.

Because the receipt token itself is the pool, every mint, burn and transfer runs through an accounting hook that checkpoints rewards for both sides. This means even if a syTESLA receipt changes hands, the reward stream is redirected to its new owner — it can't be double-claimed or gamed.

Overview

Reward model

StockYields uses the battle-tested Synthetix StakingRewards accumulator pattern — but the reward asset is the same asset that is staked (stake Tesla, earn Tesla). The protocol treasury funds a pool by transferring the asset in and calling notifyRewardAmount(amount). That amount streams linearly to stakers over a reward period (rewardsDuration, default 7 days), split by each staker's share of the pool. The target rate is ~9% APR.

TermMeaning
rewardRateAsset distributed per second = amount / rewardsDuration.
rewardPerTokenCumulative yield owed per staked token, scaled by 1e18.
earned(account)Yield (in the staked asset) an address can currently claim.
periodFinishTimestamp the current reward stream ends.

Because the reward asset equals the staking asset, the solvency check in notifyRewardAmount subtracts staked principal from the pool balance before validating the rate — so principal can never be paid out as rewards, and emissions stay fully backed.

Reference

Contracts

All contracts are Solidity ^0.8.24, built on OpenZeppelin v5 with ReentrancyGuard and Ownable2Step.

ContractResponsibility
SYLDToken Governance token. ERC-20 + Permit, hard-capped at 1,000,000,000 (1B). Not emitted as a staking reward — used for protocol governance and utility; may be issued from an external platform.
StockYieldsPool Core. A single-asset staking pool that is also its own liquid receipt token (e.g. syTESLA). Stake → 1:1 mint, withdraw → burn, and yield paid in the same staked asset.
PoolFactory Deploys and indexes a new StockYieldsPool for each asset. Each pool pays yield in the same asset it stakes (stake X, earn X).
Reference

Deployed addresses

Live on Robinhood Chain mainnet (chainId 4663). Click an address to copy, or open it in the Blockscout explorer.

SYLDTokenGovernance token · SYLD
0x18f1b4056ea83a993CBB3c36a4da78E889545C95 Explorer ↗
PoolFactoryPool registry
0xc5c89Dc9A1f7b33c5aF2c4a20e12918CC62c100d Explorer ↗
StockYieldsPoolsyTESLA · stake Tesla
0xF05e7cD4cb7bfA30798CCF6E8951b33870d6d2C8 Explorer ↗
Tokenized TeslaStaked asset & reward · TSLA
0x322F0929c4625eD5bAd873c95208D54E1c003b2d Explorer ↗
Launch state
Stakers earn TESLA rewards at a ~9% target APR. The reward period is funded by the treasury transferring TESLA into the pool and calling notifyRewardAmount. Tesla is the only live market; additional assets are added by deploying a new pool through PoolFactory.
Reference

Network details

Verified from docs.robinhood.com/chain/connecting. Robinhood Chain is a permissionless, Ethereum-compatible Layer-2 built on Arbitrum Orbit, with ETH as the native gas token.

PropertyMainnetTestnet
Network nameRobinhood ChainRobinhood Chain Testnet
Chain ID466346630
Native currencyETHETH
Public RPCrpc.mainnet.chain.robinhood.comrpc.testnet.chain.robinhood.com
Explorerrobinhoodchain.blockscout.comexplorer.testnet.chain.robinhood.com

An Alchemy RPC endpoint (https://robinhood-mainnet.g.alchemy.com/v2/{API_KEY}) is also available and recommended for production traffic.

Reference

Contract interface

The primary entry points on StockYieldsPool. Staker functions are permissionless; owner functions manage reward periods.

Staker functions

stake(uint256 amount)
Pull amount of the underlying asset and mint syTESLA 1:1. Requires prior approve() on the asset.
withdraw(uint256 amount)
Burn amount of syTESLA and return the underlying asset. Accrued TESLA yield stays claimable.
getReward()
Transfer the caller's accrued TESLA yield to their wallet.
exit()
Withdraw the full staked balance and claim all yield in a single transaction.
earned(address account) view
TESLA yield currently claimable by account.
totalStaked() view
Total underlying staked in the pool (equals receipt totalSupply()).

Owner functions

notifyRewardAmount(uint256 reward) owner
Start or top up a reward period. The pool must already hold the reward TESLA; the solvency check excludes staked principal to prevent over-promising.
setRewardsDuration(uint256 duration) owner
Set the length of future reward periods. Only callable between periods.
recoverERC20(address token, uint256 amount) owner
Rescue unrelated tokens sent to the pool. Reverts on the staking or reward token so user funds can't be touched.

Quick start with cast

# stake 10 syTESLA (18 decimals) — approve first, then stake cast send 0x322F...03b2d "approve(address,uint256)" \ 0xF05e7cD4cb7bfA30798CCF6E8951b33870d6d2C8 10000000000000000000 \ --rpc-url https://rpc.mainnet.chain.robinhood.com --private-key $PK cast send 0xF05e7cD4cb7bfA30798CCF6E8951b33870d6d2C8 "stake(uint256)" \ 10000000000000000000 --rpc-url $RH_RPC --private-key $PK # check accrued TESLA yield, then claim cast call 0xF05e...d2C8 "earned(address)(uint256)" $YOUR_ADDR --rpc-url $RH_RPC cast send 0xF05e...d2C8 "getReward()" --rpc-url $RH_RPC --private-key $PK
More

Security

  • Contracts are OpenZeppelin-based with ReentrancyGuard and two-step ownership (Ownable2Step).
  • Reward claims follow checks-effects-interactions; balances are zeroed before transfer.
  • The receipt's transfer hook checkpoints both parties, so rewards can't be double-claimed via receipt transfers.
  • When the reward asset equals the staking asset, the solvency check subtracts staked principal, so rewards can never exceed the funded amount and principal is always withdrawable.
Demo deployment — not audited
The current mainnet deployment is for testing and demonstration only. The admin key used to deploy was exposed during development and must be treated as compromised, so protocol ownership is effectively burned. Do not deposit assets you are not prepared to lose. A production launch requires a fresh multisig owner and a professional audit.
More

Roadmap

PhaseScope
v1Single-asset (Tesla) staking, Tesla-denominated yield, live on Robinhood Chain.
v2ERC-4337 gas-sponsored transactions, veSYLD governance, fee sharing, Uniswap/Rialto liquidity.
v3Multi-asset vaults, cross-chain via LayerZero, security audit + production mainnet.