# Pangea documentation: v4

This is the Markdown version of https://www.pangea.trade/app/docs/v4. The whole documentation, every tab, is https://www.pangea.trade/app/docs.md.

Every new launch is a v4 launch. A v4 coin lives on up to six chains: Robinhood Chain, Base, Ethereum, BNB Chain (BSC), Solana and Elysium. The four EVM chains and Solana carry LayerZero and Hyperlane; Elysium carries Hyperlane only. This tab is all of v4: creating a coin, chains and pairs, fees and holder rewards, opening a chain later, handing over, launching from your own wallet, the Bundle Kit, bridging, contracts and the API. Coins launched before v4 are in the v3 and v2 tabs.

- One coin on up to six chains, one price on all of them. Each chain has its own 1B tokens, minted when that chain opens.
- Every chain has one shared Pangea bridge, the same for every v4 coin.
- Liquidity is locked on every chain: no contract function or program instruction withdraws it.

| Figure | Value | What it says |
| --- | --- | --- |
| Chains | 6 | Ethereum, Base, BNB Chain, Robinhood Chain, Solana and Elysium: open the ones you want now, the rest later. |
| Tokens a chain | 1B | Each chain mints its own 1B when it opens. |
| Bridges | 2 | LayerZero and Hyperlane, both on every v4 coin. |
| Trading fee | 0.3-5% | Set once, at launch. |

## Pangea v4

Pangea v4 is how a coin launches today. One coin lives on up to six chains at once: Ethereum, Base, BNB Chain, Robinhood Chain, Solana, Elysium. It keeps one price on all of them, because the same coin moves between chains and arbitrage closes any gap.

