For the complete documentation index, see llms.txt. This page is also available as Markdown.

Address References

pAMM uses Native Router V6 and Native RFQ Pool V6. See Addresses for the full V6 layout on every chain.

BNB Chain (chainId 56)

Contract
Address

NativeRouter

0x1fDED89D98CBeADd96a109D28689c2638025dad3

NativeRFQPool

0x8Ac1009D5f13660CE7089901E51459142ad50793

WBNB

0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c

Pair
Engine
Direct swap
Notes

QQQB – USDT

0xa02223bBc5F60D8FD0F42E2b5ab1FC3C37be7652

Enabled

Live for test.

WBNB – USDT

0x1d22bd156eE77135afdfB7cbb10C7B8029572699

Disabled

USDC – USDT

0x06a9F8e8967076BbcEF5facc25FA3767Cab7bebf

Disabled

Other V6 chains

Arbitrum, Base, Monad, X Layer, Morph, and Robinhood Chain have the same V6 router/pool layout (see the Addresses) but no pAMM engines assigned at this snapshot.

For Ethereum, Native is working with Titan and other builders to integrate pAMM.

How to confirm a pair yourself

The pool cannot enumerate pairs. Seed token pairs, then keep those with getEngine(a, b) != address(0) and engine.rfqPool() == pool.

const engine = await pool.getEngine(tokenA, tokenB); // zero = not listed
const pairKey = await pool.getPairKey(tokenA, tokenB);
const enabled = await pool.directSwapEnabled(pairKey);
const boundPool = await engine.rfqPool(); // must equal the NativeRFQPool you use
  • tokenA / tokenB order does not matter. address(0) is normalized to WETH/WBNB on the pool.

  • pairKey is keccak256(abi.encode(token0, token1)) after WETH-normalize, with token0 < token1.

  • Also require router.isNativePools(pool) == true.

Last updated