Skip to main content

Invest into a vault

This guide explains how to invest in and redeem from Centrifuge vaults, using both synchronous and asynchronous vault types. We’ll walk through:

  • How to deposit and redeem in a synchronous deposit vault (e.g., deJTRSY for T-bills).
  • How to interact with an asynchronous vault (e.g., JTRSY), which operates in two distinct phases for deposits and redemptions.

Synchronous deposit vaults (e.g., deJTRSY)​

Synchronous vaults process deposits immediately within a single transaction, and processes redemptions asynchronously.

Depositing into a synchronous vault​

To deposit assets (e.g., USDC) and receive vault shares:

vault.deposit(assets, receiver);
  • assets: Amount of underlying asset to deposit (e.g., 1000 * 1e6 for 1000 USDC).
  • receiver: Address to receive the vault shares.

This call mints shares in exchange for assets immediately.

Redeeming from a synchronous vault​

Redemptions occur in two steps:

Step 1: Submit a redemption request​

vault.requestRedeem(shares, user, user);
  • shares: Amount of shares to redeem.
  • The second and third user arguments specify both the owner and the receiver of the redemption claim.

This step locks in your redemption, signaling intent to redeem vault shares.

Step 2: Claim redemption and withdraw assets​

After the redemption window has passed (depending on vault-specific rules):

vault.withdraw(vault.maxWithdraw(user), receiver, user);
  • vault.maxWithdraw(user) computes the maximum amount of assets that can now be withdrawn.
  • receiver: Address to receive the underlying asset (e.g., USDC).

Asynchronous vaults (e.g., JTRSY)​

Asynchronous vaults batch and process deposits at set intervals. Deposits and withdrawals are split into pending and claimable phases.

Requesting a deposit​

Instead of depositing directly, you submit a request:

vault.requestDeposit(assets, user, user);
  • assets: Amount of underlying asset to request deposit for.
  • The second and third user values specify ownership and destination.

Your request is queued and will be processed by the issuer of the pool.

Claiming a deposit (minting shares)​

After the deposit request is fulfilled:

vault.mint(vault.maxMint(user), user);
  • vault.maxMint(user) returns the number of shares available to mint based on your request.
  • user: Receives the minted vault shares.

Redeeming (same as synchronous)​

Asynchronous vaults use the same redemption flow as synchronous ones:

  1. Request to redeem:

    vault.requestRedeem(shares, user, user);
  2. Claim redemption:

    vault.withdraw(vault.maxWithdraw(user), receiver, user);