Skip to main content

PAXGy Integration

This guide covers integrating PAXGy on-chain: checking access, reading the share rate, minting with PAXG, and redeeming back to PAXG.
Minting and redemption are available on Ethereum mainnet only. PAXGy can be held and transferred on Ethereum and X Layer. See Supported networks.
Prefer not to manage ABIs and addresses yourself? API Calldata Integration returns ready-to-sign transactions for every flow on this page.

Prerequisites

  • An approved wallet address (see Access). Minting and redemption calls from a non-approved address will revert.
  • An Ethereum mainnet RPC endpoint.
  • A wallet library (viem, ethers, wagmi, etc.).
  • PAXG to deposit (for minting).
Addresses and ABIs below are for Ethereum mainnet. Always confirm the current addresses with your Paxos Labs contact at integration time before moving funds.

Contract addresses (Ethereum mainnet)

Contract addresses (X Layer, chain ID 196)

PAXG does not exist on X Layer. There is no asset to mint from or redeem into, so minting and redemption are Ethereum-only. X Layer is hold-and-transfer only: mint on Ethereum and transfer across, and transfer back to Ethereum before redeeming.

Checking access

A wallet must be approved before it can mint or redeem. If your integration surfaces mint/redeem actions, gate them on the wallet’s approval status and poll it, so that access granted by Paxos Labs takes effect without a reconnect. The exact approval check (contract and parameters) is provided during onboarding.

Reading the share rate

PAXGy accrues value through a share rate that increases over time, so one PAXGy is always worth an increasing amount of PAXG. Read the current rate from the Rate oracle to preview mints and redemptions:
Treat any client-side conversion of PAXGy ↔ PAXG as an estimate derived from this rate.

Minting PAXGy

Minting is a two-step flow: approve PAXG to the deposit entrypoint, then deposit.
  1. Approve PAXG. Grant the deposit entrypoint an allowance for the PAXG amount you intend to deposit.
  2. Deposit. Call the deposit entrypoint with the PAXG amount and a minimum PAXGy amount to protect against rate movement.
The trailing attestation tuple is left empty for PAXGy, which gates access at the wallet level rather than per deposit. Pass the empty values shown above.

Sizing minimumMint

minimumMint is your floor on PAXGy received. Two things move between reading the rate and the transaction landing:
  • The share rate, which is read when you prepare and can change before the transaction lands.
  • The deposit fee, which is derived from the live PAXG:gold price. When PAXG trades below its gold peg, a fee is charged equal to that shortfall, so the depositor is credited at the lower of peg and market. When PAXG is at or above peg the fee is zero.
Compute the expected shares from the rate, subtract the fee the module quotes, then apply a tolerance:
The fee module reverts when its price feed is stale. That is deliberate, because it blocks deposits priced on stale data, but it means calculateOfferFees is not guaranteed to return. Handle the revert rather than treating it as a network error.
PAXG can carry an on-transfer fee. If one is ever enabled, the vault receives less than depositAmount; size minimumMint with that in mind as well.

Redeeming PAXGy

Redemption is not instant. You submit a withdrawal request to the Withdraw queue offering PAXGy for PAXG. The request is fulfilled and PAXG is delivered to your wallet.
  • Submit. submitOrder creates a redemption request. Each request is represented on-chain as an order NFT owned by your wallet.
  • Track. getOrderStatus returns the request’s current state.
  • Cancel. cancelOrder cancels a request while it is still pending (not yet processed).
Order status values:
Do not assume redemption settles in the same transaction. Track the order status and handle the refund states (4–6), which return your PAXGy if a request cannot be fulfilled.

Cross-chain (Ethereum ↔ X Layer)

PAXGy balances move between Ethereum (chain ID 1) and X Layer (chain ID 196) via Chainlink CCIP. The tokens are burned on the source chain and issued on the destination. There is no wrapped representation. X Layer supports exactly these two operations on PAXGy: receiving it (issued on arrival) and sending it back (burned on departure). Minting from PAXG and redeeming to PAXG stay on Ethereum, because PAXG itself is not deployed on X Layer. Transfers go through the cross-chain transfer entrypoint. Both the quote and the transfer take the same routing struct:
Two details that are easy to get wrong:
  • chainSelector is the destination chain’s EVM chain ID, not a CCIP selector. The entrypoint maps it to CCIP’s own identifier internally.
  • bridgeFeeToken is the 0xEeee…EEeE sentinel, not the zero address. Passing address(0) reverts.

Quote, then send the exact fee

msg.value is compared for equality against the quoted fee. Overpaying reverts just like underpaying, so never pad the value. The quote is priced per block and moves with gas conditions, so quote and send in the same flow, and re-quote if the user delays.

Route constraints

messageGas must fall inside the range configured for the destination route. Read it before transferring:
A route with allowMessagesTo === false or a zero targetTeller is not open, and the transfer will revert.
Cross-chain transfers are permissioned per wallet, the same as minting and redemption. An address that has not been enabled for transfers will revert even on an open route.

Depositing and transferring together

The transfer entrypoint also exposes depositAndBridge, which mints and transfers in one transaction. Because it consumes PAXG, it is callable on Ethereum only. Use it to put PAXGy on X Layer without a separate transfer step:
This path goes directly to the transfer entrypoint rather than the deposit entrypoint, so no mint fee is charged. Compute minimumMint from the gross deposit amount, not a post-fee amount. It takes no to argument: the PAXGy is issued to destinationChainReceiver on the destination chain.

Settlement is not immediate

The source transaction confirming does not mean the PAXGy has arrived. CCIP finalizes on its own schedule; poll the destination balance rather than treating the source receipt as completion.

What’s next

Overview

What PAXGy is, how the share rate works, and who can access it.

PAXG

The gold-backed asset that underpins PAXGy.