Start here
Network
Chain ID, RPCs, explorer, and the live contract addresses.
GIWA Sepolia#
GIWA is an OP Stack L2 with roughly 1-second blocks. Nothing exotic on the tooling side: Hardhat, Foundry, viem, and any wallet that can add a custom chain all work as they do on Ethereum.
| Chain ID | 91342 |
| Native currency | ETH |
| RPC | https://sepolia-rpc.giwa.io |
| Flashblocks RPC | https://sepolia-rpc-flashblocks.giwa.io |
| Explorer | https://sepolia-explorer.giwa.io (Blockscout) |
| Indexer API | https://api.joseon.fun |
| App | https://joseon.fun, https://swap.joseon.fun |
The public RPCs are rate limited and meant for development. If you are polling continuously, run your own node or use a provider. The app itself folds most of its reads into single multicalls for the same reason.
Flashblocks#
The Flashblocks RPC returns a preconfirmation in roughly 200ms, which is what the app uses to acknowledge a trade the moment you sign it. Treat it as a strong hint and nothing more: the same block can change contents between reads there, so no amount taken from that view is settled. Wait for the receipt before you count anything.
Live contracts#
The current stack went live 2026-07-28 at block 31872372. All seven contracts are source-verified on Blockscout, so
you can read the exact bytecode-matched source rather than take our word for it. Every address below opens the explorer.
| Contract | Address |
|---|---|
| JoseonLaunchFactoryV4 | 0x33fFaC709Ec1D3Ec8bC8d0655914Aa7DCd7b463F |
| JoseonSwapFactoryV4 | 0x9AB150A7e487FbdC1094077C8A18898297118784 |
| JoseonSwapRouter | 0xcD4B6582C6964Fae3dF4254cAED959789cFD5d3D |
| MigrationManagerV3 | 0x4D3401d27B45d49117ba9DF99F4315512C715c59 |
| LaunchRegistryV2 | 0xC225aE54E77C254DEb4a928aE439Afe30E4637aA |
| PermanentLiquidityLocker | 0x2141630cf59bC2e04bd4A0864B86b84C21023fE6 |
| WETH9 | 0x323bbaAfff0518Ca107A73BA9870A426fA550B11 |
| Role | Address |
|---|---|
feeAdmin (CTO authority) | 0x923C0a2E9d440C8f76E173695dd907256d7a576E |
Use one stack at a time. Each stack ships its own WETH and its own factory, so a token launched here has no pair on an older router. Mixing addresses does not fail loudly — it points you at a DEX where the token simply does not exist. These addresses are for GIWA Sepolia and can change with a new stack. Confirm this page and the chain ID before sending a transaction.
How do I discover launch-specific addresses?#
Use the launch token as the stable identifier. Read its curve and reserved pair from the launch factory:
function curveFor(address token) external view returns (address);
function pairFor(address token) external view returns (address);You can also capture token, creator, and curve together from the factory's TokenCreated event, and the reserved pair
from LaunchPairReserved in the same creation transaction. After graduation, the same pairFor address is the live
JoseonSwap pool.
Where can I get the ABIs?#
There is no published npm ABI package. For the current deployment:
- Open the contract's explorer page — every stack contract above is verified, so the ABI is on the page.
- For a freshly launched token or curve, wait until verification lands, or reuse the already-verified template ABI against the discovered clone address.
- Pin the ABI and these deployment addresses together in your integration. Do not mix an ABI from one stack version with addresses from another.
For write-side snippets, see contract calls. For the read API that already indexes these contracts, see Indexer API.
Older stacks#
Earlier launch factories exist on-chain and are no longer indexed or served by the app. If you built against one, point at the addresses above. Curves still mid-flight on an older factory can graduate, since their authorisation was never revoked.
Why new versions instead of upgrades#
A pair's behaviour is fixed by the bytecode its factory deploys, and each contract in the stack points at exactly one other. Changing how pools work therefore cascades through the whole chain of them:
swap factory ──▶ launch factory ──▶ migration manager ──▶ registry ──▶ lockerThat is on purpose. Nothing here is a proxy and nothing has an upgrade slot, so the rules a launch shipped with are the rules it keeps. The tradeoff is real: improvements arrive as a new stack, and the app cuts over to it.
Reading verification yourself#
The seven stack contracts are verified. Freshly deployed per-launch contracts — your token and its curve — start out unverified, because the explorer does not automatically match new deployments against already-verified bytecode. We submit them shortly after launch.
If you want to check any address without trusting a page like this one, ask the explorer directly:
curl -s https://sepolia-explorer.giwa.io/api/v2/smart-contracts/<address>The is_fully_verified field is the answer.