nACRDX Integration
Integration guide for minting and redeeming nACRDX on supported EVM chains.
nACRDX is the Plume ACRDX Vault. This page is organized around the recommended Actions API path first, then the direct contract path for advanced EVM integrations.
Outline
Quick reference
| Field | Value |
|---|---|
| Vault | Plume ACRDX Vault |
| Symbol | nACRDX |
| Slug | nest-acrdx-vault |
| EVM share token | 0x2a3e301dbd45c143dfbb7b1ce1c55bf0bbf161cb |
| Share decimals | 6 by default (BNB Chain: 18) |
| EVM Actions API base URL | https://api.nest.credit/v1/actions |
Supported assets
EVM
| Chain | Deposit or redemption asset | nACRDX NestVault | Decimals |
|---|---|---|---|
Plume98866 | USDC0x2223...a7af | 0xf991...1f2b | 6 |
Plume98866 | pUSD0xdddd...6f3f | 0xa7d4...66b3 | 6 |
Ethereum1 | USDC0xa0b8...eb48 | 0xf991...1f2b | 6 |
BNB Chain56 | USDT0x55d3...7955 | 0xba1d...faae | 18 |
EVM Integration
Actions API (recommended)
Use the EVM Actions API when your app wants Plume Vaults to handle quote construction, vault selection, Predicate compliance checks, calldata encoding, and transaction simulation for nACRDX. The API returns transactions that your app signs and sends with the user's EVM wallet.
This section covers:
- Mint quote
- Build mint transactions
- Redeem quote
- Build redemption transactions
- Pending, update, and claim
- Instant redemption
The base URL is:
https://api.nest.credit/v1/actionsAll amounts are raw base-unit integer strings. Do not send decimal UI amounts.
Mint quote
Use the quote route before building transactions. This returns the expected raw share amount, decimals, fee fields, rate fields, and a preview of the transaction steps.
curl -X POST https://api.nest.credit/v1/actions/vaults/nest-acrdx-vault/mint/quote \
-H 'content-type: application/json' \
-d '{
"depositAsset": "0x222365ef19f7947e5484218551b56bb3965aa7af",
"depositAmount": "1000000",
"chainId": 98866
}'Example response shape:
{
"data": {
"slug": "nest-acrdx-vault",
"shareTokenAddress": "0x2a3e301dbd45c143dfbb7b1ce1c55bf0bbf161cb",
"depositAsset": "0x222365ef19f7947e5484218551b56bb3965aa7af",
"depositAmount": "1000000",
"depositDecimals": 6,
"shareAmount": "...",
"shareDecimals": 6,
"rate": "...",
"rateDecimals": 6,
"feeAmount": "0",
"fees": {
"ratePpm": 0,
"flatAmount": "0",
"maxRatePpm": 0,
"maxFlatAmount": "0"
},
"steps": [
{ "label": "approve", "description": "Approve PredicateProxy to spend the deposit asset" },
{ "label": "deposit", "description": "Deposit through NestVaultPredicateProxy" }
]
}
}steps is a preview. The actual build-tx response may omit approve if the wallet already has sufficient allowance.
Build mint transactions
Use build-tx when the user is ready to deposit. The recipient is the EVM address that signs as depositor and receives the minted nACRDX shares.
curl -X POST https://api.nest.credit/v1/actions/vaults/nest-acrdx-vault/mint/build-tx \
-H 'content-type: application/json' \
-d '{
"depositAsset": "0x222365ef19f7947e5484218551b56bb3965aa7af",
"depositAmount": "1000000",
"chainId": 98866,
"recipient": "0x00000000000000000000000000000000000000ab"
}'Submit the returned transactions in order. Every returned transaction uses the chain ID from the request. By default, the API simulates the transaction bundle before returning it. User-facing apps should generally keep simulation enabled.
Redeem quote
Use the redeem quote route before submitting a redemption. This quotes the redemption asset amount and validates the selected asset for this vault.
curl -X POST https://api.nest.credit/v1/actions/vaults/nest-acrdx-vault/redeem/quote \
-H 'content-type: application/json' \
-d '{
"redemptionAsset": "0x222365ef19f7947e5484218551b56bb3965aa7af",
"shareAmount": "1000000",
"chainId": 98866
}'For this guide, treat the NestVault redemption flow as the supported redemption path. If an integration receives an unsupported route value, surface it as an integration error instead of trying to fall back to a different contract flow.
Build redemption transactions
Use this route to submit a redemption request on the same EVM chain.
curl -X POST https://api.nest.credit/v1/actions/vaults/nest-acrdx-vault/redeem/build-tx \
-H 'content-type: application/json' \
-d '{
"redemptionAsset": "0x222365ef19f7947e5484218551b56bb3965aa7af",
"shareAmount": "1000000",
"chainId": 98866,
"user": "0x00000000000000000000000000000000000000ab"
}'NestVault redemptions return:
approve, if the selected NestVault does not already have sufficient share-token allowance.requestRedeem, to submit the asynchronous redemption request.
After the request becomes claimable, use the claim routes below.
Pending, update, and claim
For NestVault-backed redemptions:
curl -X POST https://api.nest.credit/v1/actions/vaults/nest-acrdx-vault/claim/pending \
-H 'content-type: application/json' \
-d '{
"redemptionAsset": "0x222365ef19f7947e5484218551b56bb3965aa7af",
"chainId": 98866,
"user": "0x00000000000000000000000000000000000000ab"
}'curl -X POST https://api.nest.credit/v1/actions/vaults/nest-acrdx-vault/claim/build-tx \
-H 'content-type: application/json' \
-d '{
"redemptionAsset": "0x222365ef19f7947e5484218551b56bb3965aa7af",
"chainId": 98866,
"user": "0x00000000000000000000000000000000000000ab"
}'claim/build-tx builds a transaction to claim all currently claimable shares for the selected NestVault and user.
The update routes are for reducing an existing pending redemption:
POST /vaults/nest-acrdx-vault/update-redeem/pending
POST /vaults/nest-acrdx-vault/update-redeem/build-txnewShareAmount is the final pending share amount, not the delta to remove.
Instant redemption
When instant liquidity is available for the selected asset, use:
POST /vaults/nest-acrdx-vault/instant-redeem/quote
POST /vaults/nest-acrdx-vault/instant-redeem/liquidity
POST /vaults/nest-acrdx-vault/instant-redeem/build-txThe instant-redeem request body uses redemptionAsset, shareAmount, chainId, and user. receiver is optional and defaults to user.
Direct onchain
Use direct contracts only when your integration needs lower-level control than the Actions API provides. This path requires you to handle the full flow yourself:
This section covers:
For a direct integration, you handle:
- Validate the selected chain, vault slug, and asset.
- Check Predicate compliance and obtain a valid Predicate message.
- Read the correct NestVault for the asset.
- Quote shares or redemption assets.
- Apply any app-level slippage or UX checks.
- Submit ERC-20 approvals.
- Submit deposit, redeem, update, instant-redeem, or claim calls.
- Track asynchronous redemption state.
Main nACRDX contracts
| Contract | Address |
|---|---|
| nACRDX share token | 0x2a3e...61cb |
| NestVaultPredicateProxy | 0xfc0c...9035 |
| USDC NestVault (Plume, Ethereum) | 0xf991...1f2b |
| pUSD NestVault (Plume) | 0xa7d4...66b3 |
| USDT NestVault (BNB Chain) | 0xba1d...faae |
For accountants, roles, and other shared protocol contracts, use the Smart Contracts page as the source of truth.
Direct mint outline
For nACRDX minting, the direct flow is:
- Read the NestVault for the selected deposit asset and chain.
- Call
previewDeposit(depositAmount)on that NestVault to estimate shares after fees. - Get a Predicate message for the user and chain.
- Approve
NestVaultPredicateProxyto spend the deposit asset. - Call
NestVaultPredicateProxy.deposit(depositAsset, depositAmount, recipient, nestVault, predicateMessage).
Minimal TypeScript outline:
import { encodeFunctionData, parseUnits } from "viem";
const chainId = 98866;
const recipient = "0x00000000000000000000000000000000000000ab";
const depositAsset = "0x222365ef19f7947e5484218551b56bb3965aa7af";
const depositAmount = parseUnits("1", 6);
const nestVault = "0xf991a58e1cfd4ac26843c33e0eb2adf47d341f2b";
const predicateProxy = "0xfc0c4222b3a0c9b060c0b959dec62442036b9035";
// 1. previewDeposit on nestVault
// 2. get Predicate message for recipient
// 3. approve depositAsset -> predicateProxy
// 4. encode PredicateProxy deposit call
const data = encodeFunctionData({
abi: NestVaultPredicateProxyAbi,
functionName: "deposit",
args: [depositAsset, depositAmount, recipient, nestVault, predicateMessage],
});The Actions API's mint/build-tx route performs these steps for app integrations and is the preferred reference for expected calldata shape.
Direct redeem outline
For nACRDX redemptions, use the selected NestVault for the redemption asset:
- Approve the NestVault to spend nACRDX shares, if allowance is insufficient.
- Call
NestVault.requestRedeem(shareAmount, user, user). - Wait until shares become claimable.
- Call
NestVault.redeem(claimableShares, user, user)to claim the redemption asset.
If you need to reduce a pending redemption before it is claimable, call NestVault.updateRedeem(newShareAmount, user, user).
Errors and edge cases
| Condition | Expected behavior |
|---|---|
| Unsupported vault slug | API returns 400. |
| Unsupported chain ID | EVM Actions API returns 400. |
| Unsupported asset for the selected chain | API returns 400. |
| Non-compliant wallet | EVM mint build returns 400; Solana mint build returns 403. |
| Deposit too small to mint shares | EVM quote/build returns 400. |
| Failed transaction simulation | EVM build-tx returns 400 unless skipSimulation is true. |
| RPC, indexer, or Predicate service issue | API returns 500. |
| Existing allowance is sufficient | approve may be omitted from returned transactions. |
Implementation notes
- Treat every API amount as a raw integer amount.
- Use the API's returned
depositDecimals,shareDecimals, andredemptionDecimalswhen rendering UI values. - Execute returned EVM transactions in order.
- Never assume
approveis present. Render and execute the returnedtransactions[]. - Do not reuse quotes indefinitely. Re-quote close to the time the user signs.
- For direct contract integrations, prefer the registry and Smart Contracts page over copying addresses from old integration examples.