▚ Built on Robinhood Chain

Own. Move. Compound.

Your portfolio shouldn't be trapped inside an account. Portly turns it into a Position: a transferable onchain instrument, backed by tokenized real-world assets, that you can own, move, and build with.

Live pilot. Unaudited; formally tested, external audit pending. Not investment advice. Not affiliated with Robinhood. Read the full disclosures.

The Idea

A portfolio is more than numbers on a screen. It's an asset. It should be owned, moved, and built with.

Portfolio Assets

Positions hold tokenized real-world asset exposure on Robinhood Chain. Canonical contracts only, verified by an onchain registry.

Transferable

A Position is an ERC-721 instrument. Sell it, gift it, move it between wallets. The financial state travels with it, untouched.

Programmable

Mandates define allocation policy onchain. Epochs execute it. Settlement and claims are pure, auditable accounting.

Self-Custodial

The frontend is an interface, not custody. Every function works from any wallet or explorer. No Portly server required.

How It Works

Six primitives. No leverage, no synthetic yield, no magic.

Depositstable capital PositionERC-721 minted Mandateallocation policy Epochbatched execution Settleentitlement fixed Claim / Transferyour call
Asset purchase (one trade per cohort)
Global Accumulatorassets-per-unit, RAY-scaled
Position checkpoint
Position entitlement
settle(id): entitlement = units × (accumulator − checkpoint). Idempotent, callable by anyone

Mandates

Pick a policy. The protocol does the bookkeeping.

A Mandate is an allocation policy written into the contracts: fixed target weights over real Robinhood stock tokens. When you create a Position, your deposit joins the next Epoch for your Mandate. The Epoch executes one batched purchase at Chainlink-checked prices, and the tokens it buys belong to your Position from that moment on. Six Mandates, six temperaments, one guy.

Weights and tickers shown are read live from the MandateRegistry and AssetRegistry on Robinhood Chain mainnet; nothing on this page is hardcoded. Every asset is an official Robinhood stock token priced by a Chainlink feed. Verify any time in the app or on the explorer. Allocations are policies, not predictions; every Mandate can lose value.

What You Actually Get

No points. No promises. Tokens in your wallet.

You own the assets

Your Position holds the actual stock tokens its Epoch bought, exactly the assets registered onchain. NAV is their live Chainlink value, timestamped. If the assets go up, your Position is worth more; if they go down, less. That is the whole model.

Payouts are claims

Settle your Position (anyone can, it's free bookkeeping), then claim any asset straight to your wallet: take one stock, leave the rest sitting. Or redeem the whole Position and receive everything it holds in kind. Claims can never be frozen, by contract.

The fee flywheel ROADMAP

Planned for the flagship Portly token launch: a share of its trading fees flows to the protocol and is deployed as buy-side capital through the same Epoch engine, purchasing stock tokens per Mandate weights. Fees become stocks. Not live yet, subject to change, and never a promise of profit; see disclosures.

What Portly deliberately does not offer: APY numbers, emissions, staking rewards, or leverage. Returns come only from the performance of the underlying assets, in both directions. Any Portly-brand token should be assumed to have no intrinsic value and no expectation of profit.

Protocol Status

Live from the chain, or an honest silence. Never simulated.

Guarantees In Code

Boring underneath. Exceptional on top.

Status: every guarantee below is enforced by the contract and covered by the 192-assertion test suite. An independent external audit has not yet been completed; position sizes are capped until it is.

Conservation

For every asset: vault balance ≥ total claimable + unsettled entitlement + recorded residual. Rounding always floors toward the protocol. Value is never manufactured. tested

Idempotent Settlement

Anyone can call settle(id), any number of times. Without new entitlement it credits exactly nothing. tested

Selective Claims

Claim one asset, leave the rest. Claims can never exceed settled entitlement. Double claims revert. tested

Transfer Neutrality

Transferring a Position changes its owner and nothing else. NAV, holdings, checkpoints and history are untouched. tested

Granular Pause

Creation and execution can pause in an emergency. Settlement, claims, transfers and redemption cannot. Exits never freeze. tested

Bounded Governance

Governance configures parameters under hard-coded ceilings. There is no code path that moves user assets to governance. tested

A Position, Concretely

 PORTLY · POSITION VIEW
// what the contract itself will tell you, from any explorer:
getPosition(id)      → mandate, version, cohort epoch, units, state
entitlementOf(id)    → settled + unsettled amounts, per asset
navOf(id)            → NAV at canonical oracle prices + valuation timestamp
performanceBps(id)   → vs. initial capital, basis points

// and what you can always do, without this website:
settle(id)           anyone, idempotent
claim(id, asset, to) owner only, selective
redeem(id, to)       owner only, in kind
no admin backdoor    governance cannot touch Position assets
▚ The Bottom Line

Your portfolio is an asset.
Start treating it like one.

Six mandates over real tokenized stocks, wrapped into one transferable Position you can verify from any block explorer — and no admin backdoor between you and your assets. Own. Move. Compound.

Live pilot on Robinhood Chain mainnet · positions capped at 1,000 USDG · read the disclosures