Skip to main content

Prerequisites

Before you begin, make sure you have:
  1. An Amplify API key — Contact Paxos Labs to get one
  2. An Ethereum RPC endpoint — From Alchemy, Infura, QuickNode, or any provider
  3. A wallet with the deposit token (e.g., USDC) and ETH for gas fees
  4. The ABI snippets — Provided in each guide (no need to compile Solidity). See Concepts for an explanation of ABIs.

Obtaining Contract Addresses

Contract addresses differ by vault and chain. All contract addresses needed for direct integration are available via the Amplify GraphQL API — the same API the SDK uses internally.

GraphQL Query

Send a POST request to https://api.paxoslabs.com/graphql with your API key:
curl -s -X POST "https://api.paxoslabs.com/graphql" \
  -H "Content-Type: application/json" \
  -H "x-api-key: $AMPLIFY_API_KEY" \
  -d '{
    "query": "query AmplifySdkConfigs($chainId: Int, $yieldType: YieldType) { amplifySdkConfigs(chainId: $chainId, yieldType: $yieldType) { id chainId yieldType vault { id name chainId boringVaultAddress tellerModuleId accountantModuleId withdrawQueueModuleId communityCodeDepositorModuleId supportedAssets { address chainId depositable withdrawable symbol tokenName decimals } } } }",
    "variables": {}
  }' | jq
Pass variables to filter results. For example, {"chainId": 1} returns only Ethereum mainnet vaults, and {"yieldType": "CORE"} returns only CORE strategy vaults.

Response

Each item in amplifySdkConfigs contains a vault object with all the contract addresses you need:
{
  "data": {
    "amplifySdkConfigs": [
      {
        "id": "config-id",
        "chainId": 1,
        "yieldType": "CORE",
        "vault": {
          "id": "vault-id",
          "name": "Amplify Core",
          "chainId": 1,
          "boringVaultAddress": "0x...",
          "tellerModuleId": "0x...",
          "accountantModuleId": "0x...",
          "withdrawQueueModuleId": "0x...",
          "communityCodeDepositorModuleId": "0x...",
          "supportedAssets": [
            {
              "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
              "chainId": 1,
              "depositable": true,
              "withdrawable": true,
              "symbol": "USDC",
              "tokenName": "USD Coin",
              "decimals": 6
            }
          ]
        }
      }
    ]
  }
}

Mapping Response Fields to Contract Addresses

GraphQL FieldContractUsed For
vault.boringVaultAddressBoringVaultERC-20 vault share token — approvals, balances
vault.communityCodeDepositorModuleIdDistributorCodeDepositorDepositsdeposit(), depositWithPermit()
vault.withdrawQueueModuleIdWithdrawQueueWithdrawalssubmitOrder(), cancelOrder()
vault.accountantModuleIdAccountantExchange rate — getRateInQuoteSafe() for slippage/share conversion
vault.tellerModuleIdTellerPause state — isPaused()
The GraphQL field communityCodeDepositorModuleId is a legacy name. The contract it points to is the DistributorCodeDepositor. Use this address wherever the documentation refers to the distributorCodeDepositorAddress.
withdrawQueueModuleId and communityCodeDepositorModuleId can be null for vaults that don’t support external withdrawals or deposits. Check for non-null values before using.

Supported Assets

The supportedAssets array on each vault tells you which tokens can be deposited or withdrawn:
FieldDescription
addressERC-20 token contract address
chainIdChain the token is on
depositableWhether this token can be deposited
withdrawableWhether this token can be used as the want asset on withdrawal
symbolToken symbol (e.g., "USDC")
decimalsToken decimals (e.g., 6 for USDC)

Filtering by Chain or Yield Type

Pass variables to narrow results:
# Ethereum mainnet only
curl -s -X POST "https://api.paxoslabs.com/graphql" \
  -H "Content-Type: application/json" \
  -H "x-api-key: $AMPLIFY_API_KEY" \
  -d '{
    "query": "query AmplifySdkConfigs($chainId: Int, $yieldType: YieldType) { amplifySdkConfigs(chainId: $chainId, yieldType: $yieldType) { id chainId yieldType vault { id name chainId boringVaultAddress tellerModuleId accountantModuleId withdrawQueueModuleId communityCodeDepositorModuleId supportedAssets { address chainId depositable withdrawable symbol tokenName decimals } } } }",
    "variables": { "chainId": 1 }
  }' | jq
# CORE yield type only
curl -s -X POST "https://api.paxoslabs.com/graphql" \
  -H "Content-Type: application/json" \
  -H "x-api-key: $AMPLIFY_API_KEY" \
  -d '{
    "query": "query AmplifySdkConfigs($chainId: Int, $yieldType: YieldType) { amplifySdkConfigs(chainId: $chainId, yieldType: $yieldType) { id chainId yieldType vault { id name chainId boringVaultAddress tellerModuleId accountantModuleId withdrawQueueModuleId communityCodeDepositorModuleId supportedAssets { address chainId depositable withdrawable symbol tokenName decimals } } } }",
    "variables": { "yieldType": "CORE" }
  }' | jq

Available Yield Types

ValueDescription
COREStandard yield strategy
PRIMEMaps to CORE in the SDK
TREASURYTreasury-backed strategy
TBILLMaps to TREASURY in the SDK
FRONTIERHigher-risk/reward strategy
LENDINGMaps to FRONTIER in the SDK

Code Examples

Any language with an Ethereum JSON-RPC library can interact with Amplify contracts. The guides cover the contract methods you need to call — here are popular libraries for each language:
Library: viem
pnpm add viem

Next Steps

  • Concepts — Understand smart contracts, ABIs, approvals, permits, and vault architecture
  • Deposits — Implement your first deposit flow