00DOCS

Protocol
Documentation

Connect to Robinhood Chain, find the deployed contracts, and start calling them. For the thesis and economics, see the whitepaper.

01

Network

ArchLiquid runs on Robinhood Chain, an Arbitrum Orbit L2 with ETH as native gas. Add either network to any EVM wallet with the parameters below, or connect in-app to add it automatically.

Robinhood Chain
Chain ID4663 (0x1237)
CurrencyETH
Robinhood Chain Testnet
Chain ID46630 (0xb626)
CurrencyETH
Testnet faucet

Need test ETH to try the contracts? Request it from the Robinhood Chain testnet faucet, then use it to deploy or call anything below.

faucet.testnet.chain.robinhood.com
02

Architecture

The system is a set of small, single-purpose contracts. Factories deploy tokens and launches; the token distributes; lockers and vesting hold time-locked positions; the lending market runs independently; and a single treasury sinks every fee. No contract can move user funds outside the refunds, claims and documented flows.

ArchLaunchpadpresale · curveTokenFactorymint + seed + lockArchPresaleescrow to locked LPBondingCurvefair launchArchTokenRWA distributor · immutable taxV3 LockerLP NFT lockLendingsupply · borrowArchTreasuryterminal fee sink
Fig 2 · contract system: factories mint, the token distributes, the treasury sinks every fee
ArchTokenRWA distributor
  • ·Fixed supply, no owner, immutable tax bounded 1-5%.
  • ·Magnified-dividend accounting with SafeCast; pull claims plus claimFor.
  • ·Keeper-only distribution; 90 / 10 split immutable; wiring frozen at deploy.
# immutable tax (bps) + claim your stock dividend
cast call $TOKEN "TAX_BPS()(uint16)" --rpc-url $RPC
cast send $TOKEN "claim()" --rpc-url $RPC --private-key $PK
ArchTokenFactoryminter
  • ·One transaction: deploy the token, seed its Uniswap V3 pool, lock or burn the LP.
  • ·CREATE2 deploy so a launch pool cannot be pre-computed and griefed.
  • ·Every deploy is an RWA distributor; stock gated by the stock registry.
# createToken(TokenParams, LiquidityParams) is payable, msg.value >= FEE
cast call $FACTORY "FEE()(uint256)" --rpc-url $RPC
ArchLaunchpadfair launch
  • ·Creates fixed-price presales and pump-style bonding curves.
  • ·Presale: every wei minus the fee becomes locked V3 liquidity at finalize.
  • ·Curve: LP is burned permanently at graduation; no team allocation.
# createPresale(...) / createCurve(...) each charge FEE() as msg.value
cast call $LAUNCHPAD "FEE()(uint256)" --rpc-url $RPC
ArchV3PositionLockerliquidity lock
  • ·Locks Uniswap V3 position NFTs with an extend-only relock.
  • ·Owner can collect trading fees while the position stays locked.
  • ·No admin path to locked positions; no early exit.
# lock(manager, tokenId, unlockTime, lockOwner); relock extends only
cast send $LOCKER "collectFees(uint256,address)" $ID $YOU --private-key $PK
ArchVestingvesting
  • ·Ownerless cliff-plus-linear schedules with exact funding.
  • ·Batch creation pays a single fee; claims follow checks-effects-interactions.
  • ·No admin path to withdraw a beneficiary's tokens.
# releasable(id) is vested-but-unclaimed; claim(id) pulls it
cast call $VESTING "releasable(uint256)(uint256)" $ID --rpc-url $RPC
cast send $VESTING "claim(uint256)" $ID --private-key $PK
ArchStakingFactory / Poolstaking
  • ·Deploys reward-per-token accumulator pools (Synthetix-style math).
  • ·Protocol skims 5% of each funded reward to the treasury.
  • ·Funded rewards are committed to stakers and cannot be pulled back.
# on a deployed pool: stake, then pull rewards
cast send $POOL "stake(uint256)" $AMOUNT --private-key $PK
cast send $POOL "getReward()" --private-key $PK
ArchStockRegistryallowlist
  • ·Multisig-governed allowlist of eligible Robinhood stock tokens.
  • ·Gates which stock a distributor token can buy for holders.
  • ·Each entry pairs a stock token with its Chainlink price feed.
# is a stock token approved as a distribution target?
cast call $REGISTRY "isApproved(address)(bool)" $STOCK --rpc-url $RPC
ArchTreasuryfee sink
  • ·Terminal sink for every flat, percentage and reserve fee.
  • ·Holds ETH and any ERC-20, including the stock tokens.
  • ·Withdrawals are owner-only; ownership is intended for a multisig.
# withdrawals are owner-only; the ETH balance is public
cast balance $TREASURY --rpc-url $RPC
03

Contracts

Reference deployment on the Robinhood testnet (chain 46630). Every address links to the explorer; check the address page for its current source-publication status. An explorer link alone is not proof that source has been published.

Core
ArchLaunchpadpresales + curves
0xcBdCec21B82B
ArchTokenFactoryminter
0xaC44961f03Fc
ArchStakingFactorystaking
0xE0A09132E17C
ArchV3PositionLockerliquidity lock
0x39EE985ae184
ArchVestingvesting
0x7aB196CA0dCE
ArchStockRegistrystock allowlist
0xADB4b097Bd64
ArchTreasuryfee sink
0x48B49CaB2654
ArchPresaleDeployerlaunchpad helper
0x68E39D0561a0
ArchCurveDeployerlaunchpad helper
0xa48f916780c2
Lending
ComptrollerArchUnitroller proxy
0x38061f583821
ArchLiquidPriceOracleChainlink oracle
0xAE7A327B5638
ArchJumpRateModelinterest rate model
0x7936Eb4D6F61
arUSDGArchCErc20 market
0xC39E7d386A4a
arNVDAxArchCErc20 market
0x4d1E308dB716

