nCredit Vault

Contract Addresses & Configuration

// nCREDIT vault addresses (same on both Plume and Eth chains)
const VAULT_ADDRESS = "0xa5f78b2a0ab85429d2dfbf8b60abc70f4cec066c"
const TELLER_ADDRESS = "0x27200293aac3d04d2b305244f78d013b3c759f9d"
const ACCOUNTANT_ADDRESS = "0x486e0362b0641c0fca21cac2e317f6e21a8b19f3"

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 -> nCREDIT Plume (cross-chain; 6 ops)

  • pUSD Plume -> nCREDIT Plume (same-chain; 5 ops)

  • USDC Ethereum -> nCREDIT Ethereum (same-chain; 5 ops)

Redemptions (3 paths):

  • nCREDIT Plume -> USDC Ethereum (cross-chain; 7 ops)

  • nCREDIT Plume -> pUSD Plume (same-chain; 5 ops)

  • nCREDIT Ethereum -> USDC Ethereum (same-chain; 5 ops)


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, nCREDIT 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, nCREDIT 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, nCREDIT 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: nCREDIT 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: nCREDIT 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: nCREDIT 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.