nBasis Vault

Contract Addresses & Configuration

// nBASIS vault addresses (same on both Plume and Eth chains)
const VAULT_ADDRESS = "0x11113ff3a60c2450f4b22515cb760417259ee94b"
const TELLER_ADDRESS = "0xAD60d43a33cA26e40eAcc5BBc60f1C7136FFB89b"
const ACCOUNTANT_ADDRESS = "0xa67d20A49e6Fe68Cf97E556DB6b2f5DE1dF4dC2f"

const INFRA = {
  predicateProxyAddress: "0x6104fe10ca937a086ba7AdbD0910A4733d380cB6",
  nativeFeeTokenAddress: "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
  bridgeMessageGas: 100000,
}

const PLUME_MAINNET = {
  chainId: 98866,
  layerZeroEndpointId: 30370,
  atomicQueueAddress: "0x220dc6d4569c1f406d532f9633d5be5bc86e8264",
  depositToken: {
    address: "0xdddd73f5df1f0dc31373357beac77545dc5a6f3f",
    decimals: 6,
    symbol: "pUSD",
    defaultSlippagePercentage: 0.005,
  }
}

const ETH_MAINNET = {
  chainId: 1,
  layerZeroEndpointId: 30101,
  atomicQueueAddress: "0x220dc6d4569c1f406d532f9633d5be5bc86e8264",
  depositToken: {
    address: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
    decimals: 6,
    symbol: "USDC",
    defaultSlippagePercentage: 0.005,
  }
}

const VAULT_DECIMALS = 6
const PUSD_ADDRESS = PLUME_MAINNET.depositToken.address
const USDC_ADDRESS = ETH_MAINNET.depositToken.address
const PLUME_ATOMIC_QUEUE_ADDRESS = PLUME_MAINNET.atomicQueueAddress
const ETH_ATOMIC_QUEUE_ADDRESS = ETH_MAINNET.atomicQueueAddress

Summary: 6 Distinct Paths

Deposits (3 paths):

  • USDC Ethereum -> nBASIS Plume (cross-chain deposit)

  • pUSD Plume -> nBASIS Plume (same-chain deposit)

  • USDC Ethereum -> nBASIS Ethereum (same-chain deposit)

Redemptions (3 paths):

  • nBASIS Plume -> USDC Ethereum (cross-chain redemption)

  • nBASIS Plume -> pUSD Plume (same-chain redemption)

  • nBASIS Ethereum -> USDC Ethereum (same-chain redemption)


DEPOSIT FLOWS

Path 1: Ethereum -> Plume (Cross-Chain Deposit)

1

Compliance Check (isDepositAndBridge=true)

Response: { data: { isCompliant: boolean, predicateMessage: {...} } }

2

Exchange Rate Query

3

Calculate Minimum Mint

4

Calculate Bridge Fee

5

Token Approval

6

Cross-Chain Deposit

Result: USDC deposited on Ethereum, nBASIS minted on Plume


Path 2: Plume -> Plume (Same-Chain Deposit)

1

Compliance Check

Response: { data: { isCompliant: boolean, predicateMessage: {...} } }

2

Exchange Rate Query

3

Calculate Minimum Mint

4

Token Approval

5

Direct Deposit

Result: pUSD deposited on Plume, nBASIS minted on Plume


Path 3: Ethereum -> Ethereum (Same-Chain Deposit)

1

Compliance Check

Response: { data: { isCompliant: boolean, predicateMessage: {...} } }

2

Exchange Rate Query

3

Calculate Minimum Mint

4

Token Approval

5

Direct Deposit

Result: USDC deposited on Ethereum, nBASIS minted on Ethereum


REDEMPTION FLOWS

Path 1: Plume -> Ethereum (Cross-Chain Redemption)

1

Preview Bridge Fee

2

Bridge Shares to Ethereum

3

Exchange Rate Query for Withdrawal

4

Calculate Atomic Price with Slippage

5

Vault Token Approval

6

Create Cross-Chain Withdrawal Request

7

Monitor Cross-Chain Withdrawal

Result: nBASIS bridged from Plume to Ethereum, then queued for USDC redemption on Ethereum


Path 2: Plume -> Plume (Same-Chain Redemption)

1

Exchange Rate Query for Withdrawal

2

Calculate Atomic Price with Slippage

3

Vault Token Approval

4

Create Same-Chain Withdrawal Request

5

Monitor Same-Chain Withdrawal

Result: nBASIS queued for pUSD redemption on Plume


Path 3: Ethereum -> Ethereum (Same-Chain Redemption)

1

Exchange Rate Query for Withdrawal

2

Calculate Atomic Price with Slippage

3

Vault Token Approval

4

Create Same-Chain Withdrawal Request

5

Monitor Same-Chain Withdrawal

Result: nBASIS queued for USDC redemption on Ethereum


Key Calculation Formulas

Minimum Mint (Deposits):

Atomic Price (Withdrawals):

Both pUSD on Plume and USDC on Ethereum use 6-decimal quote units in this guide.