$ARTERlaunches on Robinhood Chain.

For wallets, brokers and apps

Offer yield.
Skip the backend.

Put an earn product on top of tokenized assets your users already hold on Robinhood Chain. Arter runs the vaults; your interface stays yours.

Where the money goes.

Your users

Hold USDG, GLD, SGOV or stock tokens

Your app

Shows an Earn balance and a deposit button

Arter vault

Shared or dedicated ERC-4626, one per asset

Isolated lending

overcollateralized USDG and asset loans

Liquidity ranges

narrow asset/USDG positions

Withdrawal buffer

idle, for instant exits

Income flows back the same way: converted into the deposited asset and added to the vault's share price every day.

Two ways in.

Standard

Shared vaults

Point your app at the public ERC-4626 vault for each asset. Deposit, withdraw and read balances with the same four calls every ERC-4626 integration already knows.

See the interface
Custom

Dedicated vault

A vault that only your users can enter, with its own asset list, caps, buffer size and fee split, so the product matches your terms and your controls.

Talk to us

The part you no longer build.

Idle balances earn

Assets your users already hold start compounding daily, while they keep the exposure they chose.

No yield desk to build

Allocation, rebalancing, liquidations and buffers run in the contracts. Your team ships the button.

Accounting on-chain

Share prices and accruals are contract state. Reconcile from events instead of a partner's spreadsheet.

Fits your controls

Allow-lists, per-user limits and blocklist checks come built in, and a dedicated vault can go further.

Integration preview.

Standard ERC-4626, so any library that speaks it works. This reads one user's position. The vault address is a placeholder until deployment.

position.ts
1import { createPublicClient, http, parseAbi } from "viem";2 3// Interface preview. Vault addresses are published once deployed.4const VAULT = process.env.ARTER_USDG_VAULT as `0x${string}`;5 6const client = createPublicClient({7  transport: http("https://rpc.mainnet.chain.robinhood.com"),8});9 10const erc4626 = parseAbi([11  "function totalAssets() view returns (uint256)",12  "function convertToAssets(uint256 shares) view returns (uint256)",13  "function balanceOf(address owner) view returns (uint256)",14  "function deposit(uint256 assets, address receiver) returns (uint256)",15]);16 17// What one user's position is worth, in USDG.18export async function positionOf(user: `0x${string}`) {19  const shares = await client.readContract({20    address: VAULT, abi: erc4626, functionName: "balanceOf", args: [user],21  });22  return client.readContract({23    address: VAULT, abi: erc4626, functionName: "convertToAssets", args: [shares],24  });25}

Build your earn tab.

Tell us what your users hold. We will sketch the vault setup that fits.

Message @arter