nAlpha Vault

Contract Addresses & Configuration

// nALPHA vault addresses (same on both Plume and Eth chains)
const VAULT_ADDRESS = "0x593cCcA4c4bf58b7526a4C164cEEf4003C6388db"
const TELLER_ADDRESS = "0xc9F6a492Fb1D623690Dc065BBcEd6DfB4a324A35"
const ACCOUNTANT_ADDRESS = "0xe0CF451d6E373FF04e8eE3c50340F18AFa6421E1"

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 -> nALPHA Plume (cross-chain):

API compliance check, get exchange rate on Ethereum, compute minimumMint with slippage, calculate bridge fee, approve USDC on Ethereum, deposit and bridge to Plume.

pUSD Plume -> nALPHA Plume (same-chain): API compliance check, get exchange rate on Plume, compute minimumMint with slippage, approve pUSD on Plume, direct deposit on Plume.

USDC Ethereum -> nALPHA Ethereum (same-chain): API compliance check, get exchange rate on Ethereum, compute minimumMint with slippage, approve USDC on Ethereum, direct deposit on Ethereum.

Redemptions (3 paths)

nALPHA Plume -> USDC Ethereum (cross-chain): preview Plume->Ethereum bridge fee, bridge shares to Ethereum, get exchange rate on Ethereum, compute atomicPrice with slippage, approve nALPHA on Ethereum, create withdrawal request for USDC on Ethereum, monitor Ethereum withdrawal status.

nALPHA Plume -> pUSD Plume (same-chain): get exchange rate on Plume, compute atomicPrice with slippage, approve nALPHA on Plume, create withdrawal request for pUSD on Plume, monitor Plume withdrawal status.

nALPHA Ethereum -> USDC Ethereum (same-chain): get exchange rate on Ethereum, compute atomicPrice with slippage, approve nALPHA on Ethereum, create withdrawal request for USDC on Ethereum, monitor Ethereum withdrawal status.


DEPOSIT FLOWS

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

1

1. Compliance Check (isDepositAndBridge=true)

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

2

2. Exchange Rate Query

3

3. Calculate Minimum Mint

4

4. Calculate Bridge Fee

5

5. Token Approval

6

6. Cross-Chain Deposit

Result: USDC deposited on Ethereum, nALPHA minted on Plume


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

1

1. Compliance Check

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

2

2. Exchange Rate Query

3

3. Calculate Minimum Mint

4

4. Token Approval

5

5. Direct Deposit

Result: pUSD deposited on Plume, nALPHA minted on Plume


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

1

1. Compliance Check

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

2

2. Exchange Rate Query

3

3. Calculate Minimum Mint

4

4. Token Approval

5

5. Direct Deposit

Result: USDC deposited on Ethereum, nALPHA minted on Ethereum


REDEMPTION FLOWS

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

1

1. Preview Bridge Fee

2

2. Bridge Shares to Ethereum

3

3. Exchange Rate Query for Withdrawal

4

4. Calculate Atomic Price with Slippage

5

5. Vault Token Approval

6

6. Create Cross-Chain Withdrawal Request

7

7. Monitor Cross-Chain Withdrawal

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


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

1

1. Exchange Rate Query for Withdrawal

2

2. Calculate Atomic Price with Slippage

3

3. Vault Token Approval

4

4. Create Same-Chain Withdrawal Request

5

5. Monitor Same-Chain Withdrawal

Result: nALPHA queued for pUSD redemption on Plume


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

1

1. Exchange Rate Query for Withdrawal

2

2. Calculate Atomic Price with Slippage

3

3. Vault Token Approval

4

4. Create Same-Chain Withdrawal Request

5

5. Monitor Same-Chain Withdrawal

Result: nALPHA 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.

Last updated