Testnet has no native Uniswap V3, USDG or stock tokens, so the testnet deployment stands up its own mock DEX, wrapped ETH and stock infrastructure; those helper contracts are not listed here.

04

Quick start

Every service is a plain contract call. Read a fee, inspect a token, or send a transaction with cast (Foundry) or viem. All addresses are the testnet deployment above.

Read a protocol fee. Each factory exposes FEE(), the flat fee it charges.

bash
# Robinhood testnet RPC + a deployed contract
export RPC=https://rpc.testnet.chain.robinhood.com
export LAUNCHPAD=0xcBdCec3A40BE75FFBefAf5A4926F34730C21B82B

# FEE() is the flat listing fee (wei) to create a presale or a curve
cast call $LAUNCHPAD "FEE()(uint256)" --rpc-url $RPC

Inspect a distributor token. Every launched token carries an immutable tax and accrues a tokenized-stock dividend you can read and claim.

bash
# any token minted or launched through ArchLiquid is an RWA distributor
export TOKEN=0xYourArchToken
export YOU=0xYourWallet

# immutable trade tax, basis points (300 = 3%)
cast call $TOKEN "TAX_BPS()(uint16)" --rpc-url $RPC

# tokenized-stock dividend you can claim right now (raw units)
cast call $TOKEN "withdrawableDividendOf(address)(uint256)" $YOU --rpc-url $RPC

# pull your stock dividend
cast send $TOKEN "claim()" --rpc-url $RPC --private-key $PK

Read from an app. The same view calls from TypeScript with viem or wagmi.

typescript
import { createPublicClient, http } from "viem";

const client = createPublicClient({
  transport: http("https://rpc.testnet.chain.robinhood.com"),
});

// read the launchpad listing fee straight off the contract
const fee = await client.readContract({
  address: "0xcBdCec3A40BE75FFBefAf5A4926F34730C21B82B", // ArchLaunchpad
  abi: [{
    type: "function", name: "FEE", stateMutability: "view",
    inputs: [], outputs: [{ type: "uint256" }],
  }],
  functionName: "FEE",
});

Send a transaction. Create calls charge FEE() as msg.value; read it, then deploy. Here, a staking pool:

bash
export STAKING=0xE0A09184D0385A69c5F1E4a1ad841F5ee532E17C

# every create call charges FEE() as msg.value; read it, then send it
FEE=$(cast call $STAKING "FEE()(uint256)" --rpc-url $RPC)

# createPool(stakingToken, rewardsToken, rewardsDuration, lockDuration)
# 604800 = 7-day reward stream, 0 = no lock
cast send $STAKING \
  "createPool(address,address,uint256,uint256)" \
  $STAKE_TOKEN $REWARD_TOKEN 604800 0 \
  --value $FEE --rpc-url $RPC --private-key $PK
05

Services

Six services, one deploy, one fee treasury:

  • Liquidity lockers · Time-lock V3 positions or ERC-20 LP with a flat fee; extend-only, no early exit.
  • Token vesting · Cliff-plus-linear schedules enforced by contract; a batch pays one fee.
  • Staking-as-a-service · Deploy a rewards pool; the protocol skims 5% of each funded reward.
  • Token minter · Mint a fixed-supply RWA distributor, seed its pool, and lock or burn the LP in one call.
  • Launchpad · Fixed-price presales and bonding-curve fair launches with enforced liquidity.
  • Lending markets · Supply, borrow against tokenized-stock collateral, and flash-loan idle cash.
06

Distribution mechanics

Dividends use the magnified-dividend pattern. A per-share accumulator tracks stock owed per participating token; a holder’s claim is their balance times the accumulator, corrected on every transfer so past dividends stay with the seller and future ones accrue to the buyer.

Distribution is keeper-run but trust-minimized: the keeper only chooses timing and slippage bounds (minEthOut, minStockOut). It cannot change the split, the recipients, or divert funds. Rounding always favors the pool: payouts never exceed the stock actually acquired. The stock leg targets Uniswap V3; the sold tax is paid directly to the pool, so it is never re-taxed and never inflates the dividend base.

90%
To holders
tokenized stock
10%
To treasury
protocol share
≤15m
Cadence
keeper-driven
07

Lending

The lending market is an over-collateralized money market: suppliers earn interest, borrowers post tokenized-stock collateral, and a fixed share of interest accrues to protocol reserves. It is driven by a Chainlink-backed oracle that returns a zero “unavailable” price when a feed is missing or stale, so an off-hours or broken stock feed freezes that asset rather than mispricing it.

SUPPLIERdeposits USDGcToken MARKETpooled liquidityBORROWERborrows USDGSTOCK COLLATERAL75% factorRESERVES20% of interest
Fig 3 · lending: suppliers earn, borrowers post stock collateral, 20% of interest to reserves

Markets add ERC-3156 flash loans over idle cash (a small fee to reserves), per-asset supply and borrow caps, and a 20% reserve factor as the protocol’s cut of interest. The full loan lifecycle (supply, collateralize, borrow, repay, redeem) plus the oracle freeze and the reserve accrual are all verified live on testnet.

08

Fee schedule

Every service charges a fee, and every fee ends in the treasury. The activity fees:

2%Presale raise2%Staking rewards1%Curve trade10%RWA protocol shareof tax15%Lending reserveof interest0.05%Flash loan
Fig 4 · activity fees: the protocol earns on every action, all accruing to the treasury

On top of the activity fees above, each service charges a small flat creation fee (mint, list, lock, vest, deploy-a-pool). Lending reserves and the 10% distribution share flow to the same treasury. There are no inflationary rewards funding the protocol; revenue is real, from real use.