hackquest logo

Florin

Florin is a lending market for tokenised stocks on Robinhood Chain. Deposit SPY as collateral, mint FUSD, and borrow dollars without selling a share.

Videos

Tech Stack

Rust
Go
Next
Web3
Solidity
React
Node

Description

Florin

Borrow dollars against tokenised stocks, without selling a share.

Florin is a lending market for tokenised stocks on Robinhood Chain. Deposit SPY, mint FUSD, a dollar stablecoin, and keep the price exposure and every dividend your shares pay. Live on Robinhood Chain Testnet, with contracts written in Rust on Arbitrum Stylus.

How it works

  1. Deposit SPY. It keeps earning dividends the whole time.

  2. Mint FUSD against it. Spend it, lend it, or loop it back into more SPY.

  3. Repay whenever you want. There is no maturity.

Robinhood Chain's stock tokens pay dividends by raising an on-chain multiplier, so every distribution lands on your collateral and your position deleverages itself while you borrow.

Maximum loan-to-value

90.9% (110% minimum collateral ratio)

Interest rate

Set by each borrower, from 0.5%

Upfront cost

One week of interest. No origination fee.

Minimum loan

10 FUSD

Set your own rate

Every borrower chooses their own interest rate, from 0.5% a year. The rate also sets your place in the redemption queue, so lower rates cost less but are redeemed first. Being redeemed isn't a liquidation, as your debt falls by exactly as much as your collateral.

Why FUSD holds a dollar

  • Redemptions. Anyone can redeem FUSD for $1 of SPY, starting with the lowest-rate positions.

  • The Stability Pool. Depositors earn 75% of all borrower interest and absorb liquidations, receiving SPY at a discount. No auctions or keepers needed.

Because FUSD is minted against collateral, borrowing grows with deposits instead of being capped by a treasury.

Built on Stylus

The full protocol is ported to Rust on Arbitrum Stylus with bobcat-sdk, our own Stylus SDK. Along the way we published two open-source crates on crates.io so other teams can build on the same foundations. stylus-robinhood-stock-tokens covers 35 Robinhood stock tokens, and stylus-chainlink-price-feeds covers Chainlink feeds on Robinhood Chain and Arbitrum.

Superposition Accounts handle onboarding, with social login, bridging, gas paid in USDG, and USDG to SPY swaps through Uniswap V4. Market data in the app comes from a Go indexer and GraphQL API that we run on our own servers in Adelaide.

What's next

SPY is the first market, and any tokenised equity or ETF on the chain can be listed the same way. We're working on gasless onboarding, one-click leverage, more stock markets, an audit and mainnet, and FUSD liquidity across Robinhood Chain DeFi. Long term, Florin aims to become an infrastructure hub for real-world assets, covering the tooling around tokenisation and the DeFi built on top of it, starting with credit against tokenised equities.

Links

florin.so · faucet.florin.so · @florinprotocol

Progress During Hackathon

We went from a UI wireframe to a public testnet on Robinhood Chain in four weeks, starting 4 September. We ported the full CDP protocol to Rust on Arbitrum Stylus using bobcat-sdk, our own Stylus SDK, plus small purpose-built contracts for the stablecoin, and deployed the full contract set to Robinhood Chain Testnet. We wrote our contract tests in Solidity on arbos-foundry, where our SDK was an early reference integration. We published two open-source Stylus crates on crates.io: stylus-robinhood-stock-tokens, which reads the price, pause status and metadata of 35 Robinhood stock tokens from any Stylus contract, and stylus-chainlink-price-feeds, which reads Chainlink price feeds on Robinhood Chain and Arbitrum, including historical prices using a binary search, for both stylus-sdk and bobcat-sdk. We integrated Superposition Accounts for social login, bridging and paying gas in USDG on Robinhood Chain, and added swaps from USDG into SPY through Uniswap V4 to make onboarding easier. We built a Go ingestor that streams protocol events from the chain into TimescaleDB with checkpointing, with the schema versioned in dbmate migrations, and launched a Go GraphQL API at graph.florin.so that serves every number in the app, cached at the edge by Stellate. Everything runs on our own server rack in a datacentre in Adelaide. We shipped a testnet faucet at faucet.florin.so that sends testnet ETH and SPY, with a Cloudflare Turnstile human check. In the app you can open a position with SPY as collateral, mint FUSD at a rate you choose, and manage several positions per wallet, each one represented as an NFT. The Max button borrows to exactly the 110% minimum collateral ratio, net of the upfront interest quoted on-chain. We launched a Stability Pool where FUSD depositors earn borrower interest plus SPY from liquidated positions. WalletConnect and any browser wallet are supported, and we use PostHog for product analytics, enabled only after cookie consent. We also built a Python reference model of the protocol, with 46 tests and a randomised test that checks custody and supply invariants.
Team Leader
BBayge
Project Link
Sector
DeFiRWAInfra