Protocol
Mock RWA stocks
Mock equities: swap into them, or take creator fees in them.
Mock RWA stocks#
Joseon.fun carries a demo of Robinhood-style tokenized equities: five mock "RWA stocks" deployed on GIWA Sepolia, each with a live WETH pool on JoseonSwap. They are not backed by anything. No shares, no custodian, no price feed — plain ERC-20s whose names imitate real tickers so the flows around them can be demonstrated end to end.
One flow remains enabled today:
- Swap into an RWA. Every mock stock has a seeded WETH pair, and the router accepts three-hop paths, so any
launch token routes
token → WETH → jAAPLin one transaction. The swap page lists the stocks in its token picker under Mock RWA stocks.
Creator-fee conversion is temporarily paused. The deployed V2 converter accepted a caller-supplied pair and relied on standing token allowances, so the app no longer sends transactions to it. Creator rewards currently use the raw launch-token + WETH claim path while V3 awaits deployment and staging review.
The tokens#
| Symbol | Imitates | Contract | WETH pair |
|---|---|---|---|
| jAAPL | AAPL | 0x07c11d009dF5b68Edf35532BA538B9b109942562 | 0xFe298A51a6ce6D3a7465f619d69BE384B409Fb27 |
| jTSLA | TSLA | 0x34DEc227E88A779C58E142640925BF1014F2291a | 0x602dd999F11BFCB14645fbb48A6c7f8B433D19E6 |
| jNVDA | NVDA | 0x1E074AF7462FAd8F6130E45E3A755aA8ded4ebc3 | 0xE5dE1939165De4635F93e060a8de571c3Cab5c1b |
| jSPY | SPY | 0xEFBa8EE78A64B96cAF76C2FFc2eC7C00c5853BFC | 0xF2b2FFA19c24f084aa4894Af14e7d9175dD74a5C |
| jGLD | GLD | 0xD7933E1314760B6Cb11651B922d8492E98E035C0 | 0x28356120B54398bbd40Af5643e2c23bCeB941591 |
The retired RwaFeeConverterV2 is at 0x63229513375607c8C2d1447ddCbf607407747571. This address is retained only so
past users can identify and revoke approvals; it must not be used for new claims.
Each stock has a faucet: faucetMint() pays 100 tokens per address per day. The deployer key can also mint freely —
another reason these must never be read as having value.
Fee payout status#
The V2 path is disabled in the app. If a wallet previously enabled it, use the Revoke legacy RWA approval action in creator rewards; both the launch-token and WETH allowances to the retired address must be zero.
RwaFeeConverterV3 is implemented in contracts/src/rwa/RwaFeeConverterV3.sol but has no approved network address
yet. Before the selector is re-enabled, V3 must be deployed, verified, exercised on staging, and added to the app's
fail-closed configuration. V3 changes the flow in four important ways:
- The recipient calls
claimAndConvertthemselves; a third party cannot choose execution timing or slippage. - The contract derives the canonical launch/WETH pair from the router factory instead of accepting a pair address.
- Claimed fees are measured from the recipient's actual balance changes, not values returned by an external pair.
- The launch-token → WETH and combined WETH → RWA swaps each have a non-zero minimum output, and the UI approves only the exact claimable token amounts for that attempt.
What this is, and is not#
- The stocks trade like any pool token: constant-product pricing against their seeded WETH reserves. Their "price" is whatever the pool says, and moves with demo trades — it does not track the real equity at all.
- The currently deployed pools were seeded with only 0.02 WETH each. Treat quotes as highly price-sensitive; the updated deployment script refuses to create pools below 1 WETH, but existing liquidity is unchanged.
- The app fails closed: no converter address means raw fee claims, not a fallback to V2.
- The mock tokens and pools live at the addresses above. V3 deployment is deliberately a separate, approval-gated
operation using
contracts/scripts/deploy-rwa-converter-v3.ts.