- Each chain has its own 1B tokens, minted once when that chain opens. [Supply per chain →](https://www.pangea.trade/app/docs/v4#v4-supply)
- You open the chains you want now, and the others later, at a price you choose. [Opening a chain later →](https://www.pangea.trade/app/docs/v4#v4-open-later)
- Every chain has one shared Pangea bridge, and every v4 coin uses both LayerZero and Hyperlane. [The two transports →](https://www.pangea.trade/app/docs/v4#v4-transports)
- Any token can be the pair, on every chain. [Chains and pairs →](https://www.pangea.trade/app/docs/v4#v4-chains)
- Trading fees can pay the creator and the coin's holders, with a reward token and a share set per chain. [Fees and holder rewards →](https://www.pangea.trade/app/docs/v4#v4-tokenomics)
- Coins launched before v4 keep their own rules: the v3 and v2 tabs.

## What changed from v3

- One shared Pangea bridge on each chain for every v4 coin. A v3 coin keeps its own bridge. [Shared bridge →](https://www.pangea.trade/app/docs/v4#v4-shared-bridge)
- Both LayerZero and Hyperlane on every v4 coin. v3 is LayerZero only. [The two transports →](https://www.pangea.trade/app/docs/v4#v4-transports)
- Six chains: Elysium joins Ethereum, Base, BNB Chain, Robinhood Chain and Solana. [Chains and pairs →](https://www.pangea.trade/app/docs/v4#v4-chains)
- Chains can open later, and each chain's 1B is minted only when that chain opens. [Opening a chain later →](https://www.pangea.trade/app/docs/v4#v4-open-later)
- Any token can be the pair, on every chain. [Any pair, any token →](https://www.pangea.trade/app/docs/v4#v4-any-pairs)
- Launch from your own wallet with no launch fee. [Launch from your own wallet →](https://www.pangea.trade/app/docs/v4#v4-self-launch)
- The creator moves the creator role at once, or renounces it. [Handing over →](https://www.pangea.trade/app/docs/v4#v4-handover)
- Holder rewards: a reward token and a share set per chain, and one minimum holding for all chains at launch, changeable per chain after launch. [Tokenomics →](https://www.pangea.trade/app/docs/v4#v4-tokenomics)

## Factories and contracts

- On each EVM chain: the chain's v4 factory, which makes the coin's token and opens its pool, and the shared bridge with its LayerZero and Hyperlane adapters.
- The coin's token address ends in 6ea, on every chain.
- On Solana: Pangea's launcher (the mint, its metadata and a Meteora pool whose liquidity is locked for good), the shared bridge program for every v4 Solana coin, and the price readers it consults.
- Every address, ABI and IDL: [v4 contracts and ABIs →](https://www.pangea.trade/app/docs/v4#v4-contracts)

## Chains and pairs

| Chain | Bridges | Pair |
| --- | --- | --- |
| Ethereum | LayerZero and Hyperlane | Any token |
| Base | LayerZero and Hyperlane | Any token |
| BNB Chain | LayerZero and Hyperlane | Any token |
| Robinhood Chain | LayerZero and Hyperlane | Any token |
| Solana | LayerZero and Hyperlane | Any token |
| Elysium | Hyperlane | Any token |

Each chain trades against the token you pick for it: the native coin, its wrapped form, USDC, a stock token or any token you paste. [Any pair, any token →](https://www.pangea.trade/app/docs/v4#v4-any-pairs)

## Launch flow and timing

- The coin: its name, ticker and picture.
- Its chains: every v4 coin lists all six; you pick the ones to open now. The others stay ready to open later.
- What it trades against on each chain: any token. [Chains and pairs →](https://www.pangea.trade/app/docs/v4#v4-chains)
- The fees: the trading fee, and who it pays. [Fees and holder rewards →](https://www.pangea.trade/app/docs/v4#v4-tokenomics)
- Review, then Create: the page shows what you will pay before you sign.

Or launch from your own wallet: no launch fee, you pay each chain's gas, with one Launch button per chain. [Launch from your own wallet →](https://www.pangea.trade/app/docs/v4#v4-self-launch)

Buys at launch, from your wallets or a bundle in the same block: [Launch buys and the Bundle Kit →](https://www.pangea.trade/app/docs/v4#v4-launch-kit)

### Timing

- From your own wallet, a chain is open once its Launch click is confirmed on that chain. Two open chains can bridge to each other at once.
- A platform launch opens every chain within the hour after the fee is paid.
- Pangea's services wait 1 block on every chain. A Hyperlane message from Solana waits until its block is finalized, about 13 seconds.

## Launch options

- Chains: all six are listed; you open the ones you want now and the others later. [Opening a chain later →](https://www.pangea.trade/app/docs/v4#v4-open-later)
- Pair: any token, chosen per chain. [Any pair, any token →](https://www.pangea.trade/app/docs/v4#v4-any-pairs)
- Trading fee: set at launch. [Fees →](https://www.pangea.trade/app/docs/v4#v4-fees)
- Tokenomics: a reward token, a share and one minimum holding. [Tokenomics →](https://www.pangea.trade/app/docs/v4#v4-tokenomics)
- Buys at launch: launch buys from several wallets, and the Bundle Kit for buys in the same block. [Launch buys and the Bundle Kit →](https://www.pangea.trade/app/docs/v4#v4-launch-kit)
- Dev buy: can be split between several wallets.
- Who launches: you, from your own wallet with no launch fee, or the platform for one launch fee. [Launch from your own wallet →](https://www.pangea.trade/app/docs/v4#v4-self-launch)
- Payout wallets: one EVM wallet and one Solana wallet, asked for each chain type you open.

## Launch from your own wallet

- Every v4 coin lists all v4 chains by default: Ethereum, Base, BNB Chain, Robinhood Chain, Elysium and Solana. The creator only picks the chains to open now, then launches each from their own wallet with that chain's own Launch button (Launch on Solana, Launch on Base, and so on): Solana first, the other chains after. Each click does the whole chain, its tokenomics included. Every other chain stays not open yet and can be opened later, with no extra choice at the launch and no extra cost.
- Each chain's launch is complete on its own or does not happen. A failed chain reverts whole, so its buy money never leaves the wallet, and it is retried as it is; a chain already open is marked done.
- Two chains can bridge to each other as soon as both are open. A transfer to a listed chain that is not open yet is held, never lost.
- Launch buys from several wallets work on every chain, in an ERC-20 quote token: the creator sends each buyer an ask and each buyer signs their own buy with their own wallet. In the chain's native coin each buyer pays from their own refundable deposit (sent when they sign): if the buy is skipped or the launch never opens, it stays theirs, and they withdraw it any time under Your launch-buy deposits on the launch page. The dev buy can be split between several wallets, each chain in its own transaction.
- The creator's own opening buy and the dev buys inside the open pay no pool fee, on every chain, at the launch and when a chain is opened later. So do the other launch buys the open runs: the signed launch buys on the EVM chains and the creator's buy list on Solana. Every other buy pays the pool's full fee: Solana co-buys, the bundle kit's buys, buys over the bridge and every later trade.
- Launch from your own wallet: no launch fee, you pay each chain's gas. Pangea sends no step of its own for a v4 coin, no route setup and no listing step, and there is no flat platform fee.
- Every other service is paid by whoever uses it, when used: the bridge fee, delivery and the price-gap fee by the person bridging.

### Or the platform opens it: pay-per-use

- The same chains, transports, prices, opening buy and split dev buy, opened for you by Pangea's launcher. You sign once per chain, pay one launch fee on one chain, and the launcher opens every chain within the hour.
- Nothing is spent until the fee is paid. A paid fee is refunded if no chain opens, and it is settled to Pangea only after the coin is open.
- In a launch that opens Solana with other chains, the page asks who opens Solana. The default, we do it: Pangea's launcher opens Solana too, first sending the creator's launch-buy list, then the whole Solana launch as one transaction, with no extra signature, its cost in the fee. Until the launcher's buy-list builder is live the page says so and asks you to sign Solana yourself.
- Or do the Solana leg yourself: one transaction from your own Solana wallet, up to 32 launch buys, and its cost is taken out of the fee quote. A coin launched on Solana alone is always a self-launch.

### Launch buys and the bundle kit in a self-launch

- On the EVM chains other wallets' signed launch buys go in this launch too, and the bundle kit works with it as well (see launch buys and the bundle kit).

### Payout wallets: one per chain type

- Creator fees are paid to one payout wallet per chain type: an EVM wallet for the EVM chains, a Solana wallet for Solana. Each is asked when that chain type is first opened (at launch, or when you open it later), and it is required.
- At launch: an EVM payout wallet when any EVM chain opens now, a Solana payout wallet when Solana opens now. The launch page and the platform-paid launch (on the page or through the API) will not launch without them. A chain type that is only listed (opened later) is not asked at launch.
- A chain type's payout wallet is the coin's creator role wallet of that type, so handing over the creator role moves it.

## Launch buys and the bundle kit

A v4 ticket answers `bundleKit: true` and `launchBuys: true` with `bundleKitV4`: each chain's mechanism and limits. The bundle kit is always on: it is never switched off, for any v4 launch kind on any chain. Neither choice locks out the other.

### Launch buys: inside our launch transaction

- EVM chains: the open runs every buy right after the seed, in the same transaction: your own buy, split dev buys, and other wallets' buys, each signed as one `LaunchBuy` (EIP-712). There is no count limit; the only limit is the transaction's gas (about 80 buys in 2^24 gas, `maxLaunchBuys` per chain). Ask at `POST /api/v1/launch/v4/sponsored/prepare` (`otherBuys`), send the signatures at `POST /api/v1/launch/v4/sponsored/submit`; a self-launch passes them to its own open.
- Solana: co-buys (`co_buys`) inside the one launch transaction, each co-payer a signer, or the creator's buy list.
- Solana buy list, who holds what: the money stays in the payer's own token account until the launch, which spends at most the approved amount and only for the launch the list names. The bought tokens wait in the list's own account until each is claimed to its named wallet (`claim_buy`, seconds after the launch), and the unused approval is ended with the reclaim the form offers right after the claims. A skipped or never-made launch spends nothing.

### The bundle kit: your own buys bundled with the launch

- The page hands out the held launch transaction (signed, not sent): your own open on a self-launch or open-later, or the platform's held open on a sponsored launch. The bundle builder puts it first and your buy transactions after it. Whoever sends the held transaction can only launch exactly that coin.
- Ethereum: a private bundle through Flashbots or Titan. BNB Chain: through 48 Club or BlockRazor. The bundle lands whole, in one block, launch first, or not at all.
- Base and Robinhood Chain have no bundle relay (one sequencer each). The kit sends the launch, waits until the sequencer accepts it, then sends every buy at once. They usually land in the same block, but that is not guaranteed and it is not atomic: a buy sent too early fails and costs its gas.
- Solana: one Jito bundle, the launch first, your buys after it.
- On Solana every v4 launch offers two ways for other wallets to buy at the launch, and you can use either or both. Launch buys: up to 8 co-payers (with any quote: USDC, SOL, Token-2022 or an xStock; 7 in a sponsored open, and 5 when the quote is priced through 2 route hops) sign the launch transaction itself and their buys run right after the pool opens, in the same transaction. Bundle kit: up to 12 more buyers sign their own small buy transactions, and the launch and their buys go to Jito as one bundle (at most 5 transactions): it lands all at once in one slot, the launch first, or not at all. The last buyer transaction pays the Jito tip. If the bundle relay does not take the launch transaction, the launch still goes out as usual with its launch buys, and the kit buyers simply do not buy.
- Buyers past the launch-buy gas limit go in the bundle kit. Using both: your launch buys run inside the launch, and your bundle's buys come right after it.

### The admin pause of new opens

The platform admin can pause new opens at once, with no wait: `setOpensPaused` on the EVM launch core, `set_paused` on the Solana launcher. While paused, every new launch and every open of a later chain is refused, the self launch and the platform-paid one alike. A coin already open is never touched: its trades, bridging, claims, launch-buy deposit withdrawals, handover and tokenomics all go on.

## Opening a chain later

A coin launched on one chain, Solana included, can later open each of its other listed chains, one at a time or several at once, in any order. For example: launch on Solana, later open Robinhood Chain, Ethereum, Base and BNB Chain.

### Who may open a chain

- On the coin's home chain, the chain it was first launched on: the creator, any time.
- On another listed chain within 1 hour of the launch: the creator, directly.
- After that: whoever the current creator authorises, from the home chain, for that chain and until a deadline. Once the creator role is renounced, anyone may ask for that authorisation.
- Never the platform: Pangea cannot open a chain or mint a coin's 1B.

### What the opener chooses

- The opening price, any price. There is no floor, no forced price and no platform seed.
- The form starts at a 3,000 dollar market cap for that chain (its 1B tokens), shown and editable: change it to any price you want. Nothing is set for you.
- That chain's 1B is minted and seeded into the coin's locked pool position from that price upward, as at a launch.
- Optionally their own cash as two-sided liquidity: coins from their own opening buy plus pair token, of any size, in a separate position that is the opener's own and can be withdrawn, so the pool can be bought and sold from the start. With none, the pool opens with the chain's tokens only.
- Launch buys and dev buys, in the same transaction, after the seed.
- Before they sign, the page shows the market cap their price means on this chain beside the coin's other chains, and says plainly: your price, your risk; arbitrage moves it toward the other chains, only when that is profitable.

### The payout wallet of a chain opened later

- Opening Solana later asks for the coin's Solana payout wallet then, when the coin has none yet, and requires it: the home chain sets it in the same step (the EVM payout wallet is kept), and the open authorisation sent next carries it to Solana.
- Opening another EVM chain reuses the coin's EVM payout wallet. A Solana-home coin with no EVM payout wallet names it on Solana first (signed by the coin's Solana creator, the Solana payout wallet kept), then opens.
- There is no separate 'add a Solana key first' step. Once the creator role is renounced, no payout wallet can be named any more: that chain's creator share is burned.

From there the arbitrage bot brings the chains to one price, over either transport, trading only when that is profitable. Arbitrage is open to anyone.

> **Note:** How v4 prices a crossing: [The signed gap price →](https://www.pangea.trade/app/docs/v4#v4-gap-price)

## Any pair, any token

- Any pair, any token, on every chain: Ethereum, Base, BNB Chain, Robinhood Chain, Elysium and Solana, on the self launch and on the platform-paid launch. The native coin, its wrapped form, USDC, a stock token, or any token you paste. There is no pair list, no admin approval and no minimum market: nothing allows or refuses a token by name.
- Stock pairs: on the EVM chains a tokenized stock is an ERC-20 like any other and pairs as one. On Solana today's tokenized stock mints are Token-2022 mints with extensions (permanent delegate, pausable, scaled UI amount, default account state, a transfer-hook authority) that Meteora's cp-amm pools take only with a cp-amm TokenBadge. Such a mint pairs when Meteora's TokenBadge for it exists: the launch passes the badge to the pool. Without a badge it is refused before anything is created, and one that is paused, or frozen by default, right now is refused too. Its issuer's powers (it can pause the token or move it from any account) are your risk, shown as warnings.
- Taxed tokens work: a transfer tax (or a Token-2022 transfer fee) is shown as a cost you pay on each buy, never a refusal, and the bridge never counts it as price.

### Your risk: the warnings

- A thin, taxed, new or volatile pair token can move your coin's price, and a token its issuer can change later can stop its swaps. The pair check shows what it finds about the token (its transfer tax, its market's depth, the issuer's powers) as warnings, never as refusals. The choice and the risk are yours.
- A tokenized stock pair gets its own warning: its price follows the stock's market (closed hours, halts, corporate actions) and its issuer's rules.
- A Solana Token-2022 mint whose issuer can still switch on a transfer hook (hook authority set, no hook program yet) is a warning, not a refusal: if the issuer switches the hook on, its pools stop working for it, your risk. Its cp-amm pool takes it only with a cp-amm TokenBadge: it pairs when Meteora's badge for that mint exists (the launch passes it); without one it is refused before payment (this token needs a Meteora token badge, which only Meteora can create).

### Refused only when it truly cannot work

- Not a token: on EVM, an address whose decimals cannot be read; on Solana, no initialised mint at that address, or a token program that is neither SPL Token nor Token-2022.
- More decimals than the pair maximum: 36 on EVM, 36 on Solana (a Solana quote with many decimals is limited by the opening price the pool can take, not by its decimals).
- The coin itself as its own pair.
- A buy-and-sell round trip that reverts (refused by the SDK's pair verdict; the launch page shows the checker's facts as warnings): a honeypot, or a token whose transfer reverts in the checker's test.
- The native coin as the pair of a launch with signed launch buys (EVM): those buys pull the pair token by an ERC-20 allowance, which the native coin has not; pair with its wrapped form to add launch buys, or launch without them.
- On Solana, a token that cannot sit in the coin's cp-amm pool: an active Token-2022 transfer hook (a hook program runs on every transfer); NonTransferable; Token-2022's native SOL mint (pair with SOL instead); a Token-2022 extension that needs a cp-amm TokenBadge (any extension but transfer fee, metadata pointer, token metadata and a transfer hook with no hook program) when Meteora has no badge for that mint; and a mint that is paused, or frozen by default, right now.

### The weak price path and unpriced marks

- The weak price path mark: the pair still launches, with the mark and its reasons, when its price path is thin (on EVM, moving the path's thinnest pool 2% takes under 50,000 dollars; on Solana, the token's market holds under 50,000 dollars), when its depth could not be measured, or when the path could not be confirmed just now.
- Unpriced, your risk: a pair with no readable pool path to a dollar price is not refused either. It launches unpriced, with the weak price path mark and its reason next to the pair before you pay; on Solana it opens with no route (signed price only). Its buys over the bridge are priced by Pangea's signed quote price where one exists, and its dollar figures may be missing.

### Platform-paid: the gas share of a quote you chose

- Gas kept on a revert: on the platform-paid launch, an EVM leg whose quote is a creator-chosen quote (not the native coin, its wrapped native or the chain's USD stable) has that open's priced gas share paid separately, in a second payment to the platform's launcher, and that share is kept if the open is mined and reverts (the platform spent the gas); you reclaim only the rest of the fee from the collector. If nothing is sent on that chain, the share is refunded to you by hand.
- On EVM an ERC-20 pair is usually opened for you on the platform-paid launch. Such a quote must open with the coin sorting first in its pool, so no opening dust in a token the platform does not hold is owed: the coin's address is re-salted up to 24 times, and if none sorts first (a quote at a very low address, or several ERC-20 legs at once), prepare answers 409 before payment: try again, pay in the native coin or its wrapped native, or launch it yourself.
- After 2 failed platform-paid opens on a quote you chose within 24 hours, for your wallet or for that quote, the platform-paid launch on it is refused before payment: launch it yourself, pick another quote, or try again later.
- On Solana's platform-paid leg, any pair token but USDC is funded by the creator: your own transaction creates the platform's account for that token and the list's buys come from your own account, so the platform puts no money of that token in.

## Fees

- Trading fee: set at launch, from 0.3% to 5%.
- The platform takes 20% of each trading fee; the rest is the creator's.
- The platform's part is split 40% buyback and burn, 40% PANGEA holders, 20% platform. [Equity share →](https://www.pangea.trade/app/docs/v4#v4-equity-share)
- The creator's opening buy and the dev buys inside the launch pay no pool fee.
- Launch fee: none from your own wallet, you pay each chain's gas. The platform launch takes one launch fee on one chain, refunded if no chain opens. [Launch from your own wallet →](https://www.pangea.trade/app/docs/v4#v4-self-launch)
- Bridging: the transport and delivery fee, quoted before you send, the unused part refunded, and the price-gap fee. [The two transports →](https://www.pangea.trade/app/docs/v4#v4-transports)

## Tokenomics

- Part of the creator's fees can go to the coin's holders. On each chain you choose the reward token they are paid in and the share that goes to them.
- To be paid, a wallet must hold a minimum share of the coin's supply on that chain. You set one minimum at launch, the same on every chain. After launch the creator can change it on any one chain. The least you may set, and the default, is 0.01% on the EVM chains and 0.01% on Solana.
- Holders are paid by Pangea's payout service from each chain's vault. When the reward token is not the chain's native coin, the vault pays back its own gas by a swap: [Gas payback →](https://www.pangea.trade/app/docs/v4#v4-gas-payback)

> **Note:** PANGEA's own holders have a separate rule: [Equity share →](https://www.pangea.trade/app/docs/v4#v4-equity-share)

## Equity share

- **Equity share** (Live): Paying: every 5 minutes, from the holder pot wallets 0x5CCbF6b0fE18D17FA034B80ea518CFaf0010802A (Ethereum, Base, BNB Chain, Robinhood) and 4ewwM8Xbg1GJcTMaHRyQqQXG2AuvtubUHH9KzTjWyVjM (Solana). Only these wallets pay holders.

- On each chain, what the platform takes from the fees is split three ways: 40% buys back and burns PANGEA, 40% goes to PANGEA holders on that chain, 20% stays with the platform.
- Holders are paid every 5 minutes, in proportion to the PANGEA they hold on that chain. A small amount waits until it is worth the gas to send, then it is paid; nothing is lost.
- Fees taken in another token are swapped to the chain's own coin first, then paid.
- Not paid: pools, the burn address, bridges, the PANGEA token contract and other contracts.
- On Elysium the holder share stays in the platform wallet: there is no payout there.

### Example

- The platform takes $1,000 in fees on a chain.
- $400 buys back and burns PANGEA, $400 goes to that chain's PANGEA holders, $200 stays with the platform.

## Gas payback for non-native pairs

- Paying holders costs gas, paid in the chain's native coin. A vault that holds another token pays that gas back by swapping some of it into the native coin.
- The swap pays exactly the gas owed, within the cap on how much of a payout gas may take. Anything left over stays in the vault.
- The swap goes through a route Pangea quotes at the time, with a least amount of native coin it must return, so a bad price cannot drain the vault.
- If there is no route, or the swap fails, there is no payback that time: the holders are still paid.

## Supply per chain and market cap

- Every v4 coin's address ends in 6ea, on every chain: on the EVM chains its token address, the same on each of them, and on Solana its mint. The contracts refuse an open whose address does not end in 6ea, so a 6ea ending is the mark of a real Pangea coin. Your browser, the SDK and Pangea's server search the salt that gives it before the launch; that takes seconds.
- A v4 coin's name and ticker have no length limit, on any chain. Only an empty name or ticker is refused.
- A v4 coin's metadata (its image and description) is named on chain by a URI. On the EVM chains it is given at the open and the coin's creator can change or clear it later with `setMetadataURI` (at most 128 bytes; the current creator role holder only, nobody once the role is renounced). On Solana it is the `ipfs://` address of the metadata, given at the open as its content digest (CID v0 or v1), and fixed.
- 1B tokens per chain, fixed. A coin lists up to 8 chains and has 1B per chain at most, and each chain's 1B is minted only when that chain opens, once, at an address fixed by the launch. There is no other way to mint it.
- The supply is 1B per chain, not 1B across chains: a coin open on 4 chains has 4B, and its most is 1B times the chains it lists. The API says so: supplyModel "per-chain", capSupply the supply across the open chains, capSupplyMax 1B times the listed chains.
- Degen on a v4 coin means only the lowest opening market cap ($600 a chain to start; a launch on 2 or more chains is sponsored and degen, one on a single chain opens normal at $3,000). It says nothing about supply: a degen coin also has 1B on each open chain.
- The chain list and the transport list are fixed at launch. Nobody, Pangea included, can add a chain, a peer or a transport to a launched coin. Chains Pangea adds later are for coins launched after that.
- Market cap and FDV are the price times the supply summed across the open chains: the supply mirror's figure once it reports (the open chains' tokens, including those on their way between chains, less anything the gap fee burned), else 1B times the open chains. Never one chain's supply. The price is that of the pool the signed price reads, else the deepest official pool. Chains listed but not yet open add nothing to it.
- The coin page and the coin's row in Explore show open on N of M chains: N the chains open now, M the chains the coin lists. The coin page lists each chain: open, with its price, pool and supply, or not open yet.
- Tokenomics on a v4 coin is switched per chain. The coin's creator may turn it on while it is off and the role is not renounced (at the open or later, also again after the platform admin turned it off); the creator can never turn it off or re-point it to another account. The platform admin can turn it on, off and re-point it at any time, for any coin, renounced or not: on EVM chains `adminEnableTokenomics`, on Solana the launcher's `admin_enable_tokenomics` (on, or re-point while on) and its admin disable. The endpoint is `POST /api/tokenomics/v4/switch`.
- The creator's tokenomics vault (EVM) or tokenomics account (Solana) is made on the page, from the creator's own wallet, which pays its gas or rent: at the launch, when an EVM chain is opened later, at Solana's later enable, and at the creator's enable on an open EVM chain. There is no address to paste. Each chain's leg is set in the tokenomics editor (burn, buy and hold, liquidity, holder rewards and payout wallets); on EVM the wallet sends `createVault` on the tokenomics v2.4 factory (skipped when that vault is already there), on Solana `init_tokenomics_v24`. The page rebuilds each transaction and compares it before the wallet is asked, and the turn-on names exactly the vault or account made and read back. It belongs to the coin and stays with it after a handover.
- The platform admin's tokenomics panel is on the coin page, shown only to the admin's wallet (the launch core's admin on EVM, the launcher's program authority on Solana): turn on, re-point (on EVM with a choice to settle first), turn off or clear, on any open chain, at any time, renounced or not, naming the vault or tokenomics account. Every transaction is rebuilt on the page and compared before the wallet is asked.

## Handing over the creator role

- The creator role is the wallets that receive the creator fees, one for the EVM chains and one for Solana. The current creator moves it themselves, on the coin's home chain, in one transaction, at once. There is no propose and accept step.
- The change is then copied to every other open chain by a bridge message. The profile page offers one push per other open chain, priced first, and whoever sends a push pays its transport and delivery fee. Until a copy lands, seconds to minutes, that chain still pays the old wallet.
- The creator can also renounce the role, at once, after typing the coin's symbol to confirm. The creator share of the fees is then burned, and anyone may ask the home chain to authorise opening the coin's remaining chains.
- The platform can still move the role, as for v3 coins: it names a new wallet and that wallet accepts. This also ends a renounce. A creator's own moves cannot cancel it, so a stolen creator wallet cannot block a recovery.
- An authorisation to open a chain given before a handover or a renounce stops counting once the new role reaches that chain; the new creator gives it again.
- v4 coins have no separate buy or sell fees and no launch tax.

### From a program

`POST /api/v1/launch/v4/handover` builds the move or the renounce for the current creator's own wallet, on an EVM-home coin's home chain. A Solana-home coin's handover is a Solana instruction signed on the coin page: the API answers 409 for it. See v4 from a program.

## Elysium

- A v4 coin lives on up to six chains: Robinhood Chain, Base, Ethereum, BNB Chain (BSC), Solana and Elysium. The four EVM chains and Solana carry LayerZero and Hyperlane; Elysium (chain id 99901, gas in HYPE) carries Hyperlane only.
- Transfers to and from Elysium go over Hyperlane, signed by Pangea's validator alone.
- The PANGEA holder share on Elysium stays in the platform wallet: there is no payout there. [Equity share →](https://www.pangea.trade/app/docs/v4#v4-equity-share)
- Coins launched on Elysium before v4 keep their own rules: the v3 tab.

## Solana

- Pangea's Solana launcher makes the mint and its metadata and opens a Meteora pool whose liquidity is locked for good.
- One shared bridge program carries every v4 Solana coin, over LayerZero and Hyperlane.
- You launch it from your own Solana wallet with Launch on Solana, first. [Launch from your own wallet →](https://www.pangea.trade/app/docs/v4#v4-self-launch)
- Launch buys on Solana go in the launch itself, up to 32; the Bundle Kit uses one Jito bundle. [Launch buys and the Bundle Kit →](https://www.pangea.trade/app/docs/v4#v4-launch-kit)
- A Hyperlane message from Solana waits until its block is finalized, about 13 seconds. From Solana you pay the transport fee in SOL.

## Security and audits

- Every mint needs two signer sets: Pangea's and one Pangea does not control.
- Tokens are burned on the chain they leave before they are minted where they arrive, a message lands only over the transport it was sent on, at most once, and an arrival is never credited more than the amount sent.
- Liquidity is locked on every chain: no contract function or program instruction withdraws it.
- The admin can pause new launches and new chain openings at once. A coin already open is never touched: trading, bridging, claims and withdrawals go on.

### Audits

- v3 was audited in full.
- v4 was reviewed part by part in November 2026: each part's code read line by line, every finding rated Critical, High, Medium, Low or Info. A later change to a part got one review of the changed code.
- Every High and Medium finding was fixed, with a test that fails before the fix and passes after it. Low and Info findings were accepted and logged.
- Reviewed by: Pangea's own review, with one or more reviewers for each part. Outside audit firm: —.

| Part | Critical | High | Medium | Status |
| --- | --- | --- | --- | --- |
| EVM bridge, coin and price-gap engine | 0 | 0 | 1 | Fixed |
| EVM launch, settlement and fee split | 0 | 0 | 2 | Fixed |
| EVM LayerZero and Hyperlane connections | 0 | 2 | 7 | — |
| Solana bridge | 0 | 0 | 2 | Fixed |
| Solana launcher and fee split | 0 | 0 | 2 | — |
| Hyperlane signers and message delivery | 0 | 0 | 2 | Fixed |
| Pangea's services (delivery, keepers, payouts) | 0 | 0 | 5 | Fixed |
| Arbitrage bot | 0 | 0 | 2 | Fixed |
| Go-live and deployment scripts | 0 | 0 | 6 | Fixed |
| Web: launch pages | 0 | 5 | 11 | — |
| Web: API | 0 | 0 | 8 | — |
| SDK and docs | 0 | 2 | 11 | — |

A dash is a status the review records do not state yet.

- One known limit is accepted and stated where it applies: [The signed gap price →](https://www.pangea.trade/app/docs/v4#v4-gap-price)

## What runs it

- The launch worker sends the platform launches.
- Pangea's LayerZero verifier and Hyperlane validators sign transfers, each after 1 block.
- The delivery bot lands arrivals, backing up LayerZero's executor after 20 seconds.
- The v4 watchdog raises any send that has not arrived after 15 minutes.
- The deviation keeper posts the bridge's cost figures; the fee sweep and the gas keeper collect and split the platform's fees.
- Holder payouts run every 5 minutes. [Equity share →](https://www.pangea.trade/app/docs/v4#v4-equity-share)
- Pangea's arbitrage bot keeps a v4 coin at one price across its open chains. Arbitrage is open to anyone.
- Every switch and setting: [v4 settings →](https://www.pangea.trade/app/docs/v4#v4-settings)

## The verified badge

- A verified coin shows a check mark on its Explore card and on its coin page.
- The list is set by Pangea's admin, by chain and contract address, never by name or ticker. A coin is added or removed at once.
- It covers v4 coins and the coins launched before, on all six chains.
- A coin without the mark is not flagged as bad: it simply has not been checked.

## One shared bridge per chain

A v4 coin is not its own bridge. Each chain has one shared Pangea bridge that carries every v4 coin. The coin's token is a plain token that only that bridge mints and burns, and every message names the coin it carries by its coin id.

- Routes, verifier settings and delivery are set once per chain pair, for all v4 coins together. A new v4 launch sends no route-opening transactions, and no one pays a one-time route setup on a v4 coin's first transfer.
- The coin id is fixed at launch from the coin's chain list, its transport list and the routes of each listed chain and transport. The bridge refuses a message for a chain or a transport outside those lists, and no setting added later reaches a coin launched before it.
- The bridge, its transport adapters and the tokens cannot be changed after they are set. No admin function can mint, burn or move anyone's tokens.
- A pause stops only new sends. A message already sent can always be received: credited, or held and later released or refunded.
- Peers are chain-neutral 32-byte ids and the message carries the amount in shared decimals and the recipient as 32 bytes, so a chain of another kind can be added later without new EVM contracts.

### What a message can carry

- A plain transfer: tokens you hold, burned here and credited there.
- A buy and bridge: cash in, the coin bought from its pool on this chain and sent in the same transaction.
- A creator role update: the current creator wallets, copied from the coin's home chain to its other open chains.
- An open authorisation: the home chain's permission for a named wallet to open one listed chain.
- A refund: a held transfer sent back to the sender's chain, credited in full.

### Held transfers and refunds

- An arrival is held, never lost, when its chain is not open yet, when it would credit less than the recipient's minimum, or when a buy and bridge waits for Pangea's delivery to land it at the price.
- Anyone may release a held transfer once it can be credited. The recipient can also accept one held below its minimum now, at the current credit.
- A held transfer can be refunded to the sender's chain, credited there in full; whoever asks pays the return fee. The recipient may ask any time. A transfer held below its minimum: also its original sender, after 1 day. A transfer held for a chain still not open: anyone, after 1 day. Once the coin is open on that chain, or while the hold waits for Pangea's delivery: only the recipient.

> **Note:** v3 coins keep their own bridges: [The bridge price-gap fee →](https://www.pangea.trade/app/docs/v3#v3-gap-fee)

## LayerZero and Hyperlane, both always

Every v4 coin uses both LayerZero and Hyperlane. Neither is a fallback for the other, and neither the creator nor the sender chooses between them: both are always on, on every route that has both. A route that touches Elysium has Hyperlane only, because LayerZero does not reach Elysium.

### What holds on both

- Supply stays exact: the tokens are burned on the source chain before anything is minted on the destination.
- A message is received only over the transport it was sent on, from that route's peer, and at most once.
- There is no mint cap per transport.
- A coin uses only the transports in its transport list, fixed at its launch: by default every transport all its chains have, LayerZero and Hyperlane today. A transport Pangea adds later is offered only to coins launched after it was added.
- The default is per route, set by the contracts themselves: LayerZero and Hyperlane on every route, and Hyperlane only on a route that touches Elysium, whatever the coin's home chain. The launch page shows the transports of each route; it does not ask for them.
- Elysium is opt-in per coin. Elysium has no LayerZero endpoint, so transfers to and from Elysium go over Hyperlane. A coin that lists Elysium keeps LayerZero and Hyperlane between its other chains (for example Ethereum and Base); only its Elysium routes are Hyperlane only. Elysium messages are attested by Pangea's validator alone. The launch page says so before you pick Elysium.

### Who checks a message

- Every mint needs two signer sets, Pangea's and one Pangea does not control. Two, not more, for speed; a route is set once, so no third set can be added to it later.
- LayerZero: Pangea's verifier and LayerZero Labs' verifier.
- Hyperlane: Pangea's own validators and Hyperlane's validators: the Abacus Works set on Ethereum, Base and BNB Chain, the default set on Robinhood Chain and Solana. Pangea's set can never be removed from a route; the Hyperlane side can be rotated, as verifier sets are on LayerZero.
- A coin that uses both transports is as strong as the weaker of the two: either can deliver it.

### How long each waits

Every wait Pangea runs is 1 block on every chain: its LayerZero verifier and Hyperlane validators, its Hyperlane message delivery, its delivery, its bridge indexer and the settle of a sponsored launch. That is the fastest setting, and Pangea accepts the reorg risk that comes with it. The one exception is a Hyperlane message sent from Solana: Hyperlane message delivery reads Solana only once a block is finalized, so that message waits until the block is finalized. A Hyperlane message also waits for Hyperlane's set (except from Elysium, where Pangea's validator signs alone), which keeps its own wait, so on some chains it is slower:

| From | Pangea's LayerZero verifier waits | Pangea's Hyperlane validator waits |
| --- | --- | --- |
| Ethereum | 1 block | 1 block |
| Base | 1 block | 1 block |
| BNB Chain | 1 block | 1 block |
| Robinhood Chain | 1 block | 1 block |
| Elysium | no LayerZero | 1 block (Pangea's validator alone) |
| Solana | 1 block | until the block is finalized, about 13 seconds |

> **Note:** A transfer is followed on the explorer of its transport: LayerZero Scan or the Hyperlane Explorer. The Bridge page links each transfer to the right one.

### The fee you pay: fee up to X, unused part refunded

- Every paid send (the Bridge page, the SDK and Pangea's bots) pays the quoted transport and delivery fee plus a buffer, so a cost figure raised between the quote and the landing cannot make the send fail. The card says "fee up to X, unused part refunded": X is the most it can take, and the unused part is refunded to the sender in the same transaction (LayerZero and Hyperlane both refund what the fee did not use). From Solana the card says "Transport fee up to X SOL": only what is charged is paid, the rest stays in your wallet.
- The buffer is the larger of 15% and the keeper's max step: 50% now. The max step is the largest raise the deviation keeper may post for one cost figure in one post; a bigger move is posted in several steps, each at most the max step, so one buffer always covers one post.
- The max step is one config value, `PANGEA_KEEPER_MAX_STEP_BPS`, read by the keeper, the web, the SDK and the bots alike: a whole number of basis points from 500 to 5,000. Unset, it is the default 5,000 (50%); here it is 5,000 (50%). An invalid value is never used: the keeper refuses to start on it.

### Sending from Solana

From Solana a v4 coin is bridged on the Bridge page too: Quote shows the cost read from the chain, transport and delivery, and Bridge then signs exactly the quoted transaction.

### Cheapest chain: a sale through Solana

A Cheapest chain sale through Solana sends your coins to Pangea's sale program on Solana with your sale's order, and the app offers it only while that program is set up to receive it. Send to the sale composer only through the app or the SDK: a hand-made transfer to it carries no order and may not be recoverable.

## The signed gap price

A v4 coin's price-gap fee is priced at bridge time only. Launching needs no price and has no listing step.

- First choice: one price signed by Pangea's server for the pair of chains of the transfer, read from the pool the aggregators route the coin through on each chain, at that pool's live price. It is conservative: the source chain's lowest price of the last 30 seconds and the destination's highest. It is valid for 30 seconds, 60 on Ethereum, and the contract checks the signature and that it is fresh.
- It is public, with no key: `GET /api/gap-price/<coin id or token>?src=<chain>&dst=<chain>` returns it, so a transfer sent without this site carries it too, passed unchanged in the call (on Solana, as a signature check before the send). An answer of 503 means no signed price: send without one.
- The pool and its price are asked of the aggregators: on the EVM chains Uniswap, KyberSwap, 0x and Relay, on Solana Jupiter and Relay. Relay on Solana counts toward the price only; the pool comes from Jupiter, and a Relay outage only drops it from the count.
- Fallback, with no signed price: the contract reads the coin's official pool on that chain, the pool it was launched or opened on. Readers exist for Uniswap v2, v3 and v4 (any hook), Aerodrome and Slipstream, PancakeSwap v3 and v4 on the EVM chains, and Raydium, Orca and Meteora on Solana, with the Sanctum stake-pool rate for liquid-staking tokens. The reader set is extendable: the platform can add new pool types without a new factory, token or bridge.
- Neither can price it: the transfer goes through with no gap fee. A missing price never blocks a bridge. The one wait: on Solana the fallback may first ask for a fresh price record, a call anyone may send (`record_price`) that takes seconds; the Bridge page sends it for you.
- A price supplied by the sender is never used. Only a signature from one of the platform's price keys counts, and a signed price can only lower what is credited, never mint more than was sent.
- A Solana liquid-staking token (a Sanctum or SPL stake pool token) is priced on chain at its stake pool's rate, the SOL the pool holds per token, times the price of SOL. The rate is used only when the pool was updated in the current or the previous epoch.

### A known limit, accepted

On a quiet coin, with no bridge activity for 30 seconds, someone holding a large bag can sell, have a price recorded, buy back, wait for the honest record to age out and then dump, so that one arrival is credited more than an honest one: measured about 8 percent more on a 20,000-coin transfer at a 12.5 percent gap, on EVM and on Solana alike. What is credited is never more than what was sent: the cost is gap fee that should have been burned, never a mint. The attacker must sell and hold for 30 to 45 seconds at their own risk, and Pangea accepts this limit. Pangea's own services keep the price records fresh, which shortens the quiet windows.

## How pricing works

A coin on several chains is one coin. Its price on each chain comes from that chain's own pool, and moving it between chains never creates value out of a price gap.

### What you set

- The chains it lists, and which of them open now. A chain left closed can be opened later by anyone, at the price they pick, with liquidity of their own if they want.
- The opening price on each chain you open, and an optional first buy of your own.
- How it moves between chains: LayerZero, Hyperlane or both. A chain that has only one of them, such as Elysium, makes the coin use that one.
- Chains and transports are set for good at launch. Nobody can add a chain to the coin later.

### What keeps one price

- Buying on one chain and moving it to another is credited at the price you actually paid, plus a small margin and the move's real cost. The margin is smaller where the destination pool is deeper.
- Moving coins you already hold is priced at the lowest price of the last half minute, so a pump right before the move gains nothing.
- Anything a move would credit above that price is burned, never created. That is what holds the chains together without an oracle.
- A move waits, rather than landing at a guessed price, when a pool cannot be read, or when it would land below the least you asked for.

### What you pay

- Opening chains yourself: no launch fee. You pay each chain's network cost from your own wallet.
- Letting us open them: one launch fee, shown before you pay, in the coin you pay with. It covers the networks, including Solana's.
- Trades pay the coin's trading fee, shared between you and Pangea as the launch form shows.

> **Note:** The exact rule, with every constant and example: [The signed gap price →](https://www.pangea.trade/app/docs/v4#v4-gap-price)

## v4 contracts and ABIs

### Six chains

A v4 coin lives on up to six chains: Robinhood Chain, Base, Ethereum, BNB Chain (BSC), Solana and Elysium. The four EVM chains and Solana carry LayerZero and Hyperlane; Elysium (chain id 99901, gas in HYPE) carries Hyperlane only.

| Chain | Kind | Chain id | Transports |
| --- | --- | --- | --- |
| `robinhood` Robinhood Chain | EVM | 4663 | LayerZero and Hyperlane |
| `base` Base | EVM | 8453 | LayerZero and Hyperlane |
| `ethereum` Ethereum | EVM | 1 | LayerZero and Hyperlane |
| `bsc` BNB Chain (BSC) | EVM | 56 | LayerZero and Hyperlane |
| `solana` Solana | Solana | - | LayerZero and Hyperlane |
| `elysium` Elysium | EVM | 99901 | Hyperlane only |

### EVM

- `PangeaBridgeV4`: the one shared bridge on each EVM chain, the same for every v4 coin of its set and not replaceable ([one shared bridge per chain →](https://www.pangea.trade/app/docs/v4#v4-shared-bridge)).
- Two sets of these contracts are live side by side: `v4a`, the first v4 deploy, and `v4b`, the full redeploy and the current set (new addresses on every EVM chain, the same address on each chain, and a new Solana bridge program). New coins launch on v4b. v4a holds the coins launched before 2026-11-12: each stays on v4a for good and is served exactly as before. A coin's set is its own: the site, the SDK and every Pangea service read it per coin, and a coin never moves set. The addresses of both sets are in the tables below and at `/api/v4/contracts` (`sets.v4b`).
- `PangeaCoinV4`: a v4 coin's token on that chain, a plain token that only the bridge mints and burns.
- `LzAdapterV4` and `HyperlaneAdapterV4`: the bridge's two transports, LayerZero and Hyperlane ([LayerZero or Hyperlane →](https://www.pangea.trade/app/docs/v4#v4-transports)).
- `LaunchCoreV4`: opens a coin on its chain (the launch, a chain opened later) and holds that chain's tokenomics switch.
- `GapOracleV4` and `GapPriceSigV4`: the gap price, signed or read from the coin's official pool ([the signed gap price →](https://www.pangea.trade/app/docs/v4#v4-gap-price)).

### Solana

- `pangea_bridge_v4` (`8K7DTNE4bqPwZiueTPn8wD3NULAt3PxCMPA9nkFc2LK3` for set v4b, the current one (its LayerZero store `73FxfL4gYMYnWXPvmdi9ARL95qxDq8pdR3Yv8kNiShP2`); `Eeb1VmcMeYEfjaDsnbqdnVK4NKvwTafm2EKfx3hJVF6N` for set v4a (coins launched before 2026-11-12)): the Solana bridge program the v4 coins of its set share, replacing the retired per-version `pangea_oft_v4`. It holds each v4 coin's record (the OFT store layout plus the bridge tail: coin id, home chain, opened chains, creator role), its mint authority, its GapConfigV4 (USD anchors, venue readers, the price signers, the fallback reader program) and the per-pool price records, and it carries both LayerZero and Hyperlane. Instructions: `open_coin` (through the launcher), `send`, `buy_and_send`, `record_price`, `lz_receive`, `hl_handle`, `release_held`, `refund_held`, `quote_send`, `quote_oft`, `replace_quote_route` (anyone, once a coin's price path stops reading), the creator role (`transfer_creator`, `accept_creator`, `renounce_creator`, `push_creator`, `authorize_open`); admin (parameters only, no pair list): `set_gap_params`, `set_gap_coin`. A coin may open with no price path at all (any quote, signed price only).
- `pangea_launcher` (`EnLq33Zqv6j15km7zxBXgwn8w6TiUxKQSeRosBFK8qZP`, the one launcher of both sets): creates the mint (Token-2022), the Meteora DAMM v2 pool with its permanently locked position, and the coin's record in `pangea_bridge_v4`, then hands the mint authority to the bridge. It can stop launching a version at once. After a launch it only claims the pool's fees, pays a list's bought tokens to their named wallets, and burns what a closed list leaves in its holder.
- Events: `OFTSent` and `OFTReceived` as v3, plus `GapSentV4` (the message fields and, for a buy, the measured swap), `GapReceivedV4` (the rule applied, credited and withheld, prices, margin, fee, cover) and `GapPriceRecorded`.
- One shared address lookup table holds the constant accounts, so a buy-and-send fits one transaction.

### Full ABIs and IDLs

The full ABI of every v4 EVM contract and the IDL of every v4 Solana program, unchanged from the frozen build (EVM build `3e674ac2b56198480ea5dea8dc537b9a1b6fb9a5`) and the pinned program sources. Everything in one JSON file: `/api/v4/abi`; one contract or program: `/api/v4/abi?id=<id>`; the list with each file's sha256: `/api/v4/abi?manifest=1`. The same files ship in the v4 SDK as `V4_ABIS` and `V4_IDLS`. Addresses are per chain and per launch: a coin’s own contracts are read from its launch.

| EVM contract | What it is for | Addresses it applies to | Download |
| --- | --- | --- | --- |
| `PangeaBridgeV4` | The shared v4 bridge, one per chain: send, buyAndSend, credit, held release and refund, compose; its fallback runs the creator-role module (bridge-role-v4) by delegatecall. | v4b (current): `0x52a4b40fa6d72f44fbAADb0e38cBc087b3Af0880` on every chain. v4a (coins launched before 2026-11-12): `0x61713F12FfeF8774cF691a73707f41AD24666543` on every chain.  | `/api/v4/abi?id=pangea-bridge-v4` |
| `BridgeRoleV4` | The bridge's creator-role module (transfer, renounce, accept, push the creator role; open rights), run by the bridge by delegatecall: call its functions at the bridge's address. | v4b (current): `0xA38BA9F1a55e943aB75Af651176A8cF191D95A98` on every chain. v4a (coins launched before 2026-11-12): `0xA57e5Ec5239D3fA1FF65A6b1A3026Bae57DA73b8` on every chain.  | `/api/v4/abi?id=bridge-role-v4` |
| `BridgeGapV4` | The bridge's gap price module: verifies a signed gap price, else reads the fallback readers through the oracle. | v4b (current): `0x161925a08B5DA27E0eF56F8F5aeac7CE207d62C7` on every chain. v4a (coins launched before 2026-11-12): `0xf5a525C44c7C5C26204cf235af5aE40c3D13e820` on every chain.  | `/api/v4/abi?id=bridge-gap-v4` |
| `BridgeBuyerV4` | The Uniswap v4 buy helper the bridge and the launch core each deploy for buy-and-bridge and launch buys. | v4b (current): 2 addresses, per chain in the tables below. v4a (coins launched before 2026-11-12): 2 addresses, per chain in the tables below.  | `/api/v4/abi?id=bridge-buyer-v4` |
| `BridgeRowsV4` | The bridge's rowsHash view (T17-SIZE, EIP-170): stateless, reads its creating bridge's rows; PangeaBridgeV4.rowsHash forwards here. | v4b (current): `0x5F49094337cB8b2D90e4BB231A0aa43c3d7f7bbf` on every chain. v4a (coins launched before 2026-11-12): `0xaC375ea0D628E9834c3D0f3C2fe774531Ec3CbD1` on every chain.  | `/api/v4/abi?id=bridge-rows-v4` |
| `LzAdapterV4` | The LayerZero transport adapter (transport id 1): sends and receives the bridge's 0x05 messages over LayerZero. | v4b (current): `0x2D6333E483098CB8858D85EEC03F891ccBeFF486` on every chain. v4a (coins launched before 2026-11-12): `0x06f2e6167C1df13C3c6d008A5D7B236084A21783` on every chain.  | `/api/v4/abi?id=lz-adapter-v4` |
| `HyperlaneAdapterV4` | The Hyperlane transport adapter (transport id 2): dispatches through the mailbox and pins each origin's ISM. | v4b (current): `0x0dC0deB0C095b871aCAF108b454177e5CF65EbF5` on every chain. v4a (coins launched before 2026-11-12): `0x87cDAE05784A21DB30d1652757A62B23297459ae` on every chain.  | `/api/v4/abi?id=hyperlane-adapter-v4` |
| `LaunchCoreV4` | The v4 launch core, one per chain: opens a coin's leg (self, sponsored, open-later), launch buys, the fee splitter, tokenomics on/off. | v4b (current): `0xaA61764BD44df5468CaaE856232Ce9B711512449` on every chain. v4a (coins launched before 2026-11-12): `0x9A8b8d44BA267B2Be3c5dc8A8CAE173870458e9b` on every chain.  | `/api/v4/abi?id=launch-core-v4` |
| `OpenerLiquidityV4` | The opener's own liquidity helper (LaunchCoreV4.ownLiquidity): adds the opener's position on the coin's official pool in openWithLiquidity (LIQ-EVM). | v4b (current): `0x7a65c97f1Ce593aAb0758f6B00c9ea6FFcf5Dbfe` on every chain. v4a (coins launched before 2026-11-12): `0x81aF314f4387b4d5d75cd8C5E6826faDDF22A5e3` on every chain.  | `/api/v4/abi?id=opener-liquidity-v4` |
| `PangeaFeeHookV4` | The v4 official pools' Uniswap v4 hook (FEEFREE-EVM): the live PangeaFeeHook v1 port; LaunchCoreV4's launch buyer trades fee-free, every other swap pays. | v4b (current): `0x8e1Bf182a2a1FEdF9850379127D4535F18EA68cc` on every chain. v4a (coins launched before 2026-11-12): `0x2243bEc6903F32Fe13e76C9502Bc08581A5EE8cC` on every chain.  | `/api/v4/abi?id=pangea-fee-hook-v4` |
| `LaunchSettleV4` | The launch core's settle / tokenomics-switch helper (LaunchCoreV4.switchHelper). | v4b (current): `0xA44cb48F042c29676ffD0659500711aA6B9aE953` on every chain. v4a (coins launched before 2026-11-12): `0xe715adA78D8883C1B094846400901f998c049b82` on every chain.  | `/api/v4/abi?id=launch-settle-v4` |
| `CoinDeployerV4` | Deploys each coin's token by CREATE2 (salt = coinId); only the bridge and the core call it. | v4b (current): `0x43049AbeEcCc6f321774439B636e88f669024d9f` on every chain. v4a (coins launched before 2026-11-12): `0xfF5af80C21318256A89e43975f5c91Ef3A5Dc22a` on every chain.  | `/api/v4/abi?id=coin-deployer-v4` |
| `CoinCodeRegistryV4` | UPGRADEABLE COIN CREATION: the immutable, append-only list of coin creation codes; a coin's code version follows its createdAt; the bridge registers only a genuine coin (genuine()). | v4b (current): `0x68415e3599F5551f59B9dD3855Bea39732ae8A00` on every chain. v4a (coins launched before 2026-11-12): `0xFcd5370F0b410CA1efab7E206CA94769b45CB1c1` on every chain.  | `/api/v4/abi?id=coin-code-registry-v4` |
| `SupplyReporter` | SUPPLY MIRROR: the one address every v4 coin takes reportSupply from (report / reportMany by an updater key; the admin sets updaters). | v4b (current): `0xeA1cFDF7440C8cBde17665c80b9b4436F58f7d87` on every chain. v4a (coins launched before 2026-11-12): `0xdA13E67C8aDbf4D9F86820dBeC829D4733b00f55` on every chain.  | `/api/v4/abi?id=supply-reporter-v4` |
| `PangeaDeployerV4` | The CREATE2 deployer that gives the v4 core contracts one address on every EVM chain. | v4b (current): `0x582613FDCE3B9cA8e439d8811E1522AAa0E3FdDC` on every chain. v4a (coins launched before 2026-11-12): `0x2BcfBfDbeEb4EB497Ee35dADDB7F88727219Fa85` on every chain.  | `/api/v4/abi?id=pangea-deployer-v4` |
| `PangeaCoinV4` | The coin itself, one per coin per chain: an ERC-20 minted and burned only by the shared bridge. One per coin. | Every coin's own token (its launch names it), in both sets. | `/api/v4/abi?id=pangea-coin-v4` |
| `FeeSplitterV4` | One per coin per chain: splits the coin's trading fee between the platform and the creator. One per coin. | Every coin's own token (its launch names it), in both sets. | `/api/v4/abi?id=fee-splitter-v4` |
| `FullLaunchSettlerV4` | The full-launch fee settler at the chain's LaunchFeeCollector. | v4b (current): `0x8baE47b994435a24fa6750D9359e11eF22c942CE` on every chain. v4a (coins launched before 2026-11-12): `0x077AF6B5c66aA43e3Eb67ab542590efe05D955f7` on every chain.  | `/api/v4/abi?id=full-launch-settler-v4` |
| `GapOracleV4` | The v4 oracle / registry: per-chain gap settings, the fallback price readers and the signer set. | v4b (current): `0xF755863A6C8786923472AAC7b6Ff1A01e1c3Ed97` on every chain. v4a (coins launched before 2026-11-12): `0x7928e386Aa4E5e7A781A24B1a6cC1a14a5cCcfA7` on every chain.  | `/api/v4/abi?id=gap-oracle-v4` |
| `AssetUsdReaderV4` | Reads a quote asset's USD price (the chain's wrapped native and its feeds). | v4b (current): 5 addresses, per chain in the tables below. v4a (coins launched before 2026-11-12): 5 addresses, per chain in the tables below.  | `/api/v4/abi?id=asset-usd-reader-v4` |
| `UniV4PoolReaderV4` | The fallback reader: a coin's Uniswap v4 pool price in USD along its quote path. | v4b (current): 5 addresses, per chain in the tables below. v4a (coins launched before 2026-11-12): 5 addresses, per chain in the tables below.  | `/api/v4/abi?id=uni-v4-pool-reader-v4` |
| `TokenomicsFactoryV24F1` | Makes a coin's tokenomics vault (v2.4 calls, holder floor 1 bps, per-block impact cap) at launch or when switched on; the factory the v4 launch core pins (HOLDER-MIN-1BPS, TK-COOLDOWN). | v4b (current): `0xB4AD7764D6257636479ec70511Aa9dfEFb2441b0` on every chain. v4a (coins launched before 2026-11-12): `0x5d2CDA40f29E0bFFd6f63D8Cb6b0dC7459654eB9` on every chain.  | `/api/v4/abi?id=tokenomics-factory-v24f1` |
| `TokenomicsVaultV24F1` | The tokenomics vault implementation (V24F1): payouts, holder rewards, burns; its fallback runs the two modules below. | - | `/api/v4/abi?id=tokenomics-vault-v24f1` |
| `TokenomicsVaultV24ModuleF1` | The vault's main module, run by delegatecall: call its functions at the vault's address. | - | `/api/v4/abi?id=tokenomics-vault-v24-module-f1` |
| `TokenomicsVaultV24BurnModuleF1` | The vault's burn module, run by delegatecall: call its functions at the vault's address. | - | `/api/v4/abi?id=tokenomics-vault-v24-burn-module-f1` |
| `SaleComposerV4` | The sale composer (CSW-L3): runs a coin sale on the destination as the bridge's compose step. | v4b (current): 4 addresses, per chain in the tables below. v4a (coins launched before 2026-11-12): 5 addresses, per chain in the tables below.  | `/api/v4/abi?id=sale-composer-v4` |
| `CheapestComposerV4` | The cheapest-route composer (CSW-L3): buys through the cheapest listed Uniswap v4 pair as the bridge's compose step. | v4b (current): 4 addresses, per chain in the tables below. v4a (coins launched before 2026-11-12): 5 addresses, per chain in the tables below.  | `/api/v4/abi?id=cheapest-composer-v4` |
| `StaticAggregationIsm` | The EVM ISM HyperlaneAdapterV4.setIsm pins per origin: a 2-of-2 aggregation of the Hyperlane-side multisig and our 1-of-1, made by the pinned StaticAggregationIsmFactory. | - | `/api/v4/abi?id=hl-static-aggregation-ism` |
| `StaticMessageIdMultisigIsm` | The two leaves of each origin's aggregation ISM (Hyperlane-side t-of-n and our 1-of-1), made by the pinned StaticMessageIdMultisigIsmFactory. | - | `/api/v4/abi?id=hl-static-message-id-multisig-ism` |
| `InterchainGasPaymaster` | The IGP (chains.json transports.hyperlane.ourIgp / hyperlaneIgp): pays for Hyperlane message delivery, for each message. | v4b (current): 3 addresses, per chain in the tables below. v4a (coins launched before 2026-11-12): 3 addresses, per chain in the tables below.  | `/api/v4/abi?id=hl-interchain-gas-paymaster` |
| `StorageGasOracle` | The IGP's gas oracle (remote gas price and token exchange rate per domain). | v4b (current): 2 addresses, per chain in the tables below. v4a (coins launched before 2026-11-12): 2 addresses, per chain in the tables below.  | `/api/v4/abi?id=hl-storage-gas-oracle` |

| Solana program | Program id and what it is for | Download |
| --- | --- | --- |
| `pangea_bridge_v4` | `8K7DTNE4bqPwZiueTPn8wD3NULAt3PxCMPA9nkFc2LK3` (v4b, current) and `Eeb1VmcMeYEfjaDsnbqdnVK4NKvwTafm2EKfx3hJVF6N` (v4a, coins launched before 2026-11-12): The shared v4 bridge on Solana: coins, send and buy-and-send over LayerZero or Hyperlane, held release and refund, creator role. | `/api/v4/abi?id=pangea-bridge-v4&kind=idl` `/idl/pangea-bridge-v4-v4b.json` `/idl/pangea-bridge-v4-v4a.json` |
| `pangea_ism_v4` | `Fayi3vmEvDCNXW5Cc1oDdcCwpadx71Z14z9gA4ygStov` (both sets): The Hyperlane ISM for Sealevel: per origin a frozen 2-of-2 aggregation of the Hyperlane-side set and our 1-of-1 (native program; Hyperlane ISM interface + our admin instructions (instant, with alerts)). | `/api/v4/abi?id=pangea-ism-v4&kind=idl` |
| `pangea_readers_v4` | `7BeRQpptTjniVtngbQBBBdTARua9MFXCbF1ek3FPP6G4` (both sets): The v4 price readers on Solana (pool and quote-route USD reads for the gap price). | `/api/v4/abi?id=pangea-readers-v4&kind=idl` `/idl/pangea-readers-v4.json` |
| `pangea_launcher` | `EnLq33Zqv6j15km7zxBXgwn8w6TiUxKQSeRosBFK8qZP` (both sets): The launcher: Solana launches, open-later, launch buys and tokenomics for v4 coins. | `/api/v4/abi?id=pangea-launcher&kind=idl` `/idl/pangea-launcher-v4.json` |

### Contract addresses, set v4b (current)

Every v4 address the go-live deploy recorded, per chain (`2026-11-12T21:30:51.709Z`, also at `/api/v4/contracts`).

### robinhood (chain id 4663)

| Contract | Address | ABI or IDL |
| --- | --- | --- |
| `GapOracleV4` oracle | `0xF755863A6C8786923472AAC7b6Ff1A01e1c3Ed97` | `/api/v4/abi?id=gap-oracle-v4` |
| `BridgeGapV4` gapModule | `0x161925a08B5DA27E0eF56F8F5aeac7CE207d62C7` | `/api/v4/abi?id=bridge-gap-v4` |
| `BridgeRoleV4` roleModule | `0xA38BA9F1a55e943aB75Af651176A8cF191D95A98` | `/api/v4/abi?id=bridge-role-v4` |
| `PangeaBridgeV4` bridge | `0x52a4b40fa6d72f44fbAADb0e38cBc087b3Af0880` | `/api/v4/abi?id=pangea-bridge-v4` |
| `SupplyReporter` supplyReporter | `0xeA1cFDF7440C8cBde17665c80b9b4436F58f7d87` | `/api/v4/abi?id=supply-reporter-v4` |
| `CoinDeployerV4Impl` coinDeployerImpl | `0x64e7B17475e79381ab79549f56Ca859Bd87bA811` | - |
| `ERC1967Proxy(CoinDeployerV4)` coinDeployer | `0x43049AbeEcCc6f321774439B636e88f669024d9f` | - |
| `CoinCodeRegistryV4` codeRegistry | `0x68415e3599F5551f59B9dD3855Bea39732ae8A00` | `/api/v4/abi?id=coin-code-registry-v4` |
| `PangeaFeeHookV4` feeHook | `0x8e1Bf182a2a1FEdF9850379127D4535F18EA68cc` | `/api/v4/abi?id=pangea-fee-hook-v4` |
| `TokenomicsFactoryV24F1(v4)` v4TokenomicsFactory | `0xB4AD7764D6257636479ec70511Aa9dfEFb2441b0` | - |
| `LaunchCoreV4Impl` coreImpl | `0x801C3677Ed6162062633cD74cAFD93c126182857` | - |
| `ERC1967Proxy(LaunchCoreV4)` core | `0xaA61764BD44df5468CaaE856232Ce9B711512449` | - |
| `LzAdapterV4` lzAdapter | `0x2D6333E483098CB8858D85EEC03F891ccBeFF486` | `/api/v4/abi?id=lz-adapter-v4` |
| `HyperlaneAdapterV4` hyperlaneAdapter | `0x0dC0deB0C095b871aCAF108b454177e5CF65EbF5` | `/api/v4/abi?id=hyperlane-adapter-v4` |
| `FullLaunchSettlerV4` settler | `0x8baE47b994435a24fa6750D9359e11eF22c942CE` | `/api/v4/abi?id=full-launch-settler-v4` |
| `PangeaDeployerV4` deployer | `0x582613FDCE3B9cA8e439d8811E1522AAa0E3FdDC` | `/api/v4/abi?id=pangea-deployer-v4` |
| `BridgeBuyerV4(bridge)` bridgeBuyer | `0x4E7cdA88D44A97daaCe885B0E6f2086AB555Ed65` | - |
| `BridgeRowsV4(bridge)` BridgeRowsV4_bridge | `0x5F49094337cB8b2D90e4BB231A0aa43c3d7f7bbf` | - |
| `BridgeBuyerV4(core)` coreBuyer | `0x8414D1B0aE32ee2e08AbcDeA8855e30a181a4C92` | - |
| `LaunchSettleV4(core)` launchSettle | `0xA44cb48F042c29676ffD0659500711aA6B9aE953` | - |
| `CoreInitV4(core)` coreInit | `0x6eE0a49386a123BD5AF492f97AD6384526D078A2` | - |
| `OpenerLiquidityV4(core)` ownLiquidity | `0x7a65c97f1Ce593aAb0758f6B00c9ea6FFcf5Dbfe` | - |
| `UniV4PoolReaderV4` poolReader | `0xEA9F73C936b7D486cFcA0d2Fc67188D919Ca83E8` | `/api/v4/abi?id=uni-v4-pool-reader-v4` |
| `AssetUsdReaderV4` assetUsdReader | `0xFFCD13acb40B5A70eE9277527f707A66174Ab5fa` | `/api/v4/abi?id=asset-usd-reader-v4` |
| `HyperlaneHook(aggregation{merkleTreeHook, ourIgp})` hyperlaneHook | `0xb24DF5777D831Bc747e5B217724fCbDd8C6566a1` | - |
| `ISM our leaf = solo ISM (origin 8453)` ISM_our_leaf_solo_ISM_origin_8453 | `0xD56C7f2A27BE17CeD275345E5065A5a2eF11F331` | - |
| `ISM our leaf = solo ISM (origin 1)` ISM_our_leaf_solo_ISM_origin_1 | `0x60BDd37e065B195C767887bb3916E84b7F107D73` | - |
| `ISM our leaf = solo ISM (origin 56)` ISM_our_leaf_solo_ISM_origin_56 | `0xEAB96b8FA2f121880dd23DDfE6A0131Ed7bEc04d` | - |
| `ISM our leaf = solo ISM (origin 99901)` ISM_our_leaf_solo_ISM_origin_99901 | `0xFFC513F541aD0f5038c98c4e0E8aD4C3cb790f3D` | - |
| `ISM our leaf = solo ISM (origin 1399811149)` ISM_our_leaf_solo_ISM_origin_1399811149 | `0x6B82C7cb70111Afe7DA4FceFe50670ABbBaB2175` | - |
| `SaleComposerV4` saleComposer | `0xcfBdB0969ec37c7D6fceD98130132b1B30D7c838` | `/api/v4/abi?id=sale-composer-v4` |
| `CheapestComposerV4` cheapestComposer | `0xD56900CB32FD12f9e484cF6f6593B058aB473127` | `/api/v4/abi?id=cheapest-composer-v4` |
| `InterchainGasPaymaster (our IGP, proxy)` igp | `0xe9a5dE28F83448BF4F421C43a23EfDb11DFbacc5` | - |
| `StorageGasOracle (our IGP's)` igpGasOracle | `0xEd8ad9fbBE8f300cc93F5b0628aC485d02A99D04` | - |
| `ProxyAdmin (our IGP's)` igpProxyAdmin | `0x74F79Ed7162cada04f20C9528F7439c59398D05F` | - |
| `InterchainGasPaymaster implementation` igpImplementation | `0x8172e99CE4385A44d506358132d89745D492d768` | - |
| `TokenomicsFactoryV24` tokenomicsFactory | `0x95f43B0D4c4144f2F5FfaC19a6fEAA8c67E41447` | - |
| `TokenomicsV24Implementation` tokenomicsImplementation | `0x484f5436aeaA8Da34Cf20010Ad6FA953fb147f76` | - |

### base (chain id 8453)

| Contract | Address | ABI or IDL |
| --- | --- | --- |
| `GapOracleV4` oracle | `0xF755863A6C8786923472AAC7b6Ff1A01e1c3Ed97` | `/api/v4/abi?id=gap-oracle-v4` |
| `BridgeGapV4` gapModule | `0x161925a08B5DA27E0eF56F8F5aeac7CE207d62C7` | `/api/v4/abi?id=bridge-gap-v4` |
| `BridgeRoleV4` roleModule | `0xA38BA9F1a55e943aB75Af651176A8cF191D95A98` | `/api/v4/abi?id=bridge-role-v4` |
| `PangeaBridgeV4` bridge | `0x52a4b40fa6d72f44fbAADb0e38cBc087b3Af0880` | `/api/v4/abi?id=pangea-bridge-v4` |
| `SupplyReporter` supplyReporter | `0xeA1cFDF7440C8cBde17665c80b9b4436F58f7d87` | `/api/v4/abi?id=supply-reporter-v4` |
| `CoinDeployerV4Impl` coinDeployerImpl | `0x64e7B17475e79381ab79549f56Ca859Bd87bA811` | - |
| `ERC1967Proxy(CoinDeployerV4)` coinDeployer | `0x43049AbeEcCc6f321774439B636e88f669024d9f` | - |
| `CoinCodeRegistryV4` codeRegistry | `0x68415e3599F5551f59B9dD3855Bea39732ae8A00` | `/api/v4/abi?id=coin-code-registry-v4` |
| `PangeaFeeHookV4` feeHook | `0x8e1Bf182a2a1FEdF9850379127D4535F18EA68cc` | `/api/v4/abi?id=pangea-fee-hook-v4` |
| `TokenomicsFactoryV24F1(v4)` v4TokenomicsFactory | `0xB4AD7764D6257636479ec70511Aa9dfEFb2441b0` | - |
| `LaunchCoreV4Impl` coreImpl | `0x801C3677Ed6162062633cD74cAFD93c126182857` | - |
| `ERC1967Proxy(LaunchCoreV4)` core | `0xaA61764BD44df5468CaaE856232Ce9B711512449` | - |
| `LzAdapterV4` lzAdapter | `0x2D6333E483098CB8858D85EEC03F891ccBeFF486` | `/api/v4/abi?id=lz-adapter-v4` |
| `HyperlaneAdapterV4` hyperlaneAdapter | `0x0dC0deB0C095b871aCAF108b454177e5CF65EbF5` | `/api/v4/abi?id=hyperlane-adapter-v4` |
| `FullLaunchSettlerV4` settler | `0x8baE47b994435a24fa6750D9359e11eF22c942CE` | `/api/v4/abi?id=full-launch-settler-v4` |
| `PangeaDeployerV4` deployer | `0x582613FDCE3B9cA8e439d8811E1522AAa0E3FdDC` | `/api/v4/abi?id=pangea-deployer-v4` |
| `BridgeBuyerV4(bridge)` bridgeBuyer | `0x4E7cdA88D44A97daaCe885B0E6f2086AB555Ed65` | - |
| `BridgeRowsV4(bridge)` BridgeRowsV4_bridge | `0x5F49094337cB8b2D90e4BB231A0aa43c3d7f7bbf` | - |
| `BridgeBuyerV4(core)` coreBuyer | `0x8414D1B0aE32ee2e08AbcDeA8855e30a181a4C92` | - |
| `LaunchSettleV4(core)` launchSettle | `0xA44cb48F042c29676ffD0659500711aA6B9aE953` | - |
| `CoreInitV4(core)` coreInit | `0x6eE0a49386a123BD5AF492f97AD6384526D078A2` | - |
| `OpenerLiquidityV4(core)` ownLiquidity | `0x7a65c97f1Ce593aAb0758f6B00c9ea6FFcf5Dbfe` | - |
| `UniV4PoolReaderV4` poolReader | `0x091871ec0bE9106F7BB00b69F1B5fea888dF3954` | `/api/v4/abi?id=uni-v4-pool-reader-v4` |
| `AssetUsdReaderV4` assetUsdReader | `0xaf14bA5DE326F453b4bD066F8A2745F3F56Cc20a` | `/api/v4/abi?id=asset-usd-reader-v4` |
| `HyperlaneHook(aggregation{merkleTreeHook, ourIgp})` hyperlaneHook | `0x4F96A81622B40f842a31CFfcF4917659e9381143` | - |
| `ISM our leaf = solo ISM (origin 4663)` ISM_our_leaf_solo_ISM_origin_4663 | `0x1831608C2439B9Afe62D8188BcC9164FCbce09E8` | - |
| `ISM our leaf = solo ISM (origin 1)` ISM_our_leaf_solo_ISM_origin_1 | `0x991669a68f37a7BBe8B538C9076Ab9C2A631cdA9` | - |
| `ISM our leaf = solo ISM (origin 56)` ISM_our_leaf_solo_ISM_origin_56 | `0x0640df153B52cb3ee5bEe8b1E57Ff43704000C49` | - |
| `ISM our leaf = solo ISM (origin 99901)` ISM_our_leaf_solo_ISM_origin_99901 | `0xD13416f524709129c24CC333D91755A6796E422e` | - |
| `ISM our leaf = solo ISM (origin 1399811149)` ISM_our_leaf_solo_ISM_origin_1399811149 | `0x7460349359a43275F896aa010669ef0804D62072` | - |
| `SaleComposerV4` saleComposer | `0x6B5a722aEc73377aF894C7cc67d0B5C7cd972531` | `/api/v4/abi?id=sale-composer-v4` |
| `CheapestComposerV4` cheapestComposer | `0x8b3C37c9Af3a91b39Ba8de3ba06CAD257d92Be5a` | `/api/v4/abi?id=cheapest-composer-v4` |
| `InterchainGasPaymaster (our IGP, proxy)` igp | `0xE4c4F91F023F55237Ed8CC046e2DCd2Fa02033Ff` | - |
| `StorageGasOracle (our IGP's)` igpGasOracle | `0x8172e99CE4385A44d506358132d89745D492d768` | - |
| `ProxyAdmin (our IGP's)` igpProxyAdmin | `0xEd8ad9fbBE8f300cc93F5b0628aC485d02A99D04` | - |
| `InterchainGasPaymaster implementation` igpImplementation | `0xe9a5dE28F83448BF4F421C43a23EfDb11DFbacc5` | - |
| `TokenomicsFactoryV24` tokenomicsFactory | `0x95f43B0D4c4144f2F5FfaC19a6fEAA8c67E41447` | - |
| `TokenomicsV24Implementation` tokenomicsImplementation | `0x484f5436aeaA8Da34Cf20010Ad6FA953fb147f76` | - |

### ethereum (chain id 1)

| Contract | Address | ABI or IDL |
| --- | --- | --- |
| `GapOracleV4` oracle | `0xF755863A6C8786923472AAC7b6Ff1A01e1c3Ed97` | `/api/v4/abi?id=gap-oracle-v4` |
| `BridgeGapV4` gapModule | `0x161925a08B5DA27E0eF56F8F5aeac7CE207d62C7` | `/api/v4/abi?id=bridge-gap-v4` |
| `BridgeRoleV4` roleModule | `0xA38BA9F1a55e943aB75Af651176A8cF191D95A98` | `/api/v4/abi?id=bridge-role-v4` |
| `PangeaBridgeV4` bridge | `0x52a4b40fa6d72f44fbAADb0e38cBc087b3Af0880` | `/api/v4/abi?id=pangea-bridge-v4` |
| `SupplyReporter` supplyReporter | `0xeA1cFDF7440C8cBde17665c80b9b4436F58f7d87` | `/api/v4/abi?id=supply-reporter-v4` |
| `CoinDeployerV4Impl` coinDeployerImpl | `0x64e7B17475e79381ab79549f56Ca859Bd87bA811` | - |
| `ERC1967Proxy(CoinDeployerV4)` coinDeployer | `0x43049AbeEcCc6f321774439B636e88f669024d9f` | - |
| `CoinCodeRegistryV4` codeRegistry | `0x68415e3599F5551f59B9dD3855Bea39732ae8A00` | `/api/v4/abi?id=coin-code-registry-v4` |
| `PangeaFeeHookV4` feeHook | `0x8e1Bf182a2a1FEdF9850379127D4535F18EA68cc` | `/api/v4/abi?id=pangea-fee-hook-v4` |
| `TokenomicsFactoryV24F1(v4)` v4TokenomicsFactory | `0xB4AD7764D6257636479ec70511Aa9dfEFb2441b0` | - |
| `LaunchCoreV4Impl` coreImpl | `0x801C3677Ed6162062633cD74cAFD93c126182857` | - |
| `ERC1967Proxy(LaunchCoreV4)` core | `0xaA61764BD44df5468CaaE856232Ce9B711512449` | - |
| `LzAdapterV4` lzAdapter | `0x2D6333E483098CB8858D85EEC03F891ccBeFF486` | `/api/v4/abi?id=lz-adapter-v4` |
| `HyperlaneAdapterV4` hyperlaneAdapter | `0x0dC0deB0C095b871aCAF108b454177e5CF65EbF5` | `/api/v4/abi?id=hyperlane-adapter-v4` |
| `FullLaunchSettlerV4` settler | `0x8baE47b994435a24fa6750D9359e11eF22c942CE` | `/api/v4/abi?id=full-launch-settler-v4` |
| `PangeaDeployerV4` deployer | `0x582613FDCE3B9cA8e439d8811E1522AAa0E3FdDC` | `/api/v4/abi?id=pangea-deployer-v4` |
| `BridgeBuyerV4(bridge)` bridgeBuyer | `0x4E7cdA88D44A97daaCe885B0E6f2086AB555Ed65` | - |
| `BridgeRowsV4(bridge)` BridgeRowsV4_bridge | `0x5F49094337cB8b2D90e4BB231A0aa43c3d7f7bbf` | - |
| `BridgeBuyerV4(core)` coreBuyer | `0x8414D1B0aE32ee2e08AbcDeA8855e30a181a4C92` | - |
| `LaunchSettleV4(core)` launchSettle | `0xA44cb48F042c29676ffD0659500711aA6B9aE953` | - |
| `CoreInitV4(core)` coreInit | `0x6eE0a49386a123BD5AF492f97AD6384526D078A2` | - |
| `OpenerLiquidityV4(core)` ownLiquidity | `0x7a65c97f1Ce593aAb0758f6B00c9ea6FFcf5Dbfe` | - |
| `UniV4PoolReaderV4` poolReader | `0xaf14bA5DE326F453b4bD066F8A2745F3F56Cc20a` | `/api/v4/abi?id=uni-v4-pool-reader-v4` |
| `AssetUsdReaderV4` assetUsdReader | `0xeec7ff9Ccd3d41Da50C7eD016ef83813fa132dE3` | `/api/v4/abi?id=asset-usd-reader-v4` |
| `HyperlaneHook(aggregation{merkleTreeHook, ourIgp})` hyperlaneHook | `0xbDB8F2DF45c6d3baf60d0E22615C007dC85dca16` | - |
| `ISM our leaf = solo ISM (origin 4663)` ISM_our_leaf_solo_ISM_origin_4663 | `0xf73c4ed8aA3deB69aa57f5A0564A4325c571775a` | - |
| `ISM our leaf = solo ISM (origin 8453)` ISM_our_leaf_solo_ISM_origin_8453 | `0x785C99a26a01EC9C812dD23Bd7400bB9dF6954e3` | - |
| `ISM our leaf = solo ISM (origin 56)` ISM_our_leaf_solo_ISM_origin_56 | `0x4860024A80D110524C907753784a5420Bf58437d` | - |
| `ISM our leaf = solo ISM (origin 99901)` ISM_our_leaf_solo_ISM_origin_99901 | `0x8B106a39CC6f87FC193999a8011F7D0aaCDf2558` | - |
| `ISM our leaf = solo ISM (origin 1399811149)` ISM_our_leaf_solo_ISM_origin_1399811149 | `0x1227e98D6B51EbaE3a725E51ACF416227966DB76` | - |
| `SaleComposerV4` saleComposer | `0x8b3C37c9Af3a91b39Ba8de3ba06CAD257d92Be5a` | `/api/v4/abi?id=sale-composer-v4` |
| `CheapestComposerV4` cheapestComposer | `0x7C433AE3b958946cFB2F1AB8c1fA6448878c00a5` | `/api/v4/abi?id=cheapest-composer-v4` |
| `InterchainGasPaymaster (our IGP, proxy)` igp | `0xe9a5dE28F83448BF4F421C43a23EfDb11DFbacc5` | - |
| `StorageGasOracle (our IGP's)` igpGasOracle | `0xEd8ad9fbBE8f300cc93F5b0628aC485d02A99D04` | - |
| `ProxyAdmin (our IGP's)` igpProxyAdmin | `0x74F79Ed7162cada04f20C9528F7439c59398D05F` | - |
| `InterchainGasPaymaster implementation` igpImplementation | `0x8172e99CE4385A44d506358132d89745D492d768` | - |
| `TokenomicsFactoryV24` tokenomicsFactory | `0x95f43B0D4c4144f2F5FfaC19a6fEAA8c67E41447` | - |
| `TokenomicsV24Implementation` tokenomicsImplementation | `0x484f5436aeaA8Da34Cf20010Ad6FA953fb147f76` | - |

### bsc (chain id 56)

| Contract | Address | ABI or IDL |
| --- | --- | --- |
| `GapOracleV4` oracle | `0xF755863A6C8786923472AAC7b6Ff1A01e1c3Ed97` | `/api/v4/abi?id=gap-oracle-v4` |
| `BridgeGapV4` gapModule | `0x161925a08B5DA27E0eF56F8F5aeac7CE207d62C7` | `/api/v4/abi?id=bridge-gap-v4` |
| `BridgeRoleV4` roleModule | `0xA38BA9F1a55e943aB75Af651176A8cF191D95A98` | `/api/v4/abi?id=bridge-role-v4` |
| `PangeaBridgeV4` bridge | `0x52a4b40fa6d72f44fbAADb0e38cBc087b3Af0880` | `/api/v4/abi?id=pangea-bridge-v4` |
| `SupplyReporter` supplyReporter | `0xeA1cFDF7440C8cBde17665c80b9b4436F58f7d87` | `/api/v4/abi?id=supply-reporter-v4` |
| `CoinDeployerV4Impl` coinDeployerImpl | `0x64e7B17475e79381ab79549f56Ca859Bd87bA811` | - |
| `ERC1967Proxy(CoinDeployerV4)` coinDeployer | `0x43049AbeEcCc6f321774439B636e88f669024d9f` | - |
| `CoinCodeRegistryV4` codeRegistry | `0x68415e3599F5551f59B9dD3855Bea39732ae8A00` | `/api/v4/abi?id=coin-code-registry-v4` |
| `PangeaFeeHookV4` feeHook | `0x8e1Bf182a2a1FEdF9850379127D4535F18EA68cc` | `/api/v4/abi?id=pangea-fee-hook-v4` |
| `TokenomicsFactoryV24F1(v4)` v4TokenomicsFactory | `0xB4AD7764D6257636479ec70511Aa9dfEFb2441b0` | - |
| `LaunchCoreV4Impl` coreImpl | `0x801C3677Ed6162062633cD74cAFD93c126182857` | - |
| `ERC1967Proxy(LaunchCoreV4)` core | `0xaA61764BD44df5468CaaE856232Ce9B711512449` | - |
| `LzAdapterV4` lzAdapter | `0x2D6333E483098CB8858D85EEC03F891ccBeFF486` | `/api/v4/abi?id=lz-adapter-v4` |
| `HyperlaneAdapterV4` hyperlaneAdapter | `0x0dC0deB0C095b871aCAF108b454177e5CF65EbF5` | `/api/v4/abi?id=hyperlane-adapter-v4` |
| `FullLaunchSettlerV4` settler | `0x8baE47b994435a24fa6750D9359e11eF22c942CE` | `/api/v4/abi?id=full-launch-settler-v4` |
| `PangeaDeployerV4` deployer | `0x582613FDCE3B9cA8e439d8811E1522AAa0E3FdDC` | `/api/v4/abi?id=pangea-deployer-v4` |
| `BridgeBuyerV4(bridge)` bridgeBuyer | `0x4E7cdA88D44A97daaCe885B0E6f2086AB555Ed65` | - |
| `BridgeRowsV4(bridge)` BridgeRowsV4_bridge | `0x5F49094337cB8b2D90e4BB231A0aa43c3d7f7bbf` | - |
| `BridgeBuyerV4(core)` coreBuyer | `0x8414D1B0aE32ee2e08AbcDeA8855e30a181a4C92` | - |
| `LaunchSettleV4(core)` launchSettle | `0xA44cb48F042c29676ffD0659500711aA6B9aE953` | - |
| `CoreInitV4(core)` coreInit | `0x6eE0a49386a123BD5AF492f97AD6384526D078A2` | - |
| `OpenerLiquidityV4(core)` ownLiquidity | `0x7a65c97f1Ce593aAb0758f6B00c9ea6FFcf5Dbfe` | - |
| `UniV4PoolReaderV4` poolReader | `0xb00c7328BeDC137375F359271b3DE25249F8C2B5` | `/api/v4/abi?id=uni-v4-pool-reader-v4` |
| `AssetUsdReaderV4` assetUsdReader | `0x7b601ED70Ab3F8a811302DD50A49FA026944A8D2` | `/api/v4/abi?id=asset-usd-reader-v4` |
| `HyperlaneHook(aggregation{merkleTreeHook, ourIgp})` hyperlaneHook | `0x3a13Dd45357913a7Cd3b696Bd94F1657f9731d9b` | - |
| `ISM our leaf = solo ISM (origin 4663)` ISM_our_leaf_solo_ISM_origin_4663 | `0x14b07be3162D0f8106cBbBEC8e167D12dfC306C5` | - |
| `ISM our leaf = solo ISM (origin 8453)` ISM_our_leaf_solo_ISM_origin_8453 | `0x59A11E16d2B85794fC346f7738e835D48f7Ba8aB` | - |
| `ISM our leaf = solo ISM (origin 1)` ISM_our_leaf_solo_ISM_origin_1 | `0xf00928459C9749721655E6B039345521A9070dB9` | - |
| `ISM our leaf = solo ISM (origin 99901)` ISM_our_leaf_solo_ISM_origin_99901 | `0x12c58613a235A1EB6AD01B7ae68a2C74B1bD6edf` | - |
| `ISM our leaf = solo ISM (origin 1399811149)` ISM_our_leaf_solo_ISM_origin_1399811149 | `0x1668deE34e7D6FB6e54feDcE84410AfeD56A6De3` | - |
| `SaleComposerV4` saleComposer | `0xcfBdB0969ec37c7D6fceD98130132b1B30D7c838` | `/api/v4/abi?id=sale-composer-v4` |
| `CheapestComposerV4` cheapestComposer | `0xD56900CB32FD12f9e484cF6f6593B058aB473127` | `/api/v4/abi?id=cheapest-composer-v4` |
| `InterchainGasPaymaster (our IGP, proxy)` igp | `0xE4c4F91F023F55237Ed8CC046e2DCd2Fa02033Ff` | - |
| `StorageGasOracle (our IGP's)` igpGasOracle | `0x8172e99CE4385A44d506358132d89745D492d768` | - |
| `ProxyAdmin (our IGP's)` igpProxyAdmin | `0xEd8ad9fbBE8f300cc93F5b0628aC485d02A99D04` | - |
| `InterchainGasPaymaster implementation` igpImplementation | `0xe9a5dE28F83448BF4F421C43a23EfDb11DFbacc5` | - |
| `TokenomicsFactoryV24` tokenomicsFactory | `0x95f43B0D4c4144f2F5FfaC19a6fEAA8c67E41447` | - |
| `TokenomicsV24Implementation` tokenomicsImplementation | `0x484f5436aeaA8Da34Cf20010Ad6FA953fb147f76` | - |

### elysium (chain id 99901)

| Contract | Address | ABI or IDL |
| --- | --- | --- |
| `GapOracleV4` oracle | `0xF755863A6C8786923472AAC7b6Ff1A01e1c3Ed97` | `/api/v4/abi?id=gap-oracle-v4` |
| `BridgeGapV4` gapModule | `0x161925a08B5DA27E0eF56F8F5aeac7CE207d62C7` | `/api/v4/abi?id=bridge-gap-v4` |
| `BridgeRoleV4` roleModule | `0xA38BA9F1a55e943aB75Af651176A8cF191D95A98` | `/api/v4/abi?id=bridge-role-v4` |
| `PangeaBridgeV4` bridge | `0x52a4b40fa6d72f44fbAADb0e38cBc087b3Af0880` | `/api/v4/abi?id=pangea-bridge-v4` |
| `SupplyReporter` supplyReporter | `0xeA1cFDF7440C8cBde17665c80b9b4436F58f7d87` | `/api/v4/abi?id=supply-reporter-v4` |
| `CoinDeployerV4Impl` coinDeployerImpl | `0x64e7B17475e79381ab79549f56Ca859Bd87bA811` | - |
| `ERC1967Proxy(CoinDeployerV4)` coinDeployer | `0x43049AbeEcCc6f321774439B636e88f669024d9f` | - |
| `CoinCodeRegistryV4` codeRegistry | `0x68415e3599F5551f59B9dD3855Bea39732ae8A00` | `/api/v4/abi?id=coin-code-registry-v4` |
| `PangeaFeeHookV4` feeHook | `0x8e1Bf182a2a1FEdF9850379127D4535F18EA68cc` | `/api/v4/abi?id=pangea-fee-hook-v4` |
| `TokenomicsFactoryV24F1(v4)` v4TokenomicsFactory | `0xB4AD7764D6257636479ec70511Aa9dfEFb2441b0` | - |
| `LaunchCoreV4Impl` coreImpl | `0x801C3677Ed6162062633cD74cAFD93c126182857` | - |
| `ERC1967Proxy(LaunchCoreV4)` core | `0xaA61764BD44df5468CaaE856232Ce9B711512449` | - |
| `HyperlaneAdapterV4` hyperlaneAdapter | `0x0dC0deB0C095b871aCAF108b454177e5CF65EbF5` | `/api/v4/abi?id=hyperlane-adapter-v4` |
| `FullLaunchSettlerV4` settler | `0x8baE47b994435a24fa6750D9359e11eF22c942CE` | `/api/v4/abi?id=full-launch-settler-v4` |
| `PangeaDeployerV4` deployer | `0x582613FDCE3B9cA8e439d8811E1522AAa0E3FdDC` | `/api/v4/abi?id=pangea-deployer-v4` |
| `BridgeBuyerV4(bridge)` bridgeBuyer | `0x4E7cdA88D44A97daaCe885B0E6f2086AB555Ed65` | - |
| `BridgeRowsV4(bridge)` BridgeRowsV4_bridge | `0x5F49094337cB8b2D90e4BB231A0aa43c3d7f7bbf` | - |
| `BridgeBuyerV4(core)` coreBuyer | `0x8414D1B0aE32ee2e08AbcDeA8855e30a181a4C92` | - |
| `LaunchSettleV4(core)` launchSettle | `0xA44cb48F042c29676ffD0659500711aA6B9aE953` | - |
| `CoreInitV4(core)` coreInit | `0x6eE0a49386a123BD5AF492f97AD6384526D078A2` | - |
| `OpenerLiquidityV4(core)` ownLiquidity | `0x7a65c97f1Ce593aAb0758f6B00c9ea6FFcf5Dbfe` | - |
| `UniV4PoolReaderV4` poolReader | `0x927CA3a46EF33d24c49AA73F27402416303f44Eb` | `/api/v4/abi?id=uni-v4-pool-reader-v4` |
| `AssetUsdReaderV4` assetUsdReader | `0xc5f676A42a90D92Ee98b2672e5ee3C583cffe536` | `/api/v4/abi?id=asset-usd-reader-v4` |
| `HyperlaneHook(aggregation{merkleTreeHook, ourIgp})` hyperlaneHook | `0x909F08ECd42a2d71550ECD018e00D1E7f2E0d8C4` | - |
| `ISM our leaf = solo ISM (origin 4663)` ISM_our_leaf_solo_ISM_origin_4663 | `0x003645572A4CB9D52d2755e2cb62B332A5C52677` | - |
| `ISM our leaf = solo ISM (origin 8453)` ISM_our_leaf_solo_ISM_origin_8453 | `0xD56C7f2A27BE17CeD275345E5065A5a2eF11F331` | - |
| `ISM our leaf = solo ISM (origin 1)` ISM_our_leaf_solo_ISM_origin_1 | `0x60BDd37e065B195C767887bb3916E84b7F107D73` | - |
| `ISM our leaf = solo ISM (origin 56)` ISM_our_leaf_solo_ISM_origin_56 | `0xEAB96b8FA2f121880dd23DDfE6A0131Ed7bEc04d` | - |
| `ISM our leaf = solo ISM (origin 1399811149)` ISM_our_leaf_solo_ISM_origin_1399811149 | `0x6B82C7cb70111Afe7DA4FceFe50670ABbBaB2175` | - |
| `SaleComposerV4` saleComposer | `0xf4a4aDD3398B813f33632A3c800C62E9f525D614` | `/api/v4/abi?id=sale-composer-v4` |
| `CheapestComposerV4` cheapestComposer | `0x07aD43eE35d44fBF2dC868a3A20E1E3e04D24a0C` | `/api/v4/abi?id=cheapest-composer-v4` |
| `TokenomicsFactoryV24` tokenomicsFactory | `0x95f43B0D4c4144f2F5FfaC19a6fEAA8c67E41447` | - |
| `TokenomicsV24Implementation` tokenomicsImplementation | `0x484f5436aeaA8Da34Cf20010Ad6FA953fb147f76` | - |

### solana (set v4b)

| Program or account | Address | ABI or IDL |
| --- | --- | --- |
| `pangea_bridge_v4` bridge | `8K7DTNE4bqPwZiueTPn8wD3NULAt3PxCMPA9nkFc2LK3` | `/api/v4/abi?id=pangea-bridge-v4&kind=idl` |
| `Store` LayerZero store (the bridge's own LayerZero row) | `73FxfL4gYMYnWXPvmdi9ARL95qxDq8pdR3Yv8kNiShP2` | - |
| `lookup table` shared | `9CVQoJmpLsQhoDQZQMdUqjZHaWjWX9rzP9dy9sDi4fdK` | - |

### Contract addresses, set v4a (coins launched before 2026-11-12)

Every v4 address the go-live deploy recorded, per chain (`2026-11-12T15:33:04.682Z`, also at `/api/v4/contracts`).

### robinhood (chain id 4663)

| Contract | Address | ABI or IDL |
| --- | --- | --- |
| `GapOracleV4` oracle | `0x7928e386Aa4E5e7A781A24B1a6cC1a14a5cCcfA7` | `/api/v4/abi?id=gap-oracle-v4` |
| `BridgeGapV4` gapModule | `0xf5a525C44c7C5C26204cf235af5aE40c3D13e820` | `/api/v4/abi?id=bridge-gap-v4` |
| `BridgeRoleV4` roleModule | `0xA57e5Ec5239D3fA1FF65A6b1A3026Bae57DA73b8` | `/api/v4/abi?id=bridge-role-v4` |
| `PangeaBridgeV4` bridge | `0x61713F12FfeF8774cF691a73707f41AD24666543` | `/api/v4/abi?id=pangea-bridge-v4` |
| `SupplyReporter` supplyReporter | `0xdA13E67C8aDbf4D9F86820dBeC829D4733b00f55` | `/api/v4/abi?id=supply-reporter-v4` |
| `CoinDeployerV4Impl` coinDeployerImpl | `0x8303775D8C59DC79cb2fC51DCA98f6dFBE42a56f` | - |
| `ERC1967Proxy(CoinDeployerV4)` coinDeployer | `0xfF5af80C21318256A89e43975f5c91Ef3A5Dc22a` | - |
| `CoinCodeRegistryV4` codeRegistry | `0xFcd5370F0b410CA1efab7E206CA94769b45CB1c1` | `/api/v4/abi?id=coin-code-registry-v4` |
| `PangeaFeeHookV4` feeHook | `0x2243bEc6903F32Fe13e76C9502Bc08581A5EE8cC` | `/api/v4/abi?id=pangea-fee-hook-v4` |
| `TokenomicsFactoryV24F1(v4)` v4TokenomicsFactory | `0x5d2CDA40f29E0bFFd6f63D8Cb6b0dC7459654eB9` | - |
| `LaunchCoreV4Impl` coreImpl | `0x40102aFB79353c8455DF2463A967696883aa5D1B` | - |
| `ERC1967Proxy(LaunchCoreV4)` core | `0x9A8b8d44BA267B2Be3c5dc8A8CAE173870458e9b` | - |
| `LzAdapterV4` lzAdapter | `0x06f2e6167C1df13C3c6d008A5D7B236084A21783` | `/api/v4/abi?id=lz-adapter-v4` |
| `HyperlaneAdapterV4` hyperlaneAdapter | `0x87cDAE05784A21DB30d1652757A62B23297459ae` | `/api/v4/abi?id=hyperlane-adapter-v4` |
| `FullLaunchSettlerV4` settler | `0x077AF6B5c66aA43e3Eb67ab542590efe05D955f7` | `/api/v4/abi?id=full-launch-settler-v4` |
| `PangeaDeployerV4` deployer | `0x2BcfBfDbeEb4EB497Ee35dADDB7F88727219Fa85` | `/api/v4/abi?id=pangea-deployer-v4` |
| `BridgeBuyerV4(bridge)` bridgeBuyer | `0x46Ae3591E728f6e8c99820aFca1664dcbAE0b7F5` | - |
| `BridgeRowsV4(bridge)` BridgeRowsV4_bridge | `0xaC375ea0D628E9834c3D0f3C2fe774531Ec3CbD1` | - |
| `BridgeBuyerV4(core)` coreBuyer | `0xfeC6A2D15E879a7bb654d353cc1b9EE7DA6A4595` | - |
| `LaunchSettleV4(core)` launchSettle | `0xe715adA78D8883C1B094846400901f998c049b82` | - |
| `CoreInitV4(core)` coreInit | `0x083BFeAEb242D29b6117c370f65eB3CA5555E89e` | - |
| `OpenerLiquidityV4(core)` ownLiquidity | `0x81aF314f4387b4d5d75cd8C5E6826faDDF22A5e3` | - |
| `UniV4PoolReaderV4` poolReader | `0x405DCb353CC984765FE3f9E8CC16054D5c2B8dDA` | `/api/v4/abi?id=uni-v4-pool-reader-v4` |
| `AssetUsdReaderV4` assetUsdReader | `0x7Ee83b21993e706F645418837CFd6a5B4A0C88a7` | `/api/v4/abi?id=asset-usd-reader-v4` |
| `HyperlaneHook(aggregation{merkleTreeHook, ourIgp})` hyperlaneHook | `0xb24DF5777D831Bc747e5B217724fCbDd8C6566a1` | - |
| `ISM our leaf = solo ISM (origin 8453)` ISM_our_leaf_solo_ISM_origin_8453 | `0xD56C7f2A27BE17CeD275345E5065A5a2eF11F331` | - |
| `ISM our leaf = solo ISM (origin 1)` ISM_our_leaf_solo_ISM_origin_1 | `0x60BDd37e065B195C767887bb3916E84b7F107D73` | - |
| `ISM our leaf = solo ISM (origin 56)` ISM_our_leaf_solo_ISM_origin_56 | `0xEAB96b8FA2f121880dd23DDfE6A0131Ed7bEc04d` | - |
| `ISM our leaf = solo ISM (origin 99901)` ISM_our_leaf_solo_ISM_origin_99901 | `0xFFC513F541aD0f5038c98c4e0E8aD4C3cb790f3D` | - |
| `ISM our leaf = solo ISM (origin 1399811149)` ISM_our_leaf_solo_ISM_origin_1399811149 | `0x6B82C7cb70111Afe7DA4FceFe50670ABbBaB2175` | - |
| `TokenomicsFactoryV24` tokenomicsFactory | `0x95f43B0D4c4144f2F5FfaC19a6fEAA8c67E41447` | - |
| `TokenomicsV24Implementation` tokenomicsImplementation | `0x484f5436aeaA8Da34Cf20010Ad6FA953fb147f76` | - |
| `InterchainGasPaymaster (our IGP, proxy)` igp | `0xe9a5dE28F83448BF4F421C43a23EfDb11DFbacc5` | - |
| `StorageGasOracle (our IGP's)` igpGasOracle | `0xEd8ad9fbBE8f300cc93F5b0628aC485d02A99D04` | - |
| `ProxyAdmin (our IGP's)` igpProxyAdmin | `0x74F79Ed7162cada04f20C9528F7439c59398D05F` | - |
| `InterchainGasPaymaster implementation` igpImplementation | `0x8172e99CE4385A44d506358132d89745D492d768` | - |
| `SaleComposerV4` saleComposer | `0xe5024F575113EDb45B41864f2a3e96CFe2885526` | `/api/v4/abi?id=sale-composer-v4` |
| `CheapestComposerV4` cheapestComposer | `0xe094Ad89EEC40526288B727ab21385b536984aBD` | `/api/v4/abi?id=cheapest-composer-v4` |

### base (chain id 8453)

| Contract | Address | ABI or IDL |
| --- | --- | --- |
| `GapOracleV4` oracle | `0x7928e386Aa4E5e7A781A24B1a6cC1a14a5cCcfA7` | `/api/v4/abi?id=gap-oracle-v4` |
| `BridgeGapV4` gapModule | `0xf5a525C44c7C5C26204cf235af5aE40c3D13e820` | `/api/v4/abi?id=bridge-gap-v4` |
| `BridgeRoleV4` roleModule | `0xA57e5Ec5239D3fA1FF65A6b1A3026Bae57DA73b8` | `/api/v4/abi?id=bridge-role-v4` |
| `PangeaBridgeV4` bridge | `0x61713F12FfeF8774cF691a73707f41AD24666543` | `/api/v4/abi?id=pangea-bridge-v4` |
| `SupplyReporter` supplyReporter | `0xdA13E67C8aDbf4D9F86820dBeC829D4733b00f55` | `/api/v4/abi?id=supply-reporter-v4` |
| `CoinDeployerV4Impl` coinDeployerImpl | `0x8303775D8C59DC79cb2fC51DCA98f6dFBE42a56f` | - |
| `ERC1967Proxy(CoinDeployerV4)` coinDeployer | `0xfF5af80C21318256A89e43975f5c91Ef3A5Dc22a` | - |
| `CoinCodeRegistryV4` codeRegistry | `0xFcd5370F0b410CA1efab7E206CA94769b45CB1c1` | `/api/v4/abi?id=coin-code-registry-v4` |
| `PangeaFeeHookV4` feeHook | `0x2243bEc6903F32Fe13e76C9502Bc08581A5EE8cC` | `/api/v4/abi?id=pangea-fee-hook-v4` |
| `TokenomicsFactoryV24F1(v4)` v4TokenomicsFactory | `0x5d2CDA40f29E0bFFd6f63D8Cb6b0dC7459654eB9` | - |
| `LaunchCoreV4Impl` coreImpl | `0x40102aFB79353c8455DF2463A967696883aa5D1B` | - |
| `ERC1967Proxy(LaunchCoreV4)` core | `0x9A8b8d44BA267B2Be3c5dc8A8CAE173870458e9b` | - |
| `LzAdapterV4` lzAdapter | `0x06f2e6167C1df13C3c6d008A5D7B236084A21783` | `/api/v4/abi?id=lz-adapter-v4` |
| `HyperlaneAdapterV4` hyperlaneAdapter | `0x87cDAE05784A21DB30d1652757A62B23297459ae` | `/api/v4/abi?id=hyperlane-adapter-v4` |
| `FullLaunchSettlerV4` settler | `0x077AF6B5c66aA43e3Eb67ab542590efe05D955f7` | `/api/v4/abi?id=full-launch-settler-v4` |
| `PangeaDeployerV4` deployer | `0x2BcfBfDbeEb4EB497Ee35dADDB7F88727219Fa85` | `/api/v4/abi?id=pangea-deployer-v4` |
| `BridgeBuyerV4(bridge)` bridgeBuyer | `0x46Ae3591E728f6e8c99820aFca1664dcbAE0b7F5` | - |
| `BridgeRowsV4(bridge)` BridgeRowsV4_bridge | `0xaC375ea0D628E9834c3D0f3C2fe774531Ec3CbD1` | - |
| `BridgeBuyerV4(core)` coreBuyer | `0xfeC6A2D15E879a7bb654d353cc1b9EE7DA6A4595` | - |
| `LaunchSettleV4(core)` launchSettle | `0xe715adA78D8883C1B094846400901f998c049b82` | - |
| `CoreInitV4(core)` coreInit | `0x083BFeAEb242D29b6117c370f65eB3CA5555E89e` | - |
| `OpenerLiquidityV4(core)` ownLiquidity | `0x81aF314f4387b4d5d75cd8C5E6826faDDF22A5e3` | - |
| `UniV4PoolReaderV4` poolReader | `0xaCdccEB7Dbfe838C12C62172CcfEC2bFb2fFda51` | `/api/v4/abi?id=uni-v4-pool-reader-v4` |
| `AssetUsdReaderV4` assetUsdReader | `0xa3ff7C1DF2EB78463577389eFC8Ad705803Fa685` | `/api/v4/abi?id=asset-usd-reader-v4` |
| `HyperlaneHook(aggregation{merkleTreeHook, ourIgp})` hyperlaneHook | `0x4F96A81622B40f842a31CFfcF4917659e9381143` | - |
| `ISM our leaf = solo ISM (origin 4663)` ISM_our_leaf_solo_ISM_origin_4663 | `0x1831608C2439B9Afe62D8188BcC9164FCbce09E8` | - |
| `ISM our leaf = solo ISM (origin 1)` ISM_our_leaf_solo_ISM_origin_1 | `0x991669a68f37a7BBe8B538C9076Ab9C2A631cdA9` | - |
| `ISM our leaf = solo ISM (origin 56)` ISM_our_leaf_solo_ISM_origin_56 | `0x0640df153B52cb3ee5bEe8b1E57Ff43704000C49` | - |
| `ISM our leaf = solo ISM (origin 99901)` ISM_our_leaf_solo_ISM_origin_99901 | `0xD13416f524709129c24CC333D91755A6796E422e` | - |
| `ISM our leaf = solo ISM (origin 1399811149)` ISM_our_leaf_solo_ISM_origin_1399811149 | `0x7460349359a43275F896aa010669ef0804D62072` | - |
| `TokenomicsFactoryV24` tokenomicsFactory | `0x95f43B0D4c4144f2F5FfaC19a6fEAA8c67E41447` | - |
| `TokenomicsV24Implementation` tokenomicsImplementation | `0x484f5436aeaA8Da34Cf20010Ad6FA953fb147f76` | - |
| `InterchainGasPaymaster (our IGP, proxy)` igp | `0xE4c4F91F023F55237Ed8CC046e2DCd2Fa02033Ff` | - |
| `StorageGasOracle (our IGP's)` igpGasOracle | `0x8172e99CE4385A44d506358132d89745D492d768` | - |
| `ProxyAdmin (our IGP's)` igpProxyAdmin | `0xEd8ad9fbBE8f300cc93F5b0628aC485d02A99D04` | - |
| `InterchainGasPaymaster implementation` igpImplementation | `0xe9a5dE28F83448BF4F421C43a23EfDb11DFbacc5` | - |
| `SaleComposerV4` saleComposer | `0xE5c96e7BB813Fb025e592f641538617226870967` | `/api/v4/abi?id=sale-composer-v4` |
| `CheapestComposerV4` cheapestComposer | `0xE38f4F6Cf31262C49c753FB9C4C1527DE6eeb240` | `/api/v4/abi?id=cheapest-composer-v4` |

### ethereum (chain id 1)

| Contract | Address | ABI or IDL |
| --- | --- | --- |
| `GapOracleV4` oracle | `0x7928e386Aa4E5e7A781A24B1a6cC1a14a5cCcfA7` | `/api/v4/abi?id=gap-oracle-v4` |
| `BridgeGapV4` gapModule | `0xf5a525C44c7C5C26204cf235af5aE40c3D13e820` | `/api/v4/abi?id=bridge-gap-v4` |
| `BridgeRoleV4` roleModule | `0xA57e5Ec5239D3fA1FF65A6b1A3026Bae57DA73b8` | `/api/v4/abi?id=bridge-role-v4` |
| `PangeaBridgeV4` bridge | `0x61713F12FfeF8774cF691a73707f41AD24666543` | `/api/v4/abi?id=pangea-bridge-v4` |
| `SupplyReporter` supplyReporter | `0xdA13E67C8aDbf4D9F86820dBeC829D4733b00f55` | `/api/v4/abi?id=supply-reporter-v4` |
| `CoinDeployerV4Impl` coinDeployerImpl | `0x8303775D8C59DC79cb2fC51DCA98f6dFBE42a56f` | - |
| `ERC1967Proxy(CoinDeployerV4)` coinDeployer | `0xfF5af80C21318256A89e43975f5c91Ef3A5Dc22a` | - |
| `CoinCodeRegistryV4` codeRegistry | `0xFcd5370F0b410CA1efab7E206CA94769b45CB1c1` | `/api/v4/abi?id=coin-code-registry-v4` |
| `PangeaFeeHookV4` feeHook | `0x2243bEc6903F32Fe13e76C9502Bc08581A5EE8cC` | `/api/v4/abi?id=pangea-fee-hook-v4` |
| `TokenomicsFactoryV24F1(v4)` v4TokenomicsFactory | `0x5d2CDA40f29E0bFFd6f63D8Cb6b0dC7459654eB9` | - |
| `LaunchCoreV4Impl` coreImpl | `0x40102aFB79353c8455DF2463A967696883aa5D1B` | - |
| `ERC1967Proxy(LaunchCoreV4)` core | `0x9A8b8d44BA267B2Be3c5dc8A8CAE173870458e9b` | - |
| `LzAdapterV4` lzAdapter | `0x06f2e6167C1df13C3c6d008A5D7B236084A21783` | `/api/v4/abi?id=lz-adapter-v4` |
| `HyperlaneAdapterV4` hyperlaneAdapter | `0x87cDAE05784A21DB30d1652757A62B23297459ae` | `/api/v4/abi?id=hyperlane-adapter-v4` |
| `FullLaunchSettlerV4` settler | `0x077AF6B5c66aA43e3Eb67ab542590efe05D955f7` | `/api/v4/abi?id=full-launch-settler-v4` |
| `PangeaDeployerV4` deployer | `0x2BcfBfDbeEb4EB497Ee35dADDB7F88727219Fa85` | `/api/v4/abi?id=pangea-deployer-v4` |
| `BridgeBuyerV4(bridge)` bridgeBuyer | `0x46Ae3591E728f6e8c99820aFca1664dcbAE0b7F5` | - |
| `BridgeRowsV4(bridge)` BridgeRowsV4_bridge | `0xaC375ea0D628E9834c3D0f3C2fe774531Ec3CbD1` | - |
| `BridgeBuyerV4(core)` coreBuyer | `0xfeC6A2D15E879a7bb654d353cc1b9EE7DA6A4595` | - |
| `LaunchSettleV4(core)` launchSettle | `0xe715adA78D8883C1B094846400901f998c049b82` | - |
| `CoreInitV4(core)` coreInit | `0x083BFeAEb242D29b6117c370f65eB3CA5555E89e` | - |
| `OpenerLiquidityV4(core)` ownLiquidity | `0x81aF314f4387b4d5d75cd8C5E6826faDDF22A5e3` | - |
| `UniV4PoolReaderV4` poolReader | `0xCd101A1ba58DA7B9dF7f9C309a08C4D797c7bD18` | `/api/v4/abi?id=uni-v4-pool-reader-v4` |
| `AssetUsdReaderV4` assetUsdReader | `0x0C3c382A461692625E64Cf68d002e3A3B7248b19` | `/api/v4/abi?id=asset-usd-reader-v4` |
| `HyperlaneHook(aggregation{merkleTreeHook, ourIgp})` hyperlaneHook | `0xbDB8F2DF45c6d3baf60d0E22615C007dC85dca16` | - |
| `ISM our leaf = solo ISM (origin 4663)` ISM_our_leaf_solo_ISM_origin_4663 | `0xf73c4ed8aA3deB69aa57f5A0564A4325c571775a` | - |
| `ISM our leaf = solo ISM (origin 8453)` ISM_our_leaf_solo_ISM_origin_8453 | `0x785C99a26a01EC9C812dD23Bd7400bB9dF6954e3` | - |
| `ISM our leaf = solo ISM (origin 56)` ISM_our_leaf_solo_ISM_origin_56 | `0x4860024A80D110524C907753784a5420Bf58437d` | - |
| `ISM our leaf = solo ISM (origin 99901)` ISM_our_leaf_solo_ISM_origin_99901 | `0x8B106a39CC6f87FC193999a8011F7D0aaCDf2558` | - |
| `ISM our leaf = solo ISM (origin 1399811149)` ISM_our_leaf_solo_ISM_origin_1399811149 | `0x1227e98D6B51EbaE3a725E51ACF416227966DB76` | - |
| `TokenomicsFactoryV24` tokenomicsFactory | `0x95f43B0D4c4144f2F5FfaC19a6fEAA8c67E41447` | - |
| `TokenomicsV24Implementation` tokenomicsImplementation | `0x484f5436aeaA8Da34Cf20010Ad6FA953fb147f76` | - |
| `InterchainGasPaymaster (our IGP, proxy)` igp | `0xe9a5dE28F83448BF4F421C43a23EfDb11DFbacc5` | - |
| `StorageGasOracle (our IGP's)` igpGasOracle | `0xEd8ad9fbBE8f300cc93F5b0628aC485d02A99D04` | - |
| `ProxyAdmin (our IGP's)` igpProxyAdmin | `0x74F79Ed7162cada04f20C9528F7439c59398D05F` | - |
| `InterchainGasPaymaster implementation` igpImplementation | `0x8172e99CE4385A44d506358132d89745D492d768` | - |
| `SaleComposerV4` saleComposer | `0xE38f4F6Cf31262C49c753FB9C4C1527DE6eeb240` | `/api/v4/abi?id=sale-composer-v4` |
| `CheapestComposerV4` cheapestComposer | `0xABEb9F607700BA2970576284936Cff80DFC835CC` | `/api/v4/abi?id=cheapest-composer-v4` |

### bsc (chain id 56)

| Contract | Address | ABI or IDL |
| --- | --- | --- |
| `GapOracleV4` oracle | `0x7928e386Aa4E5e7A781A24B1a6cC1a14a5cCcfA7` | `/api/v4/abi?id=gap-oracle-v4` |
| `BridgeGapV4` gapModule | `0xf5a525C44c7C5C26204cf235af5aE40c3D13e820` | `/api/v4/abi?id=bridge-gap-v4` |
| `BridgeRoleV4` roleModule | `0xA57e5Ec5239D3fA1FF65A6b1A3026Bae57DA73b8` | `/api/v4/abi?id=bridge-role-v4` |
| `PangeaBridgeV4` bridge | `0x61713F12FfeF8774cF691a73707f41AD24666543` | `/api/v4/abi?id=pangea-bridge-v4` |
| `SupplyReporter` supplyReporter | `0xdA13E67C8aDbf4D9F86820dBeC829D4733b00f55` | `/api/v4/abi?id=supply-reporter-v4` |
| `CoinDeployerV4Impl` coinDeployerImpl | `0x8303775D8C59DC79cb2fC51DCA98f6dFBE42a56f` | - |
| `ERC1967Proxy(CoinDeployerV4)` coinDeployer | `0xfF5af80C21318256A89e43975f5c91Ef3A5Dc22a` | - |
| `CoinCodeRegistryV4` codeRegistry | `0xFcd5370F0b410CA1efab7E206CA94769b45CB1c1` | `/api/v4/abi?id=coin-code-registry-v4` |
| `PangeaFeeHookV4` feeHook | `0x2243bEc6903F32Fe13e76C9502Bc08581A5EE8cC` | `/api/v4/abi?id=pangea-fee-hook-v4` |
| `TokenomicsFactoryV24F1(v4)` v4TokenomicsFactory | `0x5d2CDA40f29E0bFFd6f63D8Cb6b0dC7459654eB9` | - |
| `LaunchCoreV4Impl` coreImpl | `0x40102aFB79353c8455DF2463A967696883aa5D1B` | - |
| `ERC1967Proxy(LaunchCoreV4)` core | `0x9A8b8d44BA267B2Be3c5dc8A8CAE173870458e9b` | - |
| `LzAdapterV4` lzAdapter | `0x06f2e6167C1df13C3c6d008A5D7B236084A21783` | `/api/v4/abi?id=lz-adapter-v4` |
| `HyperlaneAdapterV4` hyperlaneAdapter | `0x87cDAE05784A21DB30d1652757A62B23297459ae` | `/api/v4/abi?id=hyperlane-adapter-v4` |
| `FullLaunchSettlerV4` settler | `0x077AF6B5c66aA43e3Eb67ab542590efe05D955f7` | `/api/v4/abi?id=full-launch-settler-v4` |
| `PangeaDeployerV4` deployer | `0x2BcfBfDbeEb4EB497Ee35dADDB7F88727219Fa85` | `/api/v4/abi?id=pangea-deployer-v4` |
| `BridgeBuyerV4(bridge)` bridgeBuyer | `0x46Ae3591E728f6e8c99820aFca1664dcbAE0b7F5` | - |
| `BridgeRowsV4(bridge)` BridgeRowsV4_bridge | `0xaC375ea0D628E9834c3D0f3C2fe774531Ec3CbD1` | - |
| `BridgeBuyerV4(core)` coreBuyer | `0xfeC6A2D15E879a7bb654d353cc1b9EE7DA6A4595` | - |
| `LaunchSettleV4(core)` launchSettle | `0xe715adA78D8883C1B094846400901f998c049b82` | - |
| `CoreInitV4(core)` coreInit | `0x083BFeAEb242D29b6117c370f65eB3CA5555E89e` | - |
| `OpenerLiquidityV4(core)` ownLiquidity | `0x81aF314f4387b4d5d75cd8C5E6826faDDF22A5e3` | - |
| `UniV4PoolReaderV4` poolReader | `0xb719e9e9977b387538c8c07e78d07ABAe382b7D8` | `/api/v4/abi?id=uni-v4-pool-reader-v4` |
| `AssetUsdReaderV4` assetUsdReader | `0x7d60B9Bdad7986AAFB5567Fac53b7489AD24d75c` | `/api/v4/abi?id=asset-usd-reader-v4` |
| `HyperlaneHook(aggregation{merkleTreeHook, ourIgp})` hyperlaneHook | `0x3a13Dd45357913a7Cd3b696Bd94F1657f9731d9b` | - |
| `ISM our leaf = solo ISM (origin 4663)` ISM_our_leaf_solo_ISM_origin_4663 | `0x14b07be3162D0f8106cBbBEC8e167D12dfC306C5` | - |
| `ISM our leaf = solo ISM (origin 8453)` ISM_our_leaf_solo_ISM_origin_8453 | `0x59A11E16d2B85794fC346f7738e835D48f7Ba8aB` | - |
| `ISM our leaf = solo ISM (origin 1)` ISM_our_leaf_solo_ISM_origin_1 | `0xf00928459C9749721655E6B039345521A9070dB9` | - |
| `ISM our leaf = solo ISM (origin 99901)` ISM_our_leaf_solo_ISM_origin_99901 | `0x12c58613a235A1EB6AD01B7ae68a2C74B1bD6edf` | - |
| `ISM our leaf = solo ISM (origin 1399811149)` ISM_our_leaf_solo_ISM_origin_1399811149 | `0x1668deE34e7D6FB6e54feDcE84410AfeD56A6De3` | - |
| `TokenomicsFactoryV24` tokenomicsFactory | `0x95f43B0D4c4144f2F5FfaC19a6fEAA8c67E41447` | - |
| `TokenomicsV24Implementation` tokenomicsImplementation | `0x484f5436aeaA8Da34Cf20010Ad6FA953fb147f76` | - |
| `InterchainGasPaymaster (our IGP, proxy)` igp | `0xE4c4F91F023F55237Ed8CC046e2DCd2Fa02033Ff` | - |
| `StorageGasOracle (our IGP's)` igpGasOracle | `0x8172e99CE4385A44d506358132d89745D492d768` | - |
| `ProxyAdmin (our IGP's)` igpProxyAdmin | `0xEd8ad9fbBE8f300cc93F5b0628aC485d02A99D04` | - |
| `InterchainGasPaymaster implementation` igpImplementation | `0xe9a5dE28F83448BF4F421C43a23EfDb11DFbacc5` | - |
| `SaleComposerV4` saleComposer | `0xff68B37A76ea702195BD1dbb6783eD85D2cE8Cd7` | `/api/v4/abi?id=sale-composer-v4` |
| `CheapestComposerV4` cheapestComposer | `0x0c4a720D996ea2026C90EF84f31aEE100E3F8634` | `/api/v4/abi?id=cheapest-composer-v4` |

### elysium (chain id 99901)

| Contract | Address | ABI or IDL |
| --- | --- | --- |
| `GapOracleV4` oracle | `0x7928e386Aa4E5e7A781A24B1a6cC1a14a5cCcfA7` | `/api/v4/abi?id=gap-oracle-v4` |
| `BridgeGapV4` gapModule | `0xf5a525C44c7C5C26204cf235af5aE40c3D13e820` | `/api/v4/abi?id=bridge-gap-v4` |
| `BridgeRoleV4` roleModule | `0xA57e5Ec5239D3fA1FF65A6b1A3026Bae57DA73b8` | `/api/v4/abi?id=bridge-role-v4` |
| `PangeaBridgeV4` bridge | `0x61713F12FfeF8774cF691a73707f41AD24666543` | `/api/v4/abi?id=pangea-bridge-v4` |
| `SupplyReporter` supplyReporter | `0xdA13E67C8aDbf4D9F86820dBeC829D4733b00f55` | `/api/v4/abi?id=supply-reporter-v4` |
| `CoinDeployerV4Impl` coinDeployerImpl | `0x8303775D8C59DC79cb2fC51DCA98f6dFBE42a56f` | - |
| `ERC1967Proxy(CoinDeployerV4)` coinDeployer | `0xfF5af80C21318256A89e43975f5c91Ef3A5Dc22a` | - |
| `CoinCodeRegistryV4` codeRegistry | `0xFcd5370F0b410CA1efab7E206CA94769b45CB1c1` | `/api/v4/abi?id=coin-code-registry-v4` |
| `PangeaFeeHookV4` feeHook | `0x2243bEc6903F32Fe13e76C9502Bc08581A5EE8cC` | `/api/v4/abi?id=pangea-fee-hook-v4` |
| `TokenomicsFactoryV24F1(v4)` v4TokenomicsFactory | `0x5d2CDA40f29E0bFFd6f63D8Cb6b0dC7459654eB9` | - |
| `LaunchCoreV4Impl` coreImpl | `0x40102aFB79353c8455DF2463A967696883aa5D1B` | - |
| `ERC1967Proxy(LaunchCoreV4)` core | `0x9A8b8d44BA267B2Be3c5dc8A8CAE173870458e9b` | - |
| `HyperlaneAdapterV4` hyperlaneAdapter | `0x87cDAE05784A21DB30d1652757A62B23297459ae` | `/api/v4/abi?id=hyperlane-adapter-v4` |
| `FullLaunchSettlerV4` settler | `0x077AF6B5c66aA43e3Eb67ab542590efe05D955f7` | `/api/v4/abi?id=full-launch-settler-v4` |
| `PangeaDeployerV4` deployer | `0x2BcfBfDbeEb4EB497Ee35dADDB7F88727219Fa85` | `/api/v4/abi?id=pangea-deployer-v4` |
| `BridgeBuyerV4(bridge)` bridgeBuyer | `0x46Ae3591E728f6e8c99820aFca1664dcbAE0b7F5` | - |
| `BridgeRowsV4(bridge)` BridgeRowsV4_bridge | `0xaC375ea0D628E9834c3D0f3C2fe774531Ec3CbD1` | - |
| `BridgeBuyerV4(core)` coreBuyer | `0xfeC6A2D15E879a7bb654d353cc1b9EE7DA6A4595` | - |
| `LaunchSettleV4(core)` launchSettle | `0xe715adA78D8883C1B094846400901f998c049b82` | - |
| `CoreInitV4(core)` coreInit | `0x083BFeAEb242D29b6117c370f65eB3CA5555E89e` | - |
| `OpenerLiquidityV4(core)` ownLiquidity | `0x81aF314f4387b4d5d75cd8C5E6826faDDF22A5e3` | - |
| `UniV4PoolReaderV4` poolReader | `0x7F4A1881c62a750612427D3D06A6FD5776e6ECf7` | `/api/v4/abi?id=uni-v4-pool-reader-v4` |
| `AssetUsdReaderV4` assetUsdReader | `0x048cEe092FBC02430f70d72360Ea3cA11F25aEEb` | `/api/v4/abi?id=asset-usd-reader-v4` |
| `HyperlaneHook(aggregation{merkleTreeHook, ourIgp})` hyperlaneHook | `0x909F08ECd42a2d71550ECD018e00D1E7f2E0d8C4` | - |
| `ISM our leaf = solo ISM (origin 4663)` ISM_our_leaf_solo_ISM_origin_4663 | `0x003645572A4CB9D52d2755e2cb62B332A5C52677` | - |
| `ISM our leaf = solo ISM (origin 8453)` ISM_our_leaf_solo_ISM_origin_8453 | `0xD56C7f2A27BE17CeD275345E5065A5a2eF11F331` | - |
| `ISM our leaf = solo ISM (origin 1)` ISM_our_leaf_solo_ISM_origin_1 | `0x60BDd37e065B195C767887bb3916E84b7F107D73` | - |
| `ISM our leaf = solo ISM (origin 56)` ISM_our_leaf_solo_ISM_origin_56 | `0xEAB96b8FA2f121880dd23DDfE6A0131Ed7bEc04d` | - |
| `ISM our leaf = solo ISM (origin 1399811149)` ISM_our_leaf_solo_ISM_origin_1399811149 | `0x6B82C7cb70111Afe7DA4FceFe50670ABbBaB2175` | - |
| `TokenomicsFactoryV24` tokenomicsFactory | `0x95f43B0D4c4144f2F5FfaC19a6fEAA8c67E41447` | - |
| `TokenomicsV24Implementation` tokenomicsImplementation | `0x484f5436aeaA8Da34Cf20010Ad6FA953fb147f76` | - |
| `SaleComposerV4` saleComposer | `0x39Fe3Bd47739Cf6410CD41327A389322a76f6749` | `/api/v4/abi?id=sale-composer-v4` |
| `CheapestComposerV4` cheapestComposer | `0x0913F320F035956cc6D092c422b9E288F9EF14d4` | `/api/v4/abi?id=cheapest-composer-v4` |

### solana

| Contract | Address | ABI or IDL |
| --- | --- | --- |
| `pangea_bridge_v4` bridge | `Eeb1VmcMeYEfjaDsnbqdnVK4NKvwTafm2EKfx3hJVF6N` | `/api/v4/abi?id=pangea-bridge-v4&kind=idl` |
| `pangea_ism_v4` ism | `Fayi3vmEvDCNXW5Cc1oDdcCwpadx71Z14z9gA4ygStov` | `/api/v4/abi?id=pangea-ism-v4&kind=idl` |
| `pangea_readers_v4` readers | `7BeRQpptTjniVtngbQBBBdTARua9MFXCbF1ek3FPP6G4` | `/api/v4/abi?id=pangea-readers-v4&kind=idl` |
| `pangea_launcher` launcher | `EnLq33Zqv6j15km7zxBXgwn8w6TiUxKQSeRosBFK8qZP` | `/api/v4/abi?id=pangea-launcher&kind=idl` |
| `ism.initialize` pda.ism.initialize | `3d768NP5LuBN4MzzJnSgTxBukWeNnXUiGZULrdXEj8vo` | - |
| `bridge.init_gap_config` pda.bridge.init_gap_config | `3ehkj847ekyN7cou7y9yRu5tXo2KXEw6tCDQjxfMK8QE` | - |
| `bridge.init_bridge` pda.bridge.init_bridge | `CRTPG9SC2PpfUSLZrvxJCHpFG1Asu2hGbQGe3QR1trMH` | - |
| `bridge.init_gap_delivery` pda.bridge.init_gap_delivery | `AKXEcHMEs2E1Ynpz9bx1QNfgpM5zYfVWHYUnxUqLGPpp` | - |
| `bridge.add_route.30416` pda.bridge.add_route.30416 | `952SsrMuy6S1fUX3KzzGEbosCgabvhwdxcesWcraXzax` | - |
| `bridge.add_route.30184` pda.bridge.add_route.30184 | `C5cjedbFNJk4ziBLwdsGJkgqmbmjT6AJqy5yoYhQpUQd` | - |
| `bridge.add_route.30101` pda.bridge.add_route.30101 | `AS6hV752tCtMRo4NgHBQ1M4MEqCNTiMZk83YhpBkY7uc` | - |
| `bridge.add_route.30102` pda.bridge.add_route.30102 | `5XiiFT5iA6gEWz3TMdCXyyByGePN8ydz3VU16asWjFLy` | - |
| `bridge.add_chain.4663` pda.bridge.add_chain.4663 | `9mLDWQfNS2DMPNKqrdjTiTdhzNMJuoNaF7qHibXiyidJ` | - |
| `bridge.add_chain.8453` pda.bridge.add_chain.8453 | `AFR63D2JqwhJk8KPRadW8UvVJmi63SzEPTsAHDZGZm3y` | - |
| `bridge.add_chain.1` pda.bridge.add_chain.1 | `2PwdDbt1EXLMRaNhgpeqhd8p4KxEbSxo6NbJ6RnryNLa` | - |
| `bridge.add_chain.56` pda.bridge.add_chain.56 | `3orpB3sNA5oWgfB2PjGTjMZJBUNTjzuZvbsvgFMUqnbZ` | - |
| `bridge.add_chain.99901` pda.bridge.add_chain.99901 | `9Rgn9WuDD2t7sCCLWDLEtkb6fhmJHCUN9DXv5oXPqPbB` | - |
| `bridge.add_chain.1399811149` pda.bridge.add_chain.1399811149 | `D66VowJMTk6n29S3Gm3ru3njNaRocrsSKajYvk65XAgp` | - |
| `bridge.wire_lz_route.4663.30416` pda.bridge.wire_lz_route.4663.30416 | `3VrKEbxnnQmp4JNL8CVYKH1JYmADEgcLEcV1qz8a9wSh` | - |
| `bridge.wire_lz_route.8453.30184` pda.bridge.wire_lz_route.8453.30184 | `Ayjxp2osZvU7gZxd7RLHGnQviicw67HeSH1jY8Mn4jTm` | - |
| `bridge.wire_lz_route.1.30101` pda.bridge.wire_lz_route.1.30101 | `D2huC3uAcLXtXH2yN7tP2PsD2jUin3e7i9R8zVgbyCSJ` | - |
| `bridge.wire_lz_route.56.30102` pda.bridge.wire_lz_route.56.30102 | `BZw9fLeK5bUUaeroLqBPNu3XnHFijsrSYCLwLGUni1qK` | - |
| `alt.create_extend` alt.shared | `5gZ6eh1H2acMvEhxcmZ9UDCxCaxphWuHQ4cCsym5ni4A` | - |
| `launcher.initialize` pda.launcher.initialize | `2rh4mKSwp6HzbUotsz3XAQ7xJNB9fza2oif9MLvTGFzy` | - |
| `launcher.add_operator.BhZ74CpzS42vUJKbwjLthkxV6VaHQDgUkUkC7QCfNqnS` pda.launcher.add_operator.BhZ74CpzS42vUJKbwjLthkxV6VaHQDgUkUkC7QCfNqnS | `DcWRVkDnPFeGkAjq3vSJrDqmoEhyP8J6qzAuWeT1fNkZ` | - |
| `pangea_bridge_v4 Store PDA` bridge.store | `BzPdmMbMoGSCZ8UjZA6tRqR1RDBR5ubjESQ1aQpY95xn` | - |
| `pangea_launcher fee_owner PDA` launcher.feeOwner | `FRsqKos8whrdQqq3KZ7LGZVnhdb3rDaTu6xxeT8n82D1` | - |

## v4 settings

Every v4 parameter is an admin setting per chain, most with a per-coin override, with no built-in range. The only refusals are arithmetic and the message format: a bridge fee of 10,000 bps or more, a pool fee of 1e6 or more, a zero address where an address is a key. Each setter takes effect at once and emits an event; there is no timelock. A setting that makes no sense, such as a floor above its ceiling, resolves the same way every time: the ceiling wins.

### What no setting can change

- An arrival is never credited more than the amount sent.
- No admin function can move, mint or seize anyone's tokens or pool liquidity.
- A pause stops only new sends: a message already sent can always be received: credited, or held and later released or refunded.
- No admin can change a coin's supply, balances or mint authority (on Solana it stays with the frozen program).

### The shared bridge program (Solana)

| Setting | Scope | Units | Default | Effect |
| --- | --- | --- | --- | --- |
| `margin_k_e6, margin_min_ppm, margin_max_ppm` | program, coin override | K x 1e6; ppm | 1e6; 1,000; 100,000 | the destination margin curve |
| `k_on, kk_e6, k_min_ppm, k_max_ppm` | program, coin override | on/off; K x 1e6; ppm | on; 2e6; 15,000; 200,000 | the backstop k |
| `lookback_sec` | program, coin override | seconds | 30 | the plain path's look-back |
| `record_min_age_slots, need_record_on` | program, coin override | slots; on/off | 3; on | a send, and a price-path arrival, needs a record at least N slots old (GapNeedRecord); keep N x 0.4 s below the look-back, or every send and arrival holds |
| `lock_on` | program, coin override | on/off | on | the buy's same-transaction sale lock; the check of every other instruction touching the pool or its hop pools is always on |
| `fee_cap_ppm, min_liquidity` | program, coin override | ppm; DAMM liquidity | 10,000; 0 | fee counted in the price paid and at the destination; least in-range liquidity read |
| `send_lamports, send_cu, swap_lamports, swap_cu, priority_micro_lamports` | program, coin override | lamports, compute units, micro-lamports per unit | 0 | the gas part of the cost cover |
| `sol_usd_min_e18, sol_usd_max_e18, cover_cap_usd_e18` | program, coin override | USD x 1e18 | unset; unset; $10 | the SOL price band and the cover cap |
| `burn_on` | program, coin override | on/off | on | on: the withheld part is burned. Off: nothing is withheld, the arrival is credited in full |
| `sends_paused; SendPaused per destination` | program; coin and route | on/off | off | refuses new sends; arrivals always land |
| `Escape` | coin | on/off | off | an emergency switch: arrivals credited in full |
| `BridgeFee, Delivery, Composers` | program | as v3 | as v3 | the bridge fee of new stores (below 10,000 bps; fixed in a store at its start), delivery keys, listed composers |
| `UsdAnchors` | program, 4 slots | mints | set at deploy | the tokens counted as exactly $1, where a coin's price path may end. A parameter: it allows or refuses no pair token. A USD anchor prices at $1 with no path, wrapped SOL by its path, any other token in dollars only |
| `Venue(kind, program)` | program, 6 reader kinds | program id | the mainnet programs | which program each price-path reader reads: Meteora DAMM v2, Orca Whirlpool, Raydium CLMM, Meteora DLMM, Raydium CPMM, Raydium AMM v4. Re-pointing a kind makes its paths unreadable until anyone replaces them |
| `RentMarkupBps` | program | bps | 1,000 | the markup on the token-account rent our delivery key pays when an arrival opens the recipient's account (rent x 1.10) |
| `LaunchesStopped` | program | on/off | off | stops new v4 coins |
| `init_gap_delivery (the gap admin)` | program | accounts | none | creates our delivery account (GapDeliveryV4) once: markup 1,000 bps, max age 900 s, LayerZero gas 1, no chain listed |
| `set_gap_delivery: Keepers, FeeTo` | program | two keys; account | none; unset | who may refresh the cost figures (and the admin); where swept charges go |
| `set_gap_delivery: MarkupBps, MaxAgeSec` | program | bps; seconds | 1,000; 900 | our charge = cost x (1 + markup), rounded up; how long a figure counts |
| `set_gap_delivery: StaleMode` | program | 0 refuse / 1 LayerZero | 1 (owner, 11-06) | what a send does when the figure is stale, never set or above its cap: 1 goes LayerZero's own way with no charge of ours; 0 refuses (6047, nothing moved) |
| `set_gap_delivery: LzGas` | program | gas | 1 | the lzReceive gas LayerZero's executor is asked for toward a chain our keys deliver |
| `set_gap_delivery: Eid, Cost, ComposeCost, Cap` | destination chain (8 slots) | endpoint id; lamports | none listed; 0 = no cap | which chains our keys deliver to, a figure set by hand, the compose figure, and the most a refresh may write (above it: 6050, nothing written; a figure above a lowered cap counts as stale) |
| `refresh_delivery_cost, refresh_compose_cost (keeper or admin)` | destination chain | lamports | none | the live cost figures, refreshed every minute by our keeper |
| `sweep_delivery_fees (anyone)` | program | none | none | pays every charge above the account's rent to the fee recipient; nobody can choose another payee |
| `Alt` | program | lookup table | none (required before launches) | the one shared address lookup table LayerZero's executor is handed; a wrong one only delays deliveries |
| `the coin's price path (passed in its launch)` | coin | 1 or 2 pools | found by the launch page | the pair token's dollar path: pools of the six venues above ending in a USD anchor, checked only to read at launch; of those that read, the deepest (the dollars a 2% move takes on its thinnest pool), never the shortest. No admin picks or approves it; the coin and bridge pages judge the path as stored (a thin one shows a weak price path badge, one that does not read is shown so), the risk is the creator's. Anyone may replace a stored path once it stops reading (never merely because a pool was touched that same second); the launch tooling first raises every v3 pool of the path to two price observations (increaseObservationCardinalityNext(2), charged in the fee), so a touch cannot make it stop reading. A path replaced since launch shows a “price path replaced since launch” badge, and anyone can put the launch path back whenever it reads (replaceCoinPath with the launch hops). On Solana the stored route's depth is not measured yet: its badge says “depth not measured”, not weak |
| `replace_quote_route (anyone)` | coin | 1 or 2 pools | none | once a coin's stored path stops reading, anyone may replace it with one that reads (the same checks); refused while the stored one still reads |
| `set_launcher, add_route (the deploy key)` | program | program id; RouteV4 per eid | the launcher; none | not admin settings: only the program's deploy key, before the program is frozen, and impossible after |
| `init_gap_config, propose_gap_admin, accept_gap_admin` | program | accounts | the owner at deploy | the gap config once, by the program's deploy key before the program is frozen; the admin in two steps |
| `withdraw_fee (the gap admin)` | coin | amount | none | the store's bridge fees (its escrow beyond what is locked), never a user's tokens; paid only to the platform's own account for the coin (the launcher's fee recipient), never to an account the admin names |
| `wire_peer(eid) (anyone); add_route (before the freeze)` | coin; program | endpoint id | none | a peer only from the route table written before the freeze, forced to the coin's EVM token address; no key can set a peer, the delegate, a library or a DVN |

### The launcher program (Solana)

| Setting | Scope | Units | Default | Effect |
| --- | --- | --- | --- | --- |
| `set_paused(paused)` | program | on/off | off | stops every launch at once; launched coins are untouched |
| `set_pool_fee_bps(bps)` | program | bps | 100 (1%) | the flat base fee every new pool opens with |
| `set_version(slot, version)` | program, 4 slots | program id, kind, on/off | empty | lists an OFT program version, or stops launching on it |
| `set_quote(slot, mint)` | program, 4 slots | mint | slot 0 wrapped SOL | the quote mints a pool may pair against |
| `propose_fee_recipient(key), accept_fee_recipient` | program | account | unset (no claim) | the platform's share of the LP fees, in two steps: the admin proposes, the new recipient accepts |
| `add_operator, remove_operator` | program | account | none | who may call launch |
| `clear_tokenomics (the platform admin only)` | coin, on Solana | none | none | clears a wrongly pinned tokenomics account (a stale creator role's pin): unlike turning tokenomics off, no fee claim runs first and nothing more is paid to the cleared account; this chain is off again, so the fee claim pays the coin's current creator role, which may then turn tokenomics on again |
| `claim_fees (anyone)` | coin | none | none | pays a launch's LP fees by v3's split to the fee recipient and the launch's creator; neither can be chosen by the caller |
| `launch_with_buys (a listed operator)` | launch | no list | a list of at most 32 | launch, plus the buys of a sealed list of the creator's, spending at most the quoted cap; a list that cannot be used is skipped and never fails the launch |
| `create_buy_list, add_buy_entries (the payer)` | list | none | 1 to 32 entries | opens and seals one payer's list for one launch; the money stays in the payer's own token account, with the list as delegate; nothing edits a sealed list |
| `claim_buy (anyone)` | list entry | none | none | pays one bought entry to its named wallet; the sender is repaid the token account's rent; the caller cannot change who is paid |
| `close_buy_list (the payer)` | list | none | once every bought entry is claimed | returns the list's lamports to the payer; the money needs no instruction of ours, plain SPL takes it back |
| `open_v4; stage_open_v4 then open_v4_staged (the opener)` | coin, on Solana | a frozen coin id, the opener's price, an optional opening buy and buy list | none | opens a shared-bridge coin on Solana: its 1B minted into its own pool at the opener's price, the opening buy and the list's buys in the same open; staged only when one transaction cannot hold the arguments |
| `co_buys (every payer signs the transaction)` | launch transaction, on Solana | 1 to 3 other payers; up to 32 entries, each a wallet, amount, minimum and deadline | none | right after the open in the same transaction, buys from each payer's own quote account; an entry past its deadline, under its minimum or beyond what its payer holds is skipped alone and never fails the launch; the web caps the entries so the one launch transaction fits Solana's size limit |
| `init_cobuy_pot (anyone)` | quote mint | none | none | creates the account co-signed buys of one quote pass through (empty between uses), once per quote; the caller pays its rent |
| `claim_cobuy (anyone)` | co-signed buy | none | none | pays one co-signed buy's coins to the wallet its entry named; the sender fronts that wallet's token account rent and cannot change who is paid |
| `enable_tokenomics (the coin's current creator)` | coin, on Solana | the chain's tokenomics account | off unless chosen at the open | turns this chain's tokenomics on, once: from then on the creator share of the LP fees goes to the coin's tokenomics account; this launch's fee claim runs right before it in the same transaction |
| `admin_enable_tokenomics (the platform admin only)` | coin, on Solana | the chain's tokenomics account | none | turns this chain's tokenomics on, or points it at another tokenomics account, at any time, whether or not the creator role is renounced; this launch's fee claim runs right before it in the same transaction |
| `disable_tokenomics (the platform admin only)` | coin, on Solana | none | none | turns this chain's tokenomics off again; this launch's fee claim runs right before it in the same transaction |
| `admin_enable_tokenomics (the platform admin only)` | coin, on Solana | the chain's tokenomics account | none | turns this chain's tokenomics on, or re-points it to another tokenomics account while on, at any time, renounced or not; this launch's fee claim runs right before it in the same transaction |
| `clear_tokenomics (the platform admin only)` | coin, on Solana | none | none | clears a wrongly pinned tokenomics account (not an off: nothing is claimed to the cleared account first); the coin's current creator may then turn it on again |
| `add_opener_liquidity_v4 (the opener, for itself)` | coin's official pool, on Solana | coin and quote amounts, a minimum liquidity | none | adds the opener's own two-sided position at the pool's current price, right after the open in the same transaction (or later): the coins from its opening buy, the quote from its own account; the position is the opener's, not locked, and can be withdrawn; refused under the opener's minimum (slippage bound); what is not used stays in its accounts |
| `close_staged_open (who staged)` | staged open | none | none | gives back the rent of staged open arguments that were never used |
| `acquire_quote_unit (anyone, for themselves)` | launch transaction | lamports to wrap; a Jupiter v6 or pool swap | 1 lamport for wrapped SOL | right before a launch, buys the one pair-token unit the pool's creation takes from the operator (wraps its SOL, swaps it into its own pair-token account, then checks that account holds at least one unit), so the operator holds no float; nobody but the caller's own money moves. Our launches charge the unit's quoted cost, cap what the swap may spend at 1.5 times that charge, and check the swap's accounts before the operator signs it |

### Off-chain switches

| Setting | Scope | Units | Default | Effect |
| --- | --- | --- | --- | --- |
| `NEXT_PUBLIC_GAP_V4` | web | on/off | off | shows the v4 bridge card, the v4 launch option and these docs |
| `PANGEA_GAP_V4` | backend | on/off | off | lets the launch worker launch v4 coins and runs the v4 watchdog; existing v4 coins are recorded and swept either way |
| `FACTORY_V4, FACTORY_V4_BLOCK` | per chain env | address; block | unset | the chain's immutable v4 factory: the launch worker, the registry, list-launch, the EVM fee sweep, the gas keeper and the supply mirror read it (v3's delivery, DVN and arb do not) |
| `FEE_COLLECTOR_V4` | per chain env | address | unset | a v4 collector apart from v3's, if any: the launch-id-in-use check and the stranger-payment check read it; it never marks a launch paid (the ticket's own collector does) |
| `GAP_V4_HOLD_ALERT_S, GAP_V4_REPEAT_S` | v4 watchdog | seconds | 900; 21,600 | how long a send may go without an arrival before it is raised, and how often a lasting alert repeats |
| `GAP_V4_COVER_BLOCKS, GAP_V4_WATCH_STATE_FILE` | v4 watchdog | blocks; path | 2,000; the unit's state directory | how far back a coin with no cursor starts the cover check; where what was said is kept |
| `SWEEP_V4_MIN_QUOTE` | v4 Solana sweep | quote base units | 100,000 | the least LP fee claim worth sending |
| `SWEEP_V4_GAP_ADMIN_KEY_FILE` | v4 Solana sweep | must stay unset | unset | set = the sweeper refuses to start (G-OFF L-20: the GapConfigV4 admin key never goes on the sweeper host); the v4 bridge fee is reported, and withdrawing it is a manual owner step |
| `PANGEA_KEEPER_MAX_STEP_BPS` | deviation keeper, web build, SDK, bots | bps, whole, 500 to 5,000 | 5,000 | the largest raise the deviation keeper may post for one cost figure in one post (a bigger move goes in steps); every paid send adds max(15%, this) to its quoted fee and gets the unused part back in the same transaction; an invalid value: the keeper refuses to start |
| `DELIVERY_V4_MIN_BACKUP_S` | delivery bot | seconds | 20 | the least wait before our keys back up LayerZero's executor on a v4 arrival |
| `DELIVERY_PRIVATE_RPC_ETHEREUM, DELIVERY_PRIVATE_RPC_BSC` | delivery bot | provider list | unset | send deliveries through private relays on Ethereum and BSC |
| `GAP_V4_DELIVERY_WARN_S, GAP_V4_DELIVERY_PAGE_S` | v4 watchdog | seconds | 300; 600 | the age of a Solana delivery figure at which the watchdog warns, then pages (read off the delivery account itself, beside the keeper's own alerts); it also says when the mode refuses, when charges wait to be swept and when no fee recipient is set |
| `KEEPER_V4, KEEPER_V4_ALLOWANCE_PPM` | optional keeper | on/off; ppm | off; 22,000 | records only coins with an open gap beyond the allowance, at most once per third of the look-back, within a lamport budget for each 24 hours |

## v4 API map

| Route | What it does |
| --- | --- |
| `POST https://www.pangea.trade/api/v1/launch/v4/open` | Your own wallet's launch of a queued coin on one chain. |
| `POST https://www.pangea.trade/api/v1/launch/v4/open-later` | Open another listed chain later. |
| `POST https://www.pangea.trade/api/v1/launch/v4/registered` | List a launch once it is mined. |
| `POST https://www.pangea.trade/api/v1/launch/v4/tokenomics` | Turn tokenomics on or off on one chain. |
| `POST https://www.pangea.trade/api/v1/launch/v4/handover` | Move or renounce the creator role. |
| `POST https://www.pangea.trade/api/v1/launch/v4/sponsored/prepare` | Quote a platform launch. |
| `POST https://www.pangea.trade/api/v1/launch/v4/sponsored/submit` | Hand a paid platform launch over. |
| `GET https://www.pangea.trade/api/v1/launch/v4/sponsored/readiness` | Which chains a platform launch can open now. |
| `POST https://www.pangea.trade/api/tokenomics/v4/switch` | A coin's tokenomics switch on one chain. |
| `GET https://www.pangea.trade/api/v4/abi` | Every v4 ABI and IDL. |
| `GET https://www.pangea.trade/api/v4/contracts` | Every v4 address, per chain. |
| `https://www.pangea.trade/api/bridge/v4/…` | Bridging a v4 coin: quotes, arrivals, history. |

Each route's body, answer and limits: [v4 from a program →](https://www.pangea.trade/app/docs/v4#v4-launch-api)

## v4 from a program: open, open later, list, tokenomics, handover

Each is a POST with a JSON body and passes the same gate as every other Launch API route: the optional `X-Pangea-Key` and its address allowlist, the flood ceiling, the rate-limit headers and the per-key usage record. They are counted with the chain-read steps (authorization, pay, submit, kit and the v4 sponsored submit): 300 in ten minutes per address in all (unless the site sets another figure), none with a partner key; a custom key may set its own limit per route (`v4-open`, `v4-open-later`, `v4-registered`, `v4-tokenomics`, `v4-handover`). A browser page on another site is refused (403). Nothing is signed or sent: each answer is for your own wallet.

### POST /api/v1/launch/v4/open

- Body `{ launchId, chain }` (at most 4 KB): the launch id (32 bytes of hex) of a queued launch whose ticket gives the creator their own v4 leg, and that leg's chain, its pay chain: ethereum, base, bsc or robinhood.
- Answer `{ pre, tx, owed, quote, via, takeoverAt }`: the transactions the creator's own wallet (the ticket's creator) sends in order, every observation-cardinality bump of the pool still owed (`pre`, each mined before the next) and then the open itself (`tx`), priced now. Send before `takeoverAt`; after it Pangea's launcher sends that leg.
- Refused: 400 for a bad launch id or chain; 404 when no launch with that id is queued; 409 when the leg cannot be built for you, for example when the ticket does not verify or is another launch's, the launch has no v4 leg of the creator's, the chain is not its pay chain, the leg was launched already or dropped, is not ready yet, or its time is up; 424 when the queue or the chain cannot be read just now (try again).
- This is not an open-later: it only sends the creator's own leg of a launch still queued, on its pay chain, before `takeoverAt`. Opening another listed chain of a coin already launched, at any time, is `POST /api/v1/launch/v4/open-later`.
- Where v4 is switched on (`NEXT_PUBLIC_GAP_V4=on`); 404 otherwise. Once it is mined, list it with `POST /api/v1/launch/v4/registered`.

### POST /api/v1/launch/v4/open-later

- Opens another listed chain of a coin already launched, at any time, as the coin page's Open a listed chain card does. Two steps, each a POST with `{ id, chain, step }` (at most 32 KB), id being the coin's slug, launch id or token address and chain one of its listed chains not open yet. Each answer is `{ ok: true, step, txs, next }`: unsigned transactions for your own wallet, in order, each one decoded back and compared with what you asked before it is answered.
- Step `"authorize"`, by the coin's current creator (anyone once the role is renounced), on the coin's home chain. EVM home: `{ caller, opener, payout?, days? }` answers `authorizeOpen` on the home chain's shared bridge for `caller` (refused 403 for anyone but the current creator), priced with the bridge's own quote, lasting `days` (1 to 7, default 7). Opening Solana when the coin names no Solana payout wallet yet needs `payout` (a Solana wallet): the answer then starts with `transferCreator`, which sets it and keeps the EVM wallet, and that one must be mined before the authorisation is sent; `opener` defaults to `payout`.
- Solana home (opening an EVM chain): `{ pusher, opener, deadline?, payout?, payoutSet? }`, `pusher` being the coin's Solana creator wallet. A coin that names no EVM payout wallet yet first gets, with `payout` (an EVM wallet), the Solana `transfer_creator` that sets it and keeps your Solana payout wallet; once it landed, ask again with `payoutSet: true`. Then the answer is the shared bridge's open authorisation sent from Solana for the EVM `opener`, until `deadline` (`"1h"`, `"1d"` or `"7d"`, default `"1d"`), with its fee (Hyperlane: at most) in `feeText`.
- Step `"open"`, by the authorised wallet (or the original creator within the coin's first hour). An EVM chain: `{ opener, price, quote?, openingBuy?, devBuys?, buys? }`, price being your opening price in the quote per coin (native when `quote` is left out), `openingBuy` an optional own buy in the quote and `devBuys` (`[{ recipient, amount }]`) your own buys split to other wallets. Launch buys of OTHER wallets ride the same open (owner rule: launch buys and the bundle kit at every launch kind, open-later too): ask first with `askFor` (`[{ payer, quoteAmount, minOut?, recipient? }]`, same price and quote): the answer `{ step: "asks", asks, typedData, termsHash }` is what each payer signs (an EIP-712 LaunchBuy over this open's terms) after approving the launch core for its amount; then send their signatures in `buys` (`[{ payer, recipient, quoteAmount, minOut, deadline, nonce, sig }]`). Every signature is checked against this open's terms before anything is built, and every buy is decoded back from the open and compared. On a native quote each other wallet deposits its amount first, refundable any time: the asks then carry `funding: "deposit"` and `deposits` (one `depositLaunchBuy(nonce)` transaction per payer, value = its amount); at the open every native buy's deposit is read and a short one is refused 409 with the deposit still to send. The answer names the bundle kit (`bundleKitV4`). The coin is read from a landed open on another chain and checked against its id; the answer is the quote approval when one is needed, then the launch core's open, simulated when nothing has to be mined before it. Solana: `{ opener, price, uri, openingBuy?, devBuys?, buys? }`, price in USDC per coin and `uri` the metadata, fixed at the open; `openingBuy` your own buy and `devBuys` (`[{ recipient, amount }]`) and `buys` (`[{ wallet, amount, minOut? }]`) your list of buys to other wallets, in USDC, all funded by the opener in the same transaction; the answer is one Solana transaction for `opener`, which must be the authorised wallet, before the deadline. Launch buys of OTHER payers on Solana: `coBuys` (`{ payers: [{ payer }], entries: [{ payer, wallet, amount, minOut }] }`, at most 5 co-payers, never together with your own list): the answer is ONE version 1 transaction that the opener and every co-payer sign (each from its own USDC). Step `"kit"` (EVM): `{ launchRaw, buyRaws, preRaws?, targetBlock? }`: your open signed and not sent plus the buyers' own signed buys; the answer is the bundle (Ethereum, BNB Chain: one `eth_sendBundle`, the open first) or the ordered send plan (Base, Robinhood: no bundle relay, same block usual, not guaranteed).
- Launch buys and the bundle kit at open-later (both, as at every launch). Native-quote buys of other wallets are paid from each payer's own refundable deposit: the asks answer each payer's deposit transaction, step `"open"` answers 409 with every missing deposit (`deposits[]`, only the shortfall) until all are funded, and step `"deposits"` with `{ payer, nonces? }` lists a payer's deposits on that chain with their withdraw transactions, at any time. Solana: co-buys of other payers ride the open in one v1 transaction, up to the co-payers that fit its shape (5 with USDC, fewer with a Token-2022 quote). The Solana bundle kit: step `"open"` with `kit: true` answers the held open (signed, not sent; it answers `salt` and `mint`), step `"kit"` with `{ opener, salt, launchWire, buyers, tip }` answers the kit buyers' transactions to sign, and with `buyerWires` the Jito bundle, launch first, every buyer transaction checked.
- Refused: 400 for a bad field or step; 403 when the wallet may not do that step (not the current creator; not authorised for that chain yet, or the authorisation expired); 404 when the coin is not launched here; 409 when the chain is the home, open already or not listed, or the bridge or launch core refuses (said); 424 when a chain cannot be read right now (try again). Once the open is mined, list it with `POST /api/v1/launch/v4/registered`.

### POST /api/v1/launch/v4/registered

- Body (at most 1 KB): `{ chain, txHash }` for an open mined on an EVM chain, or `{ chain: "solana", coinId }` for Solana. The server reads the receipt, or the shared bridge's coin record on Solana, itself and lists the open from what it reads, never from the request.
- Answer `{ slug, coinId }`. A chain already listed is never replaced, so sending the same open again is harmless.
- Refused: 400 for a bad chain, hash or coin id; 409 when it cannot be read or recorded yet (try again in a minute) or is not a v4 open of this site; 422 with `code: "NOT_LISTABLE"` when the coin is open on chain but the site will not list its name or symbol (a retry will not help).

### POST /api/v1/launch/v4/tokenomics

- The tokenomics switch of one chain (`POST /api/tokenomics/v4/switch` behind this gate). Body (at most 1 KB) on an EVM chain: `{ id, chain, op, caller, vault?, settle? }` with op `"enable"` (with `vault`, an existing tokenomics vault), `"disable"` or `"clear"`. The answer is `{ ok: true, tx: { to, data, value } }` for `caller`'s wallet, or 409 `{ ok: false, error, why }` with the launch core's own refusal. The creator may only turn it on, while it is off and the role is not renounced; disable, clear and the admin's on or re-point are the platform admin's.
- On Solana the ops here are the platform admin's: `"enable"` (on or re-point, `vault` = the tokenomics account) and `"disable"` answer `{ ok, ixs, lines, facts }`, `"clear"` answers `{ ok, ix }`; a wallet that is not the admin is refused (403 on enable and disable, 409 on clear). The creator's own Solana enable is the coin page's, not this route.
- The role push after a handover is sent from the coin's home chain, whichever it is. EVM home: `op "push" { id, chain, caller }` builds `pushCreator` on the home chain's shared bridge that copies the creator role to `chain` (another open EVM chain or Solana), for the `caller` wallet to send and pay (anyone may push). Solana home: `op "push" { id, chain, pusher }` builds the Solana transaction(s) that copy it to that EVM chain, for the `pusher` wallet to sign and pay. For both, `op "role" { id, chain }` reads the home's copy against that chain's, `current: true` once it landed. `op "authorize"` (Solana home only) adds `opener` and `deadline` (unix seconds) and builds the open authorisation from Solana; for an EVM-home coin it answers 409 and names `POST /api/v1/launch/v4/open-later`. An enable refused because the chain's copy of the role is behind answers 409 with the push to send first.
- Refused: 400 for a bad field; 404 when the coin is not a v4 coin launched here; 409 when it is not open on that chain yet; 424 when the chain cannot be read right now.

### POST /api/v1/launch/v4/handover

- Body (at most 1 KB): `{ id, op: "transfer", newEvm, newSvm? }` or `{ id, op: "renounce" }`, id being the coin's slug, launch id or token address.
- Answer `{ ok: true, op, chain, coinId, tx: { to, data, value }, push }`: the transaction on the coin's home chain's shared bridge, for the current creator's own wallet (the bridge refuses any other). Without `newSvm` the coin's current Solana payout wallet is kept, read from the bridge. The home chain changes at once; `push` says how the other open chains follow: `POST /api/v1/launch/v4/tokenomics { id, chain, op: "push", caller }`, the push from that EVM home chain for your EVM wallet.
- Refused: 400 for a bad op, id, newEvm or newSvm; 404 when the coin is not launched here; 409 when it is not a full-scope v4 coin, when the shared bridge is not deployed on its home chain here, and for a Solana-home coin: its handover is the shared bridge's Solana instruction, signed on the coin page, which this route does not build; 424 when the current role cannot be read (try again).

> **Note:** The open-later, registered, tokenomics and handover routes answer 404 unless the full-scope switch is on too (`NEXT_PUBLIC_GAP_V4_FULL=on`).

## v4 questions

### Do I choose LayerZero or Hyperlane?

No. Every v4 coin uses both, always. A route that touches Elysium uses Hyperlane only.

### Which chains can my coin be on?

Six: Ethereum, Base, BNB Chain, Robinhood Chain, Solana and Elysium.

### Do I have to open every chain at launch?

No. Open the ones you want now and the others later. [Opening a chain later →](https://www.pangea.trade/app/docs/v4#v4-open-later)

### What does launching from my own wallet cost?

No launch fee. You pay each chain's gas.

### Who earns the trading fee?

The platform takes 20%; the rest is the creator's.

### How do holder rewards work?

On each chain you pick the reward token and the share holders get. One minimum holding applies on every chain and can be changed per chain later. [Tokenomics →](https://www.pangea.trade/app/docs/v4#v4-tokenomics)

### What do PANGEA holders get?

On each chain, 40% of the platform's take, paid every 5 minutes. [Equity share →](https://www.pangea.trade/app/docs/v4#v4-equity-share)

### Can I hand my coin over?

Yes, at once, or renounce it. [Handing over →](https://www.pangea.trade/app/docs/v4#v4-handover)

### Is my coin's liquidity locked?

Yes, on every chain. No function withdraws it.
