# Introduction

![](/files/LRYvTwlBuZuw5gbKMcx7)

## What is August?

August (previously, Fractal) is building web3 infrastructure allowing all on-chain financial assets to interact with and collateralize against each other via a universal margin account – starting with existing crypto assets and expanding to real world assets.

Our goal is to make On-Chain Finance as capital efficient as CeFi.

## Value Proposition

August is an institutional-grade platform — all of our borrowers go through KYC/KYB. August enables capital efficiency for institutions that are currently deployed on-chain, while also giving institutions that cannot interact with DeFi directly a way to do so by bringing bilateral agreements on-chain. In doing so, capital-efficiency is unlocked, and transparency is improved, while maintaining institutional-grade compliance.

August supports institutional clients by improving:

1. Cost of capital: On-Chain Finance today is primarily fully collateralized. By creating cross-margin collateralization tooling, August brings down the cost of capital and makes it far more efficient to engage in the space. The cost of capital value proposition is universal, whether it’s an early stage fintech startup, a traditional or crypto native fund, or a DAO treasury.
2. Access to credit: August account structure and risk engine unlocks the collateral value of users’ assets in a segregated and controlled environment.
3. Transparency of risk and reserves: August enables a fully transparent and programmable chain of credit, providing better credit monitoring and trust between borrowers and lenders.

## What do you support today?

1. DeFi protocols: interact with any DeFi application via Account Abstraction and WalletConnect as long as the relevant smart contract permissions are whitelisted.
2. OTC bilateral agreements: August contracts tokenize bilateral agreements including options, forwards, total return and interest rate swaps. These contracts rely on off-chain price feeds between two counterparties and automatically handle margining.
3. Spot: on-chain order execution algorithms (e.g. TWAP, VWAP) with full transparency and verifiable proof of reserves.

In addition, August offers 24/7 client support for all institutional clients.


# Protocol Overview

The architecture is composed of the following components:

### On-chain loans

Institutional lenders that structure loans OTC to institutional borrowers shown above. These are segregated loans whereby the lender whitelists the borrower's address, chain, collateral type, LTV, rate and term as well as the contract calls the loaned assets can engage with and whether it faces a market maker and is delta-neutral.

### Lending pools

These are on chain wallets and vaults of the following types:

1. Segregated credit pools: permissioned and lender specific on-chain credit facilities with specific risk constraints. For example, we could create a credit facility that is only underwriting delta-neutral basis strategies on ETH MainNet.
2. Integrations on top of DeFi-native lending protocols such as Clearpool, Maple, Morpho, Term or Aave.
3. August operated public pools (USDC, ETH, WBTC): permissionless and composable DeFi pools.

### Wallet (Subaccounts)

This is the core smart contract wallet. It is owned by the customer with select exposed functions to the risk-engine such as liquidation or the ability emergency unwind a position.

### Strategy contracts

1. Adapters on top of existing DeFi protocols. Protocols supported include Aave, Compound, Curve, Convex, Uniswap, GMX, Paraswap, 1inch as well as all of their forks on different EVM chains.
2. Structured product contracts: total return swap, interest rate swap, forwards and options. These contracts rely on an off-chain pricing feed between two counterparties and automatically handle margining.

### Account Abstraction

Similar to Gnosis Safe, August wallets can connect to any DeFi protocol via wallet-connect account abstraction. Users are able to set contract call level whitelists and permissions and interact with any DeFi protocol on any EVM chain.

### Risk engine

1. The risk engine is a software module that monitors the health of August wallets, triggers margin calls, and liquidates customer positions should this be required. This logic is running off-chain and has permissions to perform the required operations on-chain. As it reaches maturity, the risk-engine will become an oracle and relayer network storing data on a data-availability layer with a fully on-chain liquidation market
2. We have built our underwriting framework for each asset based on an adaptation of the [CME’s SPAN Methodology](https://www.cmegroup.com/clearing/risk-management/span-overview/span-2-methodology.html) including parameters such as volatility and price ranges, cross-asset correlation, holder distribution, and order book depth. We intend to make these standardized ratings public and leverage them as public marketing good for the space.
3. The August team is currently running the risk engine but will enlist external partners to run it once we open our risk engine SDK.

### Insurance Pool

The initial capital base will come from lenders/LPs in exchange for yield. As the network gains traction, part of the network fees will be used to fund the insurance pool until it becomes self-sustaining.


# TWAP

TWAP (Time-Weighted Average Price) is a trading algorithm that allows users to execute large trades over a specified time period, breaking down the total amount into smaller orders to minimize market impact. This feature is now available for users to run directly on our platform.

### Accessing the TWAP Feature <a href="#accessing-the-twap-feature" id="accessing-the-twap-feature"></a>

To access the TWAP feature, navigate to the Trade Modal and select the TWAP section located below the Paraswap call. The TWAP section has three expandable subsections:

1. **Place New Order**
2. **Active TWAPs**
3. **TWAP History**

### Place New Order <a href="#id-1.-place-new-order" id="id-1.-place-new-order"></a>

In this section, users can set up a new TWAP order.

1. **Token Selector**: Use the token selector to choose the tokens you want to sell and buy.
2. **Limit Price (optional)**: Specify the limit price for the trade.
3. **Slippage Tolerance (in bps)**: Specify the slippage you are wiling to accept beyond the quote received,
4. **Number of Orders**: Input the number of smaller orders to break the total amount into.
5. **Time Interval**: Set the interval between orders (in seconds, minutes, or hours).
6. **Place Order Button**: Click this button to finalize and place your order.
7. **Start Time (optional)**: Specify the start time of your first order. This will default to starting upon trade submission.

<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXmCdFTPUHEQ60lKvKop0%2Fuploads%2F6JshjvnxEz19GZ7MWEUR%2FScreenshot%202024-07-17%20at%2018.04.03.png?alt=media&#x26;token=c2fe54ba-c512-40a0-86c4-1b8a099ff21d" alt="" width="375"><figcaption></figcaption></figure>

{% hint style="warning" %}
By default, the TWAP algorithm will stop after attempting the number of orders specified above. This means that the order might not get fully filled if the limit price condition is not satisfied or if an order fails.\
\
\&#xNAN;*Note: we are working on adding an option to exceed the initial number of orders to fill the full-size to be released in the next few weeks*
{% endhint %}

### 2. Active TWAPs <a href="#id-2.-active-twaps" id="id-2.-active-twaps"></a>

This section displays currently active TWAP orders.**Components**

1. **Active TWAP List**: Shows a list of active TWAP orders.
   * Each row displays:
     * The tokens being sold and bought
     * The amount of tokens being sold
     * The percentage of the order completed
     * Options to cancel the order and view more details
2. **In-Depth Details**: When expanded, each row shows detailed information about the order, including start time, time interval, source token, destination token, amount, limit price, number of orders, and whether all orders are set to be completed.

### 3. TWAP History <a href="#id-3.-twap-history" id="id-3.-twap-history"></a>

This section displays the history of completed TWAP orders.**Components**

1. **TWAP History List**: Similar to the active TWAPs list but includes completed orders.
2. **In-Depth Details**: Each row can be expanded to show detailed information about the completed order.

<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXmCdFTPUHEQ60lKvKop0%2Fuploads%2FWqA8O4MOczsvPfeHL04O%2FScreenshot%202024-07-17%20at%2018.08.56.png?alt=media&#x26;token=69f39157-cf80-4c29-b556-06a92f1d8fa3" alt="" width="375"><figcaption></figcaption></figure>


# Risks and Audits

Risks entail economic and security problems, like smart contract, oracle and liquidation risks. Security audits are professional assessments on whether the code are safe and correct.

## Risks

### **Smart Contract Risks**

The protocol will be interacting with a number of smart contracts, all of which impose risks. This can be both known and unknown risks that could result in the failure or vulnerability on the smart contracts which could result in assets being locked or lost forever.

### **Oracle Risks**

Liquidations depend on a live, accurate price feed from oracles. Oracle downtime, incorrect prices, or manipulation can cause wrongful liquidations. Fallback systems, safety switches, and emergency notification systems are in place to mitigate this risk.

### **Bridge Risks**

The protocol interacts with various bridges to move assets from blockchain to blockchain. While all bridges have been carefully reviewed for their risks and liquidity constraints, risks of bridge hacks and loss of funds cannot be alleviated.

### **Who bears the risk in case the risk engine fails?**

There are three layers to risk mitigation:

1. The protocol’s insurance pool takes the first loss.
2. The protocol’s treasury as a second loss.
3. Should (1) and (2) be depleted, the losses will have to be socialized amongst users.

Note: risk parameters significantly penalize supported protocols that do not have insurance pools or coverage themselves. This implies a de-facto first risk mitigation layer before August protocol gets affected.

## Audits

{% hint style="danger" %}
Security audits don't eliminate risks fully. Please do not deposit more assets than you can afford to lose.
{% endhint %}

### Zellic Audit - August 2023

{% file src="/files/qoTtpHCWJQtayBfIQMmW" %}

### Zellic Audit - March 2023

{% file src="/files/uDBbycHke7P7nqEMsMqG" %}

### Sigma Prime Audit - August 2024

{% file src="/files/Lzf1MCh4y2LEyt33cOQG" %}

### ChainSecurity Audit - January 2025

{% file src="/files/T8THh3IMS9s940MOOmRS" %}


# Contract Addresses

### ETHEREUM Addresses

| Contract                             | Address                                                                                                               |
| ------------------------------------ | --------------------------------------------------------------------------------------------------------------------- |
| **USDF**                             | [0x51acB1ea45c1EC2512ae4202B9076C13016dc8aA](https://etherscan.io/address/0x51acB1ea45c1EC2512ae4202B9076C13016dc8aA) |
| **Vault**                            | [0x3EAa4b3e8967c02cE1304C1EB35e8C5409838DFC](https://etherscan.io/address/0x3eaa4b3e8967c02ce1304c1eb35e8c5409838dfc) |
| **Yield Reserve**                    | [0xbA83B569e99B6afc2f2BfE5124460Be6f36a4a56](https://etherscan.io/address/0xba83b569e99b6afc2f2bfe5124460be6f36a4a56) |
| **Yield Reserve Whitelist**          | [0xF6dDD14b0233320E1d5415Ccf3B9545Df2335670](https://etherscan.io/address/0xF6dDD14b0233320E1d5415Ccf3B9545Df2335670) |
| **Crosschain Configuration Manager** | [0x3e3AE6472f14066F3C7a393e9664ddC75d0133e6](https://etherscan.io/address/0x3e3AE6472f14066F3C7a393e9664ddC75d0133e6) |
| **Crosschain Whitelist**             | [0x6A021D4Fb9cf0DA44AF3128F4fa69699e6C8E912](https://etherscan.io/address/0x6A021D4Fb9cf0DA44AF3128F4fa69699e6C8E912) |

## Arbitrum Addresses

| Contract                    | Address                                                                                                              |
| --------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| USDF                        | [0xae48b7C8e096896E32D53F10d0Bf89f82ec7b987](https://arbiscan.io/address/0xae48b7c8e096896e32d53f10d0bf89f82ec7b987) |
| Yield Reserve               | [0x7d7068fB0398906C693DBFc425584FD5b58c4B60](https://arbiscan.io/address/0x7d7068fb0398906c693dbfc425584fd5b58c4b60) |
| Vault                       | [0x80e1a981285181686a3951B05dEd454734892a09](https://arbiscan.io/address/0x80e1a981285181686a3951b05ded454734892a09) |
| Yield Reserve Whitelist     | [0x25b8510577D7377D218652818f416BddcFb616A2](https://arbiscan.io/address/0x25b8510577d7377d218652818f416bddcfb616a2) |
| Proxy Factory               | [0x38a2F24e426db57c54741Aee7A83B29eBda42724](https://arbiscan.io/address/0x38a2f24e426db57c54741aee7a83b29ebda42724) |
| Proxy Admin - USDF          | [0x45954be7765e7f5E987192028C8244461F0fdcba](https://arbiscan.io/address/0x45954be7765e7f5e987192028c8244461f0fdcba) |
| Proxy Admin - Vault         | [0x61ABaaFf9AE5c1fB9cB3127c78141883Dd70f890](https://arbiscan.io/address/0x61abaaff9ae5c1fb9cb3127c78141883dd70f890) |
| Proxy Admin - Yield Reserve | [0xCADDc115AaAd8eAc8f428a77A3Fb41BE06b3919e](https://arbiscan.io/address/0xcaddc115aaad8eac8f428a77a3fb41be06b3919e) |


# API Reference

The August Digital API is a comprehensive RESTful API designed for DeFi portfolio management and trading operations.

## August Digital API Documentation

> For detailed API specifications, refer to our [OpenAPI documentation](https://api.augustdigital.io/api/v1/docs).

### Overview

This API provides access to subaccount management, swap functionality, and integrations with popular DeFi protocols.

**Base URL:** `/api/v1`\
**Authentication:** API Key (Header: `x-api-key`)

## Core Features

### Subaccount Management

* **Portfolio Overview**: Get comprehensive subaccount summaries including token balances, DeFi positions, and total account values
* **Health Monitoring**: Real-time health factor calculations for risk management
* **Multi-chain Support**: Manage assets across multiple blockchain networks

### Swap & Trading

* **Multi-market Quotes**: Get competitive swap quotes from various DEX aggregators
* **Cross-chain Swaps**: Execute token swaps across different blockchain networks
* **Fee Transparency**: Clear fee structure with normal and stable batch transaction fees

### DeFi Protocol Integrations

**Trader Joe (Avalanche DEX)**

* **Liquidity Management**: Deposit and withdraw from liquidity pools
* **Position Rebalancing**: Automated rebalancing of liquidity positions
* **Reward Claiming**: Claim accumulated trading fees and incentives

**Benqi (Avalanche Lending)**

* **Supply Assets**: Lend tokens to earn interest
* **Borrow Assets**: Borrow against collateral
* **Debt Management**: Repay loans and withdraw supplied assets

**Morpho (Advanced Lending)**

* **Vault APY Analytics**: Get real-time APY data for Morpho vaults

### Advanced Analytics

* **Historical Data**: Time-series data for APY, asset ratios, and performance metrics
* **Risk Assessment**: Health factor monitoring and loan-to-value calculations
* **Portfolio Insights**: Detailed breakdowns of positions across protocols and chains

## Authentication

All protected endpoints require an API key passed in the header:

```
x-api-key: YOUR_API_KEY
```

## Response Format

All API responses follow consistent JSON formatting with proper error handling and validation. The API uses standard HTTP status codes and provides detailed error messages for troubleshooting.

## Rate Limits & Best Practices

* Use the health check endpoint (`/ping`) to verify API connectivity
* Implement proper error handling for 422 validation errors
* Cache frequently accessed data like market information
* Use the `await_confirmation` parameter judiciously for transaction endpoints


# TypeScript SDK


# Quick Start

The August Digital SDK provides a TypeScript API for August services and resources. You can use the TypeScript API to build applications or libraries for the browser or Node.js.

[![npm version](https://badge.fury.io/js/@augustdigital%2Fsdk.svg?icon=si%3Anpm)](https://www.npmjs.com/package/@augustdigital/sdk)

The August Digital SDK provides a comprehensive TypeScript methods for interacting with August Digital vaults and services across multiple blockchain networks. Whether you're building web applications, backend services, or integrations, the SDK offers a unified interface for EVM and Solana chains.\
If you would like to integrate our SDK on your own front end, please reach out to us\
as we would need to add your domain to our whitelist so you do not get restricted by CORS.

### Key Features

#### Multi-Chain Support

* **EVM Chains**: Ethereum, Arbitrum, Base, BSC, Avalanche, and more — `wagmi/viem` and `ethers` signers supported
* **Solana**: Native Solana program support with full vault functionality
* **Stellar**: Stellar vault deposit, redeem, and position queries
* **Sui**: Ember vault read operations
* Unified interface across all supported chains

#### Comprehensive Vault Operations

* Query all vaults or specific vault details
* Fetch user positions and balances
* Get loan data and allocations
* Retrieve historical APY and TVL data
* Track user transaction history

#### Transaction Support

* Deposit assets into vaults (EVM and Solana)
* **Adapter deposits** with alternative tokens (ETH, WETH, native tokens)
* Multi-asset vault deposits
* Request withdrawals/redemptions
* Claim available redemptions
* Approve token spending

## Getting Started

### Installation

Install the package in your project directory with:

```shell-session
npm install @augustdigital/sdk
```

{% embed url="<https://www.npmjs.com/package/@augustdigital/sdk>" %}

### Initialization

Then, initialize the SDK in your project using your August API key and various provider RPC URLs:

```typescript
import AugustSDK from '@augustdigital/sdk';

const sdk = new AugustSDK({
  // Required: stable kebab-case slug identifying your application.
  appName: 'acme-trader',
  // Provide the RPC endpoints for onchain interactions.
  // At least one RPC endpoint is required.
  providers: {
    1: `https://mainnet.infura.io/v3/${INFURA_API_KEY}`,
    42161: `https://arb-mainnet.g.alchemy.com/v2/${ALCHEMY_KEY}`,
  },
  keys: {
    august: 'YOUR_AUGUST_API_KEY',   // Optional: required for vault allocations, health factors, and sub-account operations
  },
});
```

*Note: the first provider in the `providers` object will be what network the SDK is initially connected to.*

#### Development Mode

Enable console logging for debugging:

```typescript
const sdk = new AugustSDK({
  appName: 'your-app-name', // required
  providers: {
    1: 'https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY',
  },
  monitoring: {
    env: 'DEV', // Enables console logs
  },
});
```

#### With Solana Support

Include Solana by adding its RPC endpoint with chain ID `-1`:

```typescript
const sdk = new AugustSDK({
  appName: 'your-app-name', // required
  providers: {
    1: 'https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY',
    42161: 'https://arb-mainnet.g.alchemy.com/v2/YOUR_KEY',
    -1: 'https://api.mainnet-beta.solana.com', // Solana Mainnet
  },
});
```

## End-to-End Deposit Walkthrough

The snippets below show a complete deposit flow against an EVM vault. Substitute the vault address with the one you're integrating against.

### 1. Connect a wallet

Either ethers or wagmi/viem works — `setSigner` accepts both. With ethers:

```typescript
import { JsonRpcProvider, Wallet } from 'ethers';

const provider = new JsonRpcProvider(
  'https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY',
);
const wallet = new Wallet(process.env.PRIVATE_KEY!, provider);
sdk.evm.setSigner(wallet);
```

With wagmi/viem (browser):

```typescript
import { useWalletClient } from 'wagmi';

const { data: walletClient } = useWalletClient();
if (walletClient) sdk.evm.setSigner(walletClient);
```

### 2. Preview the deposit

`previewDeposit` returns the shares you would receive without broadcasting a transaction:

```typescript
const shares = await sdk.evm.previewDeposit({
  vault: '0x...', // your vault address
  amount: 1_000_000n, // 1 USDC (6 decimals)
});
```

### 3. Check the allowance

```typescript
const owner = await wallet.getAddress();
const current = await sdk.evm.allowance({ vault: '0x...', owner });
if (current < 1_000_000n) {
  await sdk.evm.vaultApprove({
    target: '0x...',
    wallet: owner,
    amount: '1',
    wait: true,
  });
}
```

### 4. Deposit

```typescript
const txHash = await sdk.evm.vaultDeposit({
  target: '0x...',
  wallet: owner,
  amount: '1',
});
```

### 5. Request a redemption

Standard (queued) redemption:

```typescript
await sdk.evm.vaultRequestRedeem({
  target: '0x...',
  wallet: owner,
  amount: '0.5',
});
```

Instant redemption (if supported by the vault):

```typescript
await sdk.evm.vaultRequestRedeem({
  target: '0x...',
  wallet: owner,
  amount: '0.5',
  isInstantRedeem: true,
});
```

### 6. Handle errors

Every public method throws typed errors that subclass `AugustSDKError`. See the [Error Handling](/developers/typescript-sdk/errors) page for the full reference; the short version:

```typescript
import {
  AugustValidationError,
  AugustTimeoutError,
  AugustSDKError,
} from '@augustdigital/sdk';

try {
  await sdk.evm.vaultDeposit({ target, wallet: owner, amount: '1' });
} catch (err) {
  if (err instanceof AugustValidationError) showFormError(err.message);
  else if (err instanceof AugustTimeoutError) scheduleRetry(err.timeoutMs);
  else if (err instanceof AugustSDKError) reportError(err.code, err.cause);
  else throw err;
}
```

## Read Helpers Reference

The EVM adapter exposes typed read helpers so you don't have to reach into the ABIs:

| Method           | Description                                           |
| ---------------- | ----------------------------------------------------- |
| `previewDeposit` | Shares minted for a given deposit amount.             |
| `previewRedeem`  | Assets returned for a given share amount.             |
| `allowance`      | Raw ERC-20 allowance the owner has granted the vault. |
| `balanceOf`      | Raw ERC-20 balance for any token / owner.             |
| `maxDeposit`     | Maximum deposit currently accepted by the vault.      |

All return raw `bigint` values so BigInt math stays precise.

## Example App

We also have an example app that can be found in this repo: <https://github.com/upshift-protocol/example-sdk-app>\
The example app can be found at <https://starter.upshift.finance/>


# Usage Guide

This section contains practical code examples for using the August Digital SDK.

* [Vaults](/developers/typescript-sdk/code-examples/vaults) - Working with vaults
* [EVM Actions](/developers/typescript-sdk/code-examples/evm-actions) - EVM blockchain interactions
* [Cross-Chain Vaults](https://github.com/fractal-protocol/js-sdk/tree/main/docs/developers/javascript-sdk/code-examples/cross-chain-vaults.md) - LayerZero OVault cross-chain deposits and redemptions
* [Solana Actions](/developers/typescript-sdk/code-examples/solana-actions) - Solana blockchain interactions
* [ABI's](/developers/typescript-sdk/code-examples/abis) - Contract ABIs


# Vault Actions

Query vault data across EVM and Solana chains. All vault getters are available on the main AugustSDK class.

### Overview

The August SDK provides comprehensive vault querying capabilities across all supported chains. Vaults follow the ERC4626 standard and include additional features for loan management, allocations, and user positions.

> For detailed vault SDK functions, please refer to the [SDK reference page](/developers/typescript-sdk/api)

#### Vault Versions

| Version | Description        | Chains             |
| ------- | ------------------ | ------------------ |
| `evm-0` | Legacy vaults      | Ethereum, Arbitrum |
| `evm-1` | Standard vaults    | All EVM chains     |
| `evm-2` | Multi-asset vaults | Ethereum, Base     |
| `sol-0` | Solana vaults      | Solana Mainnet     |

### Get All Vaults

Fetch all vaults across configured networks with optional enrichment.

```typescript
import AugustSDK from '@augustdigital/sdk'

const sdk = new AugustSDK({ appName: 'your-app-name' })

sdk.getVaults(options?: {
  chainIds?: number[];
  loans?: boolean;
  allocations?: boolean;
  wallet?: string;
  solanaWallet?: string;
}): Promise<IVault[]>
```

#### Parameters

| Parameter              | Type       | Required | Description                             |
| ---------------------- | ---------- | -------- | --------------------------------------- |
| `options.chainIds`     | `number[]` | No       | Filter by specific chain IDs            |
| `options.loans`        | `boolean`  | No       | Include loan data (default: true)       |
| `options.allocations`  | `boolean`  | No       | Include allocation data (default: true) |
| `options.wallet`       | `string`   | No       | EVM wallet to fetch positions for       |
| `options.solanaWallet` | `string`   | No       | Solana wallet to fetch positions for    |

#### Returns

Array of `IVault` objects

### Get Single Vault

Fetch detailed data for a specific vault with optional enrichment.

```typescript
sdk.getVault({
  vault: string;
  chainId?: number;
  options?: {
    loans?: boolean;
    allocations?: boolean;
    wallet?: string;
    solanaWallet?: string;
  };
}): Promise<IVault>
```

#### Parameters

| Parameter              | Type      | Required | Description                                    |
| ---------------------- | --------- | -------- | ---------------------------------------------- |
| `vault`                | `string`  | Yes      | Vault contract address or program ID           |
| `chainId`              | `number`  | No       | Chain ID (uses active network if not provided) |
| `options.loans`        | `boolean` | No       | Include loan data (default: true)              |
| `options.allocations`  | `boolean` | No       | Include allocation data (default: true)        |
| `options.wallet`       | `string`  | No       | EVM wallet for position data                   |
| `options.solanaWallet` | `string`  | No       | Solana wallet for position data                |

#### Returns

Single `IVault` object

### Get Vault Loans

Fetch active loan data for a vault (EVM-0 vaults only).

```typescript
sdk.getVaultLoans({
  vault: string;
  chainId?: number;
}): Promise<IVaultLoan[]>
```

#### Returns

Array of loan objects with borrower, principal, interest, and APR data.

### Get Vault Allocations

> **This is the data behind the "Vault Exposure" section on the Upshift app.** One call returns exactly what the Upshift UI renders — read `exposurePerCategory` for the pre-bucketed view (`supplying` / `borrowing` / `wallet` / `lending` legs plus per-category USD totals). It lives on the root `sdk`, requires an RPC provider for the vault's chain, and needs `keys.august` to populate the CeFi/OTC legs. See the [Transparency Dashboard](#transparency-dashboard) section for the per-card methods.

> Authentication is required for this function

Fetch DeFi, CeFi, and OTC allocation breakdowns for a vault.

```typescript
sdk.getVaultAllocations({
  vault: string;
  chainId?: number;
}): Promise<IVaultAllocations>
```

#### Returns

Object containing `defi`, `cefi`, `otc`, and `tokens` arrays.

### Transparency Dashboard

Every tab and card of the Upshift per-vault **Transparency** page is available as an individual read method on `sdk.apiModule`, so you can compose exactly the subset you want — e.g. the Performance tab without the collateral-ratio card. All methods:

* are **public** (no API key), one HTTPS request each, **zero RPC** from the SDK — no `providers` config needed;
* are **snapshot-backed** (positions/oracle refresh hourly; cache ≥ 60 s on your side);
* throw `AugustValidationError` on a bad address / chain id / date / limit **before** any request is made; non-2xx API responses surface as `AugustServerError` (`AugustRateLimitError` on 429, `AugustTimeoutError` on timeout);
* the `chainId`-taking methods are **EVM-only** (Solana/Stellar vaults have no transparency data). `getVaultBackingSeries` / `getVaultSmoothedApy` are keyed by vault address alone;
* date windows (`startDate` / `endDate`) are `YYYY-MM-DD` and **both inclusive**.

Minimal construction — no RPC provider and no API key are needed for anything in this section:

```typescript
import AugustSDK from '@augustdigital/sdk';

const sdk = new AugustSDK({ appName: 'tori-finance', keys: {} });
```

| Dashboard surface                                                                       | Method                                                                                      | Returns                              |
| --------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------ |
| Overview → strategy breakdown, backing composition, vault buffer, wallets, headline TVL | `getVaultPositionSnapshot({ vault, chainId })`                                              | `ITransparencyPositions`             |
| Overview → APY last 30 days · Performance → APY Over Time                               | `getVaultSmoothedApy({ vault, daysAgo?, averagingPeriodDays?, applySmoothing? })`           | `ITransparencyApySeries`             |
| Performance → Backing vs Supply · Collateral Ratio · sidebar 7d deltas                  | `getVaultBackingSeries({ vault, startDate?, endDate?, limit? })`                            | `ITransparencyRatioPoint[]`          |
| Performance → Allocation Over Time                                                      | `getVaultHistoricalAllocations({ vault, chainId, startDate?, endDate? })`                   | `ITransparencyHistoricalAllocations` |
| Performance → fees card                                                                 | `getVaultFeeConfig({ vault, chainId })`                                                     | `ITransparencyFees`                  |
| Performance → share price / TVL history                                                 | `sdk.getVaultHistoricalTimeseries(...)` (root `sdk`, existing)                              | —                                    |
| NAV Oracle tab                                                                          | `getVaultOracleClassification(vault, chainId)` (existing; positional args)                  | `IOracleClassification`              |
| Governance → Vault Roles                                                                | `getVaultGovernanceRoles({ vault, chainId })`                                               | `ITransparencyGovernanceRoles`       |
| Governance → Vault Permissions                                                          | `getVaultGovernancePermissions({ vault, chainId })`                                         | `ITransparencyGovernancePermissions` |
| Governance → Pending Timelocks                                                          | `getVaultGovernanceTimelocks({ vault, chainId, status? })`                                  | `ITransparencyTimelocks`             |
| Governance → Audit Log                                                                  | `getVaultGovernanceAuditLog({ vault, chainId, category?, before?, limit? })`                | `ITransparencyAuditLog`              |
| Vault Exposure section (main pool page)                                                 | `sdk.getVaultAllocations({ vault, chainId })` (root `sdk`; needs RPC + API key — see above) | `IVaultAllocations`                  |

#### Reproducing the Overview headline numbers

```typescript
const pos = await sdk.apiModule.getVaultPositionSnapshot({
  vault: '0x36eDbF0C834591BFdfCaC0Ef9605528c75c406aA',
  chainId: 143,
});

// Headline "Total NAV" on the page is the vault-reported figure from the SAME snapshot:
const headline = pos.reported_tvl ?? pos.total_nav;
// Vault Buffer = liquidity sitting on the vault contract itself:
const deployed = pos.subaccounts.reduce((a, s) => a + s.total_usd, 0);
const vaultBuffer = Math.max(0, pos.total_nav - deployed);
// Every field is from `pos.snapshot_at` — show it as "Last updated".
```

Notes:

* **Borrow legs are negative.** In `ITransparencyTokenExposure`, `role: 'borrow'` rows carry negative `usd_value` and `balance`; a protocol group's `total_usd` is already the net.
* **Pricing follows the published methodology.** Hard-pegged stables price at their peg (the same overrides the NAV Oracle tab lists), so `total_usd` values match the dashboard exactly rather than raw market prices.
* **`getVaultBackingSeries` returns newest-first, hourly points** — sort ascending before charting; `adjusted_redeem_ratio * 100` is the collateral-ratio percent.
* **`getVaultSmoothedApy` is the ONLY way to match the app's APY charts**: the backend applies a rolling-median/mean smoothing filter server-side; recomputing APY locally from share ratios will not match. `values` are decimal fractions (0.0245 = 2.45%), `labels` are `M/D/YYYY`.
* **Audit-log pagination**: pass `before` = the last returned entry's `timestamp` **verbatim** while `has_more` is true (exclusive cursor). Audit and timelock timestamps are naive-UTC (no `Z`); `snapshot_at` carries one.
* **Units**: `pct_of_nav` / `pct_of_subaccount` / `pct_of_tvl` are fractions (0.25 = 25%); the fee `*_pct` fields are already percents (2 = 2%).
* **Pending Timelocks is often empty** — the default filter is `scheduled`; pass `status: 'all'` to show history (the Audit Log covers the same events).
* **Governance `warnings`**: Safe / Fordefi enrichment failures degrade rows and append a warning code rather than failing the call — check the array if a role looks incomplete. Codes seen in the wild: `safe_api_unavailable`, `fordefi_api_unavailable`, `fordefi_partial_coverage` (expected — AA subaccounts are never Fordefi keys), `timelock_duration_unavailable`.

#### Example — a Performance tab without the collateral-ratio card

```typescript
const vault = '0x955256B31097dDf47a9E47A95aDfDFB4460D8522';
const [apy, allocations, fees] = await Promise.all([
  sdk.apiModule.getVaultSmoothedApy({ vault, daysAgo: 90 }),
  sdk.apiModule.getVaultHistoricalAllocations({ vault, chainId: 1, startDate: '2026-08-01' }),
  sdk.apiModule.getVaultFeeConfig({ vault, chainId: 1 }),
]);
```

### Get Vault Annualized APY

Fetch annualized APY metrics for specific vaults.

> **Supported Vaults**: cUSDO, tETH, wstETH, rsETH
>
> **Deprecation Notice**: The `hgETH30dLiquidAPY` and `hgETH7dLiquidAPY` response fields are deprecated and will be removed on 2026-01-01. Use `liquidAPY30Day` and `liquidAPY7Day` instead.

```typescript
sdk.getVaultAnnualizedApy({
  vault: string;
}): Promise<IVaultAnnualizedApy>
```

#### Parameters

| Parameter | Type     | Required | Description            |
| --------- | -------- | -------- | ---------------------- |
| `vault`   | `string` | Yes      | Vault contract address |

#### Returns

`IVaultAnnualizedApy` object with liquidity APY and annualized metrics.

### Get Vault Historical Timeseries

Fetch comprehensive historical timeseries data for a vault including TVL, APY, PnL, share price, and other metrics.

```typescript
sdk.getVaultHistoricalTimeseries({
  vault: string;
  nDays?: number;
}): Promise<IHistoricalTimeseriesResponse>
```

#### Parameters

| Parameter | Type     | Required | Description                                             |
| --------- | -------- | -------- | ------------------------------------------------------- |
| `vault`   | `string` | Yes      | Vault contract address                                  |
| `nDays`   | `number` | No       | Number of days of historical data (default: 30, min: 1) |

#### Returns

Historical timeseries data object with date string keys containing TVL, APY, PnL, and share price.

### Get Vault TVL

Fetch current or historical total value locked (TVL) for a vault.

```typescript
sdk.getVaultTvl({
  vault: string;
  chainId?: number;
  historical?: {
    daysAgo?: number;
    order?: 'asc' | 'desc';
    interval?: 'days' | 'weeks' | 'months' | 'years';
  };
}): Promise<{ value: INormalizedNumber; timestamp: string }[]>
```

#### Returns

Array of TVL data points with timestamps.

### Get Vault Positions

Fetch user positions across one or all vaults.

```typescript
sdk.getVaultPositions({
  vault?: string;
  wallet?: string;
  chainId?: number;
  showAllVaults?: boolean;
  solanaWallet?: string;
}): Promise<IVaultPosition[]>
```

#### Parameters

| Parameter       | Type      | Required | Description                                      |
| --------------- | --------- | -------- | ------------------------------------------------ |
| `vault`         | `string`  | No       | Specific vault address (omit for all vaults)     |
| `wallet`        | `string`  | No       | EVM wallet address                               |
| `solanaWallet`  | `string`  | No       | Solana wallet address                            |
| `chainId`       | `number`  | No       | Filter by specific chain                         |
| `showAllVaults` | `boolean` | No       | Include vaults with no position (default: false) |

#### Returns

Array of vault position objects.

### Get Available Redemptions

Fetch claimable redemption requests for a vault and wallet.

```typescript
sdk.getVaultAvailableRedemptions({
  vault: string;
  chainId?: number;
  wallet?: string;
  verbose?: boolean;
}): Promise<{
  availableRedemptions: IVaultAvailableRedemption[];
  pendingRedemptions: IVaultAvailableRedemption[];
}>
```

#### Returns

Object with `availableRedemptions` (ready to claim) and `pendingRedemptions` (waiting for lag period).

### Get Vault Withdrawals

Fetch withdrawal summary and pending withdrawal queue for a vault.

```typescript
sdk.getVaultWithdrawals({
  vault: string;
  chainId?: number;
}): Promise<IVaultWithdrawals>
```

#### Parameters

| Parameter | Type     | Required | Description                                    |
| --------- | -------- | -------- | ---------------------------------------------- |
| `vault`   | `string` | Yes      | Vault contract address                         |
| `chainId` | `number` | No       | Chain ID (uses active network if not provided) |

#### Returns

`IVaultWithdrawals` object containing total withdrawals and pending queue.

### Get Vault PnL

Fetch vault-level profit and loss (not user-specific).

```typescript
sdk.getVaultPnl({
  vault: string;
  chainId?: number;
}): Promise<IVaultPnl>
```

#### Parameters

| Parameter | Type     | Required | Description                                    |
| --------- | -------- | -------- | ---------------------------------------------- |
| `vault`   | `string` | Yes      | Vault contract address                         |
| `chainId` | `number` | No       | Chain ID (uses active network if not provided) |

#### Returns

`IVaultPnl` object with total PnL in native token and USD.

### Get User Lifetime PnL

Calculate lifetime profit and loss for a user in a specific vault.

```typescript
sdk.getVaultUserLifetimePnl({
  vault: string;
  wallet: string;
  chainId?: number;
}): Promise<IVaultUserLifetimePnl>
```

#### Parameters

| Parameter | Type     | Required | Description                                    |
| --------- | -------- | -------- | ---------------------------------------------- |
| `vault`   | `string` | Yes      | Vault contract address                         |
| `wallet`  | `string` | Yes      | User wallet address                            |
| `chainId` | `number` | No       | Chain ID (uses active network if not provided) |

#### Returns

`IVaultUserLifetimePnl` object with realized and unrealized PnL.

### Get Yield Last Realized

Get the timestamp when yield was last realized for a vault.

```typescript
sdk.getYieldLastRealizedOn({
  vault: string;
  chainId?: number;
}): Promise<number>
```

#### Parameters

| Parameter | Type     | Required | Description                                    |
| --------- | -------- | -------- | ---------------------------------------------- |
| `vault`   | `string` | Yes      | Vault contract address                         |
| `chainId` | `number` | No       | Chain ID (uses active network if not provided) |

#### Returns

Unix timestamp (in seconds) when yield was last realized.

### Get Borrower Health Factor

> Authentication is required for this function

Get the borrower's health factor by vault.

```typescript
sdk.getVaultBorrowerHealthFactor({
  chainId?: number;
}): Promise<Record<string, number>>
```

#### Parameters

| Parameter | Type     | Required | Description                 |
| --------- | -------- | -------- | --------------------------- |
| `chainId` | `number` | No       | Filter by specific chain ID |

#### Returns

Object mapping vault addresses to their borrower health factors.

### IVault Interface

All vault getter methods return the `IVault` interface:

#### Key Fields

**`depositAssets`** - Array of all supported deposit tokens including:

* Underlying asset (always first)
* Adapter tokens (if available)
* Whitelisted assets (for multi-asset vaults)

**`version`** - Determines which deposit/withdrawal functions to use:

* `evm-0`, `evm-1`: 2-param deposit
* `evm-2`: 3-param deposit with asset selection

**`position`** - User-specific data (when wallet provided):

* Wallet balance
* Available redemptions
* Pending redemptions
* Redeemable amount

### Get User History

```typescript
sdk.getUserHistory({
  wallet: string;
  chainId?: number;
  vault?: string;
}): Promise<IVaultUserHistoryItem[]>
```

Returns user transaction history (deposits, withdrawals, etc.).

### Get User Transfers

```typescript
sdk.getUserTransfers({
  wallet: string;
  chainId?: number;
  vault?: string;
}): Promise<IVaultTransfer[]>
```

Returns vault share transfer history for a user.

### Get Staking Positions

```typescript
sdk.getStakingPositions(
  wallet?: string,
  chainId?: number
): Promise<IActiveStakingPosition[]>
```

Returns active reward staking positions.

### Examples

#### Complete Vault Query

```typescript
const vault = await sdk.getVault({
  vault: '0x80E1048eDE66ec4c364b4F22C8768fc657FF6A42',
  chainId: 1,
  options: {
    loans: true,
    allocations: true,
    wallet: '0xYourWallet...',
  },
});

// Basic info
console.log(vault.name);
console.log(vault.version);
console.log(vault.apy.apy);

// Deposit options
console.log(
  'Can deposit:',
  vault.depositAssets.map((a) => a.symbol),
);

// User position
if (vault.position) {
  console.log('Your balance:', vault.position.walletBalance.normalized);
  console.log(
    'Available redemptions:',
    vault.position.availableRedemptions.length,
  );
}

// Loans (if available)
if (vault.loans) {
  console.log('Active loans:', vault.loans.length);
}
```

#### Filter Vaults by Criteria

```typescript
const vaults = await sdk.getVaults();

// High APY vaults
const highYield = vaults.filter((v) => v.apy.apy > 10);

// Featured vaults
const featured = vaults.filter((v) => v.isFeatured);

// Active vaults only
const active = vaults.filter((v) => v.status === 'active');

// Vaults with deposits enabled
const depositable = vaults.filter((v) => !v.isDepositPaused);

// Multi-asset vaults
const multiAsset = vaults.filter((v) => v.version === 'evm-2');
```

#### Check Deposit Options

```typescript
const vault = await sdk.getVault({
  vault: '0x5Fde59415625401278c4d41C6beFCe3790eb357f',
  chainId: 1,
});

// Show all deposit options to user
console.log('You can deposit:');
vault.depositAssets.forEach((asset) => {
  console.log(`- ${asset.symbol} (${asset.address})`);
});
// Output:
// - wstETH (0x7f39...)  <- Underlying
// - WETH (0xC02a...)    <- Adapter
// - ETH (0x0000...)     <- Adapter
```

### Error Handling

```typescript
try {
  const vault = await sdk.getVault({
    vault: vaultAddress,
    chainId: 1,
  });
} catch (error) {
  if (error.message.includes('Missing RPC URL')) {
    console.error('Configure RPC for this chain');
  } else if (error.message.includes('not found')) {
    console.error('Vault does not exist');
  } else {
    console.error('Failed to fetch vault:', error.message);
  }
}
```


# EVM Actions

Execute transactions on EVM vaults including deposits, withdrawals, and approvals. All write operations are available via \`sdk.evm.\*\` methods.

### Overview

EVM write operations require a connected wallet with a signer. The SDK supports all vault versions (`evm-0`, `evm-1`, `evm-2`) and automatically selects the correct contract ABI and function signatures.

### Setup

```typescript
import { ethers } from 'ethers';
import AugustSDK from '@augustdigital/sdk';

// Initialize SDK
const sdk = new AugustSDK({
  appName: 'your-app-name', // required
  providers: {
    1: 'https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY',
  },
});

// Connect wallet and set signer
const provider = new ethers.BrowserProvider(window.ethereum);
const signer = await provider.getSigner();
sdk.evm.setSigner(signer);

const userAddress = await signer.getAddress();
```

### Vault Deposit

Deposit tokens into a vault. The SDK automatically handles different vault versions (`evm-0`, `evm-1`, `evm-2`) and adapter deposits.

```typescript
sdk.evm.vaultDeposit({
  target: string;
  wallet: string;
  amount: string | bigint | number;
  wait?: boolean;
  depositAsset?: string;  // Optional: for adapter deposits
  chainId?: number;       // Optional: for adapter routing
  poolName?: string;      // Optional: for adapter routing
}): Promise<string>
```

#### Vault Version Detection

The SDK automatically detects the vault version and uses the correct deposit method:

| Version     | Deposit Function                     | Parameters              | Use Case                   |
| ----------- | ------------------------------------ | ----------------------- | -------------------------- |
| `evm-0`     | `deposit(uint256, address)`          | 2 params                | Legacy vaults              |
| `evm-1`     | `deposit(uint256, address)`          | 2 params                | Standard vaults            |
| `evm-2`     | `deposit(address, uint256, address)` | 3 params                | Multi-asset vaults         |
| **Adapter** | Various                              | Depends on adapter type | Alternative token deposits |

**You don't need to specify the version** - the SDK detects it automatically from the vault's `version` field.

#### Parameters

| Parameter      | Type                         | Required | Description                               |
| -------------- | ---------------------------- | -------- | ----------------------------------------- |
| `target`       | `string`                     | Yes      | Vault contract address                    |
| `wallet`       | `string`                     | Yes      | User wallet address                       |
| `amount`       | `string \| bigint \| number` | Yes      | Amount to deposit                         |
| `wait`         | `boolean`                    | No       | Wait for confirmation (default: false)    |
| `depositAsset` | `string`                     | No       | Token to deposit (defaults to underlying) |
| `chainId`      | `number`                     | No       | Chain ID for adapter routing              |
| `poolName`     | `string`                     | No       | Pool name for adapter routing             |

#### Returns

Transaction hash as `string`

#### Example: Standard Deposit

```typescript
// Deposit underlying token
const txHash = await sdk.evm.vaultDeposit({
  target: '0x80E1048eDE66ec4c364b4F22C8768fc657FF6A42',
  wallet: userAddress,
  amount: '100', // 100 tokens
  wait: true,
});

console.log('Deposit successful:', txHash);
```

#### How It Works for Each Version

**EVM-0 & EVM-1 Vaults (Standard)**

**Contract Function:** `deposit(uint256 assets, address receiver)`

**Behavior:**

* Deposits the vault's underlying token only
* 2 parameters: amount and receiver
* Automatic approval of underlying token to vault

**Example:**

```typescript
// Upshift USDC (evm-1)
await sdk.evm.vaultDeposit({
  target: '0x80E1048eDE66ec4c364b4F22C8768fc657FF6A42',
  wallet: userAddress,
  amount: '100', // 100 USDC
  wait: true,
});
// SDK calls: vault.deposit(100e6, userAddress)
```

**EVM-2 Vaults (Multi-Asset)**

**Contract Function:** `deposit(address assetIn, uint256 amount, address receiver)`

**Behavior:**

* Accepts multiple whitelisted tokens (listed in `vault.depositAssets`)
* 3 parameters: asset address, amount, and receiver
* Automatic approval of selected token to vault

**Example:**

```typescript
// Get vault to see deposit options
const vault = await sdk.getVault({
  vault: '0x18EE038C114a07f4B08b420fb1E4149a4F357249',
  chainId: 1,
});

console.log(
  'Can deposit:',
  vault.depositAssets.map((a) => a.symbol),
);
// Output: ["USDC", "USDT", "DAI"]

// Deposit any whitelisted asset
await sdk.evm.vaultDeposit({
  target: vault.address,
  wallet: userAddress,
  amount: '100',
  depositAsset: '0xdAC17F958D2ee523a2206206994597C13D831ec7', // USDT
  chainId: 1,
  wait: true,
});
// SDK calls: vault.deposit(USDT_ADDRESS, 100e6, userAddress)
```

**Note:** For EVM-2 vaults, you can optionally specify `depositAsset`. If omitted, SDK uses the first asset in `depositAssets` array (usually the primary/underlying token).

**Adapter Vaults (Alternative Tokens)**

**Contract Functions:** Various depending on adapter type

**Behavior:**

* Enables deposits with tokens beyond the vault's standard accepted tokens
* Uses wrapper contracts or swap protocols
* Requires `depositAsset`, `chainId`, and sometimes `poolName` parameters

**Adapter Types:**

1. **Native Token Adapter** (e.g., ETH → wstETH)
   * Wraps native tokens before depositing
   * Uses `WrapperAdapter` contract
   * Example: Treehouse Growth
2. **Token Wrapper Adapter** (e.g., WETH → wstETH)
   * Wraps ERC20 tokens before depositing
   * Uses `WrapperAdapter` contract
   * Example: Treehouse Growth
3. **Swap Adapter** (e.g., USDC → WBTC)
   * Swaps tokens via Paraswap before depositing
   * Uses `PoolAdapter` contract
   * Example: BTC Multi-Token

**Example: Native ETH Deposit**

```typescript
// Treehouse Growth accepts: wstETH, WETH, ETH (via adapter)
await sdk.evm.vaultDeposit({
  target: '0x5Fde59415625401278c4d41C6beFCe3790eb357f',
  wallet: userAddress,
  amount: '1.0', // 1 ETH
  depositAsset: '0x0000000000000000000000000000000000000000', // Native ETH
  chainId: 1,
  poolName: 'Treehouse Growth',
  wait: true,
});
// SDK calls: wrapperAdapter.depositETH() with value
```

**Example: WETH Deposit (via adapter)**

```typescript
await sdk.evm.vaultDeposit({
  target: '0x5Fde59415625401278c4d41C6beFCe3790eb357f',
  wallet: userAddress,
  amount: '1.0',
  depositAsset: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', // WETH
  chainId: 1,
  poolName: 'Treehouse Growth',
  wait: true,
});
// SDK calls: wrapperAdapter.deposit() after approving WETH
```

**Example: Swap Adapter Deposit**

```typescript
// BTC Multi-Token accepts WBTC but can swap from USDC
await sdk.evm.vaultDeposit({
  target: '0xBTCVaultAddress...',
  wallet: userAddress,
  amount: '10000', // 10,000 USDC
  depositAsset: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC
  chainId: 1,
  poolName: 'BTC Multi-Token',
  wait: true,
});
// SDK:
// 1. Gets Paraswap quote (USDC → WBTC)
// 2. Approves USDC to PoolAdapter
// 3. Calls: poolAdapter.swapAndDeposit()
```

#### Automatic Detection Flow

```typescript
// Step 1: Get vault info
const vault = await sdk.getVault({ vault: vaultAddress, chainId: 1 });

// Step 2: SDK checks vault.version
if (vault.version === 'evm-2') {
  // Use 3-param deposit(address, uint256, address)
} else if (depositAsset && depositAsset !== vault.underlying.address) {
  // Use adapter logic
} else {
  // Use 2-param deposit(uint256, address)
}

// Step 3: SDK handles approvals automatically
// Step 4: SDK calls correct contract method
```

#### When to Use Each Parameter

| Parameter      | Required     | Use When                                      |
| -------------- | ------------ | --------------------------------------------- |
| `target`       | ✅ Always     | Vault address                                 |
| `wallet`       | ✅ Always     | User's address                                |
| `amount`       | ✅ Always     | Deposit amount                                |
| `wait`         | ❌ Optional   | Want to wait for confirmation                 |
| `depositAsset` | ⚠️ Sometimes | Using adapter OR EVM-2 with non-primary token |
| `chainId`      | ⚠️ Sometimes | Using adapter                                 |
| `poolName`     | ⚠️ Sometimes | Using adapter (helps with routing)            |

#### Quick Reference: Vault Versions

How to check which version a vault uses:

```typescript
const vault = await sdk.getVault({ vault: vaultAddress, chainId: 1 });
console.log('Version:', vault.version); // "evm-0", "evm-1", or "evm-2"
console.log('Has adapters:', vault.depositAssets.length > 1);
```

**Common Vaults by Version:**

| Vault Name       | Version | Deposit Tokens                | Notes            |
| ---------------- | ------- | ----------------------------- | ---------------- |
| Upshift USDC     | `evm-1` | USDC only                     | Standard deposit |
| Upshift USDT     | `evm-1` | USDT only                     | Standard deposit |
| Treehouse Growth | `evm-1` | wstETH, WETH, ETH             | Has adapters     |
| Kelp TAC rsETH   | `evm-1` | rsETH, stETH, ETHx, WETH, ETH | Has adapters     |
| Wild USD         | `evm-2` | USDC, USDT, DAI               | Multi-asset      |
| BTC Multi-Token  | `evm-1` | WBTC, USDC (via swap)         | Has swap adapter |

#### Decision Tree

```
Do you have a depositAsset parameter?
│
├─ NO → Standard deposit with underlying token
│        ├─ EVM-0/1: 2-param deposit
│        └─ EVM-2: 3-param deposit with first depositAsset
│
└─ YES → Is depositAsset different from underlying?
         │
         ├─ NO → Standard deposit (same as above)
         │
         └─ YES → Is vault EVM-2 with depositAsset whitelisted?
                  │
                  ├─ YES → Multi-asset deposit (3-param)
                  │
                  └─ NO → Adapter deposit
                           ├─ Native token? → Wrapper adapter
                           ├─ Different ERC20? → Swap adapter
                           └─ Wrapped version? → Wrapper adapter
```

### Adapter Deposits

Deposit with alternative tokens beyond the vault's underlying asset.

#### Check Available Tokens

```typescript
const vault = await sdk.getVault({ vault: vaultAddress, chainId: 1 });

console.log('Supported deposit tokens:');
vault.depositAssets.forEach((asset) => {
  console.log(`- ${asset.symbol}: ${asset.address}`);
});
```

#### Deposit with Alternative Token

```typescript
// Get vault info
const vault = await sdk.getVault({
  vault: '0x5Fde59415625401278c4d41C6beFCe3790eb357f', // Treehouse
  chainId: 1,
});

// Deposit WETH instead of wstETH
const txHash = await sdk.evm.vaultDeposit({
  target: vault.address,
  wallet: userAddress,
  amount: '1.0',
  depositAsset: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', // WETH
  chainId: 1,
  wait: true,
});
```

#### Deposit Native ETH

```typescript
// Deposit native ETH (zero address)
await sdk.evm.vaultDeposit({
  target: '0x5Fde59415625401278c4d41C6beFCe3790eb357f',
  wallet: userAddress,
  amount: '1.0',
  depositAsset: '0x0000000000000000000000000000000000000000', // Native ETH
  chainId: 1,
  poolName: 'Treehouse Growth',
  wait: true,
});
```

#### Supported Adapter Vaults

| Vault            | Supported Tokens       | Type                    |
| ---------------- | ---------------------- | ----------------------- |
| Treehouse Growth | wstETH, WETH, ETH      | Native deposits         |
| Kelp TAC rsETH   | stETH, ETHx, WETH, ETH | Native deposits         |
| BTC Multi-Token  | WBTC, cbBTC, tBTC      | Swap adapter (Paraswap) |
| AVAX Strategy    | WAVAX, AVAX            | Native deposits         |

### Request Withdrawal

Request to withdraw tokens from a vault. Subject to lag period before claiming.

```typescript
sdk.evm.vaultRequestRedeem({
  target: string;
  wallet: string;
  amount: string | bigint | number;
  wait?: boolean;
}): Promise<string>
```

#### Parameters

| Parameter | Type                         | Required | Description                |
| --------- | ---------------------------- | -------- | -------------------------- |
| `target`  | `string`                     | Yes      | Vault contract address     |
| `wallet`  | `string`                     | Yes      | User wallet address        |
| `amount`  | `string \| bigint \| number` | Yes      | Amount of shares to redeem |
| `wait`    | `boolean`                    | No       | Wait for confirmation      |

#### Returns

Transaction hash as `string`

#### Example

```typescript
// Request to redeem 50 vault shares
const txHash = await sdk.evm.vaultRequestRedeem({
  target: '0x80E1048eDE66ec4c364b4F22C8768fc657FF6A42',
  wallet: userAddress,
  amount: '50',
  wait: true,
});

console.log('Redemption requested:', txHash);
console.log('Wait for lag period before claiming');

// Check when you can claim
const { availableRedemptions } = await sdk.getVaultAvailableRedemptions({
  vault: '0x80E1048eDE66ec4c364b4F22C8768fc657FF6A42',
  wallet: userAddress,
  chainId: 1,
});
```

#### Behavior

The SDK automatically:

1. Detects vault version
2. Uses correct function signature:
   * EVM-0/1: `requestRedeem(uint256, address, address)` (3 params)
   * EVM-2: `requestRedeem(uint256, address)` (2 params)
3. Converts amount to proper decimals
4. Submits transaction

### Claim Redemption

Claim tokens from a completed redemption request.

```typescript
sdk.evm.vaultRedeem({
  target: string;
  wallet: string;
  wait?: boolean;
  year: string;
  month: string;
  day: string;
  receiverIndex: string;
}): Promise<string>
```

#### Parameters

| Parameter       | Type      | Required | Description                   |
| --------------- | --------- | -------- | ----------------------------- |
| `target`        | `string`  | Yes      | Vault contract address        |
| `wallet`        | `string`  | Yes      | User wallet address           |
| `year`          | `string`  | Yes      | Year from redemption request  |
| `month`         | `string`  | Yes      | Month from redemption request |
| `day`           | `string`  | Yes      | Day from redemption request   |
| `receiverIndex` | `string`  | Yes      | Receiver index                |
| `wait`          | `boolean` | No       | Wait for confirmation         |

#### Returns

Transaction hash as `string`

#### Example

```typescript
// Get available redemptions
const { availableRedemptions } = await sdk.getVaultAvailableRedemptions({
  vault: vaultAddress,
  wallet: userAddress,
  chainId: 1,
});

// Claim first available redemption
if (availableRedemptions.length > 0) {
  const redemption = availableRedemptions[0];

  const txHash = await sdk.evm.vaultRedeem({
    target: vaultAddress,
    wallet: userAddress,
    year: redemption.year.raw,
    month: redemption.month.raw,
    day: redemption.day.raw,
    receiverIndex: '0',
    wait: true,
  });

  console.log('Claimed:', redemption.amount.normalized, 'tokens');
}
```

### Token Approval

Approve vault to spend tokens. Usually called automatically by `vaultDeposit`.

```typescript
sdk.evm.vaultApprove({
  target: string;
  wallet: string;
  amount: string | bigint | number;
  wait?: boolean;
}): Promise<string | undefined>
```

#### Returns

* Transaction hash if approval was needed
* `undefined` if allowance already sufficient

#### Example

```typescript
// Manually approve before deposit
const txHash = await sdk.evm.vaultApprove({
  target: vaultAddress,
  wallet: userAddress,
  amount: '1000',
  wait: true,
});

if (txHash) {
  console.log('Approval tx:', txHash);
} else {
  console.log('Already approved');
}
```

### Check Allowance

Check current token allowance for a vault.

```typescript
sdk.evm.vaultAllowance({
  target: string;
  wallet: string;
}): Promise<INormalizedNumber>
```

#### Example

```typescript
const allowance = await sdk.evm.vaultAllowance({
  target: vaultAddress,
  wallet: userAddress,
});

console.log('Current allowance:', allowance.normalized);

if (BigInt(allowance.raw) < BigInt(depositAmount)) {
  console.log('Need to approve more');
}
```

### Examples

#### Complete Deposit Flow

```typescript
// 1. Get vault and check options
const vault = await sdk.getVault({ vault: vaultAddress, chainId: 1 });

console.log('Deposit options:');
vault.depositAssets.forEach((asset) => {
  console.log(`- ${asset.symbol}`);
});

// 2. Check if vault accepts deposits
if (vault.isDepositPaused) {
  throw new Error('Vault deposits are paused');
}

// 3. Check user balance
const tokenContract = new ethers.Contract(
  vault.depositAssets[0].address,
  ['function balanceOf(address) view returns (uint256)'],
  provider,
);
const balance = await tokenContract.balanceOf(userAddress);

// 4. Deposit
const txHash = await sdk.evm.vaultDeposit({
  target: vault.address,
  wallet: userAddress,
  amount: '100',
  wait: true,
});

console.log('Success:', txHash);
```

#### Complete Withdrawal Flow

```typescript
// 1. Check user position
const position = await sdk.getVaultPositions({
  vault: vaultAddress,
  wallet: userAddress,
  chainId: 1,
});

if (position[0].walletBalance.raw === '0') {
  throw new Error('No balance to withdraw');
}

// 2. Request redemption
const requestTx = await sdk.evm.vaultRequestRedeem({
  target: vaultAddress,
  wallet: userAddress,
  amount: '50',
  wait: true,
});

console.log('Redemption requested:', requestTx);

// 3. Wait for lag period...
await new Promise((resolve) => setTimeout(resolve, vault.lagDuration * 1000));

// 4. Check if ready to claim
const { availableRedemptions } = await sdk.getVaultAvailableRedemptions({
  vault: vaultAddress,
  wallet: userAddress,
  chainId: 1,
});

// 5. Claim
if (availableRedemptions.length > 0) {
  const redemption = availableRedemptions[0];
  const claimTx = await sdk.evm.vaultRedeem({
    target: vaultAddress,
    wallet: userAddress,
    year: redemption.year.raw,
    month: redemption.month.raw,
    day: redemption.day.raw,
    receiverIndex: '0',
    wait: true,
  });

  console.log('Claimed:', claimTx);
}
```

#### Multi-Asset Vault Deposit

```typescript
// Get EVM-2 vault
const vault = await sdk.getVault({
  vault: '0x18EE038C114a07f4B08b420fb1E4149a4F357249',
  chainId: 1,
});

console.log('Vault version:', vault.version); // "evm-2"
console.log('Deposit assets:', vault.depositAssets.length);

// Deposit any whitelisted asset
const selectedAsset = vault.depositAssets[0];

const txHash = await sdk.evm.vaultDeposit({
  target: vault.address,
  wallet: userAddress,
  amount: '100',
  depositAsset: selectedAsset.address, // Required for evm-2
  chainId: 1,
  wait: true,
});
```

### Error Handling

```typescript
try {
  await sdk.evm.vaultDeposit({
    target: vaultAddress,
    wallet: userAddress,
    amount: '100',
    wait: true,
  });
} catch (error) {
  if (error.message.includes('insufficient balance')) {
    console.error('Not enough tokens');
  } else if (error.message.includes('Deposit failed')) {
    console.error('Transaction reverted');
  } else if (error.message.includes('user rejected')) {
    console.error('User cancelled transaction');
  } else {
    console.error('Error:', error.message);
  }
}
```

### Best Practices

#### 1. Always Check Vault Status

```typescript
const vault = await sdk.getVault({ vault, chainId });

if (vault.isDepositPaused) {
  throw new Error('Deposits are currently paused');
}

if (vault.isWithdrawalPaused) {
  throw new Error('Withdrawals are currently paused');
}
```

#### 2. Verify Deposit Cap

```typescript
const vault = await sdk.getVault({ vault, chainId });

const remaining = BigInt(vault.maxSupply.raw) - BigInt(vault.totalSupply.raw);
console.log(
  'Remaining capacity:',
  ethers.formatUnits(remaining, vault.decimals),
);
```

#### 3. Show User Expected Output

```typescript
// For standard deposits, use previewDeposit
const vaultContract = new ethers.Contract(
  vaultAddress,
  ['function previewDeposit(uint256) view returns (uint256)'],
  provider,
);

const expectedShares = await vaultContract.previewDeposit(
  ethers.parseUnits('100', vault.decimals),
);

console.log(
  'You will receive:',
  ethers.formatUnits(expectedShares, vault.decimals),
  'shares',
);
```


# Solana Actions

Execute transactions on Solana vaults including deposits, withdrawals, and queries. All operations follow the same pattern as EVM vaults for consistency.

### Overview

Solana vault interactions use the same pattern as EVM:

1. Use `sdk.getVault()` to query vault data
2. Use `sdk.solana.vaultDeposit()` to deposit
3. Use `sdk.solana.vaultRedeem()` to withdraw

The SDK handles all Solana-specific complexities (PDAs, token accounts, etc.) automatically.

### Setup

#### Basic Initialization

Include Solana RPC endpoint when initializing the SDK:

```typescript
import AugustSDK from '@augustdigital/sdk';

const sdk = new AugustSDK({
  appName: 'your-app-name', // required
  providers: {
    -1: 'https://api.mainnet-beta.solana.com', // Solana Mainnet
  },
});

// Access Solana adapter
const solana = sdk.solana;
```

#### Custom RPC Endpoint

```typescript
const sdk = new AugustSDK({
  appName: 'your-app-name', // required
  providers: {
    -1: 'https://solana-mainnet.g.alchemy.com/v2/YOUR_KEY',
  },
});
```

#### For Write Operations

To execute transactions, you need to set a wallet provider:

```typescript
import { useWallet } from '@solana/wallet-adapter-react';

// In your React component
const { publicKey, signTransaction } = useWallet();

// Set wallet for signing transactions
if (publicKey && signTransaction) {
  sdk.solana.setWalletProvider(publicKey, signTransaction);
}
```

### Adapter API

#### Methods

**setWalletProvider()**

Set the wallet provider for write operations.

```typescript
sdk.solana.setWalletProvider(
  publicKey: PublicKey | string,
  signTransaction: (tx: Transaction) => Promise<Transaction>
): void
```

**Parameters:**

* `publicKey`: User's Solana public key
* `signTransaction`: Function to sign transactions (from wallet adapter)

**Example:**

```typescript
import { useWallet } from '@solana/wallet-adapter-react';

function MyComponent() {
  const { publicKey, signTransaction } = useWallet();

  useEffect(() => {
    if (publicKey && signTransaction) {
      sdk.solana.setWalletProvider(publicKey, signTransaction);
    }
  }, [publicKey, signTransaction]);
}
```

### Get Vault Data

Query Solana vault information using the same `sdk.getVault()` method as EVM vaults.

```typescript
sdk.getVault({
  vault: string;  // Solana program ID
  chainId?: number;  // -1 for mainnet
  options?: {
    solanaWallet?: string;  // For user position data
  };
}): Promise<IVault>
```

#### Parameters

| Parameter              | Type     | Required | Description                                |
| ---------------------- | -------- | -------- | ------------------------------------------ |
| `vault`                | `string` | Yes      | Solana vault program ID                    |
| `options.solanaWallet` | `string` | No       | User's Solana public key for position data |

#### Example

```typescript
// Get vault details
const vault = await sdk.getVault({
  vault: 'VaultProgramId...',
  chainId: -1, // Solana mainnet
});

console.log('Name:', vault.name);
console.log('Version:', vault.version); // "sol-0"
console.log('Total Assets:', vault.totalAssets.normalized);
console.log('APY:', vault.apy.apy);
console.log('Deposit Token:', vault.depositAssets[0].symbol);

// Get vault with user position
const vaultWithPosition = await sdk.getVault({
  vault: 'VaultProgramId...',
  chainId: -1,
  options: {
    solanaWallet: 'UserPublicKey...',
  },
});

if (vaultWithPosition.position) {
  console.log(
    'Your balance:',
    vaultWithPosition.position.walletBalance.normalized,
  );
}
```

#### Get All Solana Vaults

```typescript
const solanaVaults = await sdk.getVaults({
  chainIds: [-1], // Filter to Solana mainnet only
  solanaWallet: 'UserPublicKey...', // Optional: include positions
});

solanaVaults.forEach((vault) => {
  console.log(`${vault.name}: ${vault.totalAssets.normalized} TVL`);
});
```

#### Get User Positions

```typescript
const positions = await sdk.getVaultPositions({
  solanaWallet: 'UserPublicKey...',
  chainId: -1,
});

positions.forEach((position) => {
  console.log(`Vault: ${position.vault}`);
  console.log(`Balance: ${position.walletBalance.normalized}`);
});
```

### Vault Deposit

Deposit tokens into a Solana vault. The SDK automatically handles token accounts, PDAs, and Anchor program interactions.

```typescript
sdk.solana.vaultDeposit({
  vault: string;
  amount: string | number | bigint;
  wallet: string;
  wait?: boolean;
}): Promise<string>
```

#### Parameters

| Parameter | Type                         | Required | Description                            |
| --------- | ---------------------------- | -------- | -------------------------------------- |
| `vault`   | `string`                     | Yes      | Solana vault program ID                |
| `amount`  | `string \| number \| bigint` | Yes      | Amount to deposit                      |
| `wallet`  | `string`                     | Yes      | User's Solana public key               |
| `wait`    | `boolean`                    | No       | Wait for confirmation (default: false) |

#### Returns

Transaction signature as `string`

#### Example

```typescript
import { useWallet } from '@solana/wallet-adapter-react';

// In your React component
const { publicKey, signTransaction } = useWallet();

// Set wallet provider (once per session)
if (publicKey && signTransaction) {
  sdk.solana.setWalletProvider(publicKey, signTransaction);
}

// Get vault info
const vault = await sdk.getVault({
  vault: 'VaultProgramId...',
  chainId: -1,
});

// Deposit
const signature = await sdk.solana.vaultDeposit({
  vault: vault.address,
  amount: '100', // 100 tokens
  wallet: publicKey.toString(),
  wait: true,
});

console.log('Deposit successful:', signature);
```

#### Behavior

The SDK automatically:

1. Fetches vault state and PDAs
2. Gets or creates associated token accounts
3. Handles token approvals if needed
4. Converts amount to proper decimals
5. Submits transaction via wallet adapter
6. Optionally waits for confirmation

### Vault Withdraw

Request withdrawal from a Solana vault.

```typescript
sdk.solana.vaultRedeem({
  vault: string;
  amount: string | number | bigint;
  wallet: string;
  wait?: boolean;
}): Promise<string>
```

#### Parameters

| Parameter | Type                         | Required | Description                |
| --------- | ---------------------------- | -------- | -------------------------- |
| `vault`   | `string`                     | Yes      | Solana vault program ID    |
| `amount`  | `string \| number \| bigint` | Yes      | Amount of shares to redeem |
| `wallet`  | `string`                     | Yes      | User's Solana public key   |
| `wait`    | `boolean`                    | No       | Wait for confirmation      |

#### Returns

Transaction signature as `string`

#### Example

```typescript
// Get user's vault balance
const position = await sdk.getVaultPositions({
  solanaWallet: publicKey.toString(),
  chainId: -1,
});

if (position[0].walletBalance.raw === '0') {
  throw new Error('No balance to withdraw');
}

// Request redemption
const signature = await sdk.solana.vaultRedeem({
  vault: 'VaultProgramId...',
  amount: '50', // Redeem 50 shares
  wallet: publicKey.toString(),
  wait: true,
});

console.log('Redemption requested:', signature);
```

### Examples

#### Complete Deposit Flow

```typescript
import AugustSDK from '@augustdigital/sdk';
import { useWallet } from '@solana/wallet-adapter-react';
import { PublicKey } from '@solana/web3.js';

function SolanaVaultDeposit() {
  const { publicKey, signTransaction } = useWallet();
  const [loading, setLoading] = useState(false);

  const sdk = new AugustSDK({
    appName: 'your-app-name', // required
    providers: {
      -1: 'https://api.mainnet-beta.solana.com',
    },
  });

  const deposit = async (vaultId: string, amount: string) => {
    if (!publicKey || !signTransaction) {
      throw new Error('Wallet not connected');
    }

    setLoading(true);
    try {
      // 1. Set wallet provider
      sdk.solana.setWalletProvider(publicKey, signTransaction);

      // 2. Get vault details
      const vault = await sdk.getVault({
        vault: vaultId,
        chainId: -1,
      });

      console.log(`Depositing to ${vault.name}`);

      // 3. Execute deposit (SDK handles everything)
      const signature = await sdk.solana.vaultDeposit({
        vault: vaultId,
        amount,
        wallet: publicKey.toString(),
        wait: true,
      });

      console.log('Deposit successful:', signature);
      return signature;
    } catch (error) {
      console.error('Deposit failed:', error);
      throw error;
    } finally {
      setLoading(false);
    }
  };

  return (
    <button
      onClick={() => deposit('VaultProgramId...', '100')}
      disabled={loading || !publicKey}
    >
      {loading ? 'Depositing...' : 'Deposit 100 Tokens'}
    </button>
  );
}
```

#### Complete Withdrawal Flow

```typescript
function SolanaVaultWithdraw() {
  const { publicKey, signTransaction } = useWallet();

  const sdk = new AugustSDK({
    appName: 'your-app-name', // required
    providers: {
      -1: 'https://api.mainnet-beta.solana.com',
    },
  });

  const withdraw = async (vaultId: string) => {
    if (!publicKey || !signTransaction) {
      throw new Error('Wallet not connected');
    }

    try {
      // 1. Set wallet provider
      sdk.solana.setWalletProvider(publicKey, signTransaction);

      // 2. Check user's position
      const position = await sdk.getVaultPositions({
        solanaWallet: publicKey.toString(),
        chainId: -1,
      });

      if (!position[0] || position[0].walletBalance.raw === '0') {
        throw new Error('No balance to withdraw');
      }

      const balance = position[0].walletBalance.normalized;
      console.log(`Withdrawing ${balance} shares`);

      // 3. Execute redemption
      const signature = await sdk.solana.vaultRedeem({
        vault: vaultId,
        amount: balance, // Withdraw all
        wallet: publicKey.toString(),
        wait: true,
      });

      console.log('Withdrawal successful:', signature);
      return signature;
    } catch (error) {
      console.error('Withdrawal failed:', error);
      throw error;
    }
  };

  return (
    <button onClick={() => withdraw('VaultProgramId...')}>
      Withdraw All
    </button>
  );
}
```

#### Query Vault Before Depositing

```typescript
// 1. Get vault info
const vault = await sdk.getVault({
  vault: 'VaultProgramId...',
  chainId: -1,
});

// 2. Check if deposits are enabled
if (vault.isDepositPaused) {
  throw new Error('Vault deposits are paused');
}

// 3. Show user the vault details
console.log(`Vault: ${vault.name}`);
console.log(`APY: ${vault.apy.apy}%`);
console.log(`TVL: ${vault.totalAssets.normalized}`);
console.log(`Deposit token: ${vault.depositAssets[0].symbol}`);

// 4. Deposit
await sdk.solana.vaultDeposit({
  vault: vault.address,
  amount: '100',
  wallet: publicKey.toString(),
  wait: true,
});
```

### Advanced Operations

For advanced use cases, the Solana adapter exposes low-level methods and utilities.

#### Direct Program Access

Access Solana connection and provider for custom operations:

```typescript
// Get connection
const connection = sdk.solana.connection;
const balance = await connection.getBalance(publicKey);

// Get Anchor provider
const provider = sdk.solana.provider;

// Get program instance
import { vaultIdl } from '@augustdigital/sdk';
const program = sdk.solana.getProgram(vaultIdl);

// Query vault account directly
const vaultState = await program.account.vault.fetch(vaultPda);
```

#### Utility Functions

```typescript
import { Solana } from '@augustdigital/sdk';
```

**deriveShareMintPda()**

Derive the share mint PDA for a vault.

```typescript
const shareMintPda = Solana.utils.deriveShareMintPda('VaultProgramId...');

console.log('Share Mint PDA:', shareMintPda.toString());
```

**getToken()**

Get token metadata from mint address.

```typescript
const token = await Solana.utils.getToken({
  mintAddress: 'MintPublicKey...',
  endpoint: 'https://api.mainnet-beta.solana.com',
  connection: sdk.solana.connection,
});

console.log('Symbol:', token.symbol);
console.log('Decimals:', token.decimals);
console.log('Supply:', token.supply);
```

#### getVaultStateReadOnly()

Get vault state without a wallet provider.

```typescript
const vaultState = await Solana.utils.getVaultStateReadOnly({
  vaultProgramId: 'VaultProgramId...',
  idl: vaultIdl,
  endpoint: 'https://api.mainnet-beta.solana.com',
  connection: sdk.solana.connection,
});
```

#### getProvider()

Create an Anchor provider with wallet.

```typescript
import { PublicKey } from '@solana/web3.js';

const provider = Solana.utils.getProvider({
  network: 'mainnet-beta',
  connection: sdk.solana.connection,
  publicKey: new PublicKey('UserPublicKey...'),
  signTransaction: signTransactionFunction,
});
```

#### getReadOnlyProvider()

Create a read-only Anchor provider.

```typescript
const provider = Solana.utils.getReadOnlyProvider({
  network: 'mainnet-beta',
  connection: sdk.solana.connection,
});
```

#### getProgram()

Create an Anchor program instance.

```typescript
const program = Solana.utils.getProgram({
  network: 'mainnet-beta',
  provider: anchorProvider,
  idl: programIdl,
});
```

### Constants

The Solana adapter provides useful constants:

```typescript
import { Solana } from '@augustdigital/sdk';
```

#### Vault IDL

```typescript
const vaultIdl = Solana.constants.vaultIdl;
```

#### Program IDs

```typescript
const programIds = Solana.constants.programIds;

console.log('Vault Program:', programIds.vaultProgram);
```

#### Fallback Values

```typescript
const fallbackDecimals = Solana.constants.fallbackDecimals; // 9
const fallbackNetwork = Solana.utils.fallbackNetwork; // 'mainnet-beta'
```

### Error Handling

#### Connection Errors

```typescript
try {
  const vaultState = await sdk.solana.getVaultState('VaultId...', vaultIdl);
} catch (error) {
  if (error.message.includes('404')) {
    console.error('Vault program not found');
  } else if (error.message.includes('Network request failed')) {
    console.error('RPC connection failed');
  } else {
    console.error('Unknown error:', error);
  }
}
```

#### Transaction Errors

```typescript
try {
  await handleSolanaDeposit({
    connection: sdk.solana.connection,
    provider: sdk.solana.provider,
    vaultProgramId: 'VaultId...',
    amount: 1000000000,
    userTokenAccount: 'TokenAccount...',
    idl: vaultIdl,
  });
} catch (error) {
  if (error.message.includes('User rejected')) {
    console.error('Transaction cancelled by user');
  } else if (error.message.includes('insufficient funds')) {
    console.error('Not enough SOL for transaction');
  } else {
    console.error('Transaction failed:', error);
  }
}
```


# Stellar Actions

Deposit into and redeem from Stellar (Soroban) vaults such as Gami earnUSDC / earnXLM. Write operations build an unsigned transaction that you sign with the user's wallet and submit back through the S

### Overview

Stellar vault interactions live on the **Stellar adapter** (`sdk.stellar`), not on the higher-level vaults module (which is read-only for Stellar). Unlike EVM — where a deposit is signed and broadcast in one call — Stellar write methods follow a **build → sign → submit** flow:

1. `sdk.stellar.vaultDeposit()` / `sdk.stellar.vaultRedeem()` build an **unsigned transaction** and return it as a base64-encoded **XDR** string.
2. You sign that XDR with the user's Stellar wallet (e.g. [Freighter](https://www.freighter.app/)).
3. `sdk.stellar.submitTransaction()` broadcasts the signed XDR and resolves to the transaction hash once the network confirms it.

The SDK does **not** hardcode vault names like `earnUSDC` or `earnXLM`. You pass a vault's **contract ID** (the `C…` address); resolve it from the vault listing (see [Get Vault Data](#get-vault-data)).

{% hint style="info" %}
`sdk.stellar` runs against Stellar **mainnet**. For testnet, see [Networks](#networks) at the bottom of this page.
{% endhint %}

### Setup

`sdk.stellar` is always available — no extra provider configuration is required, since Stellar vault metadata is served from the August backend.

```typescript
import AugustSDK from '@augustdigital/sdk';

const sdk = new AugustSDK({
  appName: 'your-app-name', // required: stable kebab-case slug identifying your app
});

// Access the Stellar adapter
const stellar = sdk.stellar;
```

{% hint style="info" %}
`AugustSDK` is the package's **default** export — import it as `import AugustSDK from '@augustdigital/sdk'` (not a named import). `appName` is required. No `providers` entry is needed for Stellar, since its vault data is served from the August backend; add `providers` only if you also read EVM/Solana vaults.
{% endhint %}

Signing happens in your app via the user's wallet — there is no `setWalletProvider` step for Stellar. Whatever wallet you use must expose a "sign XDR" call (Freighter's `signTransaction`, for example).

### Adapter API

#### Methods

| Method                                                 | Returns                                 | Description                                   |
| ------------------------------------------------------ | --------------------------------------- | --------------------------------------------- |
| `vaultDeposit({ contractId, amount, senderAddress })`  | `Promise<string>` (XDR)                 | Build an unsigned deposit transaction.        |
| `vaultRedeem({ contractId, shares, receiverAddress })` | `Promise<string>` (XDR)                 | Build an unsigned redeem transaction.         |
| `submitTransaction(signedXdr)`                         | `Promise<string>` (tx hash)             | Submit a signed XDR and poll until confirmed. |
| `getUserPosition(vaultAddress, walletAddress)`         | `Promise<IStellarUserPosition \| null>` | Read the user's on-chain share balance.       |
| `convertToShares(vaultAddress, rawAmount)`             | `Promise<string \| null>`               | Preview shares a deposit amount would yield.  |
| `isStellarAddress(address)`                            | `boolean`                               | Validate a Stellar address (`C…` or `G…`).    |
| `getExplorerLink(id, type?)`                           | `string`                                | Build a Stellar explorer URL.                 |

### Get Vault Data

Stellar vaults appear in the standard listing with `chain_type === 'stellar'`. Use a vault's `address` as the `contractId` for deposit/redeem.

```typescript
// List all vaults, then narrow to Stellar
const vaults = await sdk.getVaults();
const stellarVaults = vaults.filter((v) => v.chain_type === 'stellar');

// e.g. find "earnUSDC" by name/symbol
const earnUsdc = stellarVaults.find((v) => v.name?.includes('earnUSDC'));
const contractId = earnUsdc?.address; // "C…"
```

#### Get User Positions

To include a user's Stellar balances in the unified positions call, pass `stellarWallet` (the user's `G…` address):

```typescript
const positions = await sdk.getVaultPositions({
  stellarWallet: 'G...',
});

positions.forEach((position) => {
  console.log(`Vault: ${position.vault}`);
  console.log(`Balance: ${position.walletBalance.normalized}`);
});
```

For a direct on-chain read of a single vault, use the adapter (this is also how you obtain the `shares` value needed to redeem):

```typescript
const position = await sdk.stellar.getUserPosition(contractId, 'G...');
// { shares: string, decimals: number, decimalsFromFallback?: boolean } | null
```

{% hint style="warning" %}
**Sizing a redeem from `getUserPosition`:** if `position.decimalsFromFallback === true`, the on-chain `decimals()` read failed and `decimals` is a fabricated fallback (`7`). **Do not trust it to size a redeem** — against an offset vault (share decimals = asset + offset) this under-redeems by `10^offset`. Refuse and retry instead.
{% endhint %}

### Vault Deposit

Build an unsigned deposit transaction. This is a **self-deposit**: internally the receiver, from, and operator roles are all set to `senderAddress`.

```typescript
sdk.stellar.vaultDeposit({
  contractId: string;     // Stellar vault contract ("C…")
  amount: string;         // deposit amount in the token's smallest unit
  senderAddress: string;  // user's Stellar account ("G…")
}): Promise<string>       // → unsigned base64 XDR
```

#### Parameters

| Parameter       | Type     | Required | Description                                                                      |
| --------------- | -------- | -------- | -------------------------------------------------------------------------------- |
| `contractId`    | `string` | Yes      | Stellar vault contract address (`C…`).                                           |
| `amount`        | `string` | Yes      | Amount in the deposit token's smallest unit (e.g. 1 USDC @ 7 dp → `"10000000"`). |
| `senderAddress` | `string` | Yes      | User's Stellar account (`G…`); pays for and receives the deposit.                |

#### Example

```typescript
// 1. Build the unsigned transaction
const unsignedXdr = await sdk.stellar.vaultDeposit({
  contractId,
  amount: '10000000', // 1 USDC at 7 decimals
  senderAddress: 'G...',
});

// 2. Sign with the user's wallet (Freighter shown here)
import { signTransaction } from '@stellar/freighter-api';
const { signedTxXdr } = await signTransaction(unsignedXdr, { networkPassphrase: '...' });

// 3. Submit and wait for confirmation
const txHash = await sdk.stellar.submitTransaction(signedTxXdr);
console.log('Deposit confirmed:', txHash);
```

Optionally preview the shares a deposit would mint before building it:

```typescript
const expectedShares = await sdk.stellar.convertToShares(contractId, '10000000');
// string | null
```

### Vault Redeem

Build an unsigned redeem transaction. Redeem burns **shares** (not asset amount), so read the user's position first. This is a **self-redeem**: receiver, owner, and operator roles are all set to `receiverAddress`.

```typescript
sdk.stellar.vaultRedeem({
  contractId: string;       // Stellar vault contract ("C…")
  shares: string;           // amount of shares to redeem, in smallest unit
  receiverAddress: string;  // user's Stellar account ("G…")
}): Promise<string>         // → unsigned base64 XDR
```

#### Parameters

| Parameter         | Type     | Required | Description                                                  |
| ----------------- | -------- | -------- | ------------------------------------------------------------ |
| `contractId`      | `string` | Yes      | Stellar vault contract address (`C…`).                       |
| `shares`          | `string` | Yes      | Shares to redeem, in the share token's smallest unit.        |
| `receiverAddress` | `string` | Yes      | User's Stellar account (`G…`); receives the redeemed assets. |

#### Example

```typescript
// 1. Read the user's share balance
const position = await sdk.stellar.getUserPosition(contractId, 'G...');
if (!position || position.shares === '0') {
  throw new Error('No balance to redeem');
}
if (position.decimalsFromFallback) {
  throw new Error('Decimals unresolved — refusing to size redeem with fallback decimals');
}

// 2. Build the unsigned transaction (redeem all)
const unsignedXdr = await sdk.stellar.vaultRedeem({
  contractId,
  shares: position.shares,
  receiverAddress: 'G...',
});

// 3. Sign with the user's wallet, then submit
const { signedTxXdr } = await signTransaction(unsignedXdr, { networkPassphrase: '...' });
const txHash = await sdk.stellar.submitTransaction(signedTxXdr);
console.log('Redeem confirmed:', txHash);
```

### Submit a Signed Transaction

`submitTransaction` broadcasts a signed XDR and polls until the network confirms it as successful, returning the transaction hash. The XDR must be signed for the same network the adapter is using.

```typescript
const txHash = await sdk.stellar.submitTransaction(signedTxXdr);
```

### Error Handling

`submitTransaction` throws typed [August SDK errors](/developers/typescript-sdk/errors):

* **`AugustTimeoutError`** — the transaction was not confirmed within the poll budget.
* **`AugustSDKError`** — the RPC rejected the submission, or the transaction confirmed as failed. Inspect `err.context` for `{ network, status }` and, when the result XDR decodes, a `resultCode` string carrying the transaction-level reason (e.g. `"txBadSeq"`, `"txTooLate"`). `resultCode` is `undefined` when it cannot be decoded.

```typescript
import { AugustSDKError } from '@augustdigital/sdk';

try {
  const txHash = await sdk.stellar.submitTransaction(signedTxXdr);
} catch (err) {
  if (err instanceof AugustSDKError && err.context?.resultCode === 'txBadSeq') {
    // Stale sequence number — rebuild the transaction and resubmit.
  } else {
    throw err;
  }
}
```

### Networks

`sdk.stellar` is hardwired to **mainnet**. To target **testnet**, use the `Stellar` namespace directly with an explicit `network`:

```typescript
import { Stellar } from '@augustdigital/sdk';

// Build an unsigned deposit on testnet
const unsignedXdr = await Stellar.actions.handleStellarDeposit({
  contractId,
  amount: '10000000',
  senderAddress: 'G...',
  network: 'testnet',
});

// Submit on testnet
const txHash = await Stellar.submit.submitStellarTransaction(signedTxXdr, 'testnet');
```

### Notes & Caveats

* **Self-deposit / self-redeem only.** All role addresses are set to the single account you pass; there is no third-party/operator variant.
* **Standard vault ABI assumed.** Redeem assumes the deployed vault exposes `redeem(shares, receiver, owner, operator)`. A divergent ABI surfaces as a generic Soroban simulation error.
* **Read-only on the vaults module.** Available redemptions and redemption history are **not yet supported** for Stellar vaults; deposit/redeem are available only on `sdk.stellar`.


# ABI Functions

The August Digital SDK includes all necessary contract ABIs (Application Binary Interfaces) for interacting with August vaults and related contracts. All ABIs are exported with the \`ABI\_\` prefix.

The August Digital SDK includes all necessary contract ABIs (Application Binary Interfaces) for interacting with August vaults and related contracts. All ABIs are exported with the `ABI_` prefix.

### Typing support for TypeScript

The SDK provides an `createContract` utilify function to create a strong typed contract class from a given ABI object

```typescript
import { createContract, ABI_LENDING_POOL_V2 } from '@augustdigital/sdk';

const vaultContract = createContract({
  address: '0x...',
  abi: ABI_LENDING_POOL_V2,
  provider,
});

// vaultContract is fully typed
vaultContract.maxSupply();
```

### Vault ABIs

#### ABI\_LENDING\_POOL

Legacy lending pool contract ABI (vault v1.0).

```typescript
import { ABI_LENDING_POOL } from '@augustdigital/sdk';
```

**Main Functions:**

* `deposit(uint256 assets, address receiver)`
* `withdraw(uint256 assets, address receiver, address owner)`
* `asset()` - Get underlying token address
* `totalAssets()` - Get total vault assets
* `convertToShares(uint256 assets)` - Convert assets to shares
* `convertToAssets(uint256 shares)` - Convert shares to assets

#### ABI\_LENDING\_POOL\_V2

Current lending pool contract ABI (vault v2.0) with separate receipt tokens.

```typescript
import { ABI_LENDING_POOL_V2 } from '@augustdigital/sdk';
```

**Main Functions:**

* `deposit(uint256 assets, address receiver)` - Deposit assets
* `requestRedeem(uint256 shares, address receiver, address owner)` - Request withdrawal
* `redeem(uint256 year, uint256 month, uint256 day, uint256 receiverIndex, address receiver)` - Claim withdrawal
* `asset()` - Get underlying token
* `totalAssets()` - Get total vault TVL
* `decimals()` - Get vault decimals
* `maxDeposit(address)` - Check deposit limits
* `previewDeposit(uint256 assets)` - Preview deposit
* `previewRedeem(uint256 shares)` - Preview redemption

**Example:**

```typescript
import { ethers } from 'ethers';
import { ABI_LENDING_POOL_V2 } from '@augustdigital/sdk';

const vaultContract = new ethers.Contract(
  '0xVaultAddress...',
  ABI_LENDING_POOL_V2,
  provider,
);

// Query vault data
const totalAssets = await vaultContract.totalAssets();
const assetAddress = await vaultContract.asset();
const decimals = await vaultContract.decimals();

console.log(`TVL: ${ethers.formatUnits(totalAssets, decimals)}`);
```

#### ABI\_LENDING\_POOL\_V3

Next-generation lending pool contract ABI (vault v3.0).

```typescript
import { ABI_LENDING_POOL_V3 } from '@augustdigital/sdk';
```

Similar interface to V2 with additional features and optimizations.

#### ABI\_TOKENIZED\_VAULT\_V2

Tokenized vault V2 contract ABI.

```typescript
import { ABI_TOKENIZED_VAULT_V2 } from '@augustdigital/sdk';
```

**Main Functions:**

* `deposit(uint256 assets, address receiver)`
* `mint(uint256 shares, address receiver)`
* `withdraw(uint256 assets, address receiver, address owner)`
* `redeem(uint256 shares, address receiver, address owner)`

#### ABI\_TOKENIZED\_VAULT\_V2\_RECEIPT

Receipt token contract for Tokenized Vault V2.

```typescript
import { ABI_TOKENIZED_VAULT_V2_RECEIPT } from '@augustdigital/sdk';
```

Standard ERC20 interface for vault receipt tokens.

#### ABI\_TOKENIZED\_VAULT\_V2\_WHITELISTED\_ASSETS

Whitelisted assets management for Tokenized Vault V2.

```typescript
import { ABI_TOKENIZED_VAULT_V2_WHITELISTED_ASSETS } from '@augustdigital/sdk';
```

### Token ABIs

#### ABI\_ERC20

Standard ERC20 token contract ABI.

```typescript
import { ABI_ERC20 } from '@augustdigital/sdk';
```

**Main Functions:**

* `balanceOf(address account)` - Get token balance
* `allowance(address owner, address spender)` - Check allowance
* `approve(address spender, uint256 amount)` - Approve spending
* `transfer(address to, uint256 amount)` - Transfer tokens
* `transferFrom(address from, address to, uint256 amount)` - Transfer from
* `totalSupply()` - Get total supply
* `decimals()` - Get token decimals
* `symbol()` - Get token symbol
* `name()` - Get token name

**Example:**

```typescript
import { ethers } from 'ethers';
import { ABI_ERC20 } from '@augustdigital/sdk';

const tokenContract = new ethers.Contract(
  '0xTokenAddress...',
  ABI_ERC20,
  provider,
);

// Check balance
const balance = await tokenContract.balanceOf('0xWalletAddress...');

// Approve spending
const signer = provider.getSigner();
const tx = await tokenContract
  .connect(signer)
  .approve('0xSpenderAddress...', ethers.parseUnits('100', 18));
await tx.wait();
```

#### ABI\_ERC4626

Standard ERC4626 tokenized vault ABI.

```typescript
import { ABI_ERC4626 } from '@augustdigital/sdk';
```

**Main Functions:**

* `deposit(uint256 assets, address receiver)`
* `mint(uint256 shares, address receiver)`
* `withdraw(uint256 assets, address receiver, address owner)`
* `redeem(uint256 shares, address receiver, address owner)`
* `asset()` - Get underlying asset
* `totalAssets()` - Get total managed assets
* `convertToShares(uint256 assets)`
* `convertToAssets(uint256 shares)`
* `previewDeposit(uint256 assets)`
* `previewMint(uint256 shares)`
* `previewWithdraw(uint256 assets)`
* `previewRedeem(uint256 shares)`

#### ABI\_ERC721

Standard ERC721 NFT contract ABI.

```typescript
import { ABI_ERC721 } from '@augustdigital/sdk';
```

**Main Functions:**

* `balanceOf(address owner)`
* `ownerOf(uint256 tokenId)`
* `transferFrom(address from, address to, uint256 tokenId)`
* `safeTransferFrom(address from, address to, uint256 tokenId)`
* `approve(address to, uint256 tokenId)`
* `getApproved(uint256 tokenId)`
* `setApprovalForAll(address operator, bool approved)`

### Utility ABIs

#### ABI\_LOAN

Loan contract ABI for August lending protocol.

```typescript
import { ABI_LOAN } from '@augustdigital/sdk';
```

**Main Functions:**

* `principal()` - Get loan principal
* `apr()` - Get annual percentage rate
* `borrower()` - Get borrower address
* `lender()` - Get lender address
* `paymentInterval()` - Get payment frequency
* `makePayment(uint256 amount)` - Make loan payment

#### ABI\_REWARD\_DISTRIBUTOR

Reward distribution contract ABI.

```typescript
import { ABI_REWARD_DISTRIBUTOR } from '@augustdigital/sdk';
```

**Main Functions:**

* `claimRewards(address user)` - Claim pending rewards
* `pendingRewards(address user)` - Check pending rewards
* `rewardToken()` - Get reward token address

### Using ABIs

#### Creating Contract Instances

```typescript
import { ethers } from 'ethers';
import { ABI_LENDING_POOL_V2, ABI_ERC20 } from '@augustdigital/sdk';

const provider = new ethers.JsonRpcProvider('https://...');

// Create vault contract
const vault = new ethers.Contract(
  '0xVaultAddress...',
  ABI_LENDING_POOL_V2,
  provider,
);

// Create token contract
const token = new ethers.Contract('0xTokenAddress...', ABI_ERC20, provider);
```

#### Reading Contract Data

```typescript
import { ABI_LENDING_POOL_V2 } from '@augustdigital/sdk';

const vault = new ethers.Contract('0xVault...', ABI_LENDING_POOL_V2, provider);

// Query vault state
const [totalAssets, assetAddress, decimals] = await Promise.all([
  vault.totalAssets(),
  vault.asset(),
  vault.decimals(),
]);

console.log('Total Assets:', ethers.formatUnits(totalAssets, decimals));
console.log('Asset Token:', assetAddress);
```

#### Writing to Contracts

```typescript
import { ABI_LENDING_POOL_V2, ABI_ERC20 } from '@augustdigital/sdk';

const signer = await provider.getSigner();

// Approve vault to spend tokens
const token = new ethers.Contract(assetAddress, ABI_ERC20, signer);

const approveTx = await token.approve(
  vaultAddress,
  ethers.parseUnits('100', 18),
);
await approveTx.wait();

// Deposit into vault
const vault = new ethers.Contract(vaultAddress, ABI_LENDING_POOL_V2, signer);

const depositTx = await vault.deposit(
  ethers.parseUnits('100', 18),
  await signer.getAddress(),
);
await depositTx.wait();

console.log('Deposit successful!');
```


# Error Handling

Reference for the typed errors thrown by \`@augustdigital/sdk\`. Use this to decide which \`catch\` paths to write and how to recover from each failure class.

All public SDK methods throw typed errors that extend a common base class, `AugustSDKError`. Catch by class for broad handling, or narrow on the `code` field for actionable, per-failure logic.

## Hierarchy

```
AugustSDKError                   // base — every SDK error extends this
├── AugustAuthError              // missing / invalid / forbidden key
├── AugustValidationError        // caller-side input failed validation
├── AugustNetworkError           // network or transport-level failure
├── AugustTimeoutError           // request exceeded its deadline
├── AugustRateLimitError         // backend returned 429 (or equivalent)
└── AugustServerError            // backend returned a non-OK status
```

Every instance carries:

| Property        | Type                       | Description                                                                |
| --------------- | -------------------------- | -------------------------------------------------------------------------- |
| `code`          | `AugustErrorCode`          | Stable string identifier — narrow on this for per-case handling.           |
| `message`       | `string`                   | Human-readable description suitable for surfacing in dev tools.            |
| `correlationId` | `string \| undefined`      | Set from the response `x-correlation-id` header when the SDK received one. |
| `context`       | `Record<string, unknown>?` | Structured payload (e.g. `{ target, amount }`) attached for logging.       |
| `cause`         | `unknown`                  | Original error from the underlying RPC / fetch — preserved for inspection. |
| `stack`         | `string`                   | Native stack trace.                                                        |

`AugustTimeoutError` adds `timeoutMs` (the deadline that elapsed). `AugustRateLimitError` adds an optional `retryAfterMs`. `AugustServerError` adds `status` (the HTTP status code).

All instances expose `toJSON()` so `JSON.stringify(err)` returns a useful object — native `Error` serializes to `"{}"` without this.

## Codes

| Class                   | Code                 | When it fires                                                                                      | Recommended action                                      |
| ----------------------- | -------------------- | -------------------------------------------------------------------------------------------------- | ------------------------------------------------------- |
| `AugustAuthError`       | `AUTH_MISSING_KEY`   | Required August API key was not supplied to the SDK constructor.                                   | Pass `keys.august` into `new AugustSDK({...})`.         |
| `AugustAuthError`       | `AUTH_INVALID_KEY`   | Backend rejected the supplied key (malformed or revoked).                                          | Verify the key value; rotate if needed.                 |
| `AugustAuthError`       | `AUTH_FORBIDDEN`     | Backend returned HTTP 403 — key lacks permission for this endpoint.                                | Check the key's permitted scopes; do not retry.         |
| `AugustAuthError`       | `AUTH_UNAUTHORIZED`  | Backend returned HTTP 401 — key was not accepted.                                                  | Re-verify the key; do not retry without rotating.       |
| `AugustValidationError` | `INVALID_INPUT`      | Required field missing, `NaN` / `Infinity` amount, or JS number above `Number.MAX_SAFE_INTEGER`.   | Fix the input before retrying.                          |
| `AugustValidationError` | `INVALID_ADDRESS`    | Address fails checksum / wrong length, or is not valid for the target chain family (EVM / Solana). | Fix the input.                                          |
| `AugustValidationError` | `INVALID_CHAIN`      | Chain ID is not in the SDK's allowlist for this operation.                                         | Pass a supported chain.                                 |
| `AugustValidationError` | `INVALID_URL`        | A user-supplied URL failed validation.                                                             | Fix the URL.                                            |
| `AugustValidationError` | `ACCOUNT_NOT_FUNDED` | Stellar (Soroban) deposit/redeem source account has never been activated on-chain (zero balance).  | Send ≥1 XLM to the address to activate it, then retry.  |
| `AugustNetworkError`    | `NETWORK_ERROR`      | Underlying `fetch` / WebSocket failed (DNS, connection refused, offline).                          | Safe to retry with backoff.                             |
| `AugustTimeoutError`    | `TIMEOUT`            | Request exceeded its deadline (default 90 s, configurable per-call).                               | Backoff + retry; check chain / RPC status.              |
| `AugustRateLimitError`  | `RATE_LIMITED`       | Backend returned HTTP 429 (or equivalent rate-limit signal).                                       | Wait `retryAfterMs` before retrying.                    |
| `AugustServerError`     | `SERVER_ERROR`       | Backend returned a non-OK status that is not auth / rate-limit / timeout.                          | Inspect `.status` and `.context`; retry conservatively. |
| `AugustSDKError` (base) | `UNKNOWN`            | Wrapped failure from an RPC / contract call. Original error preserved on `.cause`.                 | Inspect `.cause` and `.context`; do not retry blindly.  |

## Narrowing patterns

### Catch broadly, narrow by code

Best for transactional flows where you want one block of recovery logic per failure category.

```typescript
import {
  AugustAuthError,
  AugustValidationError,
  AugustTimeoutError,
  AugustRateLimitError,
  AugustSDKError,
} from '@augustdigital/sdk';

try {
  await augustSdk.evm.vaultDeposit({
    target: vaultAddress,
    wallet: userAddress,
    amount: '100',
  });
} catch (err) {
  if (err instanceof AugustValidationError) {
    if (err.code === 'INVALID_INPUT') return showFormError(err.message);
    if (err.code === 'INVALID_ADDRESS') return showAddressError();
    if (err.code === 'ACCOUNT_NOT_FUNDED') {
      // Stellar only: the source account needs ≥1 XLM to be activated on-chain.
      // err.message includes the address and the funding hint.
      return showFundingPrompt(err.message);
    }
  }
  if (err instanceof AugustAuthError) {
    return showAuthError('Check your August API key.');
  }
  if (err instanceof AugustTimeoutError) {
    // err.timeoutMs is the deadline that elapsed
    return scheduleRetry(err.timeoutMs);
  }
  if (err instanceof AugustRateLimitError) {
    return scheduleRetry(err.retryAfterMs ?? 5_000);
  }
  if (err instanceof AugustSDKError) {
    // Wrapped downstream failure — inspect cause for the underlying revert / RPC error
    reportError(err.code, err.context, err.cause);
    return;
  }
  throw err;
}
```

### Catch using the type guard

Use `isAugustSDKError` when you receive an `unknown` value (e.g. in a global error handler) and want to keep the rest of the runtime's errors flowing through untouched.

```typescript
import { isAugustSDKError } from '@augustdigital/sdk';

window.addEventListener('unhandledrejection', (event) => {
  if (isAugustSDKError(event.reason)) {
    reportSdkError(event.reason);
    event.preventDefault();
  }
});
```

The guard works across realms (Web Worker, VM contexts) where `instanceof` fails.

### Inspect the original cause

Wrapped errors keep the underlying failure on `.cause`:

```typescript
try {
  await augustSdk.evm.vaultRequestRedeem({ target, wallet, amount });
} catch (err) {
  if (err instanceof AugustSDKError && err.code === 'UNKNOWN') {
    console.error('Underlying error:', err.cause);
    console.error('Context:', err.context);
  }
  throw err;
}
```

For on-chain reverts, `.cause` is the original `ethers` / `viem` error, so revert reasons and gas info remain accessible.

## Retry guidance

| Class                      | Safe to retry?            | Notes                                                               |
| -------------------------- | ------------------------- | ------------------------------------------------------------------- |
| `AugustValidationError`    | No                        | The input is wrong; retrying will fail the same way.                |
| `AugustAuthError`          | No                        | Fix the key first.                                                  |
| `AugustNetworkError`       | Yes, with backoff         | Transient by definition.                                            |
| `AugustTimeoutError`       | Yes, with backoff         | Consider raising `timeoutMs` if the operation is legitimately slow. |
| `AugustRateLimitError`     | Yes, after `retryAfterMs` | Honor the suggested wait.                                           |
| `AugustServerError`        | Conditionally             | Retry on 5xx with backoff; treat 4xx as terminal.                   |
| `AugustSDKError` `UNKNOWN` | Conditionally             | Inspect `.cause` first — an on-chain revert is not retryable.       |

## Serialization for logging

Every SDK error implements `toJSON()`, so logging with `JSON.stringify` preserves the structured fields:

```typescript
try {
  await augustSdk.getVault({ vault });
} catch (err) {
  if (err instanceof AugustSDKError) {
    logger.error('sdk_error', JSON.stringify(err));
  }
  throw err;
}
```

The serialized payload includes `name`, `message`, `code`, `correlationId`, `context`, `stack`, and a compact `cause` summary.


# SDK Reference

## Modules

| Module                                                                | Description                                                                                                                                                                                           |
| --------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [ABIs](/developers/typescript-sdk/api/abis)                           | Contract ABI definitions for interacting with August/Upshift smart contracts.                                                                                                                         |
| [AugustApi](/developers/typescript-sdk/api/augustapi)                 | The August backend API Module — read-only client for public backend endpoints (transparency dashboard, unrealized PnL) and authenticated loan-book / risk / OTC reads. Accessible as `sdk.apiModule`. |
| [AugustSDK](/developers/typescript-sdk/api/augustsdk)                 | The main August SDK class.                                                                                                                                                                            |
| [AugustSubAccounts](/developers/typescript-sdk/api/augustsubaccounts) | The August Sub Accounts Module.                                                                                                                                                                       |
| [AugustVaults](/developers/typescript-sdk/api/augustvaults)           | The August Vaults Module.                                                                                                                                                                             |
| [EVMAdapter](/developers/typescript-sdk/api/evmadapter)               | EVM Adapter for August SDK                                                                                                                                                                            |
| [SolanaAdapter](/developers/typescript-sdk/api/solanaadapter)         | Solana Adapter for August SDK                                                                                                                                                                         |
| [StellarAdapter](/developers/typescript-sdk/api/stellaradapter)       | Stellar Adapter for August SDK                                                                                                                                                                        |
| [SuiAdapter](/developers/typescript-sdk/api/suiadapter)               | Sui Adapter for August SDK                                                                                                                                                                            |


# AugustSDK

[SDK Reference](/developers/typescript-sdk/api) / AugustSDK

## AugustSDK

The main August SDK class.

Main SDK class for interacting with August Digital vaults and services. Provides unified access to EVM, Solana, Sui, and Stellar blockchain adapters.

**Extends:** `AugustBase`

### Constructors

#### Constructor

> **new AugustSDK**(`baseConfig`): [`AugustSDK`](#augustsdk)

Initialize the August SDK with provider configuration. Automatically sets up EVM adapter and optionally initializes Solana if RPC URL is provided.

**Parameters**

| Parameter    | Type          |
| ------------ | ------------- |
| `baseConfig` | `IAugustBase` |

**Returns**

[`AugustSDK`](#augustsdk)

**Overrides**

`AugustBase.constructor`

### Properties

| Property         | Modifier | Type                                                                             | Description                                   | Inherited from             |
| ---------------- | -------- | -------------------------------------------------------------------------------- | --------------------------------------------- | -------------------------- |
| `activeNetwork?` | `public` | `IActiveNetwork`                                                                 | -                                             | `AugustBase.activeNetwork` |
| `appName`        | `public` | `string`                                                                         | Validated app-name slug from the constructor. | `AugustBase.appName`       |
| `authorized`     | `public` | `boolean`                                                                        | -                                             | `AugustBase.authorized`    |
| `evm`            | `public` | [`default`](/developers/typescript-sdk/api/evmadapter#default)                   | -                                             | -                          |
| `keys`           | `public` | `IKeys`                                                                          | -                                             | `AugustBase.keys`          |
| `monitoring`     | `public` | `IMonitoring`                                                                    | -                                             | `AugustBase.monitoring`    |
| `providers`      | `public` | `IProvidersConfig`                                                               | -                                             | `AugustBase.providers`     |
| `solana`         | `public` | [`default`](/developers/typescript-sdk/api/solanaadapter#default)                | -                                             | -                          |
| `stellar`        | `public` | [`StellarAdapter`](/developers/typescript-sdk/api/stellaradapter#stellaradapter) | -                                             | -                          |
| `sui`            | `public` | [`default`](/developers/typescript-sdk/api/suiadapter#default)                   | -                                             | -                          |

**Accessors**

#### apiModule

**Get Signature**

> **get** **apiModule**(): [`AugustApi`](/developers/typescript-sdk/api/augustapi#augustapi)

Get the backend API module instance ([AugustApi](/developers/typescript-sdk/api/augustapi#augustapi)) — read-only access to backend-computed data with no on-chain equivalent: the unrealized-PnL series and the transparency dashboard (position snapshot, backing series, smoothed APY, allocations, fee config, governance).

**Returns**

[`AugustApi`](/developers/typescript-sdk/api/augustapi#augustapi)

#### subAccountsModule

**Get Signature**

> **get** **subAccountsModule**(): [`AugustSubAccounts`](/developers/typescript-sdk/api/augustsubaccounts#augustsubaccounts)

Get the Sub-Accounts module instance.

**Returns**

[`AugustSubAccounts`](/developers/typescript-sdk/api/augustsubaccounts#augustsubaccounts)

#### vaultsModule

**Get Signature**

> **get** **vaultsModule**(): [`AugustVaults`](/developers/typescript-sdk/api/augustvaults#augustvaults)

Get the Vaults module instance.

**Returns**

[`AugustVaults`](/developers/typescript-sdk/api/augustvaults#augustvaults)

### Methods

#### clearWallet()

> **clearWallet**(): `void`

Clear the active wallet address from the SDK state and monitoring headers.

**Returns**

`void`

**Overrides**

`AugustBase.clearWallet`

#### fetchPointsLeaderboard()

> **fetchPointsLeaderboard**(`params?`): `Promise`<`any`>

Fetch the points leaderboard data.

**Parameters**

| Parameter         | Type                                                                                       | Description                                    |
| ----------------- | ------------------------------------------------------------------------------------------ | ---------------------------------------------- |
| `params?`         | { `page?`: `number`; `perPage?`: `number`; `sortBy?`: `"streakDays"` \| `"totalPoints"`; } | Optional parameters for pagination and sorting |
| `params.page?`    | `number`                                                                                   | -                                              |
| `params.perPage?` | `number`                                                                                   | -                                              |
| `params.sortBy?`  | `"streakDays"` \| `"totalPoints"`                                                          | -                                              |

**Returns**

`Promise`<`any`>

Leaderboard response data

#### getLatestUnrealizedPnl()

> **getLatestUnrealizedPnl**(): `Promise`<`IUnrealizedPnlSnapshot`\[]>

Fetch the latest unrealized-PnL snapshot for every tracked vault. Delegates to [AugustApi.getLatestUnrealizedPnl](/developers/typescript-sdk/api/augustapi#getlatestunrealizedpnl) — see it for return shape and thrown errors.

**Returns**

`Promise`<`IUnrealizedPnlSnapshot`\[]>

#### getLayerZeroDeposits()

> **getLayerZeroDeposits**(`props`): `Promise`<`ILayerZeroDeposit`\[]>

Query LayerZero USDC deposits from the august-layerzero subgraphs. Returns all deposits or filters by sender wallet address if provided.

**Important Notes:**

* Only deposit transactions are tracked (not withdrawals or other operations)
* Sender and recipient addresses are stored in bytes32 format in the subgraph
* Timestamps are available from the subgraph

**Supported Vaults:**

* `upusdc`: 0x80E1048eDE66ec4c364b4F22C8768fc657FF6A42
* `coreusdc`: 0xE9B725010A9E419412ed67d0fA5f3A5f40159D32
* `earnausd`: 0x36eDbF0C834591BFdfCaC0Ef9605528c75c406aA

**Parameters**

| Parameter            | Type                                                                                            | Description                                                                                              |
| -------------------- | ----------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
| `props`              | { `receiptToken`: `"upusdc"` \| `"coreusdc"` \| `"earnausd"`; `wallet?`: `` `0x${string}` ``; } | Receipt token type ('upusdc', 'coreusdc', or 'earnausd') and optional wallet address to filter by sender |
| `props.receiptToken` | `"upusdc"` \| `"coreusdc"` \| `"earnausd"`                                                      | -                                                                                                        |
| `props.wallet?`      | `` `0x${string}` ``                                                                             | -                                                                                                        |

**Returns**

`Promise`<`ILayerZeroDeposit`\[]>

Array of deposit events with the following structure:

* `assetAmt`: Amount of assets deposited (as string)
* `shareAmt`: Amount of shares received (as string)
* `sender`: Sender address in bytes32 format
* `recipient`: Recipient address in bytes32 format
* `dstEid`: Destination endpoint ID (LayerZero chain identifier)
* `transactionHash_`: Transaction hash

**Throws**

Error if receipt token is invalid or GraphQL request fails

**Example**

```typescript
// Get all coreUSDC deposits
const allDeposits = await sdk.getLayerZeroDeposits({
  receiptToken: 'coreusdc'
});

// Get deposits for a specific wallet
const userDeposits = await sdk.getLayerZeroDeposits({
  receiptToken: 'upusdc',
  wallet: '0xb0280B58F541131b29D1B33319CD440a99eA0305'
});
```

#### getLayerZeroRedeems()

> **getLayerZeroRedeems**(`props?`): `Promise`<`ILayerZeroRedeem`\[]>

Get LayerZero redeems for earnAUSD vault

**Parameters**

| Parameter       | Type                                |
| --------------- | ----------------------------------- |
| `props?`        | { `wallet?`: `` `0x${string}` ``; } |
| `props.wallet?` | `` `0x${string}` ``                 |

**Returns**

`Promise`<`ILayerZeroRedeem`\[]>

**Example**

```typescript
// Get all earnAUSD redeems
const allRedeems = await sdk.getLayerZeroRedeems();

// Get redeems for a specific wallet
const userRedeems = await sdk.getLayerZeroRedeems({
  wallet: '0x2de1DCB8EaAd40fAd327fa3eE3F48774b8e20649'
});
```

#### getPrice()

> **getPrice**(`symbol`): `Promise`<`number`>

Get the current USD price of a token by symbol or contract address. Falls back to CoinGecko if primary price source fails.

**Parameters**

| Parameter | Type     | Description                      |
| --------- | -------- | -------------------------------- |
| `symbol`  | `string` | Token symbol or contract address |

**Returns**

`Promise`<`number`>

Current price in USD

#### getSwapRouterEligibleVaults()

> **getSwapRouterEligibleVaults**(`chainId`, `options?`): `Promise`<`` `0x${string}` ``\[]>

Resolve the vaults currently eligible for the any-token `SwapRouter` deposit surface on a chain — every vault the router has `enableVault`-ed whose on-chain registration is still live.

Delegates to [AugustVaults.getSwapRouterEligibleVaults](/developers/typescript-sdk/api/augustvaults#getswaproutereligiblevaults), which reconstructs the set from the router's `VaultEnabled` events and verifies each vault's current `vaultInfo` registration (not enumerable). Returns `[]` when no router is deployed on `chainId` or no provider is configured for it. On-chain eligibility only — app-level policy (e.g. OVault exclusions) remains the caller's responsibility.

**Parameters**

| Parameter            | Type                        | Description                                                   |
| -------------------- | --------------------------- | ------------------------------------------------------------- |
| `chainId`            | `number`                    | EVM chain ID to resolve eligible vaults for.                  |
| `options?`           | { `fromBlock?`: `number`; } | Optional `fromBlock` to override the deploy-block scan floor. |
| `options.fromBlock?` | `number`                    | -                                                             |

**Returns**

`Promise`<`` `0x${string}` ``\[]>

Checksummed eligible vault addresses; `[]` when unavailable.

**Throws**

AugustSDKError when an `eth_getLogs` scan chunk fails.

**Example**

```ts
const vaults = await augustSdk.getSwapRouterEligibleVaults(1);
```

#### getSwapRouterWhitelistedTokens()

> **getSwapRouterWhitelistedTokens**(`chainId`, `options?`): `Promise`<`` `0x${string}` ``\[]>

Resolve the ERC-20 tokens currently whitelisted for the `SwapRouter` on a chain — the any-token set a deposit UI can offer as swap-and-deposit inputs.

Delegates to [AugustVaults.getSwapRouterWhitelistedTokens](/developers/typescript-sdk/api/augustvaults#getswaprouterwhitelistedtokens), which reconstructs the set from the router's `TokenEnabled` events and verifies each against the on-chain `whitelistedTokens` mapping (not enumerable). Returns `[]` when no router is deployed on `chainId` or no provider is configured for it.

**Parameters**

| Parameter            | Type                        | Description                                                   |
| -------------------- | --------------------------- | ------------------------------------------------------------- |
| `chainId`            | `number`                    | EVM chain ID to resolve the allowlist for.                    |
| `options?`           | { `fromBlock?`: `number`; } | Optional `fromBlock` to override the deploy-block scan floor. |
| `options.fromBlock?` | `number`                    | -                                                             |

**Returns**

`Promise`<`` `0x${string}` ``\[]>

Checksummed whitelisted token addresses; `[]` when unavailable.

**Throws**

AugustSDKError when an `eth_getLogs` scan chunk fails.

**Example**

```ts
const tokens = await augustSdk.getSwapRouterWhitelistedTokens(1);
```

#### getTotalDeposited()

> **getTotalDeposited**(`options?`): `Promise`<`number`>

**Parameters**

| Parameter                  | Type                                                            |
| -------------------------- | --------------------------------------------------------------- |
| `options?`                 | { `loadSnapshots?`: `boolean`; `loadSubaccounts?`: `boolean`; } |
| `options.loadSnapshots?`   | `boolean`                                                       |
| `options.loadSubaccounts?` | `boolean`                                                       |

**Returns**

`Promise`<`number`>

#### getUserPoints()

> **getUserPoints**(`userAddress`): `Promise`<`any`>

Get user points from the backend API. This fetches processed points data directly from the backend, removing the need for client-side points calculation.

**Parameters**

| Parameter     | Type                | Description         |
| ------------- | ------------------- | ------------------- |
| `userAddress` | `` `0x${string}` `` | User wallet address |

**Returns**

`Promise`<`any`>

Points data from the backend API

#### getVault()

> **getVault**(`props`): `Promise`<`IVault`>

Fetch detailed information for a specific vault.

**Parameters**

| Parameter                | Type                                                                                                                                                                                                                      | Description                                              |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- |
| `props`                  | { `chainId?`: `number`; `loadSnapshots?`: `boolean`; `loadSubaccounts?`: `boolean`; `options?`: [`IVaultCustomOptions`](/developers/typescript-sdk/api/augustvaults#ivaultcustomoptions); `vault`: `` `0x${string}` ``; } | Vault address, chain ID, and optional enrichment options |
| `props.chainId?`         | `number`                                                                                                                                                                                                                  | -                                                        |
| `props.loadSnapshots?`   | `boolean`                                                                                                                                                                                                                 | -                                                        |
| `props.loadSubaccounts?` | `boolean`                                                                                                                                                                                                                 | -                                                        |
| `props.options?`         | [`IVaultCustomOptions`](/developers/typescript-sdk/api/augustvaults#ivaultcustomoptions)                                                                                                                                  | -                                                        |
| `props.vault`            | `` `0x${string}` ``                                                                                                                                                                                                       | -                                                        |

**Returns**

`Promise`<`IVault`>

Single vault object with full metadata

#### getVaultActivity()

> **getVaultActivity**(`props`): `Promise`<`IVaultUserHistoryItem`\[]>

Get a vault's deposit/withdrawal activity across every participant.

The vault-wide counterpart to [AugustSDK.getVaultUserHistory](#getvaultuserhistory) — use it to answer flow questions ("how many deposits in the last 7 days", "net flow this week") that point-in-time TVL cannot. Reads from the Goldsky subgraph, paginated so busy vaults are not truncated; a `sinceTs` window keeps short lookbacks cheap.

**Parameters**

| Parameter        | Type                                                                                                                                                                                            | Description                                                                                                        |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| `props`          | { `chainId?`: `number`; `sinceTs?`: `number`; `types?`: (`"deposit"` \| `"withdraw-request"` \| `"withdraw-processed"` \| `"redeem"`)\[]; `untilTs?`: `number`; `vault`: `` `0x${string}` ``; } | Vault address, optional chain id, optional `sinceTs`/`untilTs` Unix-second bounds, and an optional `types` filter. |
| `props.chainId?` | `number`                                                                                                                                                                                        | -                                                                                                                  |
| `props.sinceTs?` | `number`                                                                                                                                                                                        | -                                                                                                                  |
| `props.types?`   | (`"deposit"` \| `"withdraw-request"` \| `"withdraw-processed"` \| `"redeem"`)\[]                                                                                                                | -                                                                                                                  |
| `props.untilTs?` | `number`                                                                                                                                                                                        | -                                                                                                                  |
| `props.vault`    | `` `0x${string}` ``                                                                                                                                                                             | -                                                                                                                  |

**Returns**

`Promise`<`IVaultUserHistoryItem`\[]>

Array of activity items (oldest-first) with normalized amounts, actor addresses, event type, and transaction hashes.

**Throws**

If `vault` is not a valid address or no chain id can be resolved.

**Example**

```ts
const weekAgo = Math.floor(Date.now() / 1000) - 7 * 86_400;
const items = await sdk.getVaultActivity({ vault, chainId: 143, sinceTs: weekAgo });
```

#### getVaultAllocations()

> **getVaultAllocations**(`props`): `Promise`<`IVaultAllocations` | { `message`: `string`; `status`: `number`; }>

Get vault asset allocations across DeFi protocols, CeFi, and OTC positions.

This is the data behind the "Vault Exposure" section of the Upshift app — a partner rendering that section in their own frontend needs only this call. Read `exposurePerCategory` for the pre-bucketed view the UI renders (`supplying` / `borrowing` / `wallet` / `lending` legs plus per-category USD totals) and `netValue` for the headline figure; the raw `defi` / `cefi` / `otc` arrays back the drill-downs. See the "Rendering the Vault Exposure section" guide in the vaults docs for a faithful reproduction.

**Parameters**

| Parameter        | Type                                                    | Description                |
| ---------------- | ------------------------------------------------------- | -------------------------- |
| `props`          | { `chainId?`: `number`; `vault`: `` `0x${string}` ``; } | Vault address and chain ID |
| `props.chainId?` | `number`                                                | -                          |
| `props.vault`    | `` `0x${string}` ``                                     | -                          |

**Returns**

`Promise`<`IVaultAllocations` | { `message`: `string`; `status`: `number`; }>

Detailed breakdown of vault allocations by category

**Example**

```ts
const { exposurePerCategory, netValue } = await sdk.getVaultAllocations({
  vault: '0xcd69123b3FBBfC666E1f6a501da27B564C00De54',
  chainId: 1,
});
for (const item of exposurePerCategory?.supplying ?? []) {
  console.log(item.protocol, item.symbol, item.amount);
}
```

#### ~~getVaultAnnualizedApy()~~

> **getVaultAnnualizedApy**(`props`): `Promise`<`IVaultAnnualizedApy`>

Get annualized APY metrics for a vault.

Supported Vaults: cUSDO, tETH, wstETH, rsETH

**Parameters**

| Parameter     | Type                              | Description   |
| ------------- | --------------------------------- | ------------- |
| `props`       | { `vault`: `` `0x${string}` ``; } | Vault address |
| `props.vault` | `` `0x${string}` ``               | -             |

**Returns**

`Promise`<`IVaultAnnualizedApy`>

Annualized APY data including liquidity APY

**Deprecated**

The `hgETH30dLiquidAPY` and `hgETH7dLiquidAPY` response fields are deprecated. These fields will be removed on 2026-01-01. Use `liquidAPY30Day` and `liquidAPY7Day` fields instead.

#### ~~getVaultApy()~~

> **getVaultApy**(`props`): `Promise`<`object`\[]>

Get current or historical APY for a vault.

**Parameters**

| Parameter                   | Type                                                                        | Description                                           |
| --------------------------- | --------------------------------------------------------------------------- | ----------------------------------------------------- |
| `props`                     | { `historical?`: { `daysAgo?`: `number`; }; `vault`: `` `0x${string}` ``; } | Vault address and optional historical lookback period |
| `props.historical?`         | { `daysAgo?`: `number`; }                                                   | -                                                     |
| `props.historical.daysAgo?` | `number`                                                                    | -                                                     |
| `props.vault`               | `` `0x${string}` ``                                                         | -                                                     |

**Returns**

`Promise`<`object`\[]>

APY data including rewards breakdown

**Deprecated**

use getVaultHistoricalTimeseries instead

#### getVaultAvailableRedemptions()

> **getVaultAvailableRedemptions**(`props`): `Promise`<{ `availableRedemptions`: `IVaultAvailableRedemption`\[]; `pendingRedemptions`: `IVaultAvailableRedemption`\[]; `processedWithdrawals`: `ISubgraphWithdrawProccessed`\[]; `requestedWithdrawals`: `ISubgraphWithdrawRequest`\[]; }>

Get redemption requests that are ready to be claimed.

**Parameters**

| Parameter        | Type                                                                                                           | Description                                         |
| ---------------- | -------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- |
| `props`          | { `chainId?`: `number`; `vault`: `` `0x${string}` ``; `verbose?`: `boolean`; `wallet?`: `` `0x${string}` ``; } | Vault address, chain ID, and optional wallet filter |
| `props.chainId?` | `number`                                                                                                       | -                                                   |
| `props.vault`    | `` `0x${string}` ``                                                                                            | -                                                   |
| `props.verbose?` | `boolean`                                                                                                      | -                                                   |
| `props.wallet?`  | `` `0x${string}` ``                                                                                            | -                                                   |

**Returns**

`Promise`<{ `availableRedemptions`: `IVaultAvailableRedemption`\[]; `pendingRedemptions`: `IVaultAvailableRedemption`\[]; `processedWithdrawals`: `ISubgraphWithdrawProccessed`\[]; `requestedWithdrawals`: `ISubgraphWithdrawRequest`\[]; }>

Array of available redemption requests with amounts and timestamps

#### getVaultBorrowerHealthFactor()

> **getVaultBorrowerHealthFactor**(`props?`): `Promise`<`Record`<`string`, `IVaultBorrowerHealthFactor`\[]> | `Record`<`string`, `IVaultBorrowerHealthFactor`\[]>\[]>

Get the borrower's health factor by vault.

Pass `vault` whenever the caller knows which pool it cares about — it skips the all-vaults cross-chain fanout and only reads the loans for that one pool. The response map is keyed by **lowercased** vault address; look entries up with `address.toLowerCase()`.

**Parameters**

| Parameter        | Type                                                     | Description                                                                                                          |
| ---------------- | -------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| `props?`         | { `chainId?`: `number`; `vault?`: `` `0x${string}` ``; } | -                                                                                                                    |
| `props.chainId?` | `number`                                                 | Optional chain to scope the read to.                                                                                 |
| `props.vault?`   | `` `0x${string}` ``                                      | Optional vault address. When provided alongside `chainId`, only that vault's borrower-health-factor data is fetched. |

**Returns**

`Promise`<`Record`<`string`, `IVaultBorrowerHealthFactor`\[]> | `Record`<`string`, `IVaultBorrowerHealthFactor`\[]>\[]>

Object containing the borrower's health factor by vault.

#### getVaultHistoricalTimeseries()

> **getVaultHistoricalTimeseries**(`props`): `Promise`<`IHistoricalTimeseriesResponse`>

Get historical timeseries data for a vault.

**Parameters**

| Parameter      | Type                                                  | Description                               |
| -------------- | ----------------------------------------------------- | ----------------------------------------- |
| `props`        | { `nDays?`: `number`; `vault`: `` `0x${string}` ``; } | Vault address and optional number of days |
| `props.nDays?` | `number`                                              | -                                         |
| `props.vault`  | `` `0x${string}` ``                                   | -                                         |

**Returns**

`Promise`<`IHistoricalTimeseriesResponse`>

Historical timeseries data with TVL, APY, PnL, share price, and other metrics

#### getVaultLoans()

> **getVaultLoans**(`props`): `Promise`<`IVaultLoan`\[]>

Get active loans deployed from a vault.

**Parameters**

| Parameter        | Type                                                    | Description                |
| ---------------- | ------------------------------------------------------- | -------------------------- |
| `props`          | { `chainId?`: `number`; `vault`: `` `0x${string}` ``; } | Vault address and chain ID |
| `props.chainId?` | `number`                                                | -                          |
| `props.vault`    | `` `0x${string}` ``                                     | -                          |

**Returns**

`Promise`<`IVaultLoan`\[]>

Array of loan details including borrower, principal, APR

#### getVaultPnl()

> **getVaultPnl**(`props`): `Promise`<`IVaultPnl`>

Get PnL for a vault (vault-level, not user-specific). Returns the vault's overall profit and loss across all users.

**Parameters**

| Parameter        | Type                                                    | Description                         |
| ---------------- | ------------------------------------------------------- | ----------------------------------- |
| `props`          | { `chainId?`: `number`; `vault`: `` `0x${string}` ``; } | Vault address and optional chain ID |
| `props.chainId?` | `number`                                                | -                                   |
| `props.vault`    | `` `0x${string}` ``                                     | -                                   |

**Returns**

`Promise`<`IVaultPnl`>

Vault PnL in USD and notional value

#### getVaultPositions()

> **getVaultPositions**(`props`): `Promise`<`IVaultPosition`\[]>

Get user positions across vaults including shares and claimable redemptions. Supports both EVM and Solana vaults.

**Parameters**

| Parameter              | Type                                                                                                                                                                                                                                                                           | Description                                         |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------- |
| `props`                | { `chainId?`: `number`; `options?`: [`IVaultBaseOptions`](/developers/typescript-sdk/api/augustvaults#ivaultbaseoptions); `showAllVaults?`: `boolean`; `solanaWallet?`: `string`; `stellarWallet?`: `string`; `vault?`: `` `0x${string}` ``; `wallet?`: `` `0x${string}` ``; } | Wallet address, chain ID, and optional vault filter |
| `props.chainId?`       | `number`                                                                                                                                                                                                                                                                       | -                                                   |
| `props.options?`       | [`IVaultBaseOptions`](/developers/typescript-sdk/api/augustvaults#ivaultbaseoptions)                                                                                                                                                                                           | -                                                   |
| `props.showAllVaults?` | `boolean`                                                                                                                                                                                                                                                                      | -                                                   |
| `props.solanaWallet?`  | `string`                                                                                                                                                                                                                                                                       | -                                                   |
| `props.stellarWallet?` | `string`                                                                                                                                                                                                                                                                       | -                                                   |
| `props.vault?`         | `` `0x${string}` ``                                                                                                                                                                                                                                                            | -                                                   |
| `props.wallet?`        | `` `0x${string}` ``                                                                                                                                                                                                                                                            | -                                                   |

**Returns**

`Promise`<`IVaultPosition`\[]>

Array of positions with balances and pending redemptions

#### getVaultRedemptionHistory()

> **getVaultRedemptionHistory**(`props`): `Promise`<`IVaultRedemptionHistoryItem`\[]>

Get historical redemption requests for a vault (settled, cancelled, pending-but-out-of-window), optionally filtered to one wallet.

**Parameters**

| Parameter               | Type                                                                                                                 | Description                                                                                          |
| ----------------------- | -------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
| `props`                 | { `chainId?`: `number`; `lookbackBlocks?`: `number`; `vault`: `` `0x${string}` ``; `wallet?`: `` `0x${string}` ``; } | Vault address, chain ID, optional wallet, and an optional `lookbackBlocks` for how far back to scan. |
| `props.chainId?`        | `number`                                                                                                             | -                                                                                                    |
| `props.lookbackBlocks?` | `number`                                                                                                             | -                                                                                                    |
| `props.vault`           | `` `0x${string}` ``                                                                                                  | -                                                                                                    |
| `props.wallet?`         | `` `0x${string}` ``                                                                                                  | -                                                                                                    |

**Returns**

`Promise`<`IVaultRedemptionHistoryItem`\[]>

Historical redemption records, newest first.

#### getVaults()

> **getVaults**(`options?`): `Promise`<`IVault`\[]>

Fetch all available vaults across configured networks. Optionally filter by chain IDs and include loan/allocation data.

**Parameters**

| Parameter  | Type                                                                                                | Description                                          |
| ---------- | --------------------------------------------------------------------------------------------------- | ---------------------------------------------------- |
| `options?` | `object` & [`IVaultCustomOptions`](/developers/typescript-sdk/api/augustvaults#ivaultcustomoptions) | Configuration for filtering and enriching vault data |

**Returns**

`Promise`<`IVault`\[]>

Array of vault objects with metadata and optional position data

#### getVaultStakingPositions()

> **getVaultStakingPositions**(`props`): `Promise`<`IActiveStakingPosition`\[]>

Get user's staking positions for vault receipt tokens.

**Parameters**

| Parameter        | Type                                                      | Description                          |
| ---------------- | --------------------------------------------------------- | ------------------------------------ |
| `props`          | { `chainId?`: `number`; `wallet?`: `` `0x${string}` ``; } | Wallet address and optional chain ID |
| `props.chainId?` | `number`                                                  | -                                    |
| `props.wallet?`  | `` `0x${string}` ``                                       | -                                    |

**Returns**

`Promise`<`IActiveStakingPosition`\[]>

Array of staking positions with rewards

#### getVaultSummary()

> **getVaultSummary**(`props`): `Promise`<`IVaultSummary`>

Get summary data for a vault (name, type, chain, recent returns).

**Parameters**

| Parameter     | Type                              | Description   |
| ------------- | --------------------------------- | ------------- |
| `props`       | { `vault`: `` `0x${string}` ``; } | Vault address |
| `props.vault` | `` `0x${string}` ``               | -             |

**Returns**

`Promise`<`IVaultSummary`>

Vault summary data

#### getVaultTvl()

> **getVaultTvl**(`props`): `Promise`<`object`\[]>

Get current or historical TVL for a vault.

**Parameters**

| Parameter           | Type                                                                                             | Description                                      |
| ------------------- | ------------------------------------------------------------------------------------------------ | ------------------------------------------------ |
| `props`             | { `chainId?`: `number`; `historical?`: `IVaultHistoricalParams`; `vault`: `` `0x${string}` ``; } | Vault address and optional historical parameters |
| `props.chainId?`    | `number`                                                                                         | -                                                |
| `props.historical?` | `IVaultHistoricalParams`                                                                         | -                                                |
| `props.vault`       | `` `0x${string}` ``                                                                              | -                                                |

**Returns**

`Promise`<`object`\[]>

TVL in vault's base asset units

#### getVaultUnrealizedPnlHistory()

> **getVaultUnrealizedPnlHistory**(`params`): `Promise`<`IUnrealizedPnlSnapshot`\[]>

Fetch the historical unrealized-PnL series for a vault, newest first. Delegates to [AugustApi.getVaultUnrealizedPnlHistory](/developers/typescript-sdk/api/augustapi#getvaultunrealizedpnlhistory) — see it for parameter semantics and thrown errors.

**Parameters**

| Parameter       | Type                                       |
| --------------- | ------------------------------------------ |
| `params`        | { `limit?`: `number`; `vault`: `string`; } |
| `params.limit?` | `number`                                   |
| `params.vault`  | `string`                                   |

**Returns**

`Promise`<`IUnrealizedPnlSnapshot`\[]>

#### getVaultUserHistory()

> **getVaultUserHistory**(`props`): `Promise`<`IVaultUserHistoryItem`\[]>

Get user's historical vault interactions including deposits and withdrawals.

**Parameters**

| Parameter        | Type                                                                                                                                                                                      | Description                                     |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------- |
| `props`          | { `chainId?`: `number`; `options?`: [`IVaultBaseOptions`](/developers/typescript-sdk/api/augustvaults#ivaultbaseoptions); `vault?`: `` `0x${string}` ``; `wallet`: `` `0x${string}` ``; } | Wallet address and optional vault/chain filters |
| `props.chainId?` | `number`                                                                                                                                                                                  | -                                               |
| `props.options?` | [`IVaultBaseOptions`](/developers/typescript-sdk/api/augustvaults#ivaultbaseoptions)                                                                                                      | -                                               |
| `props.vault?`   | `` `0x${string}` ``                                                                                                                                                                       | -                                               |
| `props.wallet`   | `` `0x${string}` ``                                                                                                                                                                       | -                                               |

**Returns**

`Promise`<`IVaultUserHistoryItem`\[]>

Array of historical transactions with amounts and timestamps

#### getVaultUserLifetimePnl()

> **getVaultUserLifetimePnl**(`props`): `Promise`<`IVaultUserLifetimePnl`>

Get lifetime PnL for a user in a specific vault. Calculates realized and unrealized PnL based on deposit/withdrawal history and current position.

**Parameters**

| Parameter        | Type                                                                                   | Description                                          |
| ---------------- | -------------------------------------------------------------------------------------- | ---------------------------------------------------- |
| `props`          | { `chainId?`: `number`; `vault`: `` `0x${string}` ``; `wallet`: `` `0x${string}` ``; } | Vault address, wallet address, and optional chain ID |
| `props.chainId?` | `number`                                                                               | -                                                    |
| `props.vault`    | `` `0x${string}` ``                                                                    | -                                                    |
| `props.wallet`   | `` `0x${string}` ``                                                                    | -                                                    |

**Returns**

`Promise`<`IVaultUserLifetimePnl`>

Lifetime PnL data including realized and unrealized PnL in both native token and USD

#### getVaultUserTransfers()

> **getVaultUserTransfers**(`props`): `Promise`<`object`\[]>

Get user's vault share transfer history from subgraph.

**Parameters**

| Parameter        | Type                                                                                                                                                                                      | Description                                     |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------- |
| `props`          | { `chainId?`: `number`; `options?`: [`IVaultBaseOptions`](/developers/typescript-sdk/api/augustvaults#ivaultbaseoptions); `vault?`: `` `0x${string}` ``; `wallet`: `` `0x${string}` ``; } | Wallet address and optional vault/chain filters |
| `props.chainId?` | `number`                                                                                                                                                                                  | -                                               |
| `props.options?` | [`IVaultBaseOptions`](/developers/typescript-sdk/api/augustvaults#ivaultbaseoptions)                                                                                                      | -                                               |
| `props.vault?`   | `` `0x${string}` ``                                                                                                                                                                       | -                                               |
| `props.wallet`   | `` `0x${string}` ``                                                                                                                                                                       | -                                               |

**Returns**

`Promise`<`object`\[]>

Array of transfer events

#### getVaultWithdrawals()

> **getVaultWithdrawals**(`props`): `Promise`<`IVaultWithdrawals`>

Get withdrawal summary and pending queue for a vault.

**Parameters**

| Parameter        | Type                                                    | Description                         |
| ---------------- | ------------------------------------------------------- | ----------------------------------- |
| `props`          | { `chainId?`: `number`; `vault`: `` `0x${string}` ``; } | Vault address and optional chain ID |
| `props.chainId?` | `number`                                                | -                                   |
| `props.vault`    | `` `0x${string}` ``                                     | -                                   |

**Returns**

`Promise`<`IVaultWithdrawals`>

Withdrawal summary and pending queue

#### getYieldLastRealizedOn()

> **getYieldLastRealizedOn**(`props`): `Promise`<`number`>

Get the timestamp when yield was last realized for a vault.

**Parameters**

| Parameter        | Type                                                    | Description                         |
| ---------------- | ------------------------------------------------------- | ----------------------------------- |
| `props`          | { `chainId?`: `number`; `vault`: `` `0x${string}` ``; } | Vault address and optional chain ID |
| `props.chainId?` | `number`                                                | -                                   |
| `props.vault`    | `` `0x${string}` ``                                     | -                                   |

**Returns**

`Promise`<`number`>

Timestamp (Unix timestamp in seconds) when yield was last realized

#### init()

> **init**(): `Promise`<`void`>

Verify API keys and authorize SDK usage. TODO: initialize class with appropriate keys and verify august key

**Returns**

`Promise`<`void`>

**Inherited from**

`AugustBase.init`

#### previewRedemption()

> **previewRedemption**(`props`): `Promise`<`INormalizedNumber`>

Preview the amount of assets that would be received for redeeming shares (queued redemption).

**Parameters**

| Parameter            | Type                                                                                                      | Description                                                  |
| -------------------- | --------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ |
| `props`              | { `chainId?`: `number`; `sharesAmount`: `string` \| `number` \| `bigint`; `vault`: `` `0x${string}` ``; } | Vault contract address, shares amount, and optional chain ID |
| `props.chainId?`     | `number`                                                                                                  | -                                                            |
| `props.sharesAmount` | `string` \| `number` \| `bigint`                                                                          | -                                                            |
| `props.vault`        | `` `0x${string}` ``                                                                                       | -                                                            |

**Returns**

`Promise`<`INormalizedNumber`>

The amount of assets as INormalizedNumber

#### registerUserForPoints()

> **registerUserForPoints**(`userAddress`, `referrerAddress`, `chainId`, `signature`, `nonce`, `expiry`): `Promise`<`Response`>

Register a user for the points program, authenticated by a wallet signature.

The caller produces a personal\_sign signature over a canonical message containing the user address, referrer (or `"none"`), chain, nonce, and expiry — see `AugustVaults.registerUserForPoints` for the exact template.

**Parameters**

| Parameter         | Type                | Description                                                                                                                   |
| ----------------- | ------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `userAddress`     | `` `0x${string}` `` | EVM wallet address being registered.                                                                                          |
| `referrerAddress` | `` `0x${string}` `` | Optional EVM referrer address.                                                                                                |
| `chainId`         | `number`            | Chain on which the wallet signed; powers the EIP-1271 fallback for smart-contract wallets and pins the signature cross-chain. |
| `signature`       | `string`            | 0x-prefixed personal\_sign signature over the canonical message.                                                              |
| `nonce`           | `string`            | Single-use random string (8–128 chars).                                                                                       |
| `expiry`          | `number`            | Unix seconds; must be in the future, within the backend's TTL.                                                                |

**Returns**

`Promise`<`Response`>

Raw `Response` from the backend.

#### switchNetwork()

> **switchNetwork**(`chainId`): `void`

Switch the active network for vault operations. Updates the SDK's active chain and RPC provider.

**Parameters**

| Parameter | Type     |
| --------- | -------- |
| `chainId` | `number` |

**Returns**

`void`

**Overrides**

`AugustBase.switchNetwork`

#### updateWallet()

> **updateWallet**(`address`): `void`

Set the active wallet address for tracking user-specific vault data. Updates monitoring headers with the wallet address.

**Parameters**

| Parameter | Type                |
| --------- | ------------------- |
| `address` | `` `0x${string}` `` |

**Returns**

`void`

**Overrides**

`AugustBase.updateWallet`

#### vaultDeposit()

> **vaultDeposit**(`signer`, `options`): `Promise`<`string`>

Fetch all available vaults across configured networks. Optionally filter by chain IDs and include loan/allocation data.

**Parameters**

| Parameter | Type                    | Description                                          |
| --------- | ----------------------- | ---------------------------------------------------- |
| `signer`  | `Signer` \| `Wallet`    | -                                                    |
| `options` | `IContractWriteOptions` | Configuration for filtering and enriching vault data |

**Returns**

`Promise`<`string`>

Array of vault objects with metadata and optional position data


# AugustVaults

[SDK Reference](/developers/typescript-sdk/api) / AugustVaults

## AugustVaults

The August Vaults Module.

### Classes

#### AugustVaults

Vault operations class handling multi-chain vault queries and user positions. Supports both EVM and Solana vaults with unified interface.

**Extends**

* `AugustBase`

**Constructors**

**Constructor**

> **new AugustVaults**(`baseConfig`, `solana`, `sui`): [`AugustVaults`](#augustvaults)

**Parameters**

| Parameter    | Type                                                              |
| ------------ | ----------------------------------------------------------------- |
| `baseConfig` | `IAugustBase`                                                     |
| `solana`     | [`default`](/developers/typescript-sdk/api/solanaadapter#default) |
| `sui`        | [`default`](/developers/typescript-sdk/api/suiadapter#default)    |

**Returns**

[`AugustVaults`](#augustvaults)

**Overrides**

`AugustBase.constructor`

**Properties**

| Property         | Modifier | Type               | Description                                   | Inherited from             |
| ---------------- | -------- | ------------------ | --------------------------------------------- | -------------------------- |
| `activeNetwork?` | `public` | `IActiveNetwork`   | -                                             | `AugustBase.activeNetwork` |
| `appName`        | `public` | `string`           | Validated app-name slug from the constructor. | `AugustBase.appName`       |
| `authorized`     | `public` | `boolean`          | -                                             | `AugustBase.authorized`    |
| `keys`           | `public` | `IKeys`            | -                                             | `AugustBase.keys`          |
| `monitoring`     | `public` | `IMonitoring`      | -                                             | `AugustBase.monitoring`    |
| `providers`      | `public` | `IProvidersConfig` | -                                             | `AugustBase.providers`     |

**Methods**

**clearWallet()**

> **clearWallet**(): `void`

Remove wallet address from SDK state and monitoring headers.

**Returns**

`void`

**Inherited from**

`AugustBase.clearWallet`

**depositNative()**

> **depositNative**(`signer`, `options`): `Promise`<`string`>

**Parameters**

| Parameter | Type                    | Description                                                                        |
| --------- | ----------------------- | ---------------------------------------------------------------------------------- |
| `signer`  | `Signer` \| `Wallet`    | signer / wallet object                                                             |
| `options` | `INativeDepositOptions` | object including wrapper contract address, receiver address (optional), and amount |

**Returns**

`Promise`<`string`>

deposit tx hash

**Description**

deposit native token (ETH/AVAX/etc) into a vault using MultiAssetNativeDepositWrapper

**fetchPointsLeaderboard()**

> **fetchPointsLeaderboard**(`params?`): `Promise`<`any`>

**`Function`**

fetchPointsLeaderboard fetches the points leaderboard data

**Parameters**

| Parameter         | Type                                                                                       | Description                                    |
| ----------------- | ------------------------------------------------------------------------------------------ | ---------------------------------------------- |
| `params?`         | { `page?`: `number`; `perPage?`: `number`; `sortBy?`: `"streakDays"` \| `"totalPoints"`; } | Optional parameters for pagination and sorting |
| `params.page?`    | `number`                                                                                   | -                                              |
| `params.perPage?` | `number`                                                                                   | -                                              |
| `params.sortBy?`  | `"streakDays"` \| `"totalPoints"`                                                          | -                                              |

**Returns**

`Promise`<`any`>

Leaderboard response data

**getStakingPositions()**

> **getStakingPositions**(`wallet?`, `chainId?`): `Promise`<`IActiveStakingPosition`\[]>

**`Function`**

getStakingPositions gets all available reward staking positions

**Parameters**

| Parameter  | Type                | Description                           |
| ---------- | ------------------- | ------------------------------------- |
| `wallet?`  | `` `0x${string}` `` | optionally passed user wallet address |
| `chainId?` | `number`            | optionally passed chainId             |

**Returns**

`Promise`<`IActiveStakingPosition`\[]>

all available staking positions for connected or passed network(s)

**getSwapRouterEligibleVaults()**

> **getSwapRouterEligibleVaults**(`chainId`, `options?`): `Promise`<`` `0x${string}` ``\[]>

Resolve the vaults currently eligible for the any-token `SwapRouter` deposit surface on a chain — every vault the router has `enableVault`-ed whose on-chain registration is still live.

Reconstructs the set from the router's `VaultEnabled` event history and re-checks `vaultInfo(vault).referenceAsset != 0` for each (the mapping is not enumerable). See [getSwapRouterEligibleVaults](#getswaproutereligiblevaults) for the full two-stage behavior and RPC cost. Uses this instance's configured provider for `chainId`; returns `[]` (no RPC) when no router is deployed there or no provider is configured.

On-chain eligibility only — app-level policy (e.g. excluding vaults with their own OVault deposit flow) remains the caller's responsibility.

**Parameters**

| Parameter            | Type                        | Description                                                   |
| -------------------- | --------------------------- | ------------------------------------------------------------- |
| `chainId`            | `number`                    | EVM chain ID to resolve eligible vaults for.                  |
| `options?`           | { `fromBlock?`: `number`; } | Optional `fromBlock` to override the deploy-block scan floor. |
| `options.fromBlock?` | `number`                    | -                                                             |

**Returns**

`Promise`<`` `0x${string}` ``\[]>

Checksummed eligible vault addresses; `[]` when unavailable.

**Throws**

AugustSDKError when an `eth_getLogs` scan chunk fails.

**Example**

```ts
const vaults = await augustSdk.getSwapRouterEligibleVaults(1);
```

**getSwapRouterWhitelistedTokens()**

> **getSwapRouterWhitelistedTokens**(`chainId`, `options?`): `Promise`<`` `0x${string}` ``\[]>

Resolve the ERC-20 tokens currently whitelisted for the `SwapRouter` on a chain — the any-token set a deposit UI can offer as swap-and-deposit inputs, each verified `true` against the router's on-chain allowlist.

Reconstructs the set from the router's `TokenEnabled` event history and re-checks `whitelistedTokens(token)` for each (the mapping is not enumerable). See [getSwapRouterWhitelistedTokens](#getswaprouterwhitelistedtokens) for the full two-stage behavior and RPC cost. Uses this instance's configured provider for `chainId`; returns `[]` (no RPC) when no router is deployed there or no provider is configured.

**Parameters**

| Parameter            | Type                        | Description                                                   |
| -------------------- | --------------------------- | ------------------------------------------------------------- |
| `chainId`            | `number`                    | EVM chain ID to resolve the allowlist for.                    |
| `options?`           | { `fromBlock?`: `number`; } | Optional `fromBlock` to override the deploy-block scan floor. |
| `options.fromBlock?` | `number`                    | -                                                             |

**Returns**

`Promise`<`` `0x${string}` ``\[]>

Checksummed whitelisted token addresses; `[]` when unavailable. Callers still exclude a target vault's natively-accepted assets (those deposit without a swap).

**Throws**

AugustSDKError when an `eth_getLogs` scan chunk fails.

**Example**

```ts
const tokens = await augustSdk.getSwapRouterWhitelistedTokens(1);
```

**getTotalDeposited()**

> **getTotalDeposited**(`options?`): `Promise`<`number`>

Calculate total deposited across all tokenized vaults by summing latest\_reported\_tvl. Uses the /tokenized\_vault endpoint which returns latest\_reported\_tvl in USD.

**Parameters**

| Parameter                  | Type                                                            | Description                               |
| -------------------------- | --------------------------------------------------------------- | ----------------------------------------- |
| `options?`                 | { `loadSnapshots?`: `boolean`; `loadSubaccounts?`: `boolean`; } | Optional configuration for loading vaults |
| `options.loadSnapshots?`   | `boolean`                                                       | -                                         |
| `options.loadSubaccounts?` | `boolean`                                                       | -                                         |

**Returns**

`Promise`<`number`>

Total deposited amount in USD (sum of all latest\_reported\_tvl values)

**getUserHistory()**

> **getUserHistory**(`__namedParameters`): `Promise`<`IVaultUserHistoryItem`\[]>

**Parameters**

| Parameter                    | Type                                                                                                                                           |
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| `__namedParameters`          | { `chainId?`: `number`; `options?`: [`IVaultBaseOptions`](#ivaultbaseoptions); `vault?`: `` `0x${string}` ``; `wallet`: `` `0x${string}` ``; } |
| `__namedParameters.chainId?` | `number`                                                                                                                                       |
| `__namedParameters.options?` | [`IVaultBaseOptions`](#ivaultbaseoptions)                                                                                                      |
| `__namedParameters.vault?`   | `` `0x${string}` ``                                                                                                                            |
| `__namedParameters.wallet`   | `` `0x${string}` ``                                                                                                                            |

**Returns**

`Promise`<`IVaultUserHistoryItem`\[]>

**getUserPoints()**

> **getUserPoints**(`userAddress`): `Promise`<`any`>

**`Function`**

getUserPoints fetches user points from the backend API

**Parameters**

| Parameter     | Type                | Description         |
| ------------- | ------------------- | ------------------- |
| `userAddress` | `` `0x${string}` `` | User wallet address |

**Returns**

`Promise`<`any`>

Points data from the backend API

**getUserTransfers()**

> **getUserTransfers**(`__namedParameters`): `Promise`<`object`\[]>

**Parameters**

| Parameter                    | Type                                                                                                                                           |
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| `__namedParameters`          | { `chainId?`: `number`; `options?`: [`IVaultBaseOptions`](#ivaultbaseoptions); `vault?`: `` `0x${string}` ``; `wallet`: `` `0x${string}` ``; } |
| `__namedParameters.chainId?` | `number`                                                                                                                                       |
| `__namedParameters.options?` | [`IVaultBaseOptions`](#ivaultbaseoptions)                                                                                                      |
| `__namedParameters.vault?`   | `` `0x${string}` ``                                                                                                                            |
| `__namedParameters.wallet`   | `` `0x${string}` ``                                                                                                                            |

**Returns**

`Promise`<`object`\[]>

**getVault()**

> **getVault**(`vault`): `Promise`<`IVault`>

Fetch detailed data for a single vault with optional enrichment. Automatically includes loans and allocations unless explicitly disabled.

**Parameters**

| Parameter                | Type                                                                                                                                                                           | Description            |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------- |
| `vault`                  | { `chainId?`: `number`; `loadSnapshots?`: `boolean`; `loadSubaccounts?`: `boolean`; `options?`: [`IVaultCustomOptions`](#ivaultcustomoptions); `vault`: `` `0x${string}` ``; } | Vault contract address |
| `vault.chainId?`         | `number`                                                                                                                                                                       | -                      |
| `vault.loadSnapshots?`   | `boolean`                                                                                                                                                                      | -                      |
| `vault.loadSubaccounts?` | `boolean`                                                                                                                                                                      | -                      |
| `vault.options?`         | [`IVaultCustomOptions`](#ivaultcustomoptions)                                                                                                                                  | -                      |
| `vault.vault`            | `` `0x${string}` ``                                                                                                                                                            | -                      |

**Returns**

`Promise`<`IVault`>

Single vault object with optional position data

**Throws**

AugustValidationError (`INVALID_CHAIN`) when `chainId` is not a chain the SDK recognises, or is a supported EVM chain with no RPC URL configured on this SDK instance.

**getVaultActivity()**

> **getVaultActivity**(`params`): `Promise`<`IVaultUserHistoryItem`\[]>

Fetch a vault's deposit/withdrawal activity across every participant.

This is the vault-wide counterpart to [getUserHistory](#getuserhistory): instead of filtering the subgraph to one wallet, it returns every deposit, withdrawal-request, and processed-withdrawal event for the pool. Use it to answer flow questions ("how many deposits in the last 7 days", "net flow this week") that point-in-time TVL cannot.

Rows are read from the Goldsky subgraph, paginated internally so busy vaults are not truncated at the 1000-row page cap. When `sinceTs` is supplied the reader stops paging once it passes the window boundary, so a short lookback stays cheap even on high-volume vaults.

**Parameters**

| Parameter         | Type                                                                                                                                                                                            | Description                                                                                             |
| ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
| `params`          | { `chainId?`: `number`; `sinceTs?`: `number`; `types?`: (`"deposit"` \| `"withdraw-request"` \| `"withdraw-processed"` \| `"redeem"`)\[]; `untilTs?`: `number`; `vault`: `` `0x${string}` ``; } | Query parameters.                                                                                       |
| `params.chainId?` | `number`                                                                                                                                                                                        | Chain id of the vault; falls back to the active network when omitted. Required for the subgraph lookup. |
| `params.sinceTs?` | `number`                                                                                                                                                                                        | Lower bound (inclusive) as a Unix timestamp in seconds. Events at or after this time are returned.      |
| `params.types?`   | (`"deposit"` \| `"withdraw-request"` \| `"withdraw-processed"` \| `"redeem"`)\[]                                                                                                                | Restrict to a subset of event types (e.g. `['deposit']`). Returns all types when omitted.               |
| `params.untilTs?` | `number`                                                                                                                                                                                        | Upper bound (inclusive) as a Unix timestamp in seconds. Events at or before this time are returned.     |
| `params.vault`    | `` `0x${string}` ``                                                                                                                                                                             | Vault (pool) address to read activity for.                                                              |

**Returns**

`Promise`<`IVaultUserHistoryItem`\[]>

Activity items sorted oldest-first, each with a normalized `amount`, actor `address`, `type`, and `transactionHash`.

**Throws**

If `vault` is not a valid address, or no chain id can be resolved.

**Example**

```ts
const weekAgo = Math.floor(Date.now() / 1000) - 7 * 86_400;
const deposits = await sdk.getVaultActivity({
  vault: '0x36eDbF0C834591BFdfCaC0Ef9605528c75c406aA',
  chainId: 143,
  sinceTs: weekAgo,
  types: ['deposit'],
});
console.log(`${deposits.length} deposits in the last 7 days`);
```

**getVaultAllocations()**

> **getVaultAllocations**(`vault`): `Promise`<`IVaultAllocations` | { `message`: `string`; `status`: `number`; }>

Fetch a vault's DeFi / CeFi / OTC allocation breakdown.

**Parameters**

| Parameter        | Type                                                    | Description            |
| ---------------- | ------------------------------------------------------- | ---------------------- |
| `vault`          | { `chainId?`: `number`; `vault`: `` `0x${string}` ``; } | Vault contract address |
| `vault.chainId?` | `number`                                                | -                      |
| `vault.vault`    | `` `0x${string}` ``                                     | -                      |

**Returns**

`Promise`<`IVaultAllocations` | { `message`: `string`; `status`: `number`; }>

Allocation data for the vault

**Throws**

AugustValidationError (`INVALID_CHAIN`) when `chainId` is not a chain the SDK recognises, or is a supported EVM chain with no RPC URL configured on this SDK instance.

~~**getVaultAnnualizedApy()**~~

> **getVaultAnnualizedApy**(`vault`): `Promise`<`IVaultAnnualizedApy`>

Get annualized APY metrics for a vault.

Supported Vaults: cUSDO, tETH, wstETH, rsETH

**Parameters**

| Parameter | Type                | Description   |
| --------- | ------------------- | ------------- |
| `vault`   | `` `0x${string}` `` | Vault address |

**Returns**

`Promise`<`IVaultAnnualizedApy`>

Annualized APY data including liquidity APY

**Deprecated**

The `hgETH30dLiquidAPY` and `hgETH7dLiquidAPY` response fields are deprecated. These fields will be removed on 2026-01-01. Use `liquidAPY30Day` and `liquidAPY7Day` fields instead.

~~**getVaultApy()**~~

> **getVaultApy**(`vault`): `Promise`<`object`\[]>

**`Function`**

**Parameters**

| Parameter           | Type                                                                                  | Description                 |
| ------------------- | ------------------------------------------------------------------------------------- | --------------------------- |
| `vault`             | { `historical?`: `Partial`<`IVaultHistoricalParams`>; `vault`: `` `0x${string}` ``; } | pool/vault contract address |
| `vault.historical?` | `Partial`<`IVaultHistoricalParams`>                                                   | -                           |
| `vault.vault`       | `` `0x${string}` ``                                                                   | -                           |

**Returns**

`Promise`<`object`\[]>

a value or array of objects containing the APR and timestamp

**Deprecated**

use getVaultHistoricalTimeseries instead getVaultApy gets the vault/pool APR, both current and historical

**getVaultAvailableRedemptions()**

> **getVaultAvailableRedemptions**(`__namedParameters`): `Promise`<{ `availableRedemptions`: `IVaultAvailableRedemption`\[]; `pendingRedemptions`: `IVaultAvailableRedemption`\[]; `processedWithdrawals`: `ISubgraphWithdrawProccessed`\[]; `requestedWithdrawals`: `ISubgraphWithdrawRequest`\[]; }>

**Parameters**

| Parameter                    | Type                                                                                                           |
| ---------------------------- | -------------------------------------------------------------------------------------------------------------- |
| `__namedParameters`          | { `chainId?`: `number`; `vault`: `` `0x${string}` ``; `verbose?`: `boolean`; `wallet?`: `` `0x${string}` ``; } |
| `__namedParameters.chainId?` | `number`                                                                                                       |
| `__namedParameters.vault`    | `` `0x${string}` ``                                                                                            |
| `__namedParameters.verbose?` | `boolean`                                                                                                      |
| `__namedParameters.wallet?`  | `` `0x${string}` ``                                                                                            |

**Returns**

`Promise`<{ `availableRedemptions`: `IVaultAvailableRedemption`\[]; `pendingRedemptions`: `IVaultAvailableRedemption`\[]; `processedWithdrawals`: `ISubgraphWithdrawProccessed`\[]; `requestedWithdrawals`: `ISubgraphWithdrawRequest`\[]; }>

**getVaultBorrowerHealthFactor()**

> **getVaultBorrowerHealthFactor**(`chainId?`, `vault?`): `Promise`<`Record`<`string`, `IVaultBorrowerHealthFactor`\[]> | `Record`<`string`, `IVaultBorrowerHealthFactor`\[]>\[]>

Gets borrower health-factor data for vaults on a chain, optionally scoped to a single vault.

Pass `vault` whenever the caller knows which pool it cares about — this skips the all-vaults cross-chain fanout and only reads the loans for that one pool. The response map is keyed by **lowercased** vault address; look entries up with `address.toLowerCase()`.

Individual loan failures (bad/test loan contracts, unrecognized borrowers) are isolated and logged rather than rejecting the batch.

**Parameters**

| Parameter  | Type                | Description                                                                                                                                                        |
| ---------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `chainId?` | `number`            | Optional chain to scope the read to. When omitted, iterates the SDK's configured providers and returns the flattened list (legacy shape — prefer passing a chain). |
| `vault?`   | `` `0x${string}` `` | Optional vault address. When provided alongside `chainId`, only that vault's data is fetched.                                                                      |

**Returns**

`Promise`<`Record`<`string`, `IVaultBorrowerHealthFactor`\[]> | `Record`<`string`, `IVaultBorrowerHealthFactor`\[]>\[]>

When `chainId` is set, an object map of lowercased vault address → array of borrower-health-factor rows. When `chainId` is omitted, a flat array (legacy behavior, kept for backward compat).

**getVaultHistoricalTimeseries()**

> **getVaultHistoricalTimeseries**(`vault`): `Promise`<`IHistoricalTimeseriesResponse`>

**`Function`**

getVaultHistoricalTimeseries gets historical timeseries data for a vault

**Parameters**

| Parameter      | Type                                                  | Description            |
| -------------- | ----------------------------------------------------- | ---------------------- |
| `vault`        | { `nDays?`: `number`; `vault`: `` `0x${string}` ``; } | Vault contract address |
| `vault.nDays?` | `number`                                              | -                      |
| `vault.vault`  | `` `0x${string}` ``                                   | -                      |

**Returns**

`Promise`<`IHistoricalTimeseriesResponse`>

Historical timeseries data with TVL, APY, PnL, share price, and other metrics

**getVaultLoans()**

> **getVaultLoans**(`vault`): `Promise`<`IVaultLoan`\[]>

Fetch the active loans issued by a vault.

**Parameters**

| Parameter        | Type                                                    | Description            |
| ---------------- | ------------------------------------------------------- | ---------------------- |
| `vault`          | { `chainId?`: `number`; `vault`: `` `0x${string}` ``; } | Vault contract address |
| `vault.chainId?` | `number`                                                | -                      |
| `vault.vault`    | `` `0x${string}` ``                                     | -                      |

**Returns**

`Promise`<`IVaultLoan`\[]>

Loan data for the vault

**Throws**

AugustValidationError (`INVALID_CHAIN`) when `chainId` is not a chain the SDK recognises, or is a supported EVM chain with no RPC URL configured on this SDK instance.

**getVaultPendingRedemptions()**

> **getVaultPendingRedemptions**(`vault`): `Promise`<`IVaultPendingRedemptions`>

Fetch pending redemptions for a vault with liquidity analysis.

**Parameters**

| Parameter           | Type                                                                              | Description            |
| ------------------- | --------------------------------------------------------------------------------- | ---------------------- |
| `vault`             | { `futureDays?`: `number`; `pastDays?`: `number`; `vault`: `` `0x${string}` ``; } | Vault contract address |
| `vault.futureDays?` | `number`                                                                          | -                      |
| `vault.pastDays?`   | `number`                                                                          | -                      |
| `vault.vault`       | `` `0x${string}` ``                                                               | -                      |

**Returns**

`Promise`<`IVaultPendingRedemptions`>

Pending redemptions grouped by date with liquidity summary

**getVaultPnl()**

> **getVaultPnl**(`props`): `Promise`<`IVaultPnl`>

Get PnL for a vault (vault-level, not user-specific). Returns the vault's overall profit and loss across all users.

**Parameters**

| Parameter        | Type                                                    | Description                         |
| ---------------- | ------------------------------------------------------- | ----------------------------------- |
| `props`          | { `chainId?`: `number`; `vault`: `` `0x${string}` ``; } | Vault address and optional chain ID |
| `props.chainId?` | `number`                                                | -                                   |
| `props.vault`    | `` `0x${string}` ``                                     | -                                   |

**Returns**

`Promise`<`IVaultPnl`>

Vault PnL in USD and notional value

**getVaultPositions()**

> **getVaultPositions**(`__namedParameters`): `Promise`<`IVaultPosition`\[]>

Fetch the wallet's positions across vaults — a single vault, one chain, or every chain with a configured provider.

RPC volume (worst case, multi-vault paths): the two non-cacheable per-vault reads (`balanceOf`, `lagDuration`) are aggregated into chunked Multicall3 `aggregate3` batches per chain (10 calls per chunk) on chains where the canonical deployment is verified; unverified chains (e.g. Citrea 4114) and non-EVM vaults keep one `eth_call` per read. Measured with `benchmarks/request-counter.js` on a cold cache for a wallet with 62 vaults across Ethereum + Avalanche: 83 RPC HTTP requests before batching, 54 after (\~35% fewer). A vault whose batched read fails (e.g. paused) falls back to its own per-vault reads — never to a zeroed balance.

**Parameters**

| Parameter                          | Type                                                                                                                                                                                                                                |
| ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `__namedParameters`                | { `chainId?`: `number`; `options?`: [`IVaultBaseOptions`](#ivaultbaseoptions); `showAllVaults?`: `boolean`; `solanaWallet?`: `string`; `stellarWallet?`: `string`; `vault?`: `` `0x${string}` ``; `wallet?`: `` `0x${string}` ``; } |
| `__namedParameters.chainId?`       | `number`                                                                                                                                                                                                                            |
| `__namedParameters.options?`       | [`IVaultBaseOptions`](#ivaultbaseoptions)                                                                                                                                                                                           |
| `__namedParameters.showAllVaults?` | `boolean`                                                                                                                                                                                                                           |
| `__namedParameters.solanaWallet?`  | `string`                                                                                                                                                                                                                            |
| `__namedParameters.stellarWallet?` | `string`                                                                                                                                                                                                                            |
| `__namedParameters.vault?`         | `` `0x${string}` ``                                                                                                                                                                                                                 |
| `__namedParameters.wallet?`        | `` `0x${string}` ``                                                                                                                                                                                                                 |

**Returns**

`Promise`<`IVaultPosition`\[]>

**getVaultRedemptionHistory()**

> **getVaultRedemptionHistory**(`vault`): `Promise`<`IVaultRedemptionHistoryItem`\[]>

Historical redemption requests for a vault (settled, cancelled, and pending-but-out-of-window). Filterable by wallet.

Stellar vaults return `[]` — on-chain redemption history is not yet indexed for that adapter.

**Parameters**

| Parameter               | Type                                                                                                                 | Description                                                                                              |
| ----------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
| `vault`                 | { `chainId?`: `number`; `lookbackBlocks?`: `number`; `vault`: `` `0x${string}` ``; `wallet?`: `` `0x${string}` ``; } | Vault address (EVM or Stellar). Stellar input is accepted but always resolves to an empty array for now. |
| `vault.chainId?`        | `number`                                                                                                             | -                                                                                                        |
| `vault.lookbackBlocks?` | `number`                                                                                                             | -                                                                                                        |
| `vault.vault`           | `` `0x${string}` ``                                                                                                  | -                                                                                                        |
| `vault.wallet?`         | `` `0x${string}` ``                                                                                                  | -                                                                                                        |

**Returns**

`Promise`<`IVaultRedemptionHistoryItem`\[]>

The same array shape `getVaultRedemptionHistory` returns at the module level — historical redemption records, newest first.

**Example**

```ts
const history = await sdk.vaultsModule.getVaultRedemptionHistory({
  vault: '0xVault',
  chainId: 8453,
  wallet: '0xWallet',
});
```

**getVaults()**

> **getVaults**(`options?`): `Promise`<`IVault`\[]>

Fetch all vaults across configured networks with optional enrichment. Automatically filters by available providers and optionally by chain IDs. Includes closed vaults that are still visible (`status: 'closed'`, `is_visible: true`) so consumers can render positions held in closed vaults; closed vaults with `is_visible: false` are excluded.

RPC volume (worst case, wallet enrichment path): the per-vault `balanceOf`/`lagDuration` reads are aggregated into chunked Multicall3 `aggregate3` batches per chain (10 calls per chunk) on chains where the canonical Multicall3 deployment is verified; other chains (e.g. Citrea 4114) keep one `eth_call` per read. Measured with `benchmarks/request-counter.js` on a cold cache for a wallet with 62 vaults across Ethereum + Avalanche: 83 RPC HTTP requests before batching, 54 after (\~35% fewer; 124 per-vault `eth_call`s collapse into \~13 `aggregate3` calls — the remaining requests are the per-vault cached decimals/receipt-token reads on a cold cache).

**Parameters**

| Parameter  | Type                                                     | Description                            |
| ---------- | -------------------------------------------------------- | -------------------------------------- |
| `options?` | `object` & [`IVaultCustomOptions`](#ivaultcustomoptions) | Filtering and enrichment configuration |

**Returns**

`Promise`<`IVault`\[]>

Array of vault objects with optional loans/allocations/positions

**getVaultSubaccountLoans()**

> **getVaultSubaccountLoans**(`vault`): `Promise`<`IVaultLoan`\[]>

Fetch a vault's loans broken down by sub-account.

**Parameters**

| Parameter        | Type                                                    | Description            |
| ---------------- | ------------------------------------------------------- | ---------------------- |
| `vault`          | { `chainId?`: `number`; `vault`: `` `0x${string}` ``; } | Vault contract address |
| `vault.chainId?` | `number`                                                | -                      |
| `vault.vault`    | `` `0x${string}` ``                                     | -                      |

**Returns**

`Promise`<`IVaultLoan`\[]>

Sub-account loan data for the vault

**Throws**

AugustValidationError (`INVALID_CHAIN`) when `chainId` is not a chain the SDK recognises, or is a supported EVM chain with no RPC URL configured on this SDK instance.

**getVaultSummary()**

> **getVaultSummary**(`vault`): `Promise`<`IVaultSummary`>

Get summary data for a vault (name, type, chain, recent returns).

**Parameters**

| Parameter | Type                | Description   |
| --------- | ------------------- | ------------- |
| `vault`   | `` `0x${string}` `` | Vault address |

**Returns**

`Promise`<`IVaultSummary`>

Vault summary data

**getVaultTvl()**

> **getVaultTvl**(`vault`): `Promise`<`object`\[]>

**`Function`**

getVaultTvl gets the vault/pool TVL, both current and historical

**Parameters**

| Parameter           | Type                                                                                             | Description                 |
| ------------------- | ------------------------------------------------------------------------------------------------ | --------------------------- |
| `vault`             | { `chainId?`: `number`; `historical?`: `IVaultHistoricalParams`; `vault`: `` `0x${string}` ``; } | pool/vault contract address |
| `vault.chainId?`    | `number`                                                                                         | -                           |
| `vault.historical?` | `IVaultHistoricalParams`                                                                         | -                           |
| `vault.vault`       | `` `0x${string}` ``                                                                              | -                           |

**Returns**

`Promise`<`object`\[]>

an object or array of objects containing the TVL and timestamp

**getVaultUserLifetimePnl()**

> **getVaultUserLifetimePnl**(`props`): `Promise`<`IVaultUserLifetimePnl`>

Get lifetime PnL for a user in a specific vault.

**Parameters**

| Parameter        | Type                                                                                   | Description                                          |
| ---------------- | -------------------------------------------------------------------------------------- | ---------------------------------------------------- |
| `props`          | { `chainId?`: `number`; `vault`: `` `0x${string}` ``; `wallet`: `` `0x${string}` ``; } | Vault address, wallet address, and optional chain ID |
| `props.chainId?` | `number`                                                                               | -                                                    |
| `props.vault`    | `` `0x${string}` ``                                                                    | -                                                    |
| `props.wallet`   | `` `0x${string}` ``                                                                    | -                                                    |

**Returns**

`Promise`<`IVaultUserLifetimePnl`>

Lifetime PnL data including realized and unrealized PnL

**getVaultWithdrawals()**

> **getVaultWithdrawals**(`vault`, `chainId?`): `Promise`<`IVaultWithdrawals`>

Get withdrawal summary and pending queue for a vault.

**Parameters**

| Parameter  | Type                | Description                                |
| ---------- | ------------------- | ------------------------------------------ |
| `vault`    | `` `0x${string}` `` | Vault address                              |
| `chainId?` | `number`            | Chain ID (will be converted to chain name) |

**Returns**

`Promise`<`IVaultWithdrawals`>

Withdrawal summary and pending queue

**getWithdrawalRequestsWithStatus()**

> **getWithdrawalRequestsWithStatus**(`vault`, `receiver?`, `lookbackBlocks?`, `chainId?`): `Promise`<[`WithdrawalRequestStatus`](#withdrawalrequeststatus)\[]>

Get all withdrawal requests for a vault with deterministic status tracking.

Matches requests to processed events by `(receiver, claimableDate)` tuple.

**Status values:**

* `'processed'` — Matching `WithdrawalProcessed` event found on-chain.
* `'ready_to_claim'` — Claimable date has passed, no processed event found yet.
* `'pending'` — Claimable date is still in the future.

**Lookback window:** Processed events are fetched from on-chain logs, which only cover a finite block range. Requests whose claimable date is older than this window with no matching processed event are excluded (assumed already processed). Use `lookbackBlocks` to widen or narrow the scan range.

**Parameters**

| Parameter         | Type                | Description                                                                                                                         |
| ----------------- | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| `vault`           | `` `0x${string}` `` | Vault contract address                                                                                                              |
| `receiver?`       | `` `0x${string}` `` | Optional receiver address to filter by                                                                                              |
| `lookbackBlocks?` | `number`            | Optional on-chain log lookback window in blocks. Defaults to chain-specific value (e.g. 150,000 for Ethereum, 3,456,000 for Monad). |
| `chainId?`        | `number`            | Optional chain id for the vault address                                                                                             |

**Returns**

`Promise`<[`WithdrawalRequestStatus`](#withdrawalrequeststatus)\[]>

Array of withdrawal requests with status and claimable dates

**getYieldLastRealizedOn()**

> **getYieldLastRealizedOn**(`vault`): `Promise`<`number`>

**`Function`**

getYieldLastRealizedOn gets the timestamp when yield was last realized for a vault

**Parameters**

| Parameter        | Type                                                    | Description            |
| ---------------- | ------------------------------------------------------- | ---------------------- |
| `vault`          | { `chainId?`: `number`; `vault`: `` `0x${string}` ``; } | Vault contract address |
| `vault.chainId?` | `number`                                                | -                      |
| `vault.vault`    | `` `0x${string}` ``                                     | -                      |

**Returns**

`Promise`<`number`>

Timestamp (Unix timestamp in seconds) when yield was last realized

**init()**

> **init**(): `Promise`<`void`>

Verify API keys and authorize SDK usage. TODO: initialize class with appropriate keys and verify august key

**Returns**

`Promise`<`void`>

**Inherited from**

`AugustBase.init`

**previewRedemption()**

> **previewRedemption**(`vault`): `Promise`<`INormalizedNumber`>

Preview the amount of assets that would be received for redeeming shares (queued redemption).

**Parameters**

| Parameter            | Type                                                                                                      | Description            |
| -------------------- | --------------------------------------------------------------------------------------------------------- | ---------------------- |
| `vault`              | { `chainId?`: `number`; `sharesAmount`: `string` \| `number` \| `bigint`; `vault`: `` `0x${string}` ``; } | Vault contract address |
| `vault.chainId?`     | `number`                                                                                                  | -                      |
| `vault.sharesAmount` | `string` \| `number` \| `bigint`                                                                          | -                      |
| `vault.vault`        | `` `0x${string}` ``                                                                                       | -                      |

**Returns**

`Promise`<`INormalizedNumber`>

The amount of assets as INormalizedNumber { normalized, raw }

**previewRwaRedemption()**

> **previewRwaRedemption**(`vault`): `Promise`<`INormalizedNumber`>

Preview the output amount for an RWA instant redemption. Resolves the vault address to the RwaRedeemSubaccount internally.

**Parameters**

| Parameter        | Type                                                                                                                              | Description            |
| ---------------- | --------------------------------------------------------------------------------------------------------------------------------- | ---------------------- |
| `vault`          | { `amount`: `string` \| `number` \| `bigint`; `asset`: `` `0x${string}` ``; `chainId?`: `number`; `vault`: `` `0x${string}` ``; } | Vault contract address |
| `vault.amount`   | `string` \| `number` \| `bigint`                                                                                                  | -                      |
| `vault.asset`    | `` `0x${string}` ``                                                                                                               | -                      |
| `vault.chainId?` | `number`                                                                                                                          | -                      |
| `vault.vault`    | `` `0x${string}` ``                                                                                                               | -                      |

**Returns**

`Promise`<`INormalizedNumber`>

normalized number of the expected output amount (in output asset decimals)

**registerUserForPoints()**

> **registerUserForPoints**(`userAddress`, `referrerAddress`, `chainId`, `signature`, `nonce`, `expiry`): `Promise`<`Response`>

Register a user for the points program, authenticated by a wallet signature.

The caller produces a personal\_sign signature over a canonical message built from these primitives — see `registerUserForPoints` in `./getters` for the exact template and a worked example.

**Parameters**

| Parameter         | Type                | Description                                                                                                                   |
| ----------------- | ------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `userAddress`     | `` `0x${string}` `` | EVM wallet address being registered.                                                                                          |
| `referrerAddress` | `` `0x${string}` `` | Optional referrer EVM address.                                                                                                |
| `chainId`         | `number`            | Chain on which the wallet signed; powers the EIP-1271 fallback for smart-contract wallets and pins the signature cross-chain. |
| `signature`       | `string`            | 0x-prefixed hex personal\_sign signature over the canonical message.                                                          |
| `nonce`           | `string`            | Single-use random string (8–128 chars).                                                                                       |
| `expiry`          | `number`            | Unix seconds; must be in the future, within the backend's TTL.                                                                |

**Returns**

`Promise`<`Response`>

Raw `Response` from the backend.

**rwaRedeemAsset()**

> **rwaRedeemAsset**(`signer`, `vault`): `Promise`<`string`>

Redeem vault shares for an underlying asset via instant redemption (RWA subaccount). Resolves the vault address to the RwaRedeemSubaccount internally. Handles vault share approval automatically.

**Parameters**

| Parameter        | Type                                                                                                                                                                                              | Description            |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- |
| `signer`         | `Signer` \| `Wallet`                                                                                                                                                                              | Signer / wallet object |
| `vault`          | { `amount`: `string` \| `number` \| `bigint`; `asset`: `` `0x${string}` ``; `chainId?`: `number`; `minOut`: `string` \| `number` \| `bigint`; `vault`: `` `0x${string}` ``; `wait?`: `boolean`; } | Vault contract address |
| `vault.amount`   | `string` \| `number` \| `bigint`                                                                                                                                                                  | -                      |
| `vault.asset`    | `` `0x${string}` ``                                                                                                                                                                               | -                      |
| `vault.chainId?` | `number`                                                                                                                                                                                          | -                      |
| `vault.minOut`   | `string` \| `number` \| `bigint`                                                                                                                                                                  | -                      |
| `vault.vault`    | `` `0x${string}` ``                                                                                                                                                                               | -                      |
| `vault.wait?`    | `boolean`                                                                                                                                                                                         | -                      |

**Returns**

`Promise`<`string`>

transaction hash

**switchNetwork()**

> **switchNetwork**(`chainId`): `void`

Switch the active blockchain network. Updates both chain ID and RPC URL for subsequent operations.

**Parameters**

| Parameter | Type     |
| --------- | -------- |
| `chainId` | `number` |

**Returns**

`void`

**Inherited from**

`AugustBase.switchNetwork`

**updateWallet()**

> **updateWallet**(`address`): `void`

Set active wallet address and update monitoring headers. Preserves existing environment setting.

**Parameters**

| Parameter | Type                |
| --------- | ------------------- |
| `address` | `` `0x${string}` `` |

**Returns**

`void`

**Inherited from**

`AugustBase.updateWallet`

**vaultDeposit()**

> **vaultDeposit**(`signer`, `options`): `Promise`<`string`>

**Parameters**

| Parameter | Type                    | Description                                                                                           |
| --------- | ----------------------- | ----------------------------------------------------------------------------------------------------- |
| `signer`  | `Signer` \| `Wallet`    | signer / wallet object                                                                                |
| `options` | `IContractWriteOptions` | object including pool contract address, user wallet address, string amount, and optional depositAsset |

**Returns**

`Promise`<`string`>

deposit tx hash

**Description**

deposit underlying token into the specified pool with adapter support. This is for when we cannot pass in a signer in sdk and need to do so as an arg

### Interfaces

#### IVaultBaseOptions

Base configuration for vault operations.

**Properties**

| Property             | Type                | Description                                                                                                                                                                                                                                                                                                  |
| -------------------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `augustKey?`         | `string`            | -                                                                                                                                                                                                                                                                                                            |
| `chainId?`           | `number`            | -                                                                                                                                                                                                                                                                                                            |
| `env?`               | `IEnv`              | -                                                                                                                                                                                                                                                                                                            |
| `headers?`           | `IWSMonitorHeaders` | -                                                                                                                                                                                                                                                                                                            |
| `includeClosed?`     | `boolean`           | Portfolio mode: when true, the per-vault EVM getter does NOT null out a closed + invisible vault. Needed so a user's position in a closed, invisible vault can still resolve its metadata. Defaults to undefined (false) so marketplace/discovery reads keep hiding closed staging vaults.                   |
| `rpcUrl`             | `string`            | -                                                                                                                                                                                                                                                                                                            |
| `solanaService?`     | `ISolanaService`    | -                                                                                                                                                                                                                                                                                                            |
| `stellarRpc?`        | `object`            | Optional Soroban RPC override (e.g. a keyed Alchemy URL) for Stellar vault reads, threaded from the SDK's `stellar` config. Carries the network it was configured for so it is only applied to matching-network vaults — a testnet override must not be used for a mainnet read. Unset → built-in endpoints. |
| `stellarRpc.network` | `IStellarNetwork`   | -                                                                                                                                                                                                                                                                                                            |
| `stellarRpc.rpcUrl`  | `string`            | -                                                                                                                                                                                                                                                                                                            |
| `subgraphKey?`       | `string`            | -                                                                                                                                                                                                                                                                                                            |

***

#### IVaultCustomOptions

Optional enrichment options for vault queries.

**Properties**

| Property         | Type                |
| ---------------- | ------------------- |
| `allocations?`   | `boolean`           |
| `loans?`         | `boolean`           |
| `solanaWallet?`  | `string`            |
| `stellarWallet?` | `string`            |
| `wallet?`        | `` `0x${string}` `` |

***

#### PnlHistoryConsistencyParams

Inputs the lifetime-PnL history guard inspects.

**Properties**

| Property             | Type                | Description                                                                                                                      |
| -------------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| `currentPositionRaw` | `bigint`            | Current on-chain position value, in raw base units (asset decimals).                                                             |
| `hasDeposits`        | `boolean`           | Whether the resolved deposit history contains at least one deposit record (subgraph deposits or LayerZero cross-chain deposits). |
| `totalWithdrawnRaw`  | `bigint`            | Total withdrawn, in raw base units (asset decimals).                                                                             |
| `vault`              | `` `0x${string}` `` | Vault contract address, used for the error message and context.                                                                  |
| `wallet`             | `` `0x${string}` `` | User wallet address, used for the error message and context.                                                                     |

***

#### WithdrawalRequestStatus

Withdrawal request with computed claimable date and current processing status. The unique identifier is (receiver, claimableDate).

WithdrawalRequestStatus

**Properties**

| Property                    | Type                                               | Description                                                      |
| --------------------------- | -------------------------------------------------- | ---------------------------------------------------------------- |
| `assetsReceived?`           | `bigint`                                           | Assets received (if processed)                                   |
| `claimableDate`             | `object`                                           | Computed claimable date in UTC (year, month, day)                |
| `claimableDate.day`         | `number`                                           | -                                                                |
| `claimableDate.month`       | `number`                                           | -                                                                |
| `claimableDate.year`        | `number`                                           | -                                                                |
| `claimableEpoch`            | `number`                                           | Epoch timestamp when this withdrawal becomes claimable           |
| `processedTransactionHash?` | `string`                                           | Transaction hash of the processing transaction (if processed)    |
| `receiver`                  | `string`                                           | Receiver address for the withdrawal                              |
| `requestTimestamp`          | `number`                                           | Block timestamp when the withdrawal was requested (seconds, UTC) |
| `shares`                    | `bigint`                                           | Shares amount being redeemed                                     |
| `status`                    | `"processed"` \| `"ready_to_claim"` \| `"pending"` | Current status of the withdrawal                                 |
| `transactionHash`           | `string`                                           | Transaction hash of the withdrawal request                       |

### Functions

#### assertPnlHistoryConsistent()

> **assertPnlHistoryConsistent**(`params`): `void`

Guard against the 2026-07-09 lifetime-PnL over-inflation failure mode.

Lifetime PnL is `currentPosition + totalWithdrawn - totalDeposited`. When the deposit/withdrawal history fails to load it collapses to empty, so both `totalDeposited` and `totalWithdrawn` read as zero. If the wallet still holds a live on-chain position, the formula degenerates to reporting the entire position as pure profit — a plausible-looking but wrong number.

This guard rejects exactly that state: a non-zero position with no recorded deposits *and* no recorded withdrawals. Any of the following is treated as consistent and passes:

* deposits are present (the normal, computable case);
* withdrawals are present (a fully-exited-then-re-entered position is still computable — the withdrawal records prove history loaded);
* the current position is zero (the wallet never interacted or fully exited, so a zero PnL is correct, not inflated).

Pure and synchronous — no RPC, no I/O — so it is safe to call inside the hot path with no added latency.

Known imprecision — vault shares are transferable ERC-20 receipt tokens, so a wallet that *received* shares via a direct token transfer (never deposited, never withdrew) legitimately has `position > 0` with no history records and will throw `HISTORY_UNAVAILABLE` even though its history loaded fine. This is not a regression — the pre-guard formula reported that same position as 100% profit, which was also wrong — but the error message is misleading for that (rare) path. If receipt-token transfer becomes a real user flow, distinguish it here (e.g. by checking for a share-transfer event) rather than widening the guard.

**Parameters**

| Parameter | Type                                                          | Description                                                      |
| --------- | ------------------------------------------------------------- | ---------------------------------------------------------------- |
| `params`  | [`PnlHistoryConsistencyParams`](#pnlhistoryconsistencyparams) | See [PnlHistoryConsistencyParams](#pnlhistoryconsistencyparams). |

**Returns**

`void`

`void` when the history is consistent.

**Throws**

AugustHistoryUnavailableError with code `HISTORY_UNAVAILABLE` and `context: { vault, wallet }` when a non-zero position has neither deposits nor withdrawals recorded. The message carries the `#getVaultUserLifetimePnl::<vault>::<wallet>` prefix so it groups with the other errors leaving the getter.

**Example**

```ts
assertPnlHistoryConsistent({
  vault,
  wallet,
  hasDeposits: depositsByAsset.size > 0,
  totalWithdrawnRaw,
  currentPositionRaw: currentPositionValue.raw,
});
```

***

#### fetchPointsLeaderboard()

> **fetchPointsLeaderboard**(`params`): `Promise`<`any`>

Fetch the points leaderboard data.

**Parameters**

| Parameter                | Type                                                                                                                                                              | Description                                    |
| ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------- |
| `params`                 | { `options?`: [`IVaultBaseOptions`](#ivaultbaseoptions); `params?`: { `page?`: `number`; `perPage?`: `number`; `sortBy?`: `"streakDays"` \| `"totalPoints"`; }; } | Optional parameters for pagination and sorting |
| `params.options?`        | [`IVaultBaseOptions`](#ivaultbaseoptions)                                                                                                                         | -                                              |
| `params.params?`         | { `page?`: `number`; `perPage?`: `number`; `sortBy?`: `"streakDays"` \| `"totalPoints"`; }                                                                        | -                                              |
| `params.params.page?`    | `number`                                                                                                                                                          | -                                              |
| `params.params.perPage?` | `number`                                                                                                                                                          | -                                              |
| `params.params.sortBy?`  | `"streakDays"` \| `"totalPoints"`                                                                                                                                 | -                                              |

**Returns**

`Promise`<`any`>

Leaderboard response data

***

#### getHealthFactorOfBorrowersByVault()

> **getHealthFactorOfBorrowersByVault**(`options`): `Promise`<`Record`<`string`, `IVaultBorrowerHealthFactor`\[]>>

Aggregate borrower-health-factor data, optionally scoped to a single vault.

* When `vault` is provided, only that vault's tokenized record is fetched and only its loans are read. This is the path callers should use when they already know which vault they care about — it skips the cross-chain fanout entirely.
* When `vault` is omitted, the function fetches every tokenized vault and builds health factors for each, preserving the legacy behavior. Per-vault failures are isolated with `Promise.allSettled` so one bad vault returns an empty array instead of rejecting the whole map.

The returned map is keyed by **lowercased** vault address so callers can look up entries without worrying about EIP-55 checksum casing in either the backend response or the caller's input.

**Parameters**

| Parameter         | Type                                                                                     | Description                                                     |
| ----------------- | ---------------------------------------------------------------------------------------- | --------------------------------------------------------------- |
| `options`         | { `options`: [`IVaultBaseOptions`](#ivaultbaseoptions); `vault?`: `` `0x${string}` ``; } | Standard vault options — `rpcUrl` should match `vault`'s chain. |
| `options.options` | [`IVaultBaseOptions`](#ivaultbaseoptions)                                                | -                                                               |
| `options.vault?`  | `` `0x${string}` ``                                                                      | -                                                               |

**Returns**

`Promise`<`Record`<`string`, `IVaultBorrowerHealthFactor`\[]>>

Map of lowercased vault address → array of borrower-health-factor rows.

***

#### getPreviewRedemption()

> **getPreviewRedemption**(`vault`): `Promise`<`INormalizedNumber`>

Preview the amount of assets that would be received for redeeming shares (queued redemption).

**Parameters**

| Parameter            | Type                                                                                                                                      | Description            |
| -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- |
| `vault`              | { `options`: [`IVaultBaseOptions`](#ivaultbaseoptions); `sharesAmount`: `string` \| `number` \| `bigint`; `vault`: `` `0x${string}` ``; } | Vault contract address |
| `vault.options`      | [`IVaultBaseOptions`](#ivaultbaseoptions)                                                                                                 | -                      |
| `vault.sharesAmount` | `string` \| `number` \| `bigint`                                                                                                          | -                      |
| `vault.vault`        | `` `0x${string}` ``                                                                                                                       | -                      |

**Returns**

`Promise`<`INormalizedNumber`>

The amount of assets as an INormalizedNumber with `normalized` and `raw` fields

***

#### getRewardsStakingPositions()

> **getRewardsStakingPositions**(`__namedParameters`): `Promise`<`IActiveStakingPosition`\[]>

**Parameters**

| Parameter                         | Type                                                                               |
| --------------------------------- | ---------------------------------------------------------------------------------- |
| `__namedParameters`               | { `coinGeckoKey?`: `string`; `rpcUrl`: `string`; `wallet?`: `` `0x${string}` ``; } |
| `__namedParameters.coinGeckoKey?` | `string`                                                                           |
| `__namedParameters.rpcUrl`        | `string`                                                                           |
| `__namedParameters.wallet?`       | `` `0x${string}` ``                                                                |

**Returns**

`Promise`<`IActiveStakingPosition`\[]>

***

#### getSwapRouterDepositResult()

> **getSwapRouterDepositResult**(`signer`, `options`): `Promise`<`ISwapRouterDepositResult`>

Resolves the real, post-execution outcome of a SwapRouter deposit from its mined transaction receipt. The SwapRouter contract itself emits no deposit/amount-out event — only the vault does, via its own `Deposit` event — so this decodes that log directly rather than trusting the pre-trade quote a UI shows before the user submits (the true post-swap amount depends on execution-time price and can differ from that estimate).

Works for both vault generations without the caller resolving the version first: evm-1 (ERC-4626-style `Deposit(sender, owner, assets, shares)`) and evm-2 (`Deposit(assetIn, amountIn, shares, senderAddr, receiverAddr)`) have different event signatures (different topic0), so both are registered and whichever matches the vault's actual log is decoded.

**Parameters**

| Parameter | Type                              | Description                                                                                         |
| --------- | --------------------------------- | --------------------------------------------------------------------------------------------------- |
| `signer`  | `Signer` \| `Wallet`              | ethers `Signer` or `Wallet` connected to a provider (used read-only here — no transaction is sent). |
| `options` | `ISwapRouterDepositResultOptions` | ISwapRouterDepositResultOptions.                                                                    |

**Returns**

`Promise`<`ISwapRouterDepositResult`>

The decoded ISwapRouterDepositResult, or `null` if the receipt isn't found yet or carries no `Deposit` log from `vault` (e.g. the hash is wrong, or the tx hasn't mined).

**Throws**

AugustValidationError if `signer` has no connected provider.

**Worst Case Rpc Calls**

1 — a single `getTransactionReceipt` call; decoding is local.

**Example**

```ts
const hash = await augustSdk.evm.swapRouterDeposit({ ... });
const result = await augustSdk.evm.getSwapRouterDepositResult({
  txHash: hash,
  vault: '0x74ad2f789ed583dbd141bbdafc673fe1f033718b',
});
// result?.amountOut — actual reference-asset amount received after the swap
```

***

#### getUserPoints()

> **getUserPoints**(`userAddress`): `Promise`<`any`>

Fetch user points from the backend API endpoint. This replaces client-side points calculation with server-side processing.

**Parameters**

| Parameter                 | Type                                                                                           | Description                         |
| ------------------------- | ---------------------------------------------------------------------------------------------- | ----------------------------------- |
| `userAddress`             | { `options?`: [`IVaultBaseOptions`](#ivaultbaseoptions); `userAddress`: `` `0x${string}` ``; } | User wallet address (EVM or Solana) |
| `userAddress.options?`    | [`IVaultBaseOptions`](#ivaultbaseoptions)                                                      | -                                   |
| `userAddress.userAddress` | `` `0x${string}` ``                                                                            | -                                   |

**Returns**

`Promise`<`any`>

Points data from the backend API

***

#### getVault()

> **getVault**(`vault`): `Promise`<`IVault`>

Fetch comprehensive vault data including on-chain state and backend metadata. Routes to appropriate chain adapter (EVM v1/v2, Solana, or Stellar) based on vault version. Optionally enriches with loan and allocation data.

**Parameters**

| Parameter                | Type                                                                                                                                                                                                | Description                                                               |
| ------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
| `vault`                  | { `allocations?`: `boolean`; `loadSnapshots?`: `boolean`; `loadSubaccounts?`: `boolean`; `loans?`: `boolean`; `options`: [`IVaultBaseOptions`](#ivaultbaseoptions); `vault`: `` `0x${string}` ``; } | Vault contract address (EVM hex, Stellar C-address, or Solana program ID) |
| `vault.allocations?`     | `boolean`                                                                                                                                                                                           | -                                                                         |
| `vault.loadSnapshots?`   | `boolean`                                                                                                                                                                                           | -                                                                         |
| `vault.loadSubaccounts?` | `boolean`                                                                                                                                                                                           | -                                                                         |
| `vault.loans?`           | `boolean`                                                                                                                                                                                           | -                                                                         |
| `vault.options`          | [`IVaultBaseOptions`](#ivaultbaseoptions)                                                                                                                                                           | -                                                                         |
| `vault.vault`            | `` `0x${string}` ``                                                                                                                                                                                 | -                                                                         |

**Returns**

`Promise`<`IVault`>

Complete vault object with optional enrichments

***

#### getVaultAllocations()

> **getVaultAllocations**(`vault`, `options`): `Promise`<`IVaultAllocations`>

Fetch comprehensive vault asset allocation breakdown. Includes DeFi protocols (via DeBank), CeFi balances, OTC positions, and loans. Categorizes exposures by borrowing, supplying, lending, and wallet holdings.

**Parameters**

| Parameter | Type                                      | Description       |
| --------- | ----------------------------------------- | ----------------- |
| `vault`   | `` `0x${string}` ``                       | Vault address     |
| `options` | [`IVaultBaseOptions`](#ivaultbaseoptions) | RPC configuration |

**Returns**

`Promise`<`IVaultAllocations`>

Detailed allocation data with exposure categorization

***

#### ~~getVaultAnnualizedApy()~~

> **getVaultAnnualizedApy**(`vault`): `Promise`<`IVaultAnnualizedApy`>

Fetch annualized APY metrics for a vault.

Supported Vaults: cUSDO, tETH, wstETH, rsETH

**Parameters**

| Parameter        | Type                                                                                     | Description            |
| ---------------- | ---------------------------------------------------------------------------------------- | ---------------------- |
| `vault`          | { `options?`: [`IVaultBaseOptions`](#ivaultbaseoptions); `vault`: `` `0x${string}` ``; } | Vault contract address |
| `vault.options?` | [`IVaultBaseOptions`](#ivaultbaseoptions)                                                | -                      |
| `vault.vault`    | `` `0x${string}` ``                                                                      | -                      |

**Returns**

`Promise`<`IVaultAnnualizedApy`>

Annualized APY data including liquidity APY

**Deprecated**

The `hgETH30dLiquidAPY` and `hgETH7dLiquidAPY` response fields are deprecated. These fields will be removed on 2026-01-01. Use `liquidAPY30Day` and `liquidAPY7Day` fields instead.

***

#### ~~getVaultApy()~~

> **getVaultApy**(`__namedParameters`): `Promise`<`object`\[]>

**Parameters**

| Parameter                       | Type                                                                                                                              |
| ------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| `__namedParameters`             | { `historical?`: `IVaultHistoricalParams`; `options?`: [`IVaultBaseOptions`](#ivaultbaseoptions); `vault`: `` `0x${string}` ``; } |
| `__namedParameters.historical?` | `IVaultHistoricalParams`                                                                                                          |
| `__namedParameters.options?`    | [`IVaultBaseOptions`](#ivaultbaseoptions)                                                                                         |
| `__namedParameters.vault`       | `` `0x${string}` ``                                                                                                               |

**Returns**

`Promise`<`object`\[]>

**Deprecated**

use getVaultHistoricalTimeseries instead

***

#### getVaultAvailableRedemptions()

> **getVaultAvailableRedemptions**(`__namedParameters`): `Promise`<{ `availableRedemptions`: `IVaultAvailableRedemption`\[]; `pendingRedemptions`: `IVaultAvailableRedemption`\[]; `processedWithdrawals`: `ISubgraphWithdrawProccessed`\[]; `requestedWithdrawals`: `ISubgraphWithdrawRequest`\[]; }>

**Parameters**

| Parameter                   | Type                                                                                                                               |
| --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| `__namedParameters`         | { `options`: [`IVaultBaseOptions`](#ivaultbaseoptions) & `object`; `vault`: `` `0x${string}` ``; `wallet?`: `` `0x${string}` ``; } |
| `__namedParameters.options` | [`IVaultBaseOptions`](#ivaultbaseoptions) & `object`                                                                               |
| `__namedParameters.vault`   | `` `0x${string}` ``                                                                                                                |
| `__namedParameters.wallet?` | `` `0x${string}` ``                                                                                                                |

**Returns**

`Promise`<{ `availableRedemptions`: `IVaultAvailableRedemption`\[]; `pendingRedemptions`: `IVaultAvailableRedemption`\[]; `processedWithdrawals`: `ISubgraphWithdrawProccessed`\[]; `requestedWithdrawals`: `ISubgraphWithdrawRequest`\[]; }>

***

#### getVaultBorrowerHealthFactor()

> **getVaultBorrowerHealthFactor**(`vault`): `Promise`<`IVaultBorrowerHealthFactor`\[]>

Build the per-loan borrower / health-factor list for a single vault.

Resilience: individual loan reads (`loanState()`, `borrower()`) and the per-borrower August backend call are isolated with `Promise.allSettled` and try/catch so one bad loan — a test loan whose address isn't a real contract, a borrower the backend doesn't recognize, an intermittent RPC error — drops that single row from the result instead of rejecting the whole batch. Failed rows are logged via `Logger.log.warn`; the loan is still returned with `health_factor: undefined` so callers can render an explicit empty state rather than a perpetual loading skeleton.

**Parameters**

| Parameter       | Type                                                                                    | Description                          |
| --------------- | --------------------------------------------------------------------------------------- | ------------------------------------ |
| `vault`         | { `options`: [`IVaultBaseOptions`](#ivaultbaseoptions); `vault`: `` `0x${string}` ``; } | Vault address to scope the fetch to. |
| `vault.options` | [`IVaultBaseOptions`](#ivaultbaseoptions)                                               | -                                    |
| `vault.vault`   | `` `0x${string}` ``                                                                     | -                                    |

**Returns**

`Promise`<`IVaultBorrowerHealthFactor`\[]>

Array of `IVaultBorrowerHealthFactor`, one entry per active loan.

***

#### getVaultHistoricalTimeseries()

> **getVaultHistoricalTimeseries**(`__namedParameters`): `Promise`<`IHistoricalTimeseriesResponse`>

**Parameters**

| Parameter                    | Type                                                                                                         |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------ |
| `__namedParameters`          | { `nDays?`: `number`; `options?`: [`IVaultBaseOptions`](#ivaultbaseoptions); `vault`: `` `0x${string}` ``; } |
| `__namedParameters.nDays?`   | `number`                                                                                                     |
| `__namedParameters.options?` | [`IVaultBaseOptions`](#ivaultbaseoptions)                                                                    |
| `__namedParameters.vault`    | `` `0x${string}` ``                                                                                          |

**Returns**

`Promise`<`IHistoricalTimeseriesResponse`>

***

#### getVaultLoans()

> **getVaultLoans**(`vault`, `options`): `Promise`<`IVaultLoan`\[]>

Vault Loans

**Parameters**

| Parameter | Type                                      |
| --------- | ----------------------------------------- |
| `vault`   | `string` \| `IVault`                      |
| `options` | [`IVaultBaseOptions`](#ivaultbaseoptions) |

**Returns**

`Promise`<`IVaultLoan`\[]>

***

#### getVaultPendingRedemptions()

> **getVaultPendingRedemptions**(`vault`): `Promise`<`IVaultPendingRedemptions`>

Fetch pending redemptions for a vault with liquidity analysis.

**Parameters**

| Parameter           | Type                                                                                                                                     | Description            |
| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- |
| `vault`             | { `futureDays?`: `number`; `options?`: [`IVaultBaseOptions`](#ivaultbaseoptions); `pastDays?`: `number`; `vault`: `` `0x${string}` ``; } | Vault contract address |
| `vault.futureDays?` | `number`                                                                                                                                 | -                      |
| `vault.options?`    | [`IVaultBaseOptions`](#ivaultbaseoptions)                                                                                                | -                      |
| `vault.pastDays?`   | `number`                                                                                                                                 | -                      |
| `vault.vault`       | `` `0x${string}` ``                                                                                                                      | -                      |

**Returns**

`Promise`<`IVaultPendingRedemptions`>

Pending redemptions grouped by date with liquidity summary

***

#### getVaultPnl()

> **getVaultPnl**(`vault`): `Promise`<`IVaultPnl`>

Calculate PnL for a vault (vault-level, not user-specific). Returns the vault's overall profit and loss across all users.

**Parameters**

| Parameter       | Type                                                                                    | Description            |
| --------------- | --------------------------------------------------------------------------------------- | ---------------------- |
| `vault`         | { `options`: [`IVaultBaseOptions`](#ivaultbaseoptions); `vault`: `` `0x${string}` ``; } | Vault contract address |
| `vault.options` | [`IVaultBaseOptions`](#ivaultbaseoptions)                                               | -                      |
| `vault.vault`   | `` `0x${string}` ``                                                                     | -                      |

**Returns**

`Promise`<`IVaultPnl`>

Vault PnL in USD and notional value

***

#### getVaultPositions()

> **getVaultPositions**(`__namedParameters`): `Promise`<`IVaultPosition`\[]>

Vault Positions

**Parameters**

| Parameter                          | Type                                                                                                                                                                           |
| ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `__namedParameters`                | { `options`: [`IVaultBaseOptions`](#ivaultbaseoptions); `solanaWallet?`: `string`; `stellarWallet?`: `string`; `vault`: `` `0x${string}` ``; `wallet?`: `` `0x${string}` ``; } |
| `__namedParameters.options`        | [`IVaultBaseOptions`](#ivaultbaseoptions)                                                                                                                                      |
| `__namedParameters.solanaWallet?`  | `string`                                                                                                                                                                       |
| `__namedParameters.stellarWallet?` | `string`                                                                                                                                                                       |
| `__namedParameters.vault`          | `` `0x${string}` ``                                                                                                                                                            |
| `__namedParameters.wallet?`        | `` `0x${string}` ``                                                                                                                                                            |

**Returns**

`Promise`<`IVaultPosition`\[]>

***

#### getVaultRedemptionHistory()

> **getVaultRedemptionHistory**(`__namedParameters`): `Promise`<`IVaultRedemptionHistoryItem`\[]>

**Parameters**

| Parameter                           | Type                                                                                                                                                 |
| ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| `__namedParameters`                 | { `lookbackBlocks?`: `number`; `options`: [`IVaultBaseOptions`](#ivaultbaseoptions); `vault`: `` `0x${string}` ``; `wallet?`: `` `0x${string}` ``; } |
| `__namedParameters.lookbackBlocks?` | `number`                                                                                                                                             |
| `__namedParameters.options`         | [`IVaultBaseOptions`](#ivaultbaseoptions)                                                                                                            |
| `__namedParameters.vault`           | `` `0x${string}` ``                                                                                                                                  |
| `__namedParameters.wallet?`         | `` `0x${string}` ``                                                                                                                                  |

**Returns**

`Promise`<`IVaultRedemptionHistoryItem`\[]>

***

#### getVaultSubaccountLoans()

> **getVaultSubaccountLoans**(`vault`, `options`): `Promise`<`IVaultLoan`\[]>

Vault Subaccount Loans

**Parameters**

| Parameter | Type                                      |
| --------- | ----------------------------------------- |
| `vault`   | `string` \| `IVault`                      |
| `options` | [`IVaultBaseOptions`](#ivaultbaseoptions) |

**Returns**

`Promise`<`IVaultLoan`\[]>

***

#### getVaultSummary()

> **getVaultSummary**(`vault`): `Promise`<`IVaultSummary`>

Fetch summary data for a vault (name, type, chain, recent returns).

**Parameters**

| Parameter        | Type                                                                                     | Description            |
| ---------------- | ---------------------------------------------------------------------------------------- | ---------------------- |
| `vault`          | { `options?`: [`IVaultBaseOptions`](#ivaultbaseoptions); `vault`: `` `0x${string}` ``; } | Vault contract address |
| `vault.options?` | [`IVaultBaseOptions`](#ivaultbaseoptions)                                                | -                      |
| `vault.vault`    | `` `0x${string}` ``                                                                      | -                      |

**Returns**

`Promise`<`IVaultSummary`>

Vault summary data

***

#### getVaultTvl()

> **getVaultTvl**(`__namedParameters`): `Promise`<`object`\[]>

**Parameters**

| Parameter                       | Type                                                                                                                             |
| ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| `__namedParameters`             | { `historical?`: `IVaultHistoricalParams`; `options`: [`IVaultBaseOptions`](#ivaultbaseoptions); `vault`: `` `0x${string}` ``; } |
| `__namedParameters.historical?` | `IVaultHistoricalParams`                                                                                                         |
| `__namedParameters.options`     | [`IVaultBaseOptions`](#ivaultbaseoptions)                                                                                        |
| `__namedParameters.vault`       | `` `0x${string}` ``                                                                                                              |

**Returns**

`Promise`<`object`\[]>

***

#### getVaultUserLifetimePnl()

> **getVaultUserLifetimePnl**(`vault`): `Promise`<`IVaultUserLifetimePnl`>

Calculate lifetime PnL for a user in a specific vault.

Basic logic:

1. Get user's list of deposits and withdrawals from subgraph
2. Fetch user's current assets (balanceOf \* sharePrice via convertToAssets)
3. Calculate PnL = assets withdrawn + current assets - assets deposited

`totalDeposited` is the face value of what the user actually paid in (each deposited asset's raw amount, rescaled to the vault's decimals — no live price conversion), so any entry/exit fee the vault charges is automatically counted as a cost against PnL rather than excluded from it. Pre-deposit multi-asset vaults are assumed to only accept dollar-pegged stablecoins into a dollar-denominated vault; a vault accepting a non-pegged deposit asset would need deposit-time price conversion, which this function does not perform.

**Parameters**

| Parameter             | Type                                                                                                                                              | Description            |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- |
| `vault`               | { `coingeckoKey?`: `string`; `options`: [`IVaultBaseOptions`](#ivaultbaseoptions); `vault`: `` `0x${string}` ``; `wallet`: `` `0x${string}` ``; } | Vault contract address |
| `vault.coingeckoKey?` | `string`                                                                                                                                          | -                      |
| `vault.options`       | [`IVaultBaseOptions`](#ivaultbaseoptions)                                                                                                         | -                      |
| `vault.vault`         | `` `0x${string}` ``                                                                                                                               | -                      |
| `vault.wallet`        | `` `0x${string}` ``                                                                                                                               | -                      |

**Returns**

`Promise`<`IVaultUserLifetimePnl`>

Lifetime PnL data in both native token and USD

***

#### getVaultWithdrawals()

> **getVaultWithdrawals**(`vault`): `Promise`<`IVaultWithdrawals`>

Fetch withdrawal summary and pending queue for a vault.

**Parameters**

| Parameter        | Type                                                                                                        | Description            |
| ---------------- | ----------------------------------------------------------------------------------------------------------- | ---------------------- |
| `vault`          | { `chain`: `string`; `options?`: [`IVaultBaseOptions`](#ivaultbaseoptions); `vault`: `` `0x${string}` ``; } | Vault contract address |
| `vault.chain`    | `string`                                                                                                    | -                      |
| `vault.options?` | [`IVaultBaseOptions`](#ivaultbaseoptions)                                                                   | -                      |
| `vault.vault`    | `` `0x${string}` ``                                                                                         | -                      |

**Returns**

`Promise`<`IVaultWithdrawals`>

Withdrawal summary and pending queue

***

#### getWithdrawalRequestsWithStatus()

> **getWithdrawalRequestsWithStatus**(`params`): `Promise`<[`WithdrawalRequestStatus`](#withdrawalrequeststatus)\[]>

Returns all withdrawal requests for a vault, enriched with computed claimable dates and current processing status.

The unique identifier for matching requests to processed events is: (receiver, claimableDate.year, claimableDate.month, claimableDate.day)

This is the primary method for integrators to reliably track withdrawal status when multiple requests are submitted by the same receiver.

### Data sources

* **Withdrawal requests** come from the subgraph (all historical requests).
* **Processed events** come from on-chain `WithdrawalProcessed` logs, which are limited to a finite lookback window determined by the chain's block parameters.

### Lookback window & filtering

On-chain logs only cover a limited number of recent blocks (e.g. \~20 days on Monad, \~21 days on Ethereum). The `lookbackBlocks` parameter controls how far back to scan and is applied uniformly to both data sources: it bounds the `WithdrawalProcessed` log query *and* drops any withdrawal request whose submission timestamp falls outside the window — regardless of whether a matching processed event was found. Callers who need deeper history should widen `lookbackBlocks`.

### Status determination

* `'processed'` — A matching `WithdrawalProcessed` event was found (by receiver + claimable date).
* `'ready_to_claim'` — Claimable date has passed (within the lookback window) but no processed event found.
* `'pending'` — Claimable date is still in the future.

**Parameters**

| Parameter                | Type                                                                                                                                                   | Description                                                                                                                                                                                                                                                                                                                                                                                                    |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `params`                 | { `lookbackBlocks?`: `number`; `options`: [`IVaultBaseOptions`](#ivaultbaseoptions); `receiver?`: `` `0x${string}` ``; `vault`: `` `0x${string}` ``; } | Query parameters: - `vault` — Vault address to query. - `receiver` — (Optional) Filter by receiver address. - `lookbackBlocks` — (Optional) On-chain log lookback window in blocks. Defaults to a chain-specific value (e.g. 150,000 for Ethereum, 3,456,000 for Monad). Increasing this scans more history but requires more RPC calls. - `options` — Standard vault query options (provider, RPC URL, etc.). |
| `params.lookbackBlocks?` | `number`                                                                                                                                               | -                                                                                                                                                                                                                                                                                                                                                                                                              |
| `params.options`         | [`IVaultBaseOptions`](#ivaultbaseoptions)                                                                                                              | -                                                                                                                                                                                                                                                                                                                                                                                                              |
| `params.receiver?`       | `` `0x${string}` ``                                                                                                                                    | -                                                                                                                                                                                                                                                                                                                                                                                                              |
| `params.vault`           | `` `0x${string}` ``                                                                                                                                    | -                                                                                                                                                                                                                                                                                                                                                                                                              |

**Returns**

`Promise`<[`WithdrawalRequestStatus`](#withdrawalrequeststatus)\[]>

Array of withdrawal requests with status and claimable dates

**Example**

```typescript
const requests = await getWithdrawalRequestsWithStatus({
  vault: '0xVault...',
  receiver: '0xReceiver...'
});

// Results show exact status + claimable date
requests.forEach(req => {
  console.log(
    `${req.claimableDate.year}-${req.claimableDate.month}-${req.claimableDate.day}: ${req.status}`
  );
});

// With custom lookback window (e.g. 30 days on Ethereum ≈ 216,000 blocks)
const moreResults = await getWithdrawalRequestsWithStatus({
  vault: '0xVault...',
  lookbackBlocks: 216_000,
});
```

***

#### getYieldLastRealizedOn()

> **getYieldLastRealizedOn**(`vault`): `Promise`<`number`>

Fetch the timestamp when yield was last realized for a vault. Returns the assetsUpdatedOn timestamp from the vault contract.

**Parameters**

| Parameter       | Type                                                                                    | Description            |
| --------------- | --------------------------------------------------------------------------------------- | ---------------------- |
| `vault`         | { `options`: [`IVaultBaseOptions`](#ivaultbaseoptions); `vault`: `` `0x${string}` ``; } | Vault contract address |
| `vault.options` | [`IVaultBaseOptions`](#ivaultbaseoptions)                                               | -                      |
| `vault.vault`   | `` `0x${string}` ``                                                                     | -                      |

**Returns**

`Promise`<`number`>

Timestamp (Unix timestamp in seconds) when yield was last realized

***

#### registerUserForPoints()

> **registerUserForPoints**(`userAddress`): `Promise`<`Response`>

Register a user for the points program, authenticated by a wallet signature.

The caller must obtain a personal\_sign (EIP-191) signature over the canonical message template below — the backend reconstructs the same string from these fields and verifies the signature recovers to `userAddress`. Building the message client-side and server-side from the same primitives means a hostile client cannot show one message in the wallet prompt while submitting a different one for validation.

Canonical message (`\n`-separated, no trailing newline):

```
Upshift: register {userAddress.toLowerCase()}
referrer: {referrerAddress.toLowerCase() || "none"}
chain: {chainId}
nonce: {nonce}
expires: {expiry}
```

**Parameters**

| Parameter                      | Type                                                                                                                                                                                                                       | Description                                                                                                                                      |
| ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| `userAddress`                  | { `chainId`: `number`; `expiry`: `number`; `nonce`: `string`; `options?`: [`IVaultBaseOptions`](#ivaultbaseoptions); `referrerAddress?`: `` `0x${string}` ``; `signature`: `string`; `userAddress`: `` `0x${string}` ``; } | EVM wallet address being registered. Must match the signer that produced `signature`. Lowercased before being embedded in the canonical message. |
| `userAddress.chainId`          | `number`                                                                                                                                                                                                                   | -                                                                                                                                                |
| `userAddress.expiry`           | `number`                                                                                                                                                                                                                   | -                                                                                                                                                |
| `userAddress.nonce`            | `string`                                                                                                                                                                                                                   | -                                                                                                                                                |
| `userAddress.options?`         | [`IVaultBaseOptions`](#ivaultbaseoptions)                                                                                                                                                                                  | -                                                                                                                                                |
| `userAddress.referrerAddress?` | `` `0x${string}` ``                                                                                                                                                                                                        | -                                                                                                                                                |
| `userAddress.signature`        | `string`                                                                                                                                                                                                                   | -                                                                                                                                                |
| `userAddress.userAddress`      | `` `0x${string}` ``                                                                                                                                                                                                        | -                                                                                                                                                |

**Returns**

`Promise`<`Response`>

Raw `Response` from the backend. 200 on success, 401 for expired / replayed / mismatched-signer / tampered-referrer, 422 for an unsupported `chainId`.

**Example**

```ts
const nonce = crypto.randomUUID().replace(/-/g, '');
const expiry = Math.floor(Date.now() / 1000) + 300;
const message =
  `Upshift: register ${address.toLowerCase()}\n` +
  `referrer: ${referrer?.toLowerCase() ?? 'none'}\n` +
  `chain: ${chainId}\n` +
  `nonce: ${nonce}\n` +
  `expires: ${expiry}`;
const signature = await walletClient.signMessage({ account: address, message });
await registerUserForPoints({ userAddress: address, referrerAddress: referrer, chainId, signature, nonce, expiry });
```

***

#### sumDepositsAtFaceValue()

> **sumDepositsAtFaceValue**(`depositsByAsset`, `assetDecimals`, `vaultDecimals`): `bigint`

Sum a wallet's per-asset deposits into the vault's own decimals, at face value — 1 unit of any deposited asset is treated as 1 unit of the vault's reporting currency, with no live price conversion.

Used by [getVaultUserLifetimePnl](#getvaultuserlifetimepnl-2) for `totalDeposited`. Pre-deposit multi-asset vaults only accept dollar-pegged stablecoins (USDC, USDT, DAI, USDS, RLUSD, etc.) into a dollar-denominated vault, so face value is a reasonable stand-in for USD value. This intentionally does NOT re-quote through a live price oracle: doing so priced a historical deposit at today's market rate, so `totalDeposited` (and lifetimePnl) drifted between calls purely from stablecoin peg noise, and approximately re-inflated deposits back toward face value — which silently excluded the vault's entry fee from PnL. The fee is money the user actually paid, so PnL must be computed net of it.

**Parameters**

| Parameter         | Type                      | Description                                                                                                                              |
| ----------------- | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| `depositsByAsset` | `Map`<`string`, `bigint`> | Raw deposited amount per asset, keyed by lowercased asset address (or `'default'` / `'lz-default'` for single-asset / cross-chain rows). |
| `assetDecimals`   | `Map`<`string`, `number`> | Decimals for each key in `depositsByAsset`.                                                                                              |
| `vaultDecimals`   | `number`                  | The vault's own decimals — the target scale every asset is rescaled to.                                                                  |

**Returns**

`bigint`

Total deposited, in raw base units at `vaultDecimals`.

### References

#### default

Renames and re-exports [AugustVaults](#augustvaults)


# AugustSubAccounts

[SDK Reference](/developers/typescript-sdk/api) / AugustSubAccounts

## AugustSubAccounts

The August Sub Accounts Module.

### Classes

#### AugustSubAccounts

Subaccount operation class interacting with August Subaccounts Subaccount is a smart contract wallet that serves as the fundamental infrastructure for August's platform. It functions as a cross-margin account designed for optimal capital efficiency. Most of the operations require a August API key to perform

**Extends**

* `AugustBase`

**Constructors**

**Constructor**

> **new AugustSubAccounts**(`baseConfig`): [`AugustSubAccounts`](#augustsubaccounts)

**Parameters**

| Parameter    | Type          |
| ------------ | ------------- |
| `baseConfig` | `IAugustBase` |

**Returns**

[`AugustSubAccounts`](#augustsubaccounts)

**Overrides**

`AugustBase.constructor`

**Properties**

| Property         | Modifier | Type               | Description                                   | Inherited from             |
| ---------------- | -------- | ------------------ | --------------------------------------------- | -------------------------- |
| `activeNetwork?` | `public` | `IActiveNetwork`   | -                                             | `AugustBase.activeNetwork` |
| `appName`        | `public` | `string`           | Validated app-name slug from the constructor. | `AugustBase.appName`       |
| `authorized`     | `public` | `boolean`          | -                                             | `AugustBase.authorized`    |
| `keys`           | `public` | `IKeys`            | -                                             | `AugustBase.keys`          |
| `monitoring`     | `public` | `IMonitoring`      | -                                             | `AugustBase.monitoring`    |
| `providers`      | `public` | `IProvidersConfig` | -                                             | `AugustBase.providers`     |

**Methods**

**clearWallet()**

> **clearWallet**(): `void`

Remove wallet address from SDK state and monitoring headers.

**Returns**

`void`

**Inherited from**

`AugustBase.clearWallet`

**getAllSubaccounts()**

> **getAllSubaccounts**(`options`): `Promise`<`IWSSubaccountListItem`\[]>

Retrieves one page of the directory of all August subaccounts.

Backed by the admin-only `GET /subaccount` backend endpoint, so the August API key configured on the SDK must belong to an admin user — non-admin keys are rejected with an auth error by the backend. Makes exactly one HTTP request and no RPC calls.

**Parameters**

| Parameter         | Type                                         | Description                                                                          |
| ----------------- | -------------------------------------------- | ------------------------------------------------------------------------------------ |
| `options`         | { `limit?`: `number`; `offset?`: `number`; } | Pagination window over the subaccount directory                                      |
| `options.limit?`  | `number`                                     | Page size. Defaults to 100; must be an integer between 1 and 1000 (backend maximum). |
| `options.offset?` | `number`                                     | Number of records to skip. Defaults to 0; must be a non-negative integer.            |

**Returns**

`Promise`<`IWSSubaccountListItem`\[]>

The page of subaccount records (address, internal/friendly names, status, type, linked chains, risk metadata). An empty array means the offset is past the end of the directory.

**Throws**

AugustValidationError when `offset` or `limit` is out of range

**Throws**

AugustAuthError when the API key is missing or not admin-scoped

**Example**

```ts
const page = await augustSdk.subAccountsModule.getAllSubaccounts({
    offset: 0,
    limit: 200,
  });
  console.log(page.map((s) => `${s.internal_name}: ${s.address}`));
```

**getSubaccountCefiPositions()**

> **getSubaccountCefiPositions**(`subaccountAddress`): `Promise`<`IWSSubaccountCefi`\[]>

Retrieves CeFi (Centralized Finance) positions for a subaccount.

**Parameters**

| Parameter           | Type                | Description                            |
| ------------------- | ------------------- | -------------------------------------- |
| `subaccountAddress` | `` `0x${string}` `` | The address of the subaccount to query |

**Returns**

`Promise`<`IWSSubaccountCefi`\[]>

List of CeFi positions held by the subaccount

**getSubaccountDebank()**

> **getSubaccountDebank**(`subaccountAddress`): `Promise`<`ISubaccountDebank`>

Retrieves cross-chain DeBank protocol positions and token balances for a subaccount and its associated strategies.

Backed by `GET /subaccount/{subaccount_address}/debank` (300-second server-side cache). This is a slow endpoint — it fans out to DeBank across every supported chain — so expect higher latency than other subaccount reads. Makes exactly one HTTP request and no RPC calls.

**Parameters**

| Parameter           | Type                | Description                            |
| ------------------- | ------------------- | -------------------------------------- |
| `subaccountAddress` | `` `0x${string}` `` | The address of the subaccount to query |

**Returns**

`Promise`<`ISubaccountDebank`>

The subaccount's DeBank positions/tokens plus per-strategy breakdowns

**Throws**

AugustValidationError When `subaccountAddress` is not a valid EVM address

**Throws**

AugustServerError When the API responds with a non-2xx status

**Example**

```ts
const debank = await augustSdk.subAccountsModule.getSubaccountDebank('0xabc…');
  console.log(debank.subaccount.positions.length);
```

**getSubaccountHealthFactor()**

> **getSubaccountHealthFactor**(`subaccountAddress`): `Promise`<{ `dateTime`: `string`; `healthFactor`: `number`; `id`: `` `0x${string}` ``; `totalCollateral`: `number`; `totalLoan`: `number`; }>

Retrieves the health factor for a subaccount.

**Parameters**

| Parameter           | Type                | Description                            |
| ------------------- | ------------------- | -------------------------------------- |
| `subaccountAddress` | `` `0x${string}` `` | The address of the subaccount to query |

**Returns**

`Promise`<{ `dateTime`: `string`; `healthFactor`: `number`; `id`: `` `0x${string}` ``; `totalCollateral`: `number`; `totalLoan`: `number`; }>

The health factor data including collateral value, loan value, and health factor ratio

**getSubaccountLoanByAddress()**

> **getSubaccountLoanByAddress**(`loanAddress`, `chainId`): `Promise`<`ILoanBookInfo`>

Retrieves the full loan-book detail for a single loan by its address and chain.

Backed by the admin-only `GET /subaccount/loans/{loan_address}` backend endpoint (60-second server-side cache), so the configured August API key must belong to an admin user. Makes exactly one HTTP request and no RPC calls.

**Parameters**

| Parameter     | Type     | Description                                                               |
| ------------- | -------- | ------------------------------------------------------------------------- |
| `loanAddress` | `string` | The loan contract address                                                 |
| `chainId`     | `number` | Numeric August chain id the loan lives on (e.g. `1` for Ethereum mainnet) |

**Returns**

`Promise`<`ILoanBookInfo`>

The loan's ILoanBookInfo detail

**Throws**

AugustValidationError When `chainId` is not an integer

**Throws**

AugustAuthError When the API key is missing or not admin-scoped

**Throws**

AugustServerError When the loan or chain is not found, or the API otherwise responds non-2xx

**Example**

```ts
const loan = await augustSdk.subAccountsModule.getSubaccountLoanByAddress(
    '0xloan…',
    1,
  );
```

**getSubaccountLoans()**

> **getSubaccountLoans**(`subaccountAddress`, `side`, `active`): `Promise`<`IWSSubaccountLoan`\[]>

Retrieves loan positions for a subaccount.

**Parameters**

| Parameter           | Type                                   | Description                                                                                               |
| ------------------- | -------------------------------------- | --------------------------------------------------------------------------------------------------------- |
| `subaccountAddress` | `` `0x${string}` ``                    | The address of the subaccount to query                                                                    |
| `side`              | `"BORROWER"` \| `"LENDER"` \| `"BOTH"` | Filter by loan side: 'BOTH' for all loans, 'LENDER' for lent positions, 'BORROWER' for borrowed positions |
| `active`            | `boolean`                              | When true, returns only active loans; when false, returns all loans including closed ones                 |

**Returns**

`Promise`<`IWSSubaccountLoan`\[]>

List of loan positions matching the specified filters

**getSubaccountOtcPositions()**

> **getSubaccountOtcPositions**(`subaccountAddress`): `Promise`<`IOTCPosition`\[]>

Retrieves OTC (Over-The-Counter) positions for a subaccount.

**Parameters**

| Parameter           | Type                | Description                            |
| ------------------- | ------------------- | -------------------------------------- |
| `subaccountAddress` | `` `0x${string}` `` | The address of the subaccount to query |

**Returns**

`Promise`<`IOTCPosition`\[]>

List of OTC positions held by the subaccount

**getSubaccountSummary()**

> **getSubaccountSummary**(`subaccountAddress`): `Promise`<{ `address`: `` `0x${string}` ``; `chains`: `object`\[]; `healthFactor`: `number`; `loanbook`: { `aggregatesByToken`: `unknown`\[]; `loans`: `object`\[]; `totalCredit`: `number`; `totalDebt`: `number`; }; `name`: `string`; `netAccountValue`: `number`; `portfolio`: { `cefiPositions`: `unknown`\[]; `collateralBalances`: `unknown`\[]; `defiPositions`: `unknown`\[]; `discountedValue`: `number`; `legacyHedgerPositions`: `unknown`\[]; `marginBalances`: `unknown`\[]; `otcPositions`: `unknown`\[]; `strategyContractPositions`: `unknown`\[]; `tokens`: `object`\[]; `totalValue`: `number`; `trsPositions`: `unknown`\[]; }; `tokens`: `object`\[]; `totalAccountValue`: `number`; `totalCollateralValue`: `number`; `totalEquityValue`: `number`; `totalLoanValue`: `number`; `type`: `"eoa"` | `"subaccount"`; }>

Retrieves the summary view for a subaccount or EOA operator.

**Parameters**

| Parameter           | Type                | Description                            |
| ------------------- | ------------------- | -------------------------------------- |
| `subaccountAddress` | `` `0x${string}` `` | The address of the subaccount to query |

**Returns**

`Promise`<{ `address`: `` `0x${string}` ``; `chains`: `object`\[]; `healthFactor`: `number`; `loanbook`: { `aggregatesByToken`: `unknown`\[]; `loans`: `object`\[]; `totalCredit`: `number`; `totalDebt`: `number`; }; `name`: `string`; `netAccountValue`: `number`; `portfolio`: { `cefiPositions`: `unknown`\[]; `collateralBalances`: `unknown`\[]; `defiPositions`: `unknown`\[]; `discountedValue`: `number`; `legacyHedgerPositions`: `unknown`\[]; `marginBalances`: `unknown`\[]; `otcPositions`: `unknown`\[]; `strategyContractPositions`: `unknown`\[]; `tokens`: `object`\[]; `totalValue`: `number`; `trsPositions`: `unknown`\[]; }; `tokens`: `object`\[]; `totalAccountValue`: `number`; `totalCollateralValue`: `number`; `totalEquityValue`: `number`; `totalLoanValue`: `number`; `type`: `"eoa"` | `"subaccount"`; }>

The full summary including portfolio, loanbook, tokens, and account values

**getSubaccountTransactions()**

> **getSubaccountTransactions**(`subaccountAddress`, `options`): `Promise`<`ISubaccountTransaction`\[]>

Retrieves a subaccount's on-chain transaction history, newest first, optionally windowed by a time range.

Backed by the authenticated `GET /transactions/v2` backend endpoint, which resolves and authorizes the subaccount, so the configured August API key must be authorized for it (an admin-scoped key always is). Makes exactly one HTTP request and no RPC calls.

**Parameters**

| Parameter            | Type                                              | Description                                                        |
| -------------------- | ------------------------------------------------- | ------------------------------------------------------------------ |
| `subaccountAddress`  | `` `0x${string}` ``                               | The address of the subaccount to query                             |
| `options`            | { `endTime?`: `string`; `startTime?`: `string`; } | Optional time window                                               |
| `options.endTime?`   | `string`                                          | ISO-8601 datetime upper bound (inclusive); omit for no upper bound |
| `options.startTime?` | `string`                                          | ISO-8601 datetime lower bound (inclusive); omit for no lower bound |

**Returns**

`Promise`<`ISubaccountTransaction`\[]>

The subaccount's transactions with decoded logs, transfers, and function names

**Throws**

AugustValidationError When `subaccountAddress` is not a valid EVM address

**Throws**

AugustAuthError When the API key is missing or not authorized for the subaccount

**Throws**

AugustServerError When the API responds with a non-2xx status

**Example**

```ts
const txs = await augustSdk.subAccountsModule.getSubaccountTransactions(
    '0xabc…',
    { startTime: '2026-01-01T00:00:00Z' },
  );
```

**init()**

> **init**(): `Promise`<`void`>

Verify API keys and authorize SDK usage. TODO: initialize class with appropriate keys and verify august key

**Returns**

`Promise`<`void`>

**Inherited from**

`AugustBase.init`

**switchNetwork()**

> **switchNetwork**(`chainId`): `void`

Switch the active blockchain network. Updates both chain ID and RPC URL for subsequent operations.

**Parameters**

| Parameter | Type     |
| --------- | -------- |
| `chainId` | `number` |

**Returns**

`void`

**Inherited from**

`AugustBase.switchNetwork`

**updateWallet()**

> **updateWallet**(`address`): `void`

Set active wallet address and update monitoring headers. Preserves existing environment setting.

**Parameters**

| Parameter | Type                |
| --------- | ------------------- |
| `address` | `` `0x${string}` `` |

**Returns**

`void`

**Inherited from**

`AugustBase.updateWallet`


# AugustApi

[SDK Reference](/developers/typescript-sdk/api) / AugustApi

## AugustApi

The August backend API Module — read-only client for public backend endpoints (transparency dashboard, unrealized PnL) and authenticated loan-book / risk / OTC reads. Accessible as `sdk.apiModule`.

### Classes

#### AugustApi

Read-only client for August backend REST endpoints that have no on-chain equivalent: the unrealized-PnL series, the transparency dashboard (position snapshot, backing series, smoothed APY, allocations, fee config, governance), plus authenticated loan-book / risk / OTC reads.

Every public method makes exactly one HTTPS request to the August API and zero RPC calls. Responses are not cached by the SDK: this is time-sensitive state where staleness is worse than a request. Accessible as `sdk.apiModule`; only the unrealized-PnL methods are also mirrored on the root `AugustSDK` class.

**Extends**

* `AugustBase`

**Constructors**

**Constructor**

> **new AugustApi**(`baseConfig`): [`AugustApi`](#augustapi)

**Parameters**

| Parameter    | Type          |
| ------------ | ------------- |
| `baseConfig` | `IAugustBase` |

**Returns**

[`AugustApi`](#augustapi)

**Overrides**

`AugustBase.constructor`

**Properties**

| Property         | Modifier | Type               | Description                                   | Inherited from             |
| ---------------- | -------- | ------------------ | --------------------------------------------- | -------------------------- |
| `activeNetwork?` | `public` | `IActiveNetwork`   | -                                             | `AugustBase.activeNetwork` |
| `appName`        | `public` | `string`           | Validated app-name slug from the constructor. | `AugustBase.appName`       |
| `authorized`     | `public` | `boolean`          | -                                             | `AugustBase.authorized`    |
| `keys`           | `public` | `IKeys`            | -                                             | `AugustBase.keys`          |
| `monitoring`     | `public` | `IMonitoring`      | -                                             | `AugustBase.monitoring`    |
| `providers`      | `public` | `IProvidersConfig` | -                                             | `AugustBase.providers`     |

**Methods**

**clearWallet()**

> **clearWallet**(): `void`

Remove wallet address from SDK state and monitoring headers.

**Returns**

`void`

**Inherited from**

`AugustBase.clearWallet`

**getCollateralExcessOrDeficit()**

> **getCollateralExcessOrDeficit**(`params`): `Promise`<`ICollateralExcessOrDeficit`>

Compute how much collateral a subaccount has in excess of — or is short of — what it needs to hold a target health factor, for one collateral token.

Backed by `GET /risk/collateral_excess_or_deficit` (60-second server-side cache), which resolves the subaccount and reads its current health factor, so an authenticated (admin-scoped) August API key is required. Makes exactly one HTTP request and no RPC calls.

**Parameters**

| Parameter                    | Type                                                                                                           | Description                                                                                                                                 |
| ---------------------------- | -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| `params`                     | { `subaccount`: `string`; `targetHealthFactor?`: `number`; `tokenAddress`: `string`; `tokenChain`: `number`; } | -                                                                                                                                           |
| `params.subaccount`          | `string`                                                                                                       | Subaccount (smart-contract wallet) address.                                                                                                 |
| `params.targetHealthFactor?` | `number`                                                                                                       | Health factor to solve for. Defaults server-side to the minimum healthy factor (1.2); when supplied must be a finite number greater than 0. |
| `params.tokenAddress`        | `string`                                                                                                       | Collateral token address to evaluate.                                                                                                       |
| `params.tokenChain`          | `number`                                                                                                       | Numeric August chain id of the token (e.g. `1` for Ethereum mainnet).                                                                       |

**Returns**

`Promise`<`ICollateralExcessOrDeficit`>

The signed excess (positive) or deficit (negative) in USD and token units. Zeroes when the subaccount has no debt.

**Throws**

AugustValidationError When an address is invalid, `tokenChain` is not an integer, or `targetHealthFactor` is out of range.

**Throws**

AugustServerError When the token has no discount factor (backend 404) or the API otherwise responds non-2xx.

**Example**

```ts
const r = await sdk.apiModule.getCollateralExcessOrDeficit({
    subaccount: '0xabc…',
    tokenAddress: '0xdef…',
    tokenChain: 1,
  });
  console.log(r.amount_usd > 0 ? 'excess' : 'deficit');
```

**getCuratorVaultSubaccounts()**

> **getCuratorVaultSubaccounts**(`vaultAddress`): `Promise`<`IWSSubaccountListItem`\[]>

List the subaccounts linked to a vault (curator surface).

Backed by the curator-or-admin `GET /curator/vaults/{vault_address}/subaccounts` backend endpoint, so the configured August API key must belong to the vault's curator or an admin. Makes exactly one HTTP request and no RPC calls.

**Parameters**

| Parameter      | Type     | Description                                       |
| -------------- | -------- | ------------------------------------------------- |
| `vaultAddress` | `string` | The vault address (EVM `0x…`, Solana, or Stellar) |

**Returns**

`Promise`<`IWSSubaccountListItem`\[]>

Array of subaccount records linked to the vault (same shape as the subaccount directory); empty when none are linked.

**Throws**

AugustValidationError When `vaultAddress` is not a valid address.

**Throws**

AugustAuthError When the API key is missing or not curator/admin for the vault.

**Throws**

AugustServerError When the API responds with a non-2xx status.

**Example**

```ts
const subs = await sdk.apiModule.getCuratorVaultSubaccounts('0xvault…');
```

**getCuratorVaultWhitelist()**

> **getCuratorVaultWhitelist**(`vaultAddress`): `Promise`<`ICuratorWhitelistStatus`\[]>

Get on-chain whitelist status for every subaccount linked to a vault (curator surface).

Backed by the curator-or-admin `GET /curator/vaults/{vault_address}/whitelist` backend endpoint. EVM vaults only — non-EVM vaults manage access internally and the backend returns a 400 (surfaced as AugustServerError). Makes exactly one HTTP request and no RPC calls from the SDK.

**Parameters**

| Parameter      | Type     | Description                   |
| -------------- | -------- | ----------------------------- |
| `vaultAddress` | `string` | The EVM vault address (`0x…`) |

**Returns**

`Promise`<`ICuratorWhitelistStatus`\[]>

Array of ICuratorWhitelistStatus, one per linked subaccount; empty when the vault has no subaccounts.

**Throws**

AugustValidationError When `vaultAddress` is not a valid address.

**Throws**

AugustAuthError When the API key is missing or not curator/admin for the vault.

**Throws**

AugustServerError When the vault is non-EVM (backend 400) or the API otherwise responds non-2xx.

**Example**

```ts
const status = await sdk.apiModule.getCuratorVaultWhitelist('0xvault…');
  console.log(status.filter((s) => !s.is_whitelisted));
```

**getDashboardLoans()**

> **getDashboardLoans**(): `Promise`<`ILoanBookInfo`\[]>

Retrieve the global loan-book aggregate across every active client subaccount — one ILoanBookInfo entry per loan, with principal / interest amounts, APRs, state, and the next upcoming payment.

Backed by the admin-only `GET /dashboard/loans` backend endpoint (60-second server-side cache), so the August API key configured on the SDK must belong to an admin user. Makes exactly one HTTP request and no RPC calls.

**Returns**

`Promise`<`ILoanBookInfo`\[]>

Array of loan-book entries; empty when there are no active loans.

**Throws**

AugustAuthError When the API key is missing or not admin-scoped.

**Throws**

AugustServerError When the API responds with a non-2xx status.

**Example**

```ts
const loans = await sdk.apiModule.getDashboardLoans();
  const active = loans.filter((l) => l.state === 'ACTIVE');
```

**getDiscountFactors()**

> **getDiscountFactors**(): `Promise`<`IDiscountFactorLadder`\[]>

Retrieve every token discount-factor ladder the risk engine applies when valuing collateral.

Backed by `GET /risk/discount_factors` (60-second server-side cache), which requires an authenticated August user; an admin-scoped API key works. Makes exactly one HTTP request and no RPC calls.

**Returns**

`Promise`<`IDiscountFactorLadder`\[]>

Array of IDiscountFactorLadder, one per whitelisted token that has a configured ladder.

**Throws**

AugustAuthError When the API key is missing or not authorized.

**Throws**

AugustServerError When the API responds with a non-2xx status.

**Example**

```ts
const ladders = await sdk.apiModule.getDiscountFactors();
  console.log(ladders.map((d) => `${d.address}@${d.chain}`));
```

**getLatestUnrealizedPnl()**

> **getLatestUnrealizedPnl**(): `Promise`<`IUnrealizedPnlSnapshot`\[]>

Fetch the latest unrealized-PnL snapshot for every vault the backend tracks — one entry per vault.

Makes one HTTPS request to the public August API; no RPC calls.

**Returns**

`Promise`<`IUnrealizedPnlSnapshot`\[]>

Array of IUnrealizedPnlSnapshot, one per tracked vault.

**Throws**

AugustServerError When the API responds with a 5xx, or returns a body that is not a snapshot array.

**Throws**

AugustRateLimitError When the API responds 429.

**Throws**

AugustTimeoutError When the request exceeds the SDK request timeout.

**Example**

```ts
const all = await sdk.getLatestUnrealizedPnl();
  const losing = all.filter((s) => s.unrealizedPnl < 0);
```

**getOtcMarginRequirements()**

> **getOtcMarginRequirements**(`options`): `Promise`<`IOtcMarginRequirement`\[]>

Retrieve OTC margin requirements, optionally filtered by counterparty and/or payer.

Backed by the admin-only `GET /otc/margin_requirement` backend endpoint, so the configured August API key must belong to an admin user. Makes exactly one HTTP request and no RPC calls.

**Parameters**

| Parameter                    | Type                                                    | Description                              |
| ---------------------------- | ------------------------------------------------------- | ---------------------------------------- |
| `options`                    | { `otcCounterpartyId?`: `string`; `payer?`: `string`; } | Optional filters                         |
| `options.otcCounterpartyId?` | `string`                                                | Restrict to a single counterparty (UUID) |
| `options.payer?`             | `string`                                                | Restrict to a single payer address       |

**Returns**

`Promise`<`IOtcMarginRequirement`\[]>

Array of IOtcMarginRequirement matching the filters (all when none given).

**Throws**

AugustAuthError When the API key is missing or not admin-scoped.

**Throws**

AugustServerError When the API responds with a non-2xx status.

**Example**

```ts
const reqs = await sdk.apiModule.getOtcMarginRequirements({ payer: '0xabc…' });
```

**getOtcPositions()**

> **getOtcPositions**(): `Promise`<`IOtcPositionRead`\[]>

Retrieve every tracked OTC position.

Backed by the admin-only `GET /otc/position` backend endpoint, so the configured August API key must belong to an admin user. Makes exactly one HTTP request and no RPC calls.

**Returns**

`Promise`<`IOtcPositionRead`\[]>

Array of IOtcPositionRead; empty when there are no OTC positions.

**Throws**

AugustAuthError When the API key is missing or not admin-scoped.

**Throws**

AugustServerError When the API responds with a non-2xx status.

**Example**

```ts
const positions = await sdk.apiModule.getOtcPositions();
```

**getRevertReason()**

> **getRevertReason**(`txHash`, `chain`): `Promise`<`IRevertReason`>

Fetch the decoded revert reason(s) for a transaction — error messages, revert strings, and recognized universal-subaccount errors extracted from a `debug_traceTransaction` call tree.

Backed by the public (unauthenticated) `GET /revert_reason` endpoint; no API key required. The backend relies on the target chain's RPC supporting `debug_trace*`; on chains/RPCs without it the backend returns a 5xx whose detail explains why, surfaced here as an AugustServerError. Makes exactly one HTTP request and no RPC calls from the SDK itself.

**Parameters**

| Parameter | Type     | Description                                                                    |
| --------- | -------- | ------------------------------------------------------------------------------ |
| `txHash`  | `string` | Transaction hash to trace.                                                     |
| `chain`   | `number` | Numeric August chain id the transaction is on (e.g. `1` for Ethereum mainnet). |

**Returns**

`Promise`<`IRevertReason`>

The decoded IRevertReason; all arrays empty when the trace yielded no matching signal.

**Throws**

AugustValidationError When `txHash` is empty or `chain` is not an integer.

**Throws**

AugustServerError When the chain/RPC does not support tracing, or the API otherwise responds non-2xx.

**Example**

```ts
const r = await sdk.apiModule.getRevertReason('0xabc…', 1);
  console.log(r.revert_reasons);
```

**getTimelockRequests()**

> **getTimelockRequests**(`params`): `Promise`<`ITimelockRequest`\[]>

List timelock (governance) requests for a vault on a chain, optionally filtered by status.

Backed by the `GET /timelock-requests` backend endpoint. Makes exactly one HTTP request and no RPC calls.

**Parameters**

| Parameter             | Type                                                                    | Description                                                                                                               |
| --------------------- | ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| `params`              | { `chainId`: `number`; `status?`: `string`; `vaultAddress`: `string`; } | -                                                                                                                         |
| `params.chainId`      | `number`                                                                | Numeric August chain id (must be a positive integer).                                                                     |
| `params.status?`      | `string`                                                                | Status filter: `"scheduled"` (backend default), `"executed"`, `"cancelled"`, or `"all"`. Omit to use the backend default. |
| `params.vaultAddress` | `string`                                                                | The vault address the requests target.                                                                                    |

**Returns**

`Promise`<`ITimelockRequest`\[]>

Array of ITimelockRequest; empty when the vault has no matching requests.

**Throws**

AugustValidationError When `vaultAddress` is invalid or `chainId` is not a positive integer.

**Throws**

AugustServerError When the API responds with a non-2xx status (e.g. an invalid status filter).

**Example**

```ts
const reqs = await sdk.apiModule.getTimelockRequests({ vaultAddress: '0xvault…', chainId: 1 });
```

**getVaultBackingSeries()**

> **getVaultBackingSeries**(`params`): `Promise`<`ITransparencyRatioPoint`\[]>

Fetch the backing / supply / collateral-ratio time series behind the Performance tab's "Backing vs Supply" and "Collateral Ratio" charts, and the Overview sidebar's 7-day deltas.

Public `GET /upshift/unrealized_pnl?fields=ratio`; no API key. One HTTPS request, no RPC. Points are hourly, returned newest-first — sort before charting. `actual_tvl` = backing (mark-to-market), `tvl_on_vault` = supply (vault-reported), `adjusted_redeem_ratio` = collateral ratio.

Unlike the chain-scoped transparency endpoints (positions, fees, governance…), this one is keyed by vault address only and accepts non-EVM (Solana / Stellar) vaults — same contract as [AugustApi.getVaultUnrealizedPnlHistory](#getvaultunrealizedpnlhistory), which it shares a route with.

**Parameters**

| Parameter           | Type                                                                                     | Description                                   |
| ------------------- | ---------------------------------------------------------------------------------------- | --------------------------------------------- |
| `params`            | { `endDate?`: `string`; `limit?`: `number`; `startDate?`: `string`; `vault`: `string`; } | -                                             |
| `params.endDate?`   | `string`                                                                                 | Optional inclusive upper bound, `YYYY-MM-DD`. |
| `params.limit?`     | `number`                                                                                 | Optional max points.                          |
| `params.startDate?` | `string`                                                                                 | Optional inclusive lower bound, `YYYY-MM-DD`. |
| `params.vault`      | `string`                                                                                 | Vault address (EVM, Solana, or Stellar).      |

**Returns**

`Promise`<`ITransparencyRatioPoint`\[]>

Array of ITransparencyRatioPoint; empty when no history.

**Throws**

AugustValidationError When arguments fail validation (no request is made).

**Throws**

AugustServerError When the API responds non-2xx (e.g. unknown vault 404, non-EVM vault 422).

**Throws**

AugustServerError (status 200) When the body is not the documented shape — backend contract drift.

**Throws**

AugustRateLimitError When the API responds 429.

**Throws**

AugustTimeoutError When the request exceeds the SDK request timeout.

**Example**

```ts
const pts = await sdk.apiModule.getVaultBackingSeries({ vault, startDate: '2026-08-01' });
const ratio = pts.map((p) => p.adjusted_redeem_ratio * 100); // percent
```

**getVaultFeeConfig()**

> **getVaultFeeConfig**(`params`): `Promise`<`ITransparencyFees`>

Fetch a vault's fee configuration — the Performance tab's fee card.

Public `GET /upshift/fees/{vault_address}`; no API key. One HTTPS request, no RPC. Percent fields are already scaled (`management_fee_pct` of `1.5` means 1.5%).

**Parameters**

| Parameter        | Type                                        | Description        |
| ---------------- | ------------------------------------------- | ------------------ |
| `params`         | { `chainId`: `number`; `vault`: `string`; } | -                  |
| `params.chainId` | `number`                                    | Numeric chain id.  |
| `params.vault`   | `string`                                    | EVM vault address. |

**Returns**

`Promise`<`ITransparencyFees`>

ITransparencyFees.

**Throws**

AugustValidationError When arguments fail validation (no request is made).

**Throws**

AugustServerError When the API responds non-2xx (e.g. unknown vault 404, non-EVM vault 422).

**Throws**

AugustServerError (status 200) When the body is not the documented shape — backend contract drift.

**Throws**

AugustRateLimitError When the API responds 429.

**Throws**

AugustTimeoutError When the request exceeds the SDK request timeout.

**Example**

```ts
const fees = await sdk.apiModule.getVaultFeeConfig({ vault, chainId: 143 });
console.log(`${fees.management_fee_pct}% mgmt / ${fees.performance_fee_pct}% perf`);
```

**getVaultGovernanceAuditLog()**

> **getVaultGovernanceAuditLog**(`params`): `Promise`<`ITransparencyAuditLog`>

Fetch one page of the vault's governance audit log, newest first — the Governance tab's "Audit Log" timeline. Merges live timelock events with manually recorded entries (attestations, permission changes).

Public `GET /upshift/governance/{vault_address}/audit_log`; no API key. Paginate with `before` = the last returned entry's `timestamp` while `has_more` is true (exclusive cursor; ties at the exact boundary timestamp are skipped, never duplicated).

**Parameters**

| Parameter          | Type                                                                                                                            | Description                                                                                                                     |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| `params`           | { `before?`: `string`; `category?`: `ITransparencyAuditCategory`; `chainId`: `number`; `limit?`: `number`; `vault`: `string`; } | -                                                                                                                               |
| `params.before?`   | `string`                                                                                                                        | Optional exclusive cursor — pass the previous page's last `entry.timestamp` back verbatim (naive-UTC, no offset).               |
| `params.category?` | `ITransparencyAuditCategory`                                                                                                    | Optional ITransparencyAuditCategory filter. Any other string is rejected with `AugustValidationError` before a request is made. |
| `params.chainId`   | `number`                                                                                                                        | Numeric chain id.                                                                                                               |
| `params.limit?`    | `number`                                                                                                                        | Page size, 1–200. Backend default 50.                                                                                           |
| `params.vault`     | `string`                                                                                                                        | EVM vault address.                                                                                                              |

**Returns**

`Promise`<`ITransparencyAuditLog`>

ITransparencyAuditLog.

**Throws**

AugustValidationError When arguments fail validation (no request is made).

**Throws**

AugustServerError When the API responds non-2xx (e.g. unknown vault 404, non-EVM vault 422).

**Throws**

AugustServerError (status 200) When the body is not the documented shape — backend contract drift.

**Throws**

AugustRateLimitError When the API responds 429.

**Throws**

AugustTimeoutError When the request exceeds the SDK request timeout.

**Example**

```ts
// Walk the whole log, newest first.
let before: string | undefined;
do {
  const page = await sdk.apiModule.getVaultGovernanceAuditLog({ vault, chainId: 1, before, limit: 50 });
  for (const e of page.entries) console.log(e.timestamp, e.type, e.summary);
  before = page.has_more ? page.entries.at(-1)?.timestamp : undefined;
} while (before);
```

**getVaultGovernancePermissions()**

> **getVaultGovernancePermissions**(`params`): `Promise`<`ITransparencyGovernancePermissions`>

Fetch the integrations each vault wallet is whitelisted to operate — the Governance tab's "Vault Permissions" table.

Public `GET /upshift/governance/{vault_address}/permissions`; no API key. One HTTPS request, no RPC.

**Parameters**

| Parameter        | Type                                        | Description        |
| ---------------- | ------------------------------------------- | ------------------ |
| `params`         | { `chainId`: `number`; `vault`: `string`; } | -                  |
| `params.chainId` | `number`                                    | Numeric chain id.  |
| `params.vault`   | `string`                                    | EVM vault address. |

**Returns**

`Promise`<`ITransparencyGovernancePermissions`>

ITransparencyGovernancePermissions.

**Throws**

AugustValidationError When arguments fail validation (no request is made).

**Throws**

AugustServerError When the API responds non-2xx (e.g. unknown vault 404, non-EVM vault 422).

**Throws**

AugustServerError (status 200) When the body is not the documented shape — backend contract drift.

**Throws**

AugustRateLimitError When the API responds 429.

**Throws**

AugustTimeoutError When the request exceeds the SDK request timeout.

**Example**

```ts
const { permissions } = await sdk.apiModule.getVaultGovernancePermissions({ vault, chainId: 143 });
for (const p of permissions) console.log(p.integration, p.functions.join(','));
```

**getVaultGovernanceRoles()**

> **getVaultGovernanceRoles**(`params`): `Promise`<`ITransparencyGovernanceRoles`>

Fetch the vault's privileged addresses (owner / operators) with custody enrichment — the Governance tab's "Vault Roles" card.

Public `GET /upshift/governance/{vault_address}/roles`; no API key. One HTTPS request from the SDK (the backend performs the on-chain reads). Third-party enrichment failures (Safe / Fordefi) degrade rows and append to `warnings` rather than failing.

**Parameters**

| Parameter        | Type                                        | Description        |
| ---------------- | ------------------------------------------- | ------------------ |
| `params`         | { `chainId`: `number`; `vault`: `string`; } | -                  |
| `params.chainId` | `number`                                    | Numeric chain id.  |
| `params.vault`   | `string`                                    | EVM vault address. |

**Returns**

`Promise`<`ITransparencyGovernanceRoles`>

ITransparencyGovernanceRoles.

**Throws**

AugustValidationError When arguments fail validation (no request is made).

**Throws**

AugustServerError When the API responds non-2xx (e.g. unknown vault 404, non-EVM vault 422).

**Throws**

AugustServerError (status 200) When the body is not the documented shape — backend contract drift.

**Throws**

AugustRateLimitError When the API responds 429.

**Throws**

AugustTimeoutError When the request exceeds the SDK request timeout.

**Example**

```ts
const { roles, warnings } = await sdk.apiModule.getVaultGovernanceRoles({ vault, chainId: 143 });
const owner = roles.find((r) => r.role === 'owner'); // owner?.is_safe → Safe threshold in safe_threshold
```

**getVaultGovernanceTimelocks()**

> **getVaultGovernanceTimelocks**(`params`): `Promise`<`ITransparencyTimelocks`>

Fetch the vault's timelock queue — the Governance tab's "Pending Timelocks" table. Defaults to pending (`scheduled`) requests.

Public `GET /upshift/governance/{vault_address}/timelocks`; no API key. `executable_at` is `scheduled_at + TIMELOCK_DURATION()` read live from the timelock contract; null (plus a warning) when that read failed. The default filter is pending only — the list is often empty; pass `status: 'all'` for history. `getTimelockRequests` returns the raw backend rows; this returns the dashboard view (labels, `executable_at`, warnings).

**Parameters**

| Parameter        | Type                                                                                             | Description                                                                                                                                                         |
| ---------------- | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `params`         | { `chainId`: `number`; `status?`: `ITransparencyTimelockStatus` \| `"all"`; `vault`: `string`; } | -                                                                                                                                                                   |
| `params.chainId` | `number`                                                                                         | Numeric chain id.                                                                                                                                                   |
| `params.status?` | `ITransparencyTimelockStatus` \| `"all"`                                                         | Filter: a single ITransparencyTimelockStatus or `'all'`. Default `'scheduled'`. Any other string is rejected with `AugustValidationError` before a request is made. |
| `params.vault`   | `string`                                                                                         | EVM vault address.                                                                                                                                                  |

**Returns**

`Promise`<`ITransparencyTimelocks`>

ITransparencyTimelocks.

**Throws**

AugustValidationError When arguments fail validation (no request is made).

**Throws**

AugustServerError When the API responds non-2xx (e.g. unknown vault 404, non-EVM vault 422).

**Throws**

AugustServerError (status 200) When the body is not the documented shape — backend contract drift.

**Throws**

AugustRateLimitError When the API responds 429.

**Throws**

AugustTimeoutError When the request exceeds the SDK request timeout.

**Example**

```ts
const { timelocks } = await sdk.apiModule.getVaultGovernanceTimelocks({ vault, chainId: 1 }); // pending only
const ready = timelocks.filter((t) => t.executable_at && Date.parse(`${t.executable_at}Z`) <= Date.now());
```

**getVaultHistoricalAllocations()**

> **getVaultHistoricalAllocations**(`params`): `Promise`<`ITransparencyHistoricalAllocations`>

Fetch daily allocation history per protocol — the Performance tab's "Allocation Over Time" chart.

Public `GET /upshift/historical_allocations/{vault_address}`; no API key. One HTTPS request, no RPC.

**Parameters**

| Parameter           | Type                                                                                      | Description                                   |
| ------------------- | ----------------------------------------------------------------------------------------- | --------------------------------------------- |
| `params`            | { `chainId`: `number`; `endDate?`: `string`; `startDate?`: `string`; `vault`: `string`; } | -                                             |
| `params.chainId`    | `number`                                                                                  | Numeric chain id.                             |
| `params.endDate?`   | `string`                                                                                  | Optional inclusive upper bound, `YYYY-MM-DD`. |
| `params.startDate?` | `string`                                                                                  | Optional inclusive lower bound, `YYYY-MM-DD`. |
| `params.vault`      | `string`                                                                                  | EVM vault address.                            |

**Returns**

`Promise`<`ITransparencyHistoricalAllocations`>

ITransparencyHistoricalAllocations.

**Throws**

AugustValidationError When arguments fail validation (no request is made).

**Throws**

AugustServerError When the API responds non-2xx (e.g. unknown vault 404, non-EVM vault 422).

**Throws**

AugustServerError (status 200) When the body is not the documented shape — backend contract drift.

**Throws**

AugustRateLimitError When the API responds 429.

**Throws**

AugustTimeoutError When the request exceeds the SDK request timeout.

**Example**

```ts
const h = await sdk.apiModule.getVaultHistoricalAllocations({ vault, chainId: 143, startDate: '2026-08-01' });
const byDate = Map.groupBy(h.points, (p) => p.date);
```

**getVaultOracleClassification()**

> **getVaultOracleClassification**(`vault`, `chainId`): `Promise`<`IOracleClassification`>

Fetch a vault's NAV-oracle classification table — how each position/token is priced (Primary / Secondary Market / CeFi) and its USD value, plus warnings for tokens that could not be resolved.

Backed by the public (unauthenticated) `GET /upshift/oracle_classification/{vault_address}` endpoint; no API key required. Reads the newest daily snapshot. Makes exactly one HTTP request and no RPC calls from the SDK.

**Parameters**

| Parameter | Type     | Description                                        |
| --------- | -------- | -------------------------------------------------- |
| `vault`   | `string` | The vault address (EVM `0x…`, Solana, or Stellar). |
| `chainId` | `number` | Numeric August chain id the vault lives on.        |

**Returns**

`Promise`<`IOracleClassification`>

The vault's IOracleClassification.

**Throws**

AugustValidationError When `vault` is invalid or `chainId` is not an integer.

**Throws**

AugustServerError When the vault or its snapshot is not found, or the API otherwise responds non-2xx.

**Example**

```ts
const cls = await sdk.apiModule.getVaultOracleClassification('0xvault…', 1);
  console.log(cls.warnings);
```

**getVaultPerformanceFees()**

> **getVaultPerformanceFees**(`params`): `Promise`<`IVaultPerformanceFees`>

Compute a vault's performance fees over a period (backend-computed from its snapshot history).

Backed by `GET /metrics/vault_performance_fees`. The backend runs pandas over the vault's full snapshot history, so the first call is slow; results are cached server-side for 20 minutes. Makes exactly one HTTP request and no RPC calls.

**Parameters**

| Parameter                   | Type                                                                                                                                                                  | Description                                                                                                                                |
| --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| `params`                    | { `annualizedFeesPct?`: `number`; `calculationPeriod?`: `string`; `endDate?`: `string`; `nativeDenominated?`: `boolean`; `startDate?`: `string`; `vault`: `string`; } | -                                                                                                                                          |
| `params.annualizedFeesPct?` | `number`                                                                                                                                                              | Annualized performance-fee percentage. Defaults to 20.                                                                                     |
| `params.calculationPeriod?` | `string`                                                                                                                                                              | Period preset — `"YearToDate"` (default) or `"MonthToDate"`. Ignored by the backend when a custom `startDate`/`endDate` range is supplied. |
| `params.endDate?`           | `string`                                                                                                                                                              | ISO-8601 datetime range end. Must be supplied together with `startDate`.                                                                   |
| `params.nativeDenominated?` | `boolean`                                                                                                                                                             | Whether to denominate in the vault's native token. Defaults to `true`.                                                                     |
| `params.startDate?`         | `string`                                                                                                                                                              | ISO-8601 datetime range start. Must be supplied together with `endDate`.                                                                   |
| `params.vault`              | `string`                                                                                                                                                              | The vault address (EVM `0x…`, Solana, or Stellar).                                                                                         |

**Returns**

`Promise`<`IVaultPerformanceFees`>

The vault's IVaultPerformanceFees computation.

**Throws**

AugustValidationError When `vault` is invalid, or exactly one of `startDate`/`endDate` is supplied.

**Throws**

AugustServerError When there is insufficient snapshot data for the period, or the API otherwise responds non-2xx.

**Example**

```ts
const fees = await sdk.apiModule.getVaultPerformanceFees({ vault: '0xvault…' });
  console.log(fees.total_perf_fees_asset);
```

**getVaultPositionSnapshot()**

> **getVaultPositionSnapshot**(`params`): `Promise`<`ITransparencyPositions`>

Fetch the latest position snapshot for a vault, grouped per wallet — the data behind the transparency Overview tab (strategy breakdown, backing composition, vault buffer, per-wallet table, headline TVL).

Public `GET /upshift/positions/{vault_address}`; no API key. One HTTPS request, no RPC. Snapshots land hourly; every field is from the single `snapshot_at` instant. Vault buffer = `total_nav − Σ subaccounts[].total_usd`; `reported_tvl` is the vault-contract-reported total assets from the same snapshot.

**Parameters**

| Parameter        | Type                                        | Description                          |
| ---------------- | ------------------------------------------- | ------------------------------------ |
| `params`         | { `chainId`: `number`; `vault`: `string`; } | -                                    |
| `params.chainId` | `number`                                    | Numeric chain id the vault lives on. |
| `params.vault`   | `string`                                    | EVM vault address.                   |

**Returns**

`Promise`<`ITransparencyPositions`>

ITransparencyPositions.

**Throws**

AugustValidationError When arguments fail validation (no request is made).

**Throws**

AugustServerError When the API responds non-2xx (e.g. unknown vault 404, non-EVM vault 422).

**Throws**

AugustServerError (status 200) When the body is not the documented shape — backend contract drift.

**Throws**

AugustRateLimitError When the API responds 429.

**Throws**

AugustTimeoutError When the request exceeds the SDK request timeout.

**Example**

```ts
const p = await sdk.apiModule.getVaultPositionSnapshot({ vault: '0x36eDbF0C834591BFdfCaC0Ef9605528c75c406aA', chainId: 143 });
const buffer = p.total_nav - p.subaccounts.reduce((a, s) => a + s.total_usd, 0);
```

**getVaultSmoothedApy()**

> **getVaultSmoothedApy**(`params`): `Promise`<`ITransparencyApySeries`>

Fetch the smoothed 7-day APY series — the exact series the Upshift app charts (Overview "APY last 30 days" and Performance "APY Over Time").

Public `GET /upshift/historical_apy/chart`; no API key. One HTTPS request, no RPC. The backend marks this route deprecated in its OpenAPI spec but it remains the series the Upshift app itself charts; this wrapper tracks it. The backend applies a rolling-median/mean smoothing filter server-side when `applySmoothing` is true (the app default); computing APY locally from raw share ratios will NOT match the published figures.

Unlike the chain-scoped transparency endpoints (positions, fees, governance…), this one is keyed by vault address only and accepts non-EVM (Solana / Stellar) vaults.

**Parameters**

| Parameter                     | Type                                                                                                         | Description                                                                            |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------- |
| `params`                      | { `applySmoothing?`: `boolean`; `averagingPeriodDays?`: `number`; `daysAgo?`: `number`; `vault`: `string`; } | -                                                                                      |
| `params.applySmoothing?`      | `boolean`                                                                                                    | Apply the backend smoothing filter. Default true.                                      |
| `params.averagingPeriodDays?` | `number`                                                                                                     | Rolling window for the annualized return; must be ≥ 2. Default 7 (the app's "7D APY"). |
| `params.daysAgo?`             | `number`                                                                                                     | Window length in days; pass `-1` for the full history since inception. Default 30.     |
| `params.vault`                | `string`                                                                                                     | Vault address (EVM, Solana, or Stellar).                                               |

**Returns**

`Promise`<`ITransparencyApySeries`>

ITransparencyApySeries — `labels` are `M/D/YYYY`, `values` are decimal fractions (0.0245 = 2.45%). Empty arrays when the vault has no data.

**Throws**

AugustValidationError When arguments fail validation (no request is made).

**Throws**

AugustServerError When the API responds non-2xx (e.g. unknown vault 404, non-EVM vault 422).

**Throws**

AugustServerError (status 200) When the body is not the documented shape — backend contract drift.

**Throws**

AugustRateLimitError When the API responds 429.

**Throws**

AugustTimeoutError When the request exceeds the SDK request timeout.

**Example**

```ts
const apy = await sdk.apiModule.getVaultSmoothedApy({ vault, daysAgo: 30 });
console.log(apy.values.at(-1)); // latest 7D APY as a fraction
```

**getVaultUnrealizedPnlHistory()**

> **getVaultUnrealizedPnlHistory**(`params`): `Promise`<`IUnrealizedPnlSnapshot`\[]>

Fetch the historical unrealized-PnL series for a vault, newest first, as computed by the August backend from periodic vault snapshots.

Makes one HTTPS request to the public August API; no RPC calls.

**Parameters**

| Parameter       | Type                                       | Description                                                                           |
| --------------- | ------------------------------------------ | ------------------------------------------------------------------------------------- |
| `params`        | { `limit?`: `number`; `vault`: `string`; } | -                                                                                     |
| `params.limit?` | `number`                                   | Maximum number of snapshots to return (1–1000). Backend default applies when omitted. |
| `params.vault`  | `string`                                   | Vault address (EVM `0x…`, Solana, or Stellar).                                        |

**Returns**

`Promise`<`IUnrealizedPnlSnapshot`\[]>

Array of IUnrealizedPnlSnapshot; empty when the backend has no history for the vault.

**Throws**

AugustValidationError When `vault` is not a valid address or `limit` is out of range.

**Throws**

AugustServerError When the API responds with a 5xx, or returns a body that is not a snapshot array.

**Throws**

AugustRateLimitError When the API responds 429.

**Throws**

AugustTimeoutError When the request exceeds the SDK request timeout.

**Example**

```ts
const series = await sdk.getVaultUnrealizedPnlHistory({ vault: '0x36eDbF0C834591BFdfCaC0Ef9605528c75c406aA', limit: 30 });
  console.log(series[0]?.unrealizedPnlInAsset);
```

**init()**

> **init**(): `Promise`<`void`>

Verify API keys and authorize SDK usage. TODO: initialize class with appropriate keys and verify august key

**Returns**

`Promise`<`void`>

**Inherited from**

`AugustBase.init`

**simulateCollateral()**

> **simulateCollateral**(`input`): `Promise`<`ICollateralSimulationResults`>

Simulate the collateral required to open a hypothetical loan against a chosen basket of collateral tokens.

This is a pure, read-only simulation: the backend `POST /risk/collateral_simulation` endpoint (60-second server-side cache) computes required collateral and effective discount factors and changes no state. It runs against the authenticated backend, so an (admin-scoped) August API key is required. Makes exactly one HTTP request and no RPC calls.

**Parameters**

| Parameter | Type                         | Description                                                                                                                                                                                                                         |
| --------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `input`   | `ICollateralSimulationInput` | Simulation parameters — see ICollateralSimulationInput. `collateral_tokens` and `collateral_token_allocation` must be non-empty and equal length; when `on_platform` is `true`, both `loan_redeployed_token_*` fields are required. |

**Returns**

`Promise`<`ICollateralSimulationResults`>

The simulated ICollateralSimulationResults: total debt, required collateral, resulting health factor, and a per-token breakdown.

**Throws**

AugustValidationError When addresses are invalid, `loan_amount` is not a finite non-negative number, the collateral arrays are empty / mismatched, or `on_platform` is set without redeployed-token details.

**Throws**

AugustServerError When the API responds with a non-2xx status (e.g. a token missing a discount factor).

**Example**

```ts
const sim = await sdk.apiModule.simulateCollateral({
    loan_token_chain: 1,
    loan_token_address: '0xloan…',
    loan_amount: 1_000_000,
    collateral_tokens: [[1, '0xcol…']],
    collateral_token_allocation: [1],
  });
  console.log(sim.total_required_collateral_usd);
```

**switchNetwork()**

> **switchNetwork**(`chainId`): `void`

Switch the active blockchain network. Updates both chain ID and RPC URL for subsequent operations.

**Parameters**

| Parameter | Type     |
| --------- | -------- |
| `chainId` | `number` |

**Returns**

`void`

**Inherited from**

`AugustBase.switchNetwork`

**updateWallet()**

> **updateWallet**(`address`): `void`

Set active wallet address and update monitoring headers. Preserves existing environment setting.

**Parameters**

| Parameter | Type                |
| --------- | ------------------- |
| `address` | `` `0x${string}` `` |

**Returns**

`void`

**Inherited from**

`AugustBase.updateWallet`


# EVMAdapter

[SDK Reference](/developers/typescript-sdk/api) / EVMAdapter

## EVMAdapter

EVM Adapter for August SDK

### Classes

#### default

EVM Adapter for August SDK Supports both ethers Signer/Wallet and wagmi/viem WalletClient

**Example**

To access the EVM adapter instance

```
const sdk = new AugustSDK()
sdk.evm.vaultRedeem()
```

**Constructors**

**Constructor**

> **new default**(`signer?`): [`default`](#default)

**Parameters**

| Parameter | Type  |
| --------- | ----- |
| `signer?` | `any` |

**Returns**

[`default`](#default)

**Methods**

**allowance()**

> **allowance**(`options`): `Promise`<`bigint`>

Read the ERC-20 allowance an owner has granted the vault. Defaults to the vault's underlying asset; pass `asset` to override.

**Parameters**

| Parameter | Type                |
| --------- | ------------------- |
| `options` | `IAllowanceOptions` |

**Returns**

`Promise`<`bigint`>

Allowance as a raw `bigint`.

**Example**

```ts
const raw = await augustSdk.evm.allowance({ vault, owner });
```

**approve()**

> **approve**(`options`): `Promise`<`ApproveResult`>

Approve a vault to spend a deposit token, returning a discriminated ApproveResult so callers can tell `sent` from `sufficient` (existing allowance covers) and `native` (no allowance applies). Prefer this over [vaultApprove](#vaultapprove) for new integrations.

**Parameters**

| Parameter | Type                    |
| --------- | ----------------------- |
| `options` | `IContractWriteOptions` |

**Returns**

`Promise`<`ApproveResult`>

**Example**

```ts
const r = await augustSdk.evm.approve({
  target: vaultAddress,
  wallet: walletAddress,
  amount: '100',
  wait: true,
});
if (r.kind === 'sent') console.log('approve tx', r.hash);
```

**balanceOf()**

> **balanceOf**(`options`): `Promise`<`bigint`>

Read an ERC-20 token balance.

**Parameters**

| Parameter | Type                |
| --------- | ------------------- |
| `options` | `IBalanceOfOptions` |

**Returns**

`Promise`<`bigint`>

Balance as a raw `bigint`.

**Example**

```ts
const raw = await augustSdk.evm.balanceOf({ asset: usdcAddress, owner });
```

**depositNative()**

> **depositNative**(`options`): `Promise`<`string`>

Deposit the chain's native asset (ETH / AVAX / etc.) into a vault by routing through the `MultiAssetNativeDepositWrapper`. The wrapper handles native-to-wrapped conversion and the subsequent vault deposit in a single transaction.

**Parameters**

| Parameter | Type                    | Description                                                                                                                                                           |
| --------- | ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `options` | `INativeDepositOptions` | INativeDepositOptions: `wrapperAddress`, `amount` (native, scaled by the chain's native decimals), optional `receiver` (defaults to the signer), and optional `wait`. |

**Returns**

`Promise`<`string`>

The deposit `TransactionResponse`.

**Throws**

AugustValidationError on invalid inputs.

**Throws**

AugustSDKError on RPC / contract revert.

**Example**

```ts
const tx = await augustSdk.evm.depositNative({
  wrapperAddress: nativeWrapperAddress,
  amount: parseEther('1'),
  wait: true,
});
```

**depositNativeViaSwapRouter()**

> **depositNativeViaSwapRouter**(`options`): `Promise`<`string`>

Deposit native ETH (or chain-native equivalent) into a vault via the SwapRouter. Only valid when the vault's reference asset is the chain's wrapped-native token — the SwapRouter wraps `amount` and deposits.

**Parameters**

| Parameter | Type                              | Description                      |
| --------- | --------------------------------- | -------------------------------- |
| `options` | `ISwapRouterNativeDepositOptions` | ISwapRouterNativeDepositOptions. |

**Returns**

`Promise`<`string`>

The transaction hash of the `depositNativeToken` call.

**depositViaSwapRouter()**

> **depositViaSwapRouter**(`options`): `Promise`<`string`>

Deposit a vault's reference asset through the SwapRouter — no swap. Use this when the caller already holds the reference asset but wants the origin/referral fee accounting that the SwapRouter path provides.

**Parameters**

| Parameter | Type                              | Description                      |
| --------- | --------------------------------- | -------------------------------- |
| `options` | `ISwapRouterDirectDepositOptions` | ISwapRouterDirectDepositOptions. |

**Returns**

`Promise`<`string`>

The transaction hash of the `deposit` call.

**getDeposited()**

> **getDeposited**(`options`): `Promise`<`INormalizedNumber`>

**Parameters**

| Parameter           | Type                                                                                               |
| ------------------- | -------------------------------------------------------------------------------------------------- |
| `options`           | { `vault`: `` `0x${string}` ``; `wallet`: `` `0x${string}` ``; `whitelist`: `` `0x${string}` ``; } |
| `options.vault`     | `` `0x${string}` ``                                                                                |
| `options.wallet`    | `` `0x${string}` ``                                                                                |
| `options.whitelist` | `` `0x${string}` ``                                                                                |

**Returns**

`Promise`<`INormalizedNumber`>

**getRemainingAllocations()**

> **getRemainingAllocations**(`options`): `Promise`<`INormalizedNumber`>

**Parameters**

| Parameter                   | Type                                                                                                                              |
| --------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| `options`                   | { `depositCapAmount?`: `bigint`; `vault`: `` `0x${string}` ``; `wallet`: `` `0x${string}` ``; `whitelist`: `` `0x${string}` ``; } |
| `options.depositCapAmount?` | `bigint`                                                                                                                          |
| `options.vault`             | `` `0x${string}` ``                                                                                                               |
| `options.wallet`            | `` `0x${string}` ``                                                                                                               |
| `options.whitelist`         | `` `0x${string}` ``                                                                                                               |

**Returns**

`Promise`<`INormalizedNumber`>

**getSwapRouterDepositResult()**

> **getSwapRouterDepositResult**(`options`): `Promise`<`ISwapRouterDepositResult`>

Resolves the real, post-execution outcome of a SwapRouter deposit from its mined receipt — the actual amount that reached the vault (and shares minted), decoded from the vault's own `Deposit` event, rather than the pre-trade quote shown before submission.

**Parameters**

| Parameter | Type                              | Description                      |
| --------- | --------------------------------- | -------------------------------- |
| `options` | `ISwapRouterDepositResultOptions` | ISwapRouterDepositResultOptions. |

**Returns**

`Promise`<`ISwapRouterDepositResult`>

The decoded ISwapRouterDepositResult, or `null` if the receipt isn't found yet or carries no matching `Deposit` log.

**Example**

```ts
const hash = await augustSdk.evm.swapRouterDeposit({ ... });
const result = await augustSdk.evm.getSwapRouterDepositResult({ txHash: hash, vault });
```

**isWhitelisted()**

> **isWhitelisted**(`options`): `Promise`<`boolean`>

**Parameters**

| Parameter           | Type                                                                 |
| ------------------- | -------------------------------------------------------------------- |
| `options`           | { `wallet`: `` `0x${string}` ``; `whitelist`: `` `0x${string}` ``; } |
| `options.wallet`    | `` `0x${string}` ``                                                  |
| `options.whitelist` | `` `0x${string}` ``                                                  |

**Returns**

`Promise`<`boolean`>

**maxDeposit()**

> **maxDeposit**(`options`): `Promise`<`bigint`>

Read the maximum deposit accepted by the vault for the supplied receiver. Useful for "vault is full" gates.

**Parameters**

| Parameter | Type                 |
| --------- | -------------------- |
| `options` | `IMaxDepositOptions` |

**Returns**

`Promise`<`bigint`>

Max deposit as a raw `bigint`.

**Example**

```ts
const cap = await augustSdk.evm.maxDeposit({ vault });
```

**previewDeposit()**

> **previewDeposit**(`options`): `Promise`<`bigint`>

Preview the share output of a deposit without broadcasting a transaction. See readPreviewDeposit for the routing details (EVM-1 vs EVM-2 multi-asset vaults).

**Parameters**

| Parameter | Type                     |
| --------- | ------------------------ |
| `options` | `IPreviewDepositOptions` |

**Returns**

`Promise`<`bigint`>

Shares minted in raw on-chain units (share-token decimals).

**Example**

```ts
const shares = await augustSdk.evm.previewDeposit({
  vault: '0x...',
  amount: 1_000_000n,
});
```

**previewRedeem()**

> **previewRedeem**(`options`): `Promise`<`bigint`>

Preview the assets returned by redeeming a number of shares, without broadcasting a transaction.

**Parameters**

| Parameter | Type                    |
| --------- | ----------------------- |
| `options` | `IPreviewRedeemOptions` |

**Returns**

`Promise`<`bigint`>

Assets returned in raw on-chain units (asset decimals).

**Example**

```ts
const assets = await augustSdk.evm.previewRedeem({
  vault: '0x...',
  shares: 1_000_000_000_000_000_000n,
});
```

**sendersWhitelistAddress()**

> **sendersWhitelistAddress**(`options`): `Promise`<`` `0x${string}` ``>

**Parameters**

| Parameter       | Type                              |
| --------------- | --------------------------------- |
| `options`       | { `vault`: `` `0x${string}` ``; } |
| `options.vault` | `` `0x${string}` ``               |

**Returns**

`Promise`<`` `0x${string}` ``>

**setSigner()**

> **setSigner**(`signer`): `void`

Set a new signer (supports both ethers and viem/wagmi)

**Parameters**

| Parameter | Type  | Description                                         |
| --------- | ----- | --------------------------------------------------- |
| `signer`  | `any` | Either an ethers Signer/Wallet or viem WalletClient |

**Returns**

`void`

**swapAndDeposit()**

> **swapAndDeposit**(`options`): `Promise`<`string`>

Swap one or more whitelisted ERC-20s into a vault's reference asset via the on-chain `SwapRouter` and deposit the proceeds. The router handles fee accrual, slippage protection, and the v1/v3 vs v2 deposit-interface branching. Approval is sent automatically for each `swaps[i].tokenIn` when the caller's allowance against the SwapRouter is below `amountIn`.

**Parameters**

| Parameter | Type                     | Description             |
| --------- | ------------------------ | ----------------------- |
| `options` | `ISwapAndDepositOptions` | ISwapAndDepositOptions. |

**Returns**

`Promise`<`string`>

The transaction hash of the `swapAndDeposit` call.

**Throws**

AugustValidationError on invalid inputs (bad chain, empty swaps).

**Throws**

AugustSDKError on RPC / contract revert.

**Example**

```ts
const quote = await fetchSwapQuote({
  chainId: 1, srcToken: WBTC, srcDecimals: 8,
  destToken: USDC, destDecimals: 6, amount: 100_000_000n,
  receiver: SWAP_ROUTER_ADDRESSES[1]!,
});
const hash = await augustSdk.evm.swapAndDeposit({
  chainId: 1, vault, receiver: wallet,
  swaps: [{ tokenIn: WBTC, tokenOut: USDC, amountIn: 100_000_000n,
    minAmountOut: quote.minAmountOut, router: quote.router, payload: quote.payload }],
});
```

**swapRouterDeposit()**

> **swapRouterDeposit**(`options`): `Promise`<`string`>

Deposit into a vault through the on-chain `SwapRouter`, choosing the router path from `depositAsset` (direct deposit, native wrap, or a swap to the reference asset). The high-level, explicit counterpart to the SwapRouter branch inside [vaultDeposit](#vaultdeposit) — the caller opts into the router deliberately, so a native-deposit vault is never accidentally swapped.

Reads the vault's reference asset + decimals on-chain, resolves the swap quote and fail-closes on aggregator/whitelist drift, and sends the ERC-20 approval to the SwapRouter when allowance is short.

**Parameters**

| Parameter | Type                        | Description                |
| --------- | --------------------------- | -------------------------- |
| `options` | `ISwapRouterDepositOptions` | ISwapRouterDepositOptions. |

**Returns**

`Promise`<`string`>

The transaction hash of the router deposit call.

**Throws**

AugustValidationError on unsupported chain, invalid address, zero amount, a native deposit into a non-wrapped-native vault, or quote drift.

**Example**

```ts
const hash = await augustSdk.evm.swapRouterDeposit({
  chainId: 1, vault, depositAsset: USDT, amount: '100', slippageBps: 50,
});
```

**vaultAllowance()**

> **vaultAllowance**(`options`): `Promise`<`INormalizedNumber`>

Read the ERC-20 allowance the wallet has granted the vault to spend its underlying asset, returned as a normalized number. For the newer typed read that returns a raw `bigint` and accepts an explicit `asset` override, use [EVMAdapter.allowance](#allowance).

Only `target` (vault address) and `wallet` are read from `options`; the remaining IContractWriteOptions fields are ignored.

**Parameters**

| Parameter | Type                    | Description                                  |
| --------- | ----------------------- | -------------------------------------------- |
| `options` | `IContractWriteOptions` | `{ target, wallet }` (other fields ignored). |

**Returns**

`Promise`<`INormalizedNumber`>

Normalized allowance (`{ raw, normalized }`), or `undefined` when `target` / `wallet` fail address validation.

**Example**

```ts
const a = await augustSdk.evm.vaultAllowance({
  target: vaultAddress,
  wallet: walletAddress,
});
console.log(a?.normalized);
```

**vaultApprove()**

> **vaultApprove**(`options`): `Promise`<`string`>

**Parameters**

| Parameter | Type                    |
| --------- | ----------------------- |
| `options` | `IContractWriteOptions` |

**Returns**

`Promise`<`string`>

**vaultDeposit()**

> **vaultDeposit**(`options`): `Promise`<`string`>

Deposit into an August vault. Routes automatically: V1 single-asset vaults deposit the underlying directly; V2 multi-asset vaults route through the adapter for non-underlying `depositAsset`. If allowance is insufficient the method submits an approve transaction first (the approve step always waits for confirmation to close a race window, regardless of `wait`).

**Parameters**

| Parameter | Type                    | Description                                                                                                                                                                                        |
| --------- | ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `options` | `IContractWriteOptions` | IContractWriteOptions. `target` and `wallet` are required; pass `amount`, `depositAsset` (defaults to the vault's underlying), `chainId`, `poolName`, `wait`, and `isDepositWithPermit` as needed. |

**Returns**

`Promise`<`string`>

The deposit `TransactionResponse`, or `undefined` if an approval-only path was taken and no deposit transaction was sent.

**Throws**

AugustValidationError on invalid inputs (bad address, bad amount).

**Throws**

AugustSDKError on RPC / contract revert during the deposit.

**Example**

```ts
const tx = await augustSdk.evm.vaultDeposit({
  target: vaultAddress,
  wallet: walletAddress,
  amount: '100',
  wait: true,
});
```

**vaultRedeem()**

> **vaultRedeem**(`options`): `Promise`<`string`>

Claim assets from a matured redemption request on a dated-redemption (RWA-style) vault. The `year`, `month`, `day`, and `receiverIndex` tuple identifies which batch of the user's matured requests to redeem from — these are emitted at request-time and indexed by the subgraph.

For non-dated vaults that complete their redemption via `instantRedeem`, see [EVMAdapter.vaultRequestRedeem](#vaultrequestredeem) with `isInstantRedeem: true`.

**Parameters**

| Parameter | Type                               | Description                                                                                                   |
| --------- | ---------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| `options` | `IContractWriteOptions` & `object` | IContractWriteOptions plus `year` / `month` / `day` / `receiverIndex` identifying the matured batch to claim. |

**Returns**

`Promise`<`string`>

The redeem `TransactionResponse`.

**Throws**

AugustValidationError on invalid inputs.

**Throws**

AugustSDKError on RPC / contract revert.

**Example**

```ts
const tx = await augustSdk.evm.vaultRedeem({
  target: vaultAddress,
  wallet: walletAddress,
  amount: shareAmount,
  year: '2026',
  month: '06',
  day: '02',
  receiverIndex: '0',
  wait: true,
});
```

**vaultRequestRedeem()**

> **vaultRequestRedeem**(`options`): `Promise`<`string`>

Submit a redemption request against a vault. Shares are escrowed and the underlying assets are released asynchronously by the protocol; callers collect the matured assets via [EVMAdapter.vaultRedeem](#vaultredeem), or use the instant-redeem variant by setting `isInstantRedeem: true`.

**Parameters**

| Parameter | Type                    | Description                                                                                                                                                               |
| --------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `options` | `IContractWriteOptions` | IContractWriteOptions. `target`, `wallet`, and `amount` (in shares) are required. Set `isInstantRedeem: true` to take the instant-redeem path when the vault supports it. |

**Returns**

`Promise`<`string`>

The request `TransactionResponse`, or `undefined` if the request could not be built (validation failure).

**Throws**

AugustValidationError on invalid inputs.

**Throws**

AugustSDKError on RPC / contract revert.

**Example**

```ts
const tx = await augustSdk.evm.vaultRequestRedeem({
  target: vaultAddress,
  wallet: walletAddress,
  amount: shareAmount,
  wait: true,
});
```

### Functions

#### getEvmVaultV1()

> **getEvmVaultV1**(`tokenizedVault`, `options`): `Promise`<`IVault`>

Fetch EVM vault data for v1 vault contracts (legacy format). Queries on-chain state and combines with backend metadata.

**Parameters**

| Parameter        | Type                                                                                 | Description                         |
| ---------------- | ------------------------------------------------------------------------------------ | ----------------------------------- |
| `tokenizedVault` | `ITokenizedVault`                                                                    | Vault metadata from backend         |
| `options`        | [`IVaultBaseOptions`](/developers/typescript-sdk/api/augustvaults#ivaultbaseoptions) | RPC configuration and chain details |

**Returns**

`Promise`<`IVault`>

Formatted vault object or null if closed/invisible

***

#### getEvmVaultV2()

> **getEvmVaultV2**(`tokenizedVault`, `options`): `Promise`<`IVault`>

Fetch EVM vault data for v2 vault contracts (current format). V2 vaults use separate contracts for vault, receipt token, and whitelist. Queries all three contracts and combines results.

**Parameters**

| Parameter        | Type                                                                                 | Description                         |
| ---------------- | ------------------------------------------------------------------------------------ | ----------------------------------- |
| `tokenizedVault` | `ITokenizedVault`                                                                    | Vault metadata from backend         |
| `options`        | [`IVaultBaseOptions`](/developers/typescript-sdk/api/augustvaults#ivaultbaseoptions) | RPC configuration and chain details |

**Returns**

`Promise`<`IVault`>

Formatted vault object or null if closed/invisible


# SolanaAdapter

[SDK Reference](/developers/typescript-sdk/api) / SolanaAdapter

## SolanaAdapter

Solana Adapter for August SDK

### Classes

#### default

Solana Adapter for August SDK

**Example**

To access the Solana adapter instance

```
const sdk = new AugustSDK()
sdk.solana.getVaultState()
```

**Constructors**

**Constructor**

> **new default**(`endpoint`, `network`, `commitment`): [`default`](#default)

**Parameters**

| Parameter    | Type                      | Default value                 | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| ------------ | ------------------------- | ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `endpoint`   | `` `https://${string}` `` | `undefined`                   | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| `network`    | `ISolanaNetwork`          | `SolanaUtils.fallbackNetwork` | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| `commitment` | `Commitment`              | `'finalized'`                 | Commitment for every read this adapter makes *and* for the confirmation of every write, so the two always describe the same chain state — the vault handlers take it from this same `Connection`. Defaults to `'finalized'`, which is what this adapter has always used in practice: it previously passed no commitment at all, so both reads and confirmations fell through to the RPC's own `'finalized'` default. The default is stated explicitly now rather than inherited, but it is unchanged. Pass `'confirmed'` for a markedly faster round trip — seconds rather than tens of seconds — accepting that the state you act on can still, in principle, be rolled back. Also settable as the `commitment` field of the `solana` config passed to `AugustSDK`. |

**Returns**

[`default`](#default)

**Accessors**

**connection**

**Get Signature**

> **get** **connection**(): `Connection`

**Returns**

`Connection`

**endpoint**

**Get Signature**

> **get** **endpoint**(): `` `https://${string}` ``

**Returns**

`` `https://${string}` ``

**network**

**Get Signature**

> **get** **network**(): `ISolanaNetwork`

**Returns**

`ISolanaNetwork`

**provider**

**Get Signature**

> **get** **provider**(): `AnchorProvider`

**Returns**

`AnchorProvider`

**Methods**

**fetchUserShareBalance()**

> **fetchUserShareBalance**(`publicKey`, `shareMint`): `Promise`<`number`>

**Parameters**

| Parameter   | Type                    |
| ----------- | ----------------------- |
| `publicKey` | `string` \| `PublicKey` |
| `shareMint` | `string` \| `PublicKey` |

**Returns**

`Promise`<`number`>

**fetchUserShareBalanceRaw()**

> **fetchUserShareBalanceRaw**(`publicKey`, `shareMint`): `Promise`<{ `amount`: `string`; `decimals`: `number`; }>

BigInt-safe variant of [fetchUserShareBalance](#fetchusersharebalance). Returns the raw u64 `amount` (as a base-units string) plus the mint's `decimals` (or `null` when the scale can't be determined — see Returns), so the caller can produce a correct `INormalizedNumber` without losing precision.

Prefer this anywhere the result feeds BigInt math — positions, max- actions, redemption sizing, allowance checks. `fetchUserShareBalance` returns a JS-number `uiAmount` which silently encodes against 18 decimals when passed through `toNormalizedBn(value)` without an explicit decimals argument; that's exactly how the jitoSOL "missing position" regression manifested.

RPC cost: 1 `getParsedTokenAccountsByOwner` call. Worst case \~150ms on a healthy mainnet endpoint.

**Parameters**

| Parameter   | Type                    | Description                                         |
| ----------- | ----------------------- | --------------------------------------------------- |
| `publicKey` | `string` \| `PublicKey` | Wallet owner (PublicKey or base58 string).          |
| `shareMint` | `string` \| `PublicKey` | The vault's share-token mint (PublicKey or base58). |

**Returns**

`Promise`<{ `amount`: `string`; `decimals`: `number`; }>

`{ amount, decimals }`. Three observable shapes:

* `{ amount: '<u64>', decimals: <number> }` — token account exists.
* `{ amount: '0', decimals: null }` — no token account for this mint under this wallet, OR `tokenAmount` was missing from the response, OR `publicKey`/`shareMint` was not supplied. Distinguishable from a genuine zero-balance account (`decimals` would be set there).
* `{ amount: '0', decimals: null }` — RPC threw (error is logged).

`decimals === null` means "we could not determine the scale" — callers that need an `INormalizedNumber` must fall back to a known decimals value (typically the deposit mint's decimals from backend metadata) before normalizing. Never throws.

**fetchUserTokenBalance()**

> **fetchUserTokenBalance**(`publicKey`, `depositMint`): `Promise`<`string`>

**Parameters**

| Parameter     | Type                    |
| ------------- | ----------------------- |
| `publicKey`   | `string` \| `PublicKey` |
| `depositMint` | `string` \| `PublicKey` |

**Returns**

`Promise`<`string`>

**getProgram()**

> **getProgram**(`programIdl?`, `programId?`): `Program`<`any`>

Build an Anchor `Program` bound to this adapter's provider and network.

The program id is resolved as: explicit `programId` → the `address` carried by a custom `programIdl` → the canonical deployment for this adapter's network. A copy of the SDK's bundled `vaultIdl` defers to the network default (its embedded `address` is a build stamp, not network-aware), so forwarding it on devnet never silently targets the mainnet program.

**Parameters**

| Parameter     | Type     | Description                                                                                                                                              |
| ------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `programIdl?` | `any`    | Anchor IDL to bind. Defaults to the SDK's bundled `august_vault` IDL. A custom IDL's `address` is honoured when it differs from the bundled build stamp. |
| `programId?`  | `string` | Base58 program id that overrides both the IDL's address and the network default. Use this to target a non-canonical deployment.                          |

**Returns**

`Program`<`any`>

An Anchor `Program` for the resolved program id. No RPC is made — construction is offline.

**Throws**

AugustValidationError if no program id can be resolved because this adapter's network has no canonical deployment (e.g. `testnet`) and neither `programId` nor a custom IDL address was supplied.

**Example**

```ts
// canonical program on the adapter's network
const program = sdk.solana.getProgram();

// a different deployment, same interface
const legacy = sdk.solana.getProgram(vaultIdl, '7B8n9vL51b6ibqRAd1adZsi3x3kxtq5NZaondh22Vkyq');
```

**getProgramId()**

> **getProgramId**(`type`): `string`

Canonical program id for a program type on this adapter's network.

**Parameters**

| Parameter | Type      | Description                                                      |
| --------- | --------- | ---------------------------------------------------------------- |
| `type`    | `"vault"` | Program to look up. Only `'vault'` (august\_vault) exists today. |

**Returns**

`string`

The base58 program id.

**Throws**

AugustValidationError if the canonical program is not deployed on this adapter's network (e.g. `testnet`). Previously an unmapped network threw a bare `TypeError`.

**getToken()**

> **getToken**(`mintAddress`): `Promise`<{ `address`: `string`; `decimals`: `number`; `image`: `string`; `name`: `string`; `symbol`: `string`; }>

**Parameters**

| Parameter     | Type                    |
| ------------- | ----------------------- |
| `mintAddress` | `string` \| `PublicKey` |

**Returns**

`Promise`<{ `address`: `string`; `decimals`: `number`; `image`: `string`; `name`: `string`; `symbol`: `string`; }>

**getTokenSymbol()**

> **getTokenSymbol**(`mintAddress`): `Promise`<`string`>

**Parameters**

| Parameter     | Type                    |
| ------------- | ----------------------- |
| `mintAddress` | `string` \| `PublicKey` |

**Returns**

`Promise`<`string`>

**getVaultState()**

> **getVaultState**(`vaultProgramId`, `idl`, `vaultAddress?`): `Promise`<{ `depositMintDecimals`: `number`; `vaultState`: `unknown`; }>

**Parameters**

| Parameter        | Type                    |
| ---------------- | ----------------------- |
| `vaultProgramId` | `string` \| `PublicKey` |
| `idl`            | `any`                   |
| `vaultAddress?`  | `string` \| `PublicKey` |

**Returns**

`Promise`<{ `depositMintDecimals`: `number`; `vaultState`: `unknown`; }>

**getVaultStateReadOnly()**

> **getVaultStateReadOnly**(`vaultProgramId`, `idl`, `vaultAddress?`): `Promise`<{ `depositMintDecimals`: `number`; `vaultState`: `ISolanaVaultState`; }>

**Parameters**

| Parameter        | Type                    |
| ---------------- | ----------------------- |
| `vaultProgramId` | `string` \| `PublicKey` |
| `idl`            | `any`                   |
| `vaultAddress?`  | `string` \| `PublicKey` |

**Returns**

`Promise`<{ `depositMintDecimals`: `number`; `vaultState`: `ISolanaVaultState`; }>

**setWalletProvider()**

> **setWalletProvider**(`_publicKey`, `signTransaction`): `void`

**Parameters**

| Parameter         | Type                                   |
| ----------------- | -------------------------------------- |
| `_publicKey`      | `string` \| `PublicKey`                |
| `signTransaction` | <`T`>(`transaction`) => `Promise`<`T`> |

**Returns**

`void`

**vaultDeposit()**

> **vaultDeposit**(`vaultProgramId`, `idl`, `publicKey`, `depositAmount`, `sendTransaction?`, `vaultAddress?`): `Promise`<`any`>

Deposit funds into a Solana August vault.

**Parameters**

| Parameter          | Type                                                             | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| ------------------ | ---------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `vaultProgramId`   | `string` \| `PublicKey`                                          | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| `idl`              | `any`                                                            | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| `publicKey`        | `string` \| `PublicKey`                                          | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| `depositAmount`    | `number` \| `bigint`                                             | `bigint` (raw on-chain units) or `number` (UI amount).                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| `sendTransaction?` | (`transaction`, `connection`, `options?`) => `Promise`<`string`> | **Ignored; scheduled for removal (AUGUST-7221).** Share-account creation is now prepended to the deposit instruction, so the SDK sends no second transaction and never invokes this callback — signing goes through the provider's wallet. **Pass `undefined` here; do not delete the argument.** It sits *before* `vaultAddress`, so removing it shifts your vault address into this slot and leaves `vaultAddress` undefined — which silently falls back to the legacy single-vault PDA derivation and targets a different vault. |
| `vaultAddress?`    | `string` \| `PublicKey`                                          | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |

**Returns**

`Promise`<`any`>

**vaultRedeem()**

> **vaultRedeem**(`vaultProgramId`, `idl`, `publicKey`, `redeemShares`, `sendTransaction?`, `vaultAddress?`): `Promise`<`any`>

Redeem vault shares from a Solana August vault.

**Parameters**

| Parameter          | Type                                                             | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| ------------------ | ---------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `vaultProgramId`   | `string` \| `PublicKey`                                          | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| `idl`              | `any`                                                            | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| `publicKey`        | `string` \| `PublicKey`                                          | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| `redeemShares`     | `number` \| `bigint`                                             | `bigint` (raw share units) or `number` (UI amount).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| `sendTransaction?` | (`transaction`, `connection`, `options?`) => `Promise`<`string`> | **Ignored; scheduled for removal (AUGUST-7221).** Payout- and fee-recipient-account creation is now prepended to the redeem instruction, so the SDK sends no second transaction and never invokes this callback — signing goes through the provider's wallet. **Pass `undefined` here; do not delete the argument.** It sits *before* `vaultAddress`, so removing it shifts your vault address into this slot and leaves `vaultAddress` undefined — which silently falls back to the legacy single-vault PDA derivation and targets a different vault. |
| `vaultAddress?`    | `string` \| `PublicKey`                                          | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |

**Returns**

`Promise`<`any`>

### Variables

#### Solana

> `const` **Solana**: `object`

**Type Declaration**

| Name                                  | Type                                                                                                                                        | Default value                                   |
| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------- |
| `actions`                             | `__module`                                                                                                                                  | `SolanaActions`                                 |
| `constants`                           | `__module`                                                                                                                                  | `SolanaConstants`                               |
| `getters`                             | `__module`                                                                                                                                  | `SolanaGetters`                                 |
| `utils`                               | `object`                                                                                                                                    | `SolanaUtils`                                   |
| `utils.deriveShareMintPda()`          | (`vaultProgramId`) => `PublicKey`                                                                                                           | -                                               |
| `utils.deriveVaultStatePda()`         | (`vaultProgramId`) => `PublicKey`                                                                                                           | -                                               |
| `utils.deriveVaultTokenAtaPda()`      | (`vaultProgramId`, `depositMint`, `vaultVersion?`) => `PublicKey`                                                                           | -                                               |
| `utils.fallbackDecimals`              | `number`                                                                                                                                    | -                                               |
| `utils.fallbackNetwork`               | `ISolanaNetwork`                                                                                                                            | -                                               |
| `utils.fetchUserShareBalance()`       | (`__namedParameters`) => `Promise`<`number`>                                                                                                | -                                               |
| `utils.fetchUserShareBalanceRaw()`    | (`__namedParameters`) => `Promise`<{ `amount`: `string`; `decimals`: `number`; }>                                                           | -                                               |
| `utils.fetchUserTokenBalance()`       | (`__namedParameters`) => `Promise`<`string`>                                                                                                | -                                               |
| `utils.getBestRpcEndpoint()`          | (`__namedParameters`) => `Promise`<`"http://127.0.0.1:8899"` \| `` `https://${string}` ``>                                                  | -                                               |
| `utils.getExplorerLink()`             | (`__namedParameters`) => `string`                                                                                                           | -                                               |
| `utils.getProgram()`                  | (`__namedParameters`) => `Program`<`any`>                                                                                                   | -                                               |
| `utils.getProvider()`                 | (`__namedParameters`) => `AnchorProvider`                                                                                                   | -                                               |
| `utils.getReadOnlyProvider()`         | (`__namedParameters`) => `AnchorProvider`                                                                                                   | -                                               |
| `utils.getToken()`                    | (`__namedParameters`) => `Promise`<{ `address`: `string`; `decimals`: `number`; `image`: `string`; `name`: `string`; `symbol`: `string`; }> | -                                               |
| `utils.getTokenSymbol()`              | (`__namedParameters`) => `Promise`<`string`>                                                                                                | -                                               |
| `utils.getVaultMints()`               | (`__namedParameters`) => `Promise`<{ `depositMint`: `string`; `shareMint`: `string`; `vaultVersion`: `number`; }>                           | -                                               |
| `utils.getVaultState()`               | (`__namedParameters`) => `Promise`<{ `depositMintDecimals`: `number`; `vaultState`: `unknown`; }>                                           | -                                               |
| `utils.getVaultStateReadOnly()`       | (`__namedParameters`) => `Promise`<{ `depositMintDecimals`: `number`; `vaultState`: `ISolanaVaultState`; }>                                 | -                                               |
| `utils.isSolana()`                    | (`signature`) => `boolean`                                                                                                                  | -                                               |
| `utils.isSolanaAddress()`             | (`address`) => `boolean`                                                                                                                    | -                                               |
| `utils.programIds`                    | `object`                                                                                                                                    | -                                               |
| `utils.programIds.devnet`             | `object`                                                                                                                                    | -                                               |
| `utils.programIds.devnet.vault`       | `string`                                                                                                                                    | `'up12bytoZBmwofqsySf2uqKQ7zpfeKiAWwfvqzJjtRt'` |
| `utils.programIds.localnet`           | `object`                                                                                                                                    | -                                               |
| `utils.programIds.localnet.vault`     | `string`                                                                                                                                    | `'up12bytoZBmwofqsySf2uqKQ7zpfeKiAWwfvqzJjtRt'` |
| `utils.programIds.mainnet-beta`       | `object`                                                                                                                                    | -                                               |
| `utils.programIds.mainnet-beta.vault` | `string`                                                                                                                                    | `'up12bytoZBmwofqsySf2uqKQ7zpfeKiAWwfvqzJjtRt'` |
| `utils.resolveProgramId()`            | (`vaultAddress`, `solanaMetadata?`) => `string`                                                                                             | -                                               |


# SuiAdapter

[SDK Reference](/developers/typescript-sdk/api) / SuiAdapter

## SuiAdapter

Sui Adapter for August SDK

### Classes

#### default

Sui Adapter for August SDK

**Example**

To access the Sui adapter instance

```
const sdk = new AugustSDK()
sdk.sui.getEmberVaults()
```

**Constructors**

**Constructor**

> **new default**(`apiBaseUrl`, `chainId`): [`default`](#default)

**Parameters**

| Parameter    | Type     | Default value                     |
| ------------ | -------- | --------------------------------- |
| `apiBaseUrl` | `string` | `SuiConstants.EMBER_API_BASE_URL` |
| `chainId`    | `number` | `SuiConstants.SUI_CHAIN_ID`       |

**Returns**

[`default`](#default)

**Accessors**

**apiBaseUrl**

**Get Signature**

> **get** **apiBaseUrl**(): `string`

**Returns**

`string`

**chainId**

**Get Signature**

> **get** **chainId**(): `number`

**Returns**

`number`

**Methods**

**calculateUtilization()**

> **calculateUtilization**(`current`, `maximum`): `number`

**Parameters**

| Parameter | Type                 |
| --------- | -------------------- |
| `current` | `string` \| `number` |
| `maximum` | `string` \| `number` |

**Returns**

`number`

**convertFromE9()**

> **convertFromE9**(`value`): `number`

**Parameters**

| Parameter | Type                 |
| --------- | -------------------- |
| `value`   | `string` \| `number` |

**Returns**

`number`

**getEmberTVL()**

> **getEmberTVL**(`limit`): `Promise`<`number`>

**Parameters**

| Parameter | Type     | Default value |
| --------- | -------- | ------------- |
| `limit`   | `number` | `1`           |

**Returns**

`Promise`<`number`>

**getEmberVaults()**

> **getEmberVaults**(`options?`): `Promise`<`IEmberVault`\[]>

**Parameters**

| Parameter  | Type                       |
| ---------- | -------------------------- |
| `options?` | `IFetchEmberVaultsOptions` |

**Returns**

`Promise`<`IEmberVault`\[]>

**isSuiAddress()**

> **isSuiAddress**(`address`): `boolean`

**Parameters**

| Parameter | Type     |
| --------- | -------- |
| `address` | `string` |

**Returns**

`boolean`

**isSuiVault()**

> **isSuiVault**(`chainId`): `boolean`

**Parameters**

| Parameter | Type     |
| --------- | -------- |
| `chainId` | `number` |

**Returns**

`boolean`

**transformEmberVaultsToIVaults()**

> **transformEmberVaultsToIVaults**(`emberVaults`): `IVault`\[]

**Parameters**

| Parameter     | Type             |
| ------------- | ---------------- |
| `emberVaults` | `IEmberVault`\[] |

**Returns**

`IVault`\[]

**transformEmberVaultToIVault()**

> **transformEmberVaultToIVault**(`emberVault`): `IVault`

**Parameters**

| Parameter    | Type          |
| ------------ | ------------- |
| `emberVault` | `IEmberVault` |

**Returns**

`IVault`

### Variables

#### Sui

> `const` **Sui**: `object`

**Type Declaration**

| Name                                          | Type                           | Default value  |
| --------------------------------------------- | ------------------------------ | -------------- |
| `constants`                                   | `__module`                     | `SuiConstants` |
| `getters`                                     | `__module`                     | `SuiGetters`   |
| `transformer`                                 | `object`                       | -              |
| `transformer.transformEmberVaultsToIVaults()` | (`emberVaults`) => `IVault`\[] | -              |
| `transformer.transformEmberVaultToIVault()`   | (`emberVault`) => `IVault`     | -              |
| `utils`                                       | `__module`                     | `SuiUtils`     |


# StellarAdapter

[SDK Reference](/developers/typescript-sdk/api) / StellarAdapter

## StellarAdapter

Stellar Adapter for August SDK

Provides Stellar vault operations: deposit, redeem, position queries, and on-chain data fetching via Soroban RPC.

### Classes

#### StellarAdapter

Stellar Adapter for August SDK

**Example**

```
const adapter = new StellarAdapter('testnet');
const xdr = await adapter.vaultDeposit({
  contractId: 'CBGWW5...',
  amount: '1000000',
  senderAddress: 'GDLZ...',
});
// Sign xdr with wallet (e.g. Freighter), then submit via adapter.submitTransaction()
```

**Constructors**

**Constructor**

> **new StellarAdapter**(`network`, `options?`): [`StellarAdapter`](#stellaradapter)

**Parameters**

| Parameter                | Type                            | Default value | Description                                                                                                                                                                                                                                                                                                                      |
| ------------------------ | ------------------------------- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `network`                | `IStellarNetwork`               | `'mainnet'`   | Stellar network to operate on; defaults to `'mainnet'`.                                                                                                                                                                                                                                                                          |
| `options?`               | { `sorobanRpcUrl?`: `string`; } | `undefined`   | Optional adapter configuration. Its `sorobanRpcUrl` field overrides the Soroban RPC endpoint (e.g. a keyed Alchemy URL): it becomes the primary with the SDK's built-in public endpoints kept behind it as failover, and a per-call `sorobanRpcUrl` (on the deposit/redeem params) takes precedence over this adapter-level one. |
| `options.sorobanRpcUrl?` | `string`                        | `undefined`   | -                                                                                                                                                                                                                                                                                                                                |

**Returns**

[`StellarAdapter`](#stellaradapter)

**Accessors**

**network**

**Get Signature**

> **get** **network**(): `IStellarNetwork`

**Returns**

`IStellarNetwork`

**Methods**

**convertToShares()**

> **convertToShares**(`vaultAddress`, `rawAmount`): `Promise`<`string`>

Preview how many vault shares a deposit amount would yield.

**Parameters**

| Parameter      | Type     | Description                                         |
| -------------- | -------- | --------------------------------------------------- |
| `vaultAddress` | `string` | Stellar contract ID (C… address)                    |
| `rawAmount`    | `string` | Deposit amount in the deposit token's smallest unit |

**Returns**

`Promise`<`string`>

Raw share amount as a string, or null if query fails.

**getExplorerLink()**

> **getExplorerLink**(`id`, `type?`): `string`

**Parameters**

| Parameter | Type                                  |
| --------- | ------------------------------------- |
| `id`      | `string`                              |
| `type?`   | `"tx"` \| `"account"` \| `"contract"` |

**Returns**

`string`

**getUserPosition()**

> **getUserPosition**(`vaultAddress`, `walletAddress`): `Promise`<`IStellarUserPosition`>

Get user's vault share balance.

**Parameters**

| Parameter       | Type     |
| --------------- | -------- |
| `vaultAddress`  | `string` |
| `walletAddress` | `string` |

**Returns**

`Promise`<`IStellarUserPosition`>

The position `{ shares, decimals, decimalsFromFallback }`, or null if the balance read fails. When `decimalsFromFallback` is `true` the `decimals()` read failed and `decimals` is the fallback (7) — callers sizing a redeem MUST refuse rather than trust it (see AUGUST-6381).

**isStellarAddress()**

> **isStellarAddress**(`address`): `boolean`

**Parameters**

| Parameter | Type     |
| --------- | -------- |
| `address` | `string` |

**Returns**

`boolean`

**submitTransaction()**

> **submitTransaction**(`signedXdr`): `Promise`<`string`>

Submit a signed Soroban transaction and poll until the network confirms it.

Submits on the network this adapter was constructed with, so `signedXdr` must be signed for that same network.

**Parameters**

| Parameter   | Type     | Description                                   |
| ----------- | -------- | --------------------------------------------- |
| `signedXdr` | `string` | Base64-encoded XDR of the signed transaction. |

**Returns**

`Promise`<`string`>

The transaction hash once the network confirms it as successful.

**Throws**

AugustTimeoutError when the transaction is not confirmed within the poll budget (`MAX_POLL_ATTEMPTS`).

**Throws**

AugustSDKError when the RPC rejects the submission or the transaction confirms as failed. Its `context` carries `{ network, status }` plus, when the result XDR decodes, a `resultCode` string holding the transaction-level reason (e.g. `"txBadSeq"`, `"txTooLate"`); `resultCode` is `undefined` when the code cannot be decoded.

**Example**

```ts
try {
  const hash = await adapter.submitTransaction(signedXdr);
} catch (err) {
  if (err instanceof AugustSDKError && err.context?.resultCode === 'txBadSeq') {
    // stale sequence number — rebuild the transaction and resubmit
  }
}
```

**vaultDeposit()**

> **vaultDeposit**(`params`): `Promise`<`string`>

Build an unsigned deposit transaction for a Stellar vault.

**Parameters**

| Parameter | Type                                         |
| --------- | -------------------------------------------- |
| `params`  | `Omit`<`IStellarDepositParams`, `"network"`> |

**Returns**

`Promise`<`string`>

Base64-encoded XDR of the unsigned transaction.

**vaultRedeem()**

> **vaultRedeem**(`params`): `Promise`<`string`>

Build an unsigned redeem transaction for a Stellar vault.

**Parameters**

| Parameter | Type                                        |
| --------- | ------------------------------------------- |
| `params`  | `Omit`<`IStellarRedeemParams`, `"network"`> |

**Returns**

`Promise`<`string`>

Base64-encoded XDR of the unsigned transaction.

### Variables

#### Stellar

> `const` **Stellar**: `object`

**Type Declaration**

| Name                       | Type                               | Default value      |
| -------------------------- | ---------------------------------- | ------------------ |
| `actions`                  | `__module`                         | `StellarActions`   |
| `constants`                | `__module`                         | `StellarConstants` |
| `getters`                  | `__module`                         | `StellarGetters`   |
| `submit`                   | `__module`                         | `StellarSubmit`    |
| `utils`                    | `object`                           | `StellarUtils`     |
| `utils.assertNotStellar()` | (`address`, `operation`) => `void` | -                  |
| `utils.getExplorerLink()`  | (`__namedParameters`) => `string`  | -                  |
| `utils.isStellarAddress()` | (`address`) => `boolean`           | -                  |

### References

#### default

Renames and re-exports [StellarAdapter](#stellaradapter)


# ABIs

[SDK Reference](/developers/typescript-sdk/api) / ABIs

## ABIs

Contract ABI definitions for interacting with August/Upshift smart contracts.

### Variables

#### ABI\_ADDRESS\_RESOLVER

> `const` **ABI\_ADDRESS\_RESOLVER**: readonly \[{ `inputs`: readonly \[{ `name`: `"name"`; `type`: `"bytes32"`; }]; `name`: `"addr"`; `outputs`: readonly \[{ `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"name"`; `type`: `"bytes32"`; }, { `name`: `"coinType"`; `type`: `"uint256"`; }]; `name`: `"addr"`; `outputs`: readonly \[{ `name`: `""`; `type`: `"bytes"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }]

***

#### ABI\_CHAINLINK\_V3

> `const` **ABI\_CHAINLINK\_V3**: readonly \[{ `inputs`: readonly \[]; `name`: `"decimals"`; `outputs`: readonly \[{ `internalType`: `"uint8"`; `name`: `""`; `type`: `"uint8"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"description"`; `outputs`: readonly \[{ `internalType`: `"string"`; `name`: `""`; `type`: `"string"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint80"`; `name`: `"_roundId"`; `type`: `"uint80"`; }]; `name`: `"getRoundData"`; `outputs`: readonly \[{ `internalType`: `"uint80"`; `name`: `"roundId"`; `type`: `"uint80"`; }, { `internalType`: `"int256"`; `name`: `"answer"`; `type`: `"int256"`; }, { `internalType`: `"uint256"`; `name`: `"startedAt"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"updatedAt"`; `type`: `"uint256"`; }, { `internalType`: `"uint80"`; `name`: `"answeredInRound"`; `type`: `"uint80"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"latestRoundData"`; `outputs`: readonly \[{ `internalType`: `"uint80"`; `name`: `"roundId"`; `type`: `"uint80"`; }, { `internalType`: `"int256"`; `name`: `"answer"`; `type`: `"int256"`; }, { `internalType`: `"uint256"`; `name`: `"startedAt"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"updatedAt"`; `type`: `"uint256"`; }, { `internalType`: `"uint80"`; `name`: `"answeredInRound"`; `type`: `"uint80"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"version"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }]

***

#### ABI\_CROSS\_CHAIN\_ERC20

> `const` **ABI\_CROSS\_CHAIN\_ERC20**: readonly \[{ `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"owner"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"spender"`; `type`: `"address"`; }]; `name`: `"allowance"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"spender"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }]; `name`: `"approve"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }]

ERC20 allowance + approve ABI for cross-chain approval checks

***

#### ABI\_ERC20

> `const` **ABI\_ERC20**: readonly \[{ `constant`: `true`; `inputs`: readonly \[]; `name`: `"name"`; `outputs`: readonly \[{ `name`: `""`; `type`: `"string"`; }]; `payable`: `false`; `stateMutability`: `"view"`; `type`: `"function"`; }, { `constant`: `false`; `inputs`: readonly \[{ `name`: `"_spender"`; `type`: `"address"`; }, { `name`: `"_value"`; `type`: `"uint256"`; }]; `name`: `"approve"`; `outputs`: readonly \[{ `name`: `""`; `type`: `"bool"`; }]; `payable`: `false`; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `constant`: `true`; `inputs`: readonly \[]; `name`: `"totalSupply"`; `outputs`: readonly \[{ `name`: `""`; `type`: `"uint256"`; }]; `payable`: `false`; `stateMutability`: `"view"`; `type`: `"function"`; }, { `constant`: `false`; `inputs`: readonly \[{ `name`: `"_from"`; `type`: `"address"`; }, { `name`: `"_to"`; `type`: `"address"`; }, { `name`: `"_value"`; `type`: `"uint256"`; }]; `name`: `"transferFrom"`; `outputs`: readonly \[{ `name`: `""`; `type`: `"bool"`; }]; `payable`: `false`; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `constant`: `true`; `inputs`: readonly \[]; `name`: `"decimals"`; `outputs`: readonly \[{ `name`: `""`; `type`: `"uint8"`; }]; `payable`: `false`; `stateMutability`: `"view"`; `type`: `"function"`; }, { `constant`: `true`; `inputs`: readonly \[{ `name`: `"_owner"`; `type`: `"address"`; }]; `name`: `"balanceOf"`; `outputs`: readonly \[{ `name`: `"balance"`; `type`: `"uint256"`; }]; `payable`: `false`; `stateMutability`: `"view"`; `type`: `"function"`; }, { `constant`: `true`; `inputs`: readonly \[]; `name`: `"symbol"`; `outputs`: readonly \[{ `name`: `""`; `type`: `"string"`; }]; `payable`: `false`; `stateMutability`: `"view"`; `type`: `"function"`; }, { `constant`: `false`; `inputs`: readonly \[{ `name`: `"_to"`; `type`: `"address"`; }, { `name`: `"_value"`; `type`: `"uint256"`; }]; `name`: `"transfer"`; `outputs`: readonly \[{ `name`: `""`; `type`: `"bool"`; }]; `payable`: `false`; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `constant`: `true`; `inputs`: readonly \[{ `name`: `"_owner"`; `type`: `"address"`; }, { `name`: `"_spender"`; `type`: `"address"`; }]; `name`: `"allowance"`; `outputs`: readonly \[{ `name`: `""`; `type`: `"uint256"`; }]; `payable`: `false`; `stateMutability`: `"view"`; `type`: `"function"`; }, { `payable`: `true`; `stateMutability`: `"payable"`; `type`: `"fallback"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `name`: `"owner"`; `type`: `"address"`; }, { `indexed`: `true`; `name`: `"spender"`; `type`: `"address"`; }, { `indexed`: `false`; `name`: `"value"`; `type`: `"uint256"`; }]; `name`: `"Approval"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `name`: `"from"`; `type`: `"address"`; }, { `indexed`: `true`; `name`: `"to"`; `type`: `"address"`; }, { `indexed`: `false`; `name`: `"value"`; `type`: `"uint256"`; }]; `name`: `"Transfer"`; `type`: `"event"`; }]

***

#### ABI\_ERC20\_BYTES32

> `const` **ABI\_ERC20\_BYTES32**: readonly \[{ `inputs`: readonly \[{ `indexed`: `true`; `name`: `"owner"`; `type`: `"address"`; }, { `indexed`: `true`; `name`: `"spender"`; `type`: `"address"`; }, { `indexed`: `false`; `name`: `"value"`; `type`: `"uint256"`; }]; `name`: `"Approval"`; `type`: `"event"`; }, { `inputs`: readonly \[{ `indexed`: `true`; `name`: `"from"`; `type`: `"address"`; }, { `indexed`: `true`; `name`: `"to"`; `type`: `"address"`; }, { `indexed`: `false`; `name`: `"value"`; `type`: `"uint256"`; }]; `name`: `"Transfer"`; `type`: `"event"`; }, { `inputs`: readonly \[{ `name`: `"owner"`; `type`: `"address"`; }, { `name`: `"spender"`; `type`: `"address"`; }]; `name`: `"allowance"`; `outputs`: readonly \[{ `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"spender"`; `type`: `"address"`; }, { `name`: `"amount"`; `type`: `"uint256"`; }]; `name`: `"approve"`; `outputs`: readonly \[{ `type`: `"bool"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"account"`; `type`: `"address"`; }]; `name`: `"balanceOf"`; `outputs`: readonly \[{ `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"decimals"`; `outputs`: readonly \[{ `type`: `"uint8"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"name"`; `outputs`: readonly \[{ `type`: `"bytes32"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"symbol"`; `outputs`: readonly \[{ `type`: `"bytes32"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"totalSupply"`; `outputs`: readonly \[{ `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"recipient"`; `type`: `"address"`; }, { `name`: `"amount"`; `type`: `"uint256"`; }]; `name`: `"transfer"`; `outputs`: readonly \[{ `type`: `"bool"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"sender"`; `type`: `"address"`; }, { `name`: `"recipient"`; `type`: `"address"`; }, { `name`: `"amount"`; `type`: `"uint256"`; }]; `name`: `"transferFrom"`; `outputs`: readonly \[{ `type`: `"bool"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }]

[bytes32-flavored ERC-20](https://docs.makerdao.com/smart-contract-modules/mkr-module#4.-gotchas-potential-source-of-user-error) for tokens (ie. Maker) that use bytes32 instead of string.

***

#### ABI\_ERC4626

> `const` **ABI\_ERC4626**: readonly \[{ `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `name`: `"owner"`; `type`: `"address"`; }, { `indexed`: `true`; `name`: `"spender"`; `type`: `"address"`; }, { `indexed`: `false`; `name`: `"value"`; `type`: `"uint256"`; }]; `name`: `"Approval"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `name`: `"sender"`; `type`: `"address"`; }, { `indexed`: `true`; `name`: `"receiver"`; `type`: `"address"`; }, { `indexed`: `false`; `name`: `"assets"`; `type`: `"uint256"`; }, { `indexed`: `false`; `name`: `"shares"`; `type`: `"uint256"`; }]; `name`: `"Deposit"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `name`: `"from"`; `type`: `"address"`; }, { `indexed`: `true`; `name`: `"to"`; `type`: `"address"`; }, { `indexed`: `false`; `name`: `"value"`; `type`: `"uint256"`; }]; `name`: `"Transfer"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `name`: `"sender"`; `type`: `"address"`; }, { `indexed`: `true`; `name`: `"receiver"`; `type`: `"address"`; }, { `indexed`: `true`; `name`: `"owner"`; `type`: `"address"`; }, { `indexed`: `false`; `name`: `"assets"`; `type`: `"uint256"`; }, { `indexed`: `false`; `name`: `"shares"`; `type`: `"uint256"`; }]; `name`: `"Withdraw"`; `type`: `"event"`; }, { `inputs`: readonly \[{ `name`: `"owner"`; `type`: `"address"`; }, { `name`: `"spender"`; `type`: `"address"`; }]; `name`: `"allowance"`; `outputs`: readonly \[{ `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"spender"`; `type`: `"address"`; }, { `name`: `"amount"`; `type`: `"uint256"`; }]; `name`: `"approve"`; `outputs`: readonly \[{ `type`: `"bool"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"asset"`; `outputs`: readonly \[{ `name`: `"assetTokenAddress"`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"account"`; `type`: `"address"`; }]; `name`: `"balanceOf"`; `outputs`: readonly \[{ `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"shares"`; `type`: `"uint256"`; }]; `name`: `"convertToAssets"`; `outputs`: readonly \[{ `name`: `"assets"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"assets"`; `type`: `"uint256"`; }]; `name`: `"convertToShares"`; `outputs`: readonly \[{ `name`: `"shares"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"assets"`; `type`: `"uint256"`; }, { `name`: `"receiver"`; `type`: `"address"`; }]; `name`: `"deposit"`; `outputs`: readonly \[{ `name`: `"shares"`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"caller"`; `type`: `"address"`; }]; `name`: `"maxDeposit"`; `outputs`: readonly \[{ `name`: `"maxAssets"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"caller"`; `type`: `"address"`; }]; `name`: `"maxMint"`; `outputs`: readonly \[{ `name`: `"maxShares"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"owner"`; `type`: `"address"`; }]; `name`: `"maxRedeem"`; `outputs`: readonly \[{ `name`: `"maxShares"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"owner"`; `type`: `"address"`; }]; `name`: `"maxWithdraw"`; `outputs`: readonly \[{ `name`: `"maxAssets"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"shares"`; `type`: `"uint256"`; }, { `name`: `"receiver"`; `type`: `"address"`; }]; `name`: `"mint"`; `outputs`: readonly \[{ `name`: `"assets"`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"assets"`; `type`: `"uint256"`; }]; `name`: `"previewDeposit"`; `outputs`: readonly \[{ `name`: `"shares"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"shares"`; `type`: `"uint256"`; }]; `name`: `"previewMint"`; `outputs`: readonly \[{ `name`: `"assets"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"shares"`; `type`: `"uint256"`; }]; `name`: `"previewRedeem"`; `outputs`: readonly \[{ `name`: `"assets"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"assets"`; `type`: `"uint256"`; }]; `name`: `"previewWithdraw"`; `outputs`: readonly \[{ `name`: `"shares"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"shares"`; `type`: `"uint256"`; }, { `name`: `"receiver"`; `type`: `"address"`; }, { `name`: `"owner"`; `type`: `"address"`; }]; `name`: `"redeem"`; `outputs`: readonly \[{ `name`: `"assets"`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"totalAssets"`; `outputs`: readonly \[{ `name`: `"totalManagedAssets"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"totalSupply"`; `outputs`: readonly \[{ `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"to"`; `type`: `"address"`; }, { `name`: `"amount"`; `type`: `"uint256"`; }]; `name`: `"transfer"`; `outputs`: readonly \[{ `type`: `"bool"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"from"`; `type`: `"address"`; }, { `name`: `"to"`; `type`: `"address"`; }, { `name`: `"amount"`; `type`: `"uint256"`; }]; `name`: `"transferFrom"`; `outputs`: readonly \[{ `type`: `"bool"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"assets"`; `type`: `"uint256"`; }, { `name`: `"receiver"`; `type`: `"address"`; }, { `name`: `"owner"`; `type`: `"address"`; }]; `name`: `"withdraw"`; `outputs`: readonly \[{ `name`: `"shares"`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }]

[ERC-4626 Tokenized Vaults Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-4626)

***

#### ABI\_ERC721

> `const` **ABI\_ERC721**: readonly \[{ `inputs`: readonly \[{ `indexed`: `true`; `name`: `"owner"`; `type`: `"address"`; }, { `indexed`: `true`; `name`: `"spender"`; `type`: `"address"`; }, { `indexed`: `true`; `name`: `"tokenId"`; `type`: `"uint256"`; }]; `name`: `"Approval"`; `type`: `"event"`; }, { `inputs`: readonly \[{ `indexed`: `true`; `name`: `"owner"`; `type`: `"address"`; }, { `indexed`: `true`; `name`: `"operator"`; `type`: `"address"`; }, { `indexed`: `false`; `name`: `"approved"`; `type`: `"bool"`; }]; `name`: `"ApprovalForAll"`; `type`: `"event"`; }, { `inputs`: readonly \[{ `indexed`: `true`; `name`: `"from"`; `type`: `"address"`; }, { `indexed`: `true`; `name`: `"to"`; `type`: `"address"`; }, { `indexed`: `true`; `name`: `"tokenId"`; `type`: `"uint256"`; }]; `name`: `"Transfer"`; `type`: `"event"`; }, { `inputs`: readonly \[{ `name`: `"spender"`; `type`: `"address"`; }, { `name`: `"tokenId"`; `type`: `"uint256"`; }]; `name`: `"approve"`; `outputs`: readonly \[]; `stateMutability`: `"payable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"account"`; `type`: `"address"`; }]; `name`: `"balanceOf"`; `outputs`: readonly \[{ `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"tokenId"`; `type`: `"uint256"`; }]; `name`: `"getApproved"`; `outputs`: readonly \[{ `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"owner"`; `type`: `"address"`; }, { `name`: `"operator"`; `type`: `"address"`; }]; `name`: `"isApprovedForAll"`; `outputs`: readonly \[{ `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"name"`; `outputs`: readonly \[{ `type`: `"string"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"tokenId"`; `type`: `"uint256"`; }]; `name`: `"ownerOf"`; `outputs`: readonly \[{ `name`: `"owner"`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"from"`; `type`: `"address"`; }, { `name`: `"to"`; `type`: `"address"`; }, { `name`: `"tokenId"`; `type`: `"uint256"`; }]; `name`: `"safeTransferFrom"`; `outputs`: readonly \[]; `stateMutability`: `"payable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"from"`; `type`: `"address"`; }, { `name`: `"to"`; `type`: `"address"`; }, { `name`: `"id"`; `type`: `"uint256"`; }, { `name`: `"data"`; `type`: `"bytes"`; }]; `name`: `"safeTransferFrom"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"operator"`; `type`: `"address"`; }, { `name`: `"approved"`; `type`: `"bool"`; }]; `name`: `"setApprovalForAll"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"symbol"`; `outputs`: readonly \[{ `type`: `"string"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"index"`; `type`: `"uint256"`; }]; `name`: `"tokenByIndex"`; `outputs`: readonly \[{ `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"owner"`; `type`: `"address"`; }, { `name`: `"index"`; `type`: `"uint256"`; }]; `name`: `"tokenByIndex"`; `outputs`: readonly \[{ `name`: `"tokenId"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"tokenId"`; `type`: `"uint256"`; }]; `name`: `"tokenURI"`; `outputs`: readonly \[{ `type`: `"string"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"totalSupply"`; `outputs`: readonly \[{ `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"sender"`; `type`: `"address"`; }, { `name`: `"recipient"`; `type`: `"address"`; }, { `name`: `"tokeId"`; `type`: `"uint256"`; }]; `name`: `"transferFrom"`; `outputs`: readonly \[]; `stateMutability`: `"payable"`; `type`: `"function"`; }]

[ERC-721 Non-Fungible Token Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-721)

***

#### ABI\_FEE\_ORACLE

> `const` **ABI\_FEE\_ORACLE**: readonly \[{ `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"ownerAddr"`; `type`: `"address"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"constructor"`; }, { `inputs`: readonly \[]; `name`: `"OwnerOnly"`; `type`: `"error"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"previousOwner"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }]; `name`: `"OwnershipTransferred"`; `type`: `"event"`; }, { `inputs`: readonly \[]; `name`: `"FEES_DIVISOR"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }, { `internalType`: `"bytes32"`; `name`: `"categoryId"`; `type`: `"bytes32"`; }, { `internalType`: `"address"`; `name`: `"specificAddr"`; `type`: `"address"`; }]; `name`: `"getContextFeeAmount"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"feePercent"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"feeAmount"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"bytes32"`; `name`: `"categoryId"`; `type`: `"bytes32"`; }, { `internalType`: `"address"`; `name`: `"specificAddr"`; `type`: `"address"`; }]; `name`: `"getContextFeeRate"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"owner"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"feePercent"`; `type`: `"uint256"`; }, { `internalType`: `"bytes32"`; `name`: `"categoryId"`; `type`: `"bytes32"`; }, { `internalType`: `"address"`; `name`: `"specificAddr"`; `type`: `"address"`; }]; `name`: `"setContextFeeRate"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }]; `name`: `"transferOwnership"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }]

***

#### ABI\_LENDING\_POOL\_V2

> `const` **ABI\_LENDING\_POOL\_V2**: readonly \[{ `inputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"constructor"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"owner"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"spender"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"value"`; `type`: `"uint256"`; }]; `name`: `"Approval"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"sender"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"owner"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `name`: `"Deposit"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"bool"`; `name`: `"bDepositsPaused"`; `type`: `"bool"`; }, { `indexed`: `false`; `internalType`: `"bool"`; `name`: `"bWithdrawalsPaused"`; `type`: `"bool"`; }]; `name`: `"DepositWithdrawalStatusChanged"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"address"`; `name`: `"newFeeCollectorAddr"`; `type`: `"address"`; }]; `name`: `"FeeCollectorUpdated"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint8"`; `name`: `"version"`; `type`: `"uint8"`; }]; `name`: `"Initialized"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"address"`; `name`: `"loanAddr"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"aprWithTwoDecimals"`; `type`: `"uint256"`; }]; `name`: `"NewLoanDeployedByPool"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"withdrawalAmount"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"address"`; `name`: `"tokenAddr"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"address"`; `name`: `"destinationAddr"`; `type`: `"address"`; }]; `name`: `"OnEmergencyWithdraw"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"prevValue"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"newValue"`; `type`: `"uint256"`; }]; `name`: `"OnMaxSupplyChanged"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"previousOwner"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }]; `name`: `"OwnershipTransferred"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"from"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"to"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"value"`; `type`: `"uint256"`; }]; `name`: `"Transfer"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"sender"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"receiver"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"owner"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `name`: `"Withdraw"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"assetsAmount"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"processedOn"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"requestedOn"`; `type`: `"uint256"`; }]; `name`: `"WithdrawalProcessed"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"address"`; `name`: `"ownerAddr"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"fee"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }]; `name`: `"WithdrawalRequested"`; `type`: `"event"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"ownerAddr"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"spenderAddr"`; `type`: `"address"`; }]; `name`: `"allowance"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"spender"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"value"`; `type`: `"uint256"`; }]; `name`: `"approve"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"asset"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"addr"`; `type`: `"address"`; }]; `name`: `"balanceOf"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"loanAddr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"callbackPeriodInSeconds"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"gracePeriodInSeconds"`; `type`: `"uint256"`; }]; `name`: `"callLoan"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"loanAddr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"lateInterestFeeWithTwoDecimals"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"latePrincipalFeeWithTwoDecimals"`; `type`: `"uint256"`; }]; `name`: `"changeLateFees"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"loanAddr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"maintenanceCollateralRatioWith2Decimals"`; `type`: `"uint256"`; }]; `name`: `"changeMaintenanceCollateralRatio"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"claim"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"collectFees"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newLagDuration"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"newMaxDepositAmount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"newMaxWithdrawalAmount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"newMaxTokenSupply"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"newUnderlyingAsset"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"newLoansOperator"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"newLoansDeployerAddress"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"newFeesCollectorAddr"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"newScheduledCallerAddress"`; `type`: `"address"`; }, { `internalType`: `"uint8"`; `name`: `"newProcessingHour"`; `type`: `"uint8"`; }]; `name`: `"configurePool"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `name`: `"convertToAssets"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }]; `name`: `"convertToShares"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"decimals"`; `outputs`: readonly \[{ `internalType`: `"uint8"`; `name`: `""`; `type`: `"uint8"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `components`: readonly \[{ `internalType`: `"uint256"`; `name`: `"fundingPeriodInSeconds"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"newPaymentIntervalInSeconds"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"newLoanAmountInPrincipalTokens"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"originationFeePercent2Decimals"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"newAprWithTwoDecimals"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"initialCollateralRatioWith2Decimals"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"maintenanceCollateralRatioWith2Decimals"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"lateInterestFee"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"latePrincipalFee"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"expiryInfo"`; `type`: `"uint256"`; }, { `internalType`: `"string"`; `name`: `"loanTypeInfo"`; `type`: `"string"`; }, { `internalType`: `"address"`; `name`: `"lenderAddr"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"borrowerAddr"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"newCollateralToken"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"newPrincipalToken"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"feesManagerAddr"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"priceOracleAddress"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"feesCollectorAddress"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"categoryFeesAdress"`; `type`: `"address"`; }, { `internalType`: `"bool"`; `name`: `"allowSeizeCollateral"`; `type`: `"bool"`; }]; `internalType`: `"struct LoanDeploymentParams"`; `name`: `"loanParams"`; `type`: `"tuple"`; }]; `name`: `"deployLoan"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiver"`; `type`: `"address"`; }]; `name`: `"deposit"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"depositsPaused"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"contract IERC20"`; `name`: `"token"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"destinationAddr"`; `type`: `"address"`; }]; `name`: `"emergencyWithdraw"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"feesCollector"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"loanAddr"`; `type`: `"address"`; }]; `name`: `"fundLoan"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"getBurnableAmountByReceiver"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"getClaimableAmountByReceiver"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getInitializedVersion"`; `outputs`: readonly \[{ `internalType`: `"uint8"`; `name`: `""`; `type`: `"uint8"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }]; `name`: `"getRequirementByDate"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }]; `name`: `"getScheduledTransactionsByDate"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"totalTransactions"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"executionEpoch"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getTotalLoansDeployed"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getWithdrawalEpoch"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"claimableEpoch"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"globalLiabilityShares"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"globalLoansAmount"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }, { `internalType`: `"uint8"`; `name`: `"erc20Decimals"`; `type`: `"uint8"`; }, { `internalType`: `"string"`; `name`: `"erc20Symbol"`; `type`: `"string"`; }, { `internalType`: `"string"`; `name`: `"erc20Name"`; `type`: `"string"`; }]; `name`: `"initialize"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"lagDuration"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"loanAddr"`; `type`: `"address"`; }]; `name`: `"liquidate"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"liquidationHour"`; `outputs`: readonly \[{ `internalType`: `"uint8"`; `name`: `""`; `type`: `"uint8"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `name`: `"loansDeployed"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"loansDeployerAddress"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"loansOperator"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"operator"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `name`: `"maxDeposit"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"maxDepositAmount"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `name`: `"maxMint"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"holderAddr"`; `type`: `"address"`; }]; `name`: `"maxRedeem"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"maxSupply"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"holderAddr"`; `type`: `"address"`; }]; `name`: `"maxWithdraw"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"maxWithdrawalAmount"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiver"`; `type`: `"address"`; }]; `name`: `"mint"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"name"`; `outputs`: readonly \[{ `internalType`: `"string"`; `name`: `""`; `type`: `"string"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"notifyLoanClosed"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"notifyLoanMatured"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"effectiveLoanAmount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"principalRepaid"`; `type`: `"uint256"`; }]; `name`: `"notifyPrincipalRepayment"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"owner"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"bool"`; `name`: `"bPauseDeposits"`; `type`: `"bool"`; }, { `internalType`: `"bool"`; `name`: `"bPauseWithdrawals"`; `type`: `"bool"`; }]; `name`: `"pauseDepositsAndWithdrawals"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }]; `name`: `"previewDeposit"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `name`: `"previewMint"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `name`: `"previewRedeem"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }]; `name`: `"previewWithdraw"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"maxLimit"`; `type`: `"uint256"`; }]; `name`: `"processAllClaimsByDate"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"loanAddr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"newAprWithTwoDecimals"`; `type`: `"uint256"`; }]; `name`: `"proposeNewApr"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `name`: `"redeem"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"pure"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"holderAddr"`; `type`: `"address"`; }]; `name`: `"requestRedeem"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"claimableEpoch"`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"scheduledCallerAddress"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"symbol"`; `outputs`: readonly \[{ `internalType`: `"string"`; `name`: `""`; `type`: `"string"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"totalAssets"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"totalCollectableFees"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"totalSupply"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"to"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"value"`; `type`: `"uint256"`; }]; `name`: `"transfer"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"from"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"to"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"value"`; `type`: `"uint256"`; }]; `name`: `"transferFrom"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }]; `name`: `"transferOwnership"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"newFeeCollectorAddr"`; `type`: `"address"`; }]; `name`: `"updateFeeCollector"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newMaxDepositAmount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"newMaxWithdrawalAmount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"newMaxTokenSupply"`; `type`: `"uint256"`; }]; `name`: `"updateIssuanceLimits"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newDuration"`; `type`: `"uint256"`; }]; `name`: `"updateTimelockDuration"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newWithdrawalFee"`; `type`: `"uint256"`; }]; `name`: `"updateWithdrawalFee"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `name`: `"withdraw"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"pure"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"withdrawalFee"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"withdrawalsPaused"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }]

***

#### ABI\_LENDING\_POOL\_V3

> `const` **ABI\_LENDING\_POOL\_V3**: readonly \[{ `inputs`: readonly \[]; `name`: `"AccountNotWhitelisted"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"AddressBlacklisted"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"AmountExceedsAllowance"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"AmountExceedsSenderBalance"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"AmountTooLow"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"AssetsAmountRequired"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"BalanceCheckFailed"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"BurnAmountExceedsBalance"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"CannotBlacklistOwner"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"CollectorRequired"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"DepositLimitReached"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"DepositsPaused"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InsufficientAllowance"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InsufficientBalance"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InsufficientShares"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidAddress"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidDepositLimit"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidExternalAssets"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidHolder"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidMaxSupply"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidOwner"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidPercentage"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidReceiver"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidTimestamp"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidWithdrawalLimit"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"LimitRequired"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"MaxAllowedChangeReached"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"MaxMintReached"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"MaxSupplyLimitReached"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"NoSharesForReceiver"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"NonZeroAddressRequired"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"NonZeroAmountRequired"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"NothingToProcess"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"OperatorOnly"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"OwnerOnly"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"PoolAlreadyConfigured"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"PoolNotConfigured"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"PoolOwnerRequired"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"ReentrantCall"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"SettlementAccountNotSet"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"SharesAmountRequired"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"TooEarly"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"TotalAssetsError"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"WithdrawalLimitReached"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"WithdrawalRequestRequired"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"WithdrawalsPaused"`; `type`: `"error"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"owner"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"spender"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"value"`; `type`: `"uint256"`; }]; `name`: `"Approval"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"sender"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"owner"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `name`: `"Deposit"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"bool"`; `name`: `"bDepositsPaused"`; `type`: `"bool"`; }, { `indexed`: `false`; `internalType`: `"bool"`; `name`: `"bWithdrawalsPaused"`; `type`: `"bool"`; }]; `name`: `"DepositWithdrawalStatusChanged"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"address"`; `name`: `"newFeeCollectorAddr"`; `type`: `"address"`; }]; `name`: `"FeeCollectorUpdated"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }]; `name`: `"FeesCollected"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint8"`; `name`: `"version"`; `type`: `"uint8"`; }]; `name`: `"Initialized"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"managementFeeAmount"`; `type`: `"uint256"`; }]; `name`: `"ManagementFeeCharged"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"newManagementFeePercent"`; `type`: `"uint256"`; }]; `name`: `"ManagementFeeUpdated"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"newValue"`; `type`: `"uint256"`; }]; `name`: `"MaxChangePercentUpdated"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[]; `name`: `"OnAccountConfigured"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"withdrawalAmount"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"address"`; `name`: `"tokenAddr"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"address"`; `name`: `"destinationAddr"`; `type`: `"address"`; }]; `name`: `"OnEmergencyWithdraw"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"prevValue"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"newValue"`; `type`: `"uint256"`; }]; `name`: `"OnMaxSupplyChanged"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"address"`; `name`: `"newAddr"`; `type`: `"address"`; }]; `name`: `"OperatorUpdated"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"previousOwner"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }]; `name`: `"OwnershipTransferred"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"from"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"to"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"value"`; `type`: `"uint256"`; }]; `name`: `"Transfer"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"sender"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"receiver"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"owner"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `name`: `"Withdraw"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"assetsAmount"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"processedOn"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"requestedOn"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"bool"`; `name`: `"wasBlacklisted"`; `type`: `"bool"`; }]; `name`: `"WithdrawalProcessed"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"address"`; `name`: `"ownerAddr"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"fee"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }]; `name`: `"WithdrawalRequested"`; `type`: `"event"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"addr"`; `type`: `"address"`; }]; `name`: `"addToBlacklist"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address[]"`; `name`: `"arr"`; `type`: `"address[]"`; }]; `name`: `"addWhitelistedSubaccount"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"ownerAddr"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"spenderAddr"`; `type`: `"address"`; }]; `name`: `"allowance"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"spender"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"value"`; `type`: `"uint256"`; }]; `name`: `"approve"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"asset"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"assetsUpdatedOn"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"addr"`; `type`: `"address"`; }]; `name`: `"balanceOf"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"chargeManagementFee"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"claim"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"collectFees"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newLagDuration"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"newMaxDepositAmount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"newMaxWithdrawalAmount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"newMaxTokenSupply"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"newManagementFeePercent"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"newMaxChangePercent"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"newUnderlyingAsset"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"newFeesCollectorAddr"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"newScheduledCallerAddress"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"newOperatorAddress"`; `type`: `"address"`; }]; `name`: `"configure"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `name`: `"convertToAssets"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }]; `name`: `"convertToShares"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"decimals"`; `outputs`: readonly \[{ `internalType`: `"uint8"`; `name`: `""`; `type`: `"uint8"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiver"`; `type`: `"address"`; }]; `name`: `"deposit"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"subAccountAddr"`; `type`: `"address"`; }]; `name`: `"depositToSubaccount"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"depositsPaused"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"contract IERC20"`; `name`: `"token"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"destinationAddr"`; `type`: `"address"`; }]; `name`: `"emergencyWithdraw"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"externalAssets"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"feesCollector"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"feesTimestamp"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"getBurnableAmountByReceiver"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"externalAssetsAmount"`; `type`: `"uint256"`; }]; `name`: `"getChangePercentage"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"getClaimableAmountByReceiver"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getInitializedVersion"`; `outputs`: readonly \[{ `internalType`: `"uint8"`; `name`: `""`; `type`: `"uint8"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getMaxAllowedChange"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }]; `name`: `"getRequirementByDate"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }]; `name`: `"getScheduledTransactionsByDate"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"totalTransactions"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"executionEpoch"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getWithdrawalEpoch"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"claimableEpoch"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"globalLiabilityAssets"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"globalLiabilityShares"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }, { `internalType`: `"uint8"`; `name`: `"erc20Decimals"`; `type`: `"uint8"`; }, { `internalType`: `"string"`; `name`: `"erc20Symbol"`; `type`: `"string"`; }, { `internalType`: `"string"`; `name`: `"erc20Name"`; `type`: `"string"`; }]; `name`: `"initialize"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"holderAddr"`; `type`: `"address"`; }]; `name`: `"instantRedeem"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"instantRedemptionFee"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `name`: `"isBlacklisted"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"lagDuration"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"managementFeePercent"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"maxChangePercent"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `name`: `"maxDeposit"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"maxDepositAmount"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `name`: `"maxMint"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"holderAddr"`; `type`: `"address"`; }]; `name`: `"maxRedeem"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"maxSupply"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"holderAddr"`; `type`: `"address"`; }]; `name`: `"maxWithdraw"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"maxWithdrawalAmount"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiver"`; `type`: `"address"`; }]; `name`: `"mint"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"name"`; `outputs`: readonly \[{ `internalType`: `"string"`; `name`: `""`; `type`: `"string"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"operator"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"owner"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"bool"`; `name`: `"bPauseDeposits"`; `type`: `"bool"`; }, { `internalType`: `"bool"`; `name`: `"bPauseWithdrawals"`; `type`: `"bool"`; }]; `name`: `"pauseDepositsAndWithdrawals"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }]; `name`: `"previewDeposit"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `name`: `"previewInstantRedemption"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `name`: `"previewMint"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `name`: `"previewRedeem"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }]; `name`: `"previewWithdraw"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"maxLimit"`; `type`: `"uint256"`; }]; `name`: `"processAllClaimsByDate"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `name`: `"redeem"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"pure"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"addr"`; `type`: `"address"`; }]; `name`: `"removeFromBlacklist"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address[]"`; `name`: `"arr"`; `type`: `"address[]"`; }]; `name`: `"removeWhitelistedSubaccount"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"holderAddr"`; `type`: `"address"`; }]; `name`: `"requestRedeem"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"claimableEpoch"`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"scheduledCallerAddress"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"settlementAccount"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"symbol"`; `outputs`: readonly \[{ `internalType`: `"string"`; `name`: `""`; `type`: `"string"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"totalAssets"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"totalCollectableFees"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"totalSupply"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"totalWhitelistedSubAccounts"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"to"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"value"`; `type`: `"uint256"`; }]; `name`: `"transfer"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"from"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"to"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"value"`; `type`: `"uint256"`; }]; `name`: `"transferFrom"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }]; `name`: `"transferOwnership"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"newFeeCollectorAddr"`; `type`: `"address"`; }]; `name`: `"updateFeeCollector"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newFee"`; `type`: `"uint256"`; }]; `name`: `"updateInstantRedemptionFee"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newMaxDepositAmount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"newMaxWithdrawalAmount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"newMaxTokenSupply"`; `type`: `"uint256"`; }]; `name`: `"updateIssuanceLimits"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newManagementFeePercent"`; `type`: `"uint256"`; }]; `name`: `"updateManagementFee"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newValue"`; `type`: `"uint256"`; }]; `name`: `"updateMaxChangePercent"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"addr"`; `type`: `"address"`; }]; `name`: `"updateOperator"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"addr"`; `type`: `"address"`; }]; `name`: `"updateSettlementAccount"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newDuration"`; `type`: `"uint256"`; }]; `name`: `"updateTimelockDuration"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"externalAssetsAmount"`; `type`: `"uint256"`; }]; `name`: `"updateTotalAssets"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newWithdrawalFee"`; `type`: `"uint256"`; }]; `name`: `"updateWithdrawalFee"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `name`: `"whitelistedSubAccounts"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `name`: `"withdraw"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"pure"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"subAccountAddr"`; `type`: `"address"`; }]; `name`: `"withdrawFromSubaccount"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"withdrawalFee"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"withdrawalsPaused"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }]

***

#### ABI\_LENDING\_POOLS

> `const` **ABI\_LENDING\_POOLS**: readonly \[{ `inputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"constructor"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"owner"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"spender"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"value"`; `type`: `"uint256"`; }]; `name`: `"Approval"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"sender"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"owner"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `name`: `"Deposit"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"bool"`; `name`: `"bDepositsPaused"`; `type`: `"bool"`; }, { `indexed`: `false`; `internalType`: `"bool"`; `name`: `"bWithdrawalsPaused"`; `type`: `"bool"`; }]; `name`: `"DepositWithdrawalStatusChanged"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint8"`; `name`: `"version"`; `type`: `"uint8"`; }]; `name`: `"Initialized"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"address"`; `name`: `"loanAddr"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"aprWithTwoDecimals"`; `type`: `"uint256"`; }]; `name`: `"NewLoanDeployedByPool"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"withdrawalAmount"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"address"`; `name`: `"tokenAddr"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"address"`; `name`: `"destinationAddr"`; `type`: `"address"`; }]; `name`: `"OnEmergencyWithdraw"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"prevValue"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"newValue"`; `type`: `"uint256"`; }]; `name`: `"OnMaxSupplyChanged"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"previousOwner"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }]; `name`: `"OwnershipTransferred"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"from"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"to"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"value"`; `type`: `"uint256"`; }]; `name`: `"Transfer"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"sender"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"receiver"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"owner"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `name`: `"Withdraw"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"assetsAmount"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"processedOn"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"requestedOn"`; `type`: `"uint256"`; }]; `name`: `"WithdrawalProcessed"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"address"`; `name`: `"ownerAddr"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"fee"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }]; `name`: `"WithdrawalRequested"`; `type`: `"event"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"ownerAddr"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"spenderAddr"`; `type`: `"address"`; }]; `name`: `"allowance"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"spender"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"value"`; `type`: `"uint256"`; }]; `name`: `"approve"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"asset"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"addr"`; `type`: `"address"`; }]; `name`: `"balanceOf"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"loanAddr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"callbackPeriodInHours"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"gracePeriodInHours"`; `type`: `"uint256"`; }]; `name`: `"callLoan"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"loanAddr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"lateInterestFeeWithTwoDecimals"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"latePrincipalFeeWithTwoDecimals"`; `type`: `"uint256"`; }]; `name`: `"changeLateFees"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"loanAddr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"maintenanceCollateralRatioWith2Decimals"`; `type`: `"uint256"`; }]; `name`: `"changeMaintenanceCollateralRatio"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"claim"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"collectFees"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newLagDuration"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"newMaxDepositAmount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"newMaxWithdrawalAmount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"newMaxTokenSupply"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"newUnderlyingAsset"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"newLoansOperator"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"newLoansDeployerAddress"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"newFeesCollectorAddr"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"newScheduledCallerAddress"`; `type`: `"address"`; }, { `internalType`: `"uint8"`; `name`: `"newProcessingHour"`; `type`: `"uint8"`; }]; `name`: `"configurePool"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `name`: `"convertToAssets"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }]; `name`: `"convertToShares"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"decimals"`; `outputs`: readonly \[{ `internalType`: `"uint8"`; `name`: `""`; `type`: `"uint8"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `components`: readonly \[{ `internalType`: `"uint256"`; `name`: `"fundingPeriodInSeconds"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"newPaymentIntervalInSeconds"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"newLoanAmountInPrincipalTokens"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"originationFeePercent2Decimals"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"newAprWithTwoDecimals"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"initialCollateralRatioWith2Decimals"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"maintenanceCollateralRatioWith2Decimals"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"lateInterestFee"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"latePrincipalFee"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"expiryInfo"`; `type`: `"uint256"`; }, { `internalType`: `"string"`; `name`: `"loanTypeInfo"`; `type`: `"string"`; }, { `internalType`: `"address"`; `name`: `"lenderAddr"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"borrowerAddr"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"newCollateralToken"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"newPrincipalToken"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"feesManagerAddr"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"priceOracleAddress"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"feesCollectorAddress"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"categoryFeesAdress"`; `type`: `"address"`; }, { `internalType`: `"bool"`; `name`: `"allowSeizeCollateral"`; `type`: `"bool"`; }]; `internalType`: `"struct LoanDeploymentParams"`; `name`: `"loanParams"`; `type`: `"tuple"`; }]; `name`: `"deployLoan"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiver"`; `type`: `"address"`; }]; `name`: `"deposit"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"depositsPaused"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"contract IERC20"`; `name`: `"token"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"destinationAddr"`; `type`: `"address"`; }]; `name`: `"emergencyWithdraw"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"feesCollector"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"loanAddr"`; `type`: `"address"`; }]; `name`: `"fundLoan"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"getBurnableAmountByReceiver"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"getClaimableAmountByReceiver"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getInitializedVersion"`; `outputs`: readonly \[{ `internalType`: `"uint8"`; `name`: `""`; `type`: `"uint8"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }]; `name`: `"getRequirementByDate"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }]; `name`: `"getScheduledTransactionsByDate"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"totalTransactions"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"executionEpoch"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getTotalLoansDeployed"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getWithdrawalEpoch"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"claimableEpoch"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"globalLiabilityShares"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"globalLoansAmount"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }, { `internalType`: `"uint8"`; `name`: `"erc20Decimals"`; `type`: `"uint8"`; }, { `internalType`: `"string"`; `name`: `"erc20Symbol"`; `type`: `"string"`; }, { `internalType`: `"string"`; `name`: `"erc20Name"`; `type`: `"string"`; }]; `name`: `"initialize"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"lagDuration"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"loanAddr"`; `type`: `"address"`; }]; `name`: `"liquidate"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"liquidationHour"`; `outputs`: readonly \[{ `internalType`: `"uint8"`; `name`: `""`; `type`: `"uint8"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `name`: `"loansDeployed"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"loansDeployerAddress"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"loansOperator"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"operator"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `name`: `"maxDeposit"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"maxDepositAmount"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `name`: `"maxMint"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"holderAddr"`; `type`: `"address"`; }]; `name`: `"maxRedeem"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"maxSupply"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"holderAddr"`; `type`: `"address"`; }]; `name`: `"maxWithdraw"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"maxWithdrawalAmount"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiver"`; `type`: `"address"`; }]; `name`: `"mint"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"name"`; `outputs`: readonly \[{ `internalType`: `"string"`; `name`: `""`; `type`: `"string"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"notifyLoanClosed"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"notifyLoanMatured"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"effectiveLoanAmount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"principalRepaid"`; `type`: `"uint256"`; }]; `name`: `"notifyPrincipalRepayment"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"owner"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"bool"`; `name`: `"bPauseDeposits"`; `type`: `"bool"`; }, { `internalType`: `"bool"`; `name`: `"bPauseWithdrawals"`; `type`: `"bool"`; }]; `name`: `"pauseDepositsAndWithdrawals"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }]; `name`: `"previewDeposit"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `name`: `"previewMint"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `name`: `"previewRedeem"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }]; `name`: `"previewWithdraw"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"maxLimit"`; `type`: `"uint256"`; }]; `name`: `"processAllClaimsByDate"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"loanAddr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"newAprWithTwoDecimals"`; `type`: `"uint256"`; }]; `name`: `"proposeNewApr"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `name`: `"redeem"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"pure"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"holderAddr"`; `type`: `"address"`; }]; `name`: `"requestRedeem"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"claimableEpoch"`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"scheduledCallerAddress"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"symbol"`; `outputs`: readonly \[{ `internalType`: `"string"`; `name`: `""`; `type`: `"string"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"totalAssets"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"totalCollectableFees"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"totalSupply"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"to"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"value"`; `type`: `"uint256"`; }]; `name`: `"transfer"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"from"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"to"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"value"`; `type`: `"uint256"`; }]; `name`: `"transferFrom"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }]; `name`: `"transferOwnership"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newMaxDepositAmount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"newMaxWithdrawalAmount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"newMaxTokenSupply"`; `type`: `"uint256"`; }]; `name`: `"updateIssuanceLimits"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newDuration"`; `type`: `"uint256"`; }]; `name`: `"updateTimelockDuration"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newWithdrawalFee"`; `type`: `"uint256"`; }]; `name`: `"updateWithdrawalFee"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `name`: `"withdraw"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"pure"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"withdrawalFee"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"withdrawalsPaused"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }]

***

#### ABI\_LOAN

> `const` **ABI\_LOAN**: readonly \[{ `inputs`: readonly \[]; `name`: `"LIQUIDATE_LOAN_COLLATERAL_CATEGORY"`; `outputs`: readonly \[{ `internalType`: `"bytes32"`; `name`: `""`; `type`: `"bytes32"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"REPAY_INTERESTS_CATEGORY"`; `outputs`: readonly \[{ `internalType`: `"bytes32"`; `name`: `""`; `type`: `"bytes32"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"acceptApr"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"aprUpdatedOn"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"borrower"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"borrowerCommitment"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"callbackPeriodInSeconds"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"gracePeriodInSeconds"`; `type`: `"uint256"`; }]; `name`: `"callLoan"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"callbackDeadline"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"canSeizeCollateral"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"lateInterestFeeWithTwoDecimals"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"latePrincipalFeeWithTwoDecimals"`; `type`: `"uint256"`; }]; `name`: `"changeLateFees"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newRatioWith2Decimals"`; `type`: `"uint256"`; }]; `name`: `"changeMaintenanceCollateralRatio"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"newOracleAddr"`; `type`: `"address"`; }]; `name`: `"changeOracle"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"claimCollateral"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"collateralAmountSeized"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"collateralToken"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"currentApr"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"cycleInterestsRepaid"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"deployedBy"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"effectiveLoanAmount"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"expiryInfo"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"feesCollector"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"feesOracle"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"principalPrice"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"principalQty"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"collateralPrice"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"collateralDecimals"`; `type`: `"uint256"`; }]; `name`: `"fromTokenToToken"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"pure"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"fundLoan"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"fundedOn"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"fundingDeadline"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"fundingPeriod"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getCollateralRequirements"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"initialCollateralAmount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"maintenanceCollateralAmount"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getDebt"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"currentBillingCycle"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"cyclesSinceLastAprUpdate"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"interestOwed"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"applicableLateFee"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"minPaymentAmount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"maxPaymentAmount"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getNextPaymentDate"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"paymentAmount"`; `type`: `"uint256"`; }]; `name`: `"getUpcomingAmountAfterFees"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"upcomingPaymentAmountAfterFees"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"upcomingNetDebtAfterFees"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"initialCollateralRatio"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"lateInterestFee"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"latePrincipalFee"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"lender"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"liquidate"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"loanAmountInPrincipalTokens"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"loanState"`; `outputs`: readonly \[{ `internalType`: `"uint8"`; `name`: `""`; `type`: `"uint8"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"loanTypeInfo"`; `outputs`: readonly \[{ `internalType`: `"string"`; `name`: `""`; `type`: `"string"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"maintenanceCollateralRatio"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"manager"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"minInterestAmount"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"paymentIntervalInSeconds"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"priceOracle"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"principalAmount"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"principalRepaid"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"principalToken"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newAprWithTwoDecimals"`; `type`: `"uint256"`; }]; `name`: `"proposeNewApr"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"proposedApr"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"paymentAmount"`; `type`: `"uint256"`; }]; `name`: `"repay"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"repayInterests"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"paymentAmountInTokens"`; `type`: `"uint256"`; }]; `name`: `"repayPrincipal"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"depositAmount"`; `type`: `"uint256"`; }]; `name`: `"returnCollateral"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }]; `name`: `"seizeCollateral"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"newFeesCollector"`; `type`: `"address"`; }]; `name`: `"setFeesCollector"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"newFeesOracle"`; `type`: `"address"`; }]; `name`: `"setFeesOracle"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"totalInterestPaymentFees"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"totalInterestRepaid"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newExpiryInfo"`; `type`: `"uint256"`; }, { `internalType`: `"string"`; `name`: `"newLoanTypeInfo"`; `type`: `"string"`; }]; `name`: `"updateInfo"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"oldApr"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"newApr"`; `type`: `"uint256"`; }]; `name`: `"OnAprAcceptedByBorrower"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[]; `name`: `"OnBorrowerCommitment"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"numberOfTokens"`; `type`: `"uint256"`; }]; `name`: `"OnBorrowerWithdrawal"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }]; `name`: `"OnCollateralCaptured"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"collateralClaimed"`; `type`: `"uint256"`; }]; `name`: `"OnCollateralClaimed"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"prevValue"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"newValue"`; `type`: `"uint256"`; }]; `name`: `"OnCollateralRatioChanged"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"depositAmount"`; `type`: `"uint256"`; }]; `name`: `"OnCollateralRedeposited"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"feePercent"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"feeAmount"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"address"`; `name`: `"from"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"address"`; `name`: `"to"`; `type`: `"address"`; }]; `name`: `"OnFeeProcessed"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"paymentAmountTokens"`; `type`: `"uint256"`; }]; `name`: `"OnInterestsRepayment"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"prevLateInterestFee"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"newLateInterestFee"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"prevLatePrincipalFee"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"newLatePrincipalFee"`; `type`: `"uint256"`; }]; `name`: `"OnLateFeesChanged"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"callbackPeriodInHours"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"gracePeriodInHours"`; `type`: `"uint256"`; }]; `name`: `"OnLoanCalled"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[]; `name`: `"OnLoanClosed"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }]; `name`: `"OnLoanFunded"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[]; `name`: `"OnLoanMatured"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"oldApr"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"newApr"`; `type`: `"uint256"`; }]; `name`: `"OnNewAprProposed"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"address"`; `name`: `"prevAddress"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"address"`; `name`: `"newAddress"`; `type`: `"address"`; }]; `name`: `"OnPriceOracleChanged"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"paymentAmountTokens"`; `type`: `"uint256"`; }]; `name`: `"OnPrincipalRepayment"`; `type`: `"event"`; }]

***

#### ABI\_MULTI\_ASSET\_NATIVE\_DEPOSIT\_WRAPPER

> `const` **ABI\_MULTI\_ASSET\_NATIVE\_DEPOSIT\_WRAPPER**: readonly \[{ `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"ownerAddr"`; `type`: `"address"`; }, { `internalType`: `"contract IWETH"`; `name`: `"_wrappedToken"`; `type`: `"address"`; }, { `internalType`: `"contract IOraclizedMultiAssetVault"`; `name`: `"_vault"`; `type`: `"address"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"constructor"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"receiver"`; `type`: `"address"`; }]; `name`: `"depositNative"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `stateMutability`: `"payable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"depositNative"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `stateMutability`: `"payable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"owner"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }]; `name`: `"transferOwnership"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"vault"`; `outputs`: readonly \[{ `internalType`: `"contract IOraclizedMultiAssetVault"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"wrappedToken"`; `outputs`: readonly \[{ `internalType`: `"contract IWETH"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"caller"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"receiver"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"amountInNative"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"sharesOut"`; `type`: `"uint256"`; }]; `name`: `"DepositNative"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"previousOwner"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }]; `name`: `"OwnershipTransferred"`; `type`: `"event"`; }, { `inputs`: readonly \[]; `name`: `"OwnerAddressRequired"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"OwnerOnly"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"ReentrancyGuardReentrantCall"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"ZeroAmount"`; `type`: `"error"`; }]

***

#### ABI\_MULTI\_ASSET\_PREVIEW\_DEPOSIT

> `const` **ABI\_MULTI\_ASSET\_PREVIEW\_DEPOSIT**: readonly \[{ `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"assetIn"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"amountIn"`; `type`: `"uint256"`; }]; `name`: `"previewDeposit"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }]

Multi-asset vault previewDeposit ABI. Uses `previewDeposit(address, uint256)` instead of standard ERC4626's `previewDeposit(uint256)` to specify which asset is being deposited.

***

#### ABI\_MULTI\_ASSET\_PREVIEW\_REDEEM

> `const` **ABI\_MULTI\_ASSET\_PREVIEW\_REDEEM**: readonly \[{ `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }, { `internalType`: `"bool"`; `name`: `"isInstant"`; `type`: `"bool"`; }]; `name`: `"previewRedemption"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"assetsAmount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"assetsAfterFee"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }]

Multi-asset vault previewRedemption ABI. Uses `previewRedemption(uint256, bool)` to preview redeem output with an `isInstant` flag.

***

#### ABI\_MULTICALL3

> `const` **ABI\_MULTICALL3**: readonly \[{ `inputs`: readonly \[{ `components`: readonly \[{ `name`: `"target"`; `type`: `"address"`; }, { `name`: `"allowFailure"`; `type`: `"bool"`; }, { `name`: `"callData"`; `type`: `"bytes"`; }]; `name`: `"calls"`; `type`: `"tuple[]"`; }]; `name`: `"aggregate3"`; `outputs`: readonly \[{ `components`: readonly \[{ `name`: `"success"`; `type`: `"bool"`; }, { `name`: `"returnData"`; `type`: `"bytes"`; }]; `name`: `"returnData"`; `type`: `"tuple[]"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }]

***

#### ABI\_POOL\_ADAPTER

> `const` **ABI\_POOL\_ADAPTER**: readonly \[{ `inputs`: readonly \[{ `components`: readonly \[{ `internalType`: `"uint256"`; `name`: `"amountIn"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"minAmountOut"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"srcToken"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"dstToken"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"bridgeId"`; `type`: `"uint256"`; }, { `internalType`: `"bytes"`; `name`: `"quoteData"`; `type`: `"bytes"`; }]; `internalType`: `"struct PoolAdapter.SwapAndDepositParams"`; `name`: `"params"`; `type`: `"tuple"`; }]; `name`: `"swapAndDeposit"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }]

***

#### ABI\_REWARD\_DISTRIBUTOR

> `const` **ABI\_REWARD\_DISTRIBUTOR**: readonly \[{ `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"ownerAddr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"_rewardsPerSecond"`; `type`: `"uint256"`; }, { `internalType`: `"contract IERC20"`; `name`: `"_stakingToken"`; `type`: `"address"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"constructor"`; }, { `stateMutability`: `"payable"`; `type`: `"receive"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `name`: `"balanceOf"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"account"`; `type`: `"address"`; }]; `name`: `"earned"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getReward"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"lastUpdateTime"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"owner"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"rewardPerTokenStored"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `name`: `"rewards"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"rewardsPerSecond"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"_rewardsPerSecond"`; `type`: `"uint256"`; }]; `name`: `"setRewardRate"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }]; `name`: `"stake"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"stakingToken"`; `outputs`: readonly \[{ `internalType`: `"contract IERC20"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"totalStaked"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }]; `name`: `"transferOwnership"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `name`: `"userRewardPerTokenPaid"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }]; `name`: `"withdraw"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"previousOwner"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }]; `name`: `"OwnershipTransferred"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"sender"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"value"`; `type`: `"uint256"`; }]; `name`: `"Received"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"user"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"reward"`; `type`: `"uint256"`; }]; `name`: `"RewardPaid"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"newRate"`; `type`: `"uint256"`; }]; `name`: `"RewardRateUpdated"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"user"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }]; `name`: `"Staked"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"user"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }]; `name`: `"Withdrawn"`; `type`: `"event"`; }]

***

#### ABI\_STANDARD\_PREVIEW\_REDEEM

> `const` **ABI\_STANDARD\_PREVIEW\_REDEEM**: readonly \[{ `inputs`: readonly \[{ `name`: `"shares"`; `type`: `"uint256"`; }]; `name`: `"previewRedeem"`; `outputs`: readonly \[{ `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }]

Standard ERC4626 previewRedeem ABI.

***

#### ABI\_SWAP\_ROUTER

> `const` **ABI\_SWAP\_ROUTER**: readonly \[{ `inputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"constructor"`; }, { `inputs`: readonly \[]; `name`: `"AlreadyConfigured"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"AssetNotAcceptedByVault"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"ContractIsPaused"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"ContractNotPaused"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"EmptySwapParams"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"errorCode"`; `type`: `"uint256"`; }]; `name`: `"FailedToAcquireLpTokenAddressErrorCode"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"bytes"`; `name`: `"lowLevelData"`; `type`: `"bytes"`; }]; `name`: `"FailedToAcquireLpTokenAddressLowLevelError"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"string"`; `name`: `"reason"`; `type`: `"string"`; }]; `name`: `"FailedToAcquireLpTokenAddressStringError"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"errorCode"`; `type`: `"uint256"`; }]; `name`: `"FailedToAcquireLpTokenDecimalsErrorCode"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"bytes"`; `name`: `"lowLevelData"`; `type`: `"bytes"`; }]; `name`: `"FailedToAcquireLpTokenDecimalsLowLevelError"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"string"`; `name`: `"reason"`; `type`: `"string"`; }]; `name`: `"FailedToAcquireLpTokenDecimalsStringError"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"FeeCollectorNotSet"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"FeesCollectorNoOp"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"tokenAddr"`; `type`: `"address"`; }]; `name`: `"InputTokenNotSwapped"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"tokenAddr"`; `type`: `"address"`; }]; `name`: `"InputTokenNotWhitelisted"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidAddress"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidErc20Token"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidFeeCollector"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidLpTokenDecimals"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidNotWhitelisted"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidOrigin"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidPair"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidPayload"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidReceiver"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidRouter"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"routerAddr"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"tokenApprovalAddr"`; `type`: `"address"`; }]; `name`: `"InvalidRouterPath"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidVault"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidVaultType"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"MissingSlippageProtection"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"NativeReferenceAssetNotSupported"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"NativeSwapFailed"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"NativeTokenTransferFailed"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"NotConfigured"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"OriginAlreadyExists"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"OriginFeeTooHigh"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"OriginFeeTooLow"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"OutputTokenCannotBeNativeToken"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"tokenAddr"`; `type`: `"address"`; }]; `name`: `"OutputTokenNotWhitelisted"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"OwnerAddressRequired"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"OwnerOnly"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"ReentrancyGuardReentrantCall"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"routerAddr"`; `type`: `"address"`; }]; `name`: `"RouterPathAlreadyDisabled"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"SelectorRequired"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"tokenAddr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"amountOut"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"minAmountOut"`; `type`: `"uint256"`; }]; `name`: `"SlippageError"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"bytes"`; `name`: `"returnData"`; `type`: `"bytes"`; }]; `name`: `"SwapFailed"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"SwapFeeAmountTooLow"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"SwapFeeTooHigh"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"TokenAlreadyDisabled"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"TokenAlreadyEnabled"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"TooManySwaps"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"WrappedNativeTokenAddressNotDefined"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"ZeroAddress"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"ZeroAmount"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"ZeroSharesReceived"`; `type`: `"error"`; }, { `anonymous`: `false`; `inputs`: readonly \[]; `name`: `"ContractConfigured"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[]; `name`: `"ContractPaused"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[]; `name`: `"ContractResumed"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"newAddr"`; `type`: `"address"`; }]; `name`: `"FeesCollectorUpdated"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"bytes32"`; `name`: `"originCode"`; `type`: `"bytes32"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"originFee"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"address"`; `name`: `"originFeeCollector"`; `type`: `"address"`; }]; `name`: `"OriginAdded"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"vaultAddr"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"assetAddr"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"consumableAmount"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"feeAmount"`; `type`: `"uint256"`; }, { `indexed`: `true`; `internalType`: `"bytes32"`; `name`: `"originCode"`; `type`: `"bytes32"`; }]; `name`: `"OriginFeeApplied"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"bytes32"`; `name`: `"originCode"`; `type`: `"bytes32"`; }]; `name`: `"OriginRevoked"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"bytes32"`; `name`: `"originCode"`; `type`: `"bytes32"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"originFee"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"address"`; `name`: `"originFeeCollector"`; `type`: `"address"`; }]; `name`: `"OriginUpdated"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"previousOwner"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }]; `name`: `"OwnershipTransferred"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"token"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"to"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }]; `name`: `"ResidualBalanceSwept"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"token"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"to"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }]; `name`: `"ResidualRefund"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"routerAddr"`; `type`: `"address"`; }]; `name`: `"RouterPathDisabled"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"routerAddr"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"tokenApprovalAddr"`; `type`: `"address"`; }]; `name`: `"RouterPathEnabled"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"vaultAddr"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"tokenOutAddress"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"swapAmountOut"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"feeAmount"`; `type`: `"uint256"`; }]; `name`: `"SwapFeeApplied"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"tokenAddr"`; `type`: `"address"`; }]; `name`: `"TokenDisabled"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"tokenAddr"`; `type`: `"address"`; }]; `name`: `"TokenEnabled"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"vaultAddr"`; `type`: `"address"`; }]; `name`: `"VaultDisabled"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"vaultAddr"`; `type`: `"address"`; }]; `name`: `"VaultEnabled"`; `type`: `"event"`; }, { `inputs`: readonly \[]; `name`: `"BPS_DENOMINATOR"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"MAX_ORIGIN_FEE_BPS"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"MAX_SWAPS"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"MAX_SWAP_FEE_BPS"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"NATIVE_TOKEN_ADDRESS"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"VAULT_TYPE_ERC4626"`; `outputs`: readonly \[{ `internalType`: `"uint8"`; `name`: `""`; `type`: `"uint8"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"VAULT_TYPE_TOKENIZED_VAULT_V2"`; `outputs`: readonly \[{ `internalType`: `"uint8"`; `name`: `""`; `type`: `"uint8"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"bytes32"`; `name`: `"originCode"`; `type`: `"bytes32"`; }, { `internalType`: `"uint256"`; `name`: `"originFee"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"originFeeCollector"`; `type`: `"address"`; }]; `name`: `"addOrigin"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"newFeesCollectorAddr"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"wrappedNativeTokenAddr"`; `type`: `"address"`; }]; `name`: `"configure"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"bytes32"`; `name`: `"originCode"`; `type`: `"bytes32"`; }, { `internalType`: `"uint256"`; `name`: `"depositAmount"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"vaultAddr"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"assetAddr"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"deposit"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"bytes32"`; `name`: `"originCode"`; `type`: `"bytes32"`; }, { `internalType`: `"address"`; `name`: `"vaultAddr"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"depositNativeToken"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `stateMutability`: `"payable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"routerAddr"`; `type`: `"address"`; }, { `internalType`: `"bytes4"`; `name`: `"authorizedSelector"`; `type`: `"bytes4"`; }]; `name`: `"disableRouter"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"tokenAddr"`; `type`: `"address"`; }]; `name`: `"disableToken"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"vaultAddr"`; `type`: `"address"`; }]; `name`: `"disableVault"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"routerAddr"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"tokenApprovalAddr"`; `type`: `"address"`; }, { `internalType`: `"bytes4"`; `name`: `"authorizedSelector"`; `type`: `"bytes4"`; }]; `name`: `"enableRouter"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"contract IERC20Metadata"`; `name`: `"token"`; `type`: `"address"`; }]; `name`: `"enableToken"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"vaultAddr"`; `type`: `"address"`; }, { `internalType`: `"uint8"`; `name`: `"vaultType"`; `type`: `"uint8"`; }, { `internalType`: `"uint256"`; `name`: `"swapFee"`; `type`: `"uint256"`; }]; `name`: `"enableVault"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"feesCollector"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"routerAddr"`; `type`: `"address"`; }, { `internalType`: `"bytes4"`; `name`: `"selector"`; `type`: `"bytes4"`; }]; `name`: `"isAuthorizedSelector"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"isConfigured"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"isPaused"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"bytes32"`; `name`: `""`; `type`: `"bytes32"`; }]; `name`: `"origins"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"originFee"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"originFeeCollector"`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"owner"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"pause"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"bytes32"`; `name`: `"originCode"`; `type`: `"bytes32"`; }]; `name`: `"revokeOrigin"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"bytes32"`; `name`: `"originCode"`; `type`: `"bytes32"`; }, { `internalType`: `"address"`; `name`: `"vaultAddr"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }, { `components`: readonly \[{ `internalType`: `"address"`; `name`: `"tokenIn"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"tokenOut"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"amountIn"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"minAmountOut"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"router"`; `type`: `"address"`; }, { `internalType`: `"bytes"`; `name`: `"payload"`; `type`: `"bytes"`; }]; `internalType`: `"struct ISwapRouter.SwapParams[]"`; `name`: `"swapParams"`; `type`: `"tuple[]"`; }]; `name`: `"swapAndDeposit"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"bytes32"`; `name`: `"originCode"`; `type`: `"bytes32"`; }, { `internalType`: `"address"`; `name`: `"vaultAddr"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"swapAndDepositNativeToken"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `stateMutability`: `"payable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `name`: `"tokenTransferProxies"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }]; `name`: `"transferOwnership"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"unPause"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"newFeesCollectorAddr"`; `type`: `"address"`; }]; `name`: `"updateFeesCollector"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"bytes32"`; `name`: `"originCode"`; `type`: `"bytes32"`; }, { `internalType`: `"uint256"`; `name`: `"originFee"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"originFeeCollector"`; `type`: `"address"`; }]; `name`: `"updateOrigin"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `name`: `"vaultInfo"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"swapFee"`; `type`: `"uint256"`; }, { `internalType`: `"uint8"`; `name`: `"vaultType"`; `type`: `"uint8"`; }, { `internalType`: `"address"`; `name`: `"referenceAsset"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"lpTokenAddress"`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `name`: `"whitelistedTokens"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"wrappedNativeTokenAddress"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }]

ABI for the August `SwapRouter` periphery contract.

***

#### ABI\_TEXT\_RESOLVER

> `const` **ABI\_TEXT\_RESOLVER**: readonly \[{ `inputs`: readonly \[{ `name`: `"name"`; `type`: `"bytes32"`; }, { `name`: `"key"`; `type`: `"string"`; }]; `name`: `"text"`; `outputs`: readonly \[{ `name`: `""`; `type`: `"string"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }]

***

#### ABI\_TOKENIZED\_VAULT\_V2

> `const` **ABI\_TOKENIZED\_VAULT\_V2**: readonly \[{ `inputs`: readonly \[]; `name`: `"depositCap"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"constructor"`; }, { `inputs`: readonly \[]; `name`: `"AccountNotWhitelisted"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"AlreadyConfigured"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"AmountTooLow"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"AssetNotWhitelisted"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"fee"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"remaining"`; `type`: `"uint256"`; }]; `name`: `"CollectableFeesExceeded"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"DepositsPaused"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"FeeAmountTooLow"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"FeesMustSum100"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"HighWatermarkDurationError"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"HighWatermarkViolation"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InsufficientShares"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidAccountType"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidAddress"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidAmount"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidExternalAssets"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidLagDuration"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidReceiver"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidTimestamp"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"LimitRequired"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"MaxAllowedChangeReached"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"MaxDepositAmountReached"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"MissingFeeCollectors"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"NoSharesForReceiver"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"NotConfigured"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"NothingToProcess"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"OnlyOwnerOrOperator"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"OperatorOnly"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"OwnerAddressRequired"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"OwnerOnly"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"ReentrancyGuardReentrantCall"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"ReferenceAssetMismatch"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"SenderNotWhitelisted"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"TokenDecimalsMismatch"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"TooEarly"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"Unauthorized"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"VaultNotTimelocked"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"WhitelistLimitReached"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"WithdrawalLimitReached"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"WithdrawalsPaused"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"ZeroAddressError"`; `type`: `"error"`; }, { `anonymous`: `false`; `inputs`: readonly \[]; `name`: `"ContractConfigured"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"address"`; `name`: `"assetIn"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"amountIn"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"senderAddr"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"Deposit"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"bool"`; `name`: `"bDepositsPaused"`; `type`: `"bool"`; }, { `indexed`: `false`; `internalType`: `"bool"`; `name`: `"bWithdrawalsPaused"`; `type`: `"bool"`; }]; `name`: `"DepositWithdrawalStatusChanged"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[]; `name`: `"FeesCollected"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint8"`; `name`: `"version"`; `type`: `"uint8"`; }]; `name`: `"Initialized"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"managementFeeAmount"`; `type`: `"uint256"`; }]; `name`: `"ManagementFeeCharged"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"newManagementFeePercent"`; `type`: `"uint256"`; }]; `name`: `"ManagementFeeUpdated"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"newValue"`; `type`: `"uint256"`; }]; `name`: `"MaxChangePercentUpdated"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"OnEmergencyWithdraw"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"previousOwner"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }]; `name`: `"OwnershipTransferStarted"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"previousOwner"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }]; `name`: `"OwnershipTransferred"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"address"`; `name`: `"newWhitelistAddr"`; `type`: `"address"`; }]; `name`: `"SendersWhitelistUpdated"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"address"`; `name`: `"subAccountAddr"`; `type`: `"address"`; }]; `name`: `"SubAccountDisabled"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"address"`; `name`: `"subAccountAddr"`; `type`: `"address"`; }]; `name`: `"SubAccountEnabled"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"sender"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"receiver"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"owner"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `name`: `"Withdraw"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"assetsAmount"`; `type`: `"uint256"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"WithdrawalProcessed"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"holderAddr"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"WithdrawalRequested"`; `type`: `"event"`; }, { `inputs`: readonly \[]; `name`: `"acceptOwnership"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"asset"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"assetsUpdatedOn"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"assetsWhitelistAddress"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"chargeManagementFee"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"chargePerformanceFees"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"claim"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"collectFees"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `components`: readonly \[{ `internalType`: `"uint256"`; `name`: `"maxDepositAmount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"maxWithdrawalAmount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"instantRedemptionFee"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"lagDuration"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"withdrawalFee"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"watermarkTimeWindow"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"maxChangePercent"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"managementFeePercent"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"performanceFeeRate"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"sendersWhitelistAddress"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"operatorAddress"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"scheduledCallerAddress"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"lpTokenAddress"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"referenceAsset"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"futureOwnerAddress"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"assetsWhitelistAddress"`; `type`: `"address"`; }]; `internalType`: `"struct ITokenizedVault.ConfigInfo"`; `name`: `"newConfig"`; `type`: `"tuple"`; }]; `name`: `"configure"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"assetIn"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"amountIn"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"deposit"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"inputAssetAddr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"depositAmount"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"subAccountAddr"`; `type`: `"address"`; }]; `name`: `"depositToSubaccount"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"depositsPaused"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"addr"`; `type`: `"address"`; }]; `name`: `"disableSubAccount"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"emergencyWithdraw"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"addr"`; `type`: `"address"`; }, { `internalType`: `"uint8"`; `name`: `"accountType"`; `type`: `"uint8"`; }]; `name`: `"enableSubAccount"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"externalAssets"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `name`: `"feeCollectors"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `"collectorAddress"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"percentage"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"feesTimestamp"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"getBurnableAmountByReceiver"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"externalAssetsAmount"`; `type`: `"uint256"`; }]; `name`: `"getChangePercentage"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getFeeCollectors"`; `outputs`: readonly \[{ `components`: readonly \[{ `internalType`: `"address"`; `name`: `"collectorAddress"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"percentage"`; `type`: `"uint256"`; }]; `internalType`: `"struct IFeeCollectorsAware.CollectorDefinition[]"`; `name`: `""`; `type`: `"tuple[]"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getMaxAllowedChange"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getPerformanceFeeRecipients"`; `outputs`: readonly \[{ `components`: readonly \[{ `internalType`: `"address"`; `name`: `"collectorAddress"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"percentage"`; `type`: `"uint256"`; }]; `internalType`: `"struct IFeeCollectorsAware.CollectorDefinition[]"`; `name`: `""`; `type`: `"tuple[]"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }]; `name`: `"getRequirementByDate"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }]; `name`: `"getScheduledTransactionsByDate"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"totalTransactions"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"executionEpoch"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getSharePrice"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getTotalAssets"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getWithdrawalEpoch"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"claimableEpoch"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"globalLiabilityShares"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"highWatermark"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"ownerAddr"`; `type`: `"address"`; }]; `name`: `"initialize"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"instantRedeem"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"instantRedemptionFee"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"lagDuration"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"lpTokenAddress"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"managementFeePercent"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"maxChangePercent"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"maxDepositAmount"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"maxWithdrawalAmount"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"operatorAddress"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"owner"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"bool"`; `name`: `"bPauseDeposits"`; `type`: `"bool"`; }, { `internalType`: `"bool"`; `name`: `"bPauseWithdrawals"`; `type`: `"bool"`; }]; `name`: `"pauseDepositsAndWithdrawals"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"pendingOwner"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"performanceFeeRate"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `name`: `"performanceFeeRecipients"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `"collectorAddress"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"percentage"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"assetIn"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"amountIn"`; `type`: `"uint256"`; }]; `name`: `"previewDeposit"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }, { `internalType`: `"bool"`; `name`: `"isInstant"`; `type`: `"bool"`; }]; `name`: `"previewRedemption"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"assetsAmount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"assetsAfterFee"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"maxLimit"`; `type`: `"uint256"`; }]; `name`: `"processAllClaimsByDate"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"requestRedeem"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"claimableEpoch"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"scheduledCallerAddress"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"sendersWhitelistAddress"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"totalCollectableFees"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }]; `name`: `"transferOwnership"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"newWhitelistAddr"`; `type`: `"address"`; }]; `name`: `"updateAssetsWhitelist"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `components`: readonly \[{ `internalType`: `"address"`; `name`: `"collectorAddress"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"percentage"`; `type`: `"uint256"`; }]; `internalType`: `"struct IFeeCollectorsAware.CollectorDefinition[]"`; `name`: `"collectors"`; `type`: `"tuple[]"`; }]; `name`: `"updateFeeCollectors"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newManagementFeePercent"`; `type`: `"uint256"`; }]; `name`: `"updateManagementFee"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newValue"`; `type`: `"uint256"`; }]; `name`: `"updateMaxChangePercent"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `components`: readonly \[{ `internalType`: `"address"`; `name`: `"collectorAddress"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"percentage"`; `type`: `"uint256"`; }]; `internalType`: `"struct IFeeCollectorsAware.CollectorDefinition[]"`; `name`: `"collectors"`; `type`: `"tuple[]"`; }]; `name`: `"updatePerformanceFeeCollectors"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"newWhitelistAddr"`; `type`: `"address"`; }]; `name`: `"updateSendersWhitelist"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newDuration"`; `type`: `"uint256"`; }]; `name`: `"updateTimelockDuration"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"externalAssetsAmount"`; `type`: `"uint256"`; }]; `name`: `"updateTotalAssets"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"watermarkTimeWindow"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"watermarkUpdatedOn"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `name`: `"whitelistedSubAccounts"`; `outputs`: readonly \[{ `internalType`: `"uint8"`; `name`: `""`; `type`: `"uint8"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"inputAssetAddr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"subAccountAddr"`; `type`: `"address"`; }]; `name`: `"withdrawFromSubaccount"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"withdrawalFee"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"withdrawalsPaused"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }]

***

#### ABI\_TOKENIZED\_VAULT\_V2\_DEPOSIT\_WITH\_PERMIT

> `const` **ABI\_TOKENIZED\_VAULT\_V2\_DEPOSIT\_WITH\_PERMIT**: readonly \[{ `inputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"constructor"`; }, { `inputs`: readonly \[]; `name`: `"acceptOwnership"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"asset"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"assetsUpdatedOn"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"assetsWhitelistAddress"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"chargeManagementFee"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"chargePerformanceFees"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"claim"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"collectFees"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `components`: readonly \[{ `internalType`: `"uint256"`; `name`: `"maxDepositAmount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"maxWithdrawalAmount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"instantRedemptionFee"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"lagDuration"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"withdrawalFee"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"watermarkTimeWindow"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"maxChangePercent"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"managementFeePercent"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"performanceFeeRate"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"sendersWhitelistAddress"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"operatorAddress"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"scheduledCallerAddress"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"lpTokenAddress"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"referenceAsset"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"futureOwnerAddress"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"assetsWhitelistAddress"`; `type`: `"address"`; }]; `internalType`: `"struct ITokenizedVault.ConfigInfo"`; `name`: `"newConfig"`; `type`: `"tuple"`; }]; `name`: `"configure"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"assetIn"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"amountIn"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"deposit"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"depositCap"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"inputAssetAddr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"depositAmount"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"subAccountAddr"`; `type`: `"address"`; }]; `name`: `"depositToSubaccount"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"assetIn"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"amountIn"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"deadline"`; `type`: `"uint256"`; }, { `internalType`: `"bytes32"`; `name`: `"r"`; `type`: `"bytes32"`; }, { `internalType`: `"bytes32"`; `name`: `"s"`; `type`: `"bytes32"`; }, { `internalType`: `"uint8"`; `name`: `"v"`; `type`: `"uint8"`; }]; `name`: `"depositWithPermit"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"depositsPaused"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"addr"`; `type`: `"address"`; }]; `name`: `"disableSubAccount"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"emergencyWithdraw"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"addr"`; `type`: `"address"`; }, { `internalType`: `"uint8"`; `name`: `"accountType"`; `type`: `"uint8"`; }]; `name`: `"enableSubAccount"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"externalAssets"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `name`: `"feeCollectors"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `"collectorAddress"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"percentage"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"feesTimestamp"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"getBurnableAmountByReceiver"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"externalAssetsAmount"`; `type`: `"uint256"`; }]; `name`: `"getChangePercentage"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getFeeCollectors"`; `outputs`: readonly \[{ `components`: readonly \[{ `internalType`: `"address"`; `name`: `"collectorAddress"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"percentage"`; `type`: `"uint256"`; }]; `internalType`: `"struct IFeeCollectorsAware.CollectorDefinition[]"`; `name`: `""`; `type`: `"tuple[]"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getMaxAllowedChange"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getPerformanceFeeRecipients"`; `outputs`: readonly \[{ `components`: readonly \[{ `internalType`: `"address"`; `name`: `"collectorAddress"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"percentage"`; `type`: `"uint256"`; }]; `internalType`: `"struct IFeeCollectorsAware.CollectorDefinition[]"`; `name`: `""`; `type`: `"tuple[]"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }]; `name`: `"getRequirementByDate"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }]; `name`: `"getScheduledTransactionsByDate"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"totalTransactions"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"executionEpoch"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getSharePrice"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getTotalAssets"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getWithdrawalEpoch"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"claimableEpoch"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"globalLiabilityShares"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"highWatermark"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"ownerAddr"`; `type`: `"address"`; }]; `name`: `"initialize"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"instantRedeem"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"instantRedemptionFee"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"keepFeeInVault"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"lagDuration"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"lpTokenAddress"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"managementFeePercent"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"maxChangePercent"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"maxDepositAmount"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"maxWithdrawalAmount"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"operatorAddress"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"owner"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"bool"`; `name`: `"bPauseDeposits"`; `type`: `"bool"`; }, { `internalType`: `"bool"`; `name`: `"bPauseWithdrawals"`; `type`: `"bool"`; }]; `name`: `"pauseDepositsAndWithdrawals"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"pendingOwner"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"performanceFeeRate"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `name`: `"performanceFeeRecipients"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `"collectorAddress"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"percentage"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"assetIn"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"amountIn"`; `type`: `"uint256"`; }]; `name`: `"previewDeposit"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }, { `internalType`: `"bool"`; `name`: `"isInstant"`; `type`: `"bool"`; }]; `name`: `"previewRedemption"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"assetsAmount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"assetsAfterFee"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"maxLimit"`; `type`: `"uint256"`; }]; `name`: `"processAllClaimsByDate"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"requestRedeem"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"claimableEpoch"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"scheduledCallerAddress"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"sendersWhitelistAddress"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"totalCollectableFees"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }]; `name`: `"transferOwnership"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"newWhitelistAddr"`; `type`: `"address"`; }]; `name`: `"updateAssetsWhitelist"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `components`: readonly \[{ `internalType`: `"address"`; `name`: `"collectorAddress"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"percentage"`; `type`: `"uint256"`; }]; `internalType`: `"struct IFeeCollectorsAware.CollectorDefinition[]"`; `name`: `"collectors"`; `type`: `"tuple[]"`; }]; `name`: `"updateFeeCollectors"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newValue"`; `type`: `"uint256"`; }, { `internalType`: `"bool"`; `name`: `"pKeepFeeInVault"`; `type`: `"bool"`; }]; `name`: `"updateInstantRedemptionFee"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newMaxDepositAmount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"newMaxWithdrawalAmount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"newDepositCap"`; `type`: `"uint256"`; }]; `name`: `"updateLimits"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newManagementFeePercent"`; `type`: `"uint256"`; }]; `name`: `"updateManagementFee"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newValue"`; `type`: `"uint256"`; }]; `name`: `"updateMaxChangePercent"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `components`: readonly \[{ `internalType`: `"address"`; `name`: `"collectorAddress"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"percentage"`; `type`: `"uint256"`; }]; `internalType`: `"struct IFeeCollectorsAware.CollectorDefinition[]"`; `name`: `"collectors"`; `type`: `"tuple[]"`; }]; `name`: `"updatePerformanceFeeCollectors"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"newWhitelistAddr"`; `type`: `"address"`; }]; `name`: `"updateSendersWhitelist"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newDuration"`; `type`: `"uint256"`; }]; `name`: `"updateTimelockDuration"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"externalAssetsAmount"`; `type`: `"uint256"`; }]; `name`: `"updateTotalAssets"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"watermarkTimeWindow"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"watermarkUpdatedOn"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `name`: `"whitelistedSubAccounts"`; `outputs`: readonly \[{ `internalType`: `"uint8"`; `name`: `""`; `type`: `"uint8"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"inputAssetAddr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"subAccountAddr"`; `type`: `"address"`; }]; `name`: `"withdrawFromSubaccount"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"withdrawalFee"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"withdrawalsPaused"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `anonymous`: `false`; `inputs`: readonly \[]; `name`: `"ContractConfigured"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"address"`; `name`: `"assetIn"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"amountIn"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"senderAddr"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"Deposit"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"bool"`; `name`: `"bDepositsPaused"`; `type`: `"bool"`; }, { `indexed`: `false`; `internalType`: `"bool"`; `name`: `"bWithdrawalsPaused"`; `type`: `"bool"`; }]; `name`: `"DepositWithdrawalStatusChanged"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[]; `name`: `"FeesCollected"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint8"`; `name`: `"version"`; `type`: `"uint8"`; }]; `name`: `"Initialized"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"managementFeeAmount"`; `type`: `"uint256"`; }]; `name`: `"ManagementFeeCharged"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"newManagementFeePercent"`; `type`: `"uint256"`; }]; `name`: `"ManagementFeeUpdated"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"newValue"`; `type`: `"uint256"`; }]; `name`: `"MaxChangePercentUpdated"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"OnEmergencyWithdraw"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"previousOwner"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }]; `name`: `"OwnershipTransferStarted"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"previousOwner"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }]; `name`: `"OwnershipTransferred"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"address"`; `name`: `"newWhitelistAddr"`; `type`: `"address"`; }]; `name`: `"SendersWhitelistUpdated"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"address"`; `name`: `"subAccountAddr"`; `type`: `"address"`; }]; `name`: `"SubAccountDisabled"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"address"`; `name`: `"subAccountAddr"`; `type`: `"address"`; }]; `name`: `"SubAccountEnabled"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"sender"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"receiver"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"owner"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `name`: `"Withdraw"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"assetsAmount"`; `type`: `"uint256"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"WithdrawalProcessed"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"holderAddr"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"WithdrawalRequested"`; `type`: `"event"`; }, { `inputs`: readonly \[]; `name`: `"AccountNotWhitelisted"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"AlreadyConfigured"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"AmountTooLow"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"AssetNotWhitelisted"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"fee"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"remaining"`; `type`: `"uint256"`; }]; `name`: `"CollectableFeesExceeded"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"DepositCapReached"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"DepositsPaused"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"FeeAmountTooLow"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"FeesMustSum100"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"HighWatermarkDurationError"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"HighWatermarkViolation"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InsufficientShares"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidAccountType"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidAddress"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidAmount"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidDepositLimit"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidExternalAssets"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidLagDuration"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidReceiver"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidTimestamp"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidWithdrawalLimit"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"LimitRequired"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"MaxAllowedChangeReached"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"MaxDepositAmountReached"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"MissingFeeCollectors"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"NoSharesForReceiver"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"NotConfigured"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"NothingToProcess"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"OnlyOwnerOrOperator"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"OperatorOnly"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"OwnerAddressRequired"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"OwnerOnly"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"ReentrancyGuardReentrantCall"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"ReferenceAssetMismatch"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"SenderNotWhitelisted"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"TokenDecimalsMismatch"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"TooEarly"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"Unauthorized"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"VaultNotTimelocked"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"WhitelistLimitReached"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"WithdrawalLimitReached"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"WithdrawalsPaused"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"ZeroAddressError"`; `type`: `"error"`; }]

***

#### ABI\_TOKENIZED\_VAULT\_V2\_RECEIPT

> `const` **ABI\_TOKENIZED\_VAULT\_V2\_RECEIPT**: readonly \[{ `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"_lzEndpoint"`; `type`: `"address"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"constructor"`; }, { `inputs`: readonly \[]; `name`: `"AlreadyConfigured"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"spender"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"allowance"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"needed"`; `type`: `"uint256"`; }]; `name`: `"ERC20InsufficientAllowance"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"sender"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"balance"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"needed"`; `type`: `"uint256"`; }]; `name`: `"ERC20InsufficientBalance"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"approver"`; `type`: `"address"`; }]; `name`: `"ERC20InvalidApprover"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"receiver"`; `type`: `"address"`; }]; `name`: `"ERC20InvalidReceiver"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"sender"`; `type`: `"address"`; }]; `name`: `"ERC20InvalidSender"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"spender"`; `type`: `"address"`; }]; `name`: `"ERC20InvalidSpender"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"ExpiredDeadline"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidDelegate"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidDomainSeparator"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidEndpointCall"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidEpoch"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidInitialization"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidLocalDecimals"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"bytes"`; `name`: `"options"`; `type`: `"bytes"`; }]; `name`: `"InvalidOptions"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidSignature"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidSignatureComponentS"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidSigner"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"LzTokenUnavailable"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"uint32"`; `name`: `"eid"`; `type`: `"uint32"`; }]; `name`: `"NoPeer"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"NotConfigured"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"msgValue"`; `type`: `"uint256"`; }]; `name`: `"NotEnoughNative"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"NotInitializing"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"addr"`; `type`: `"address"`; }]; `name`: `"OnlyEndpoint"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"uint32"`; `name`: `"eid"`; `type`: `"uint32"`; }, { `internalType`: `"bytes32"`; `name`: `"sender"`; `type`: `"bytes32"`; }]; `name`: `"OnlyPeer"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"OnlySelf"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"owner"`; `type`: `"address"`; }]; `name`: `"OwnableInvalidOwner"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"account"`; `type`: `"address"`; }]; `name`: `"OwnableUnauthorizedAccount"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"ReentrantCall"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"token"`; `type`: `"address"`; }]; `name`: `"SafeERC20FailedOperation"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"bytes"`; `name`: `"result"`; `type`: `"bytes"`; }]; `name`: `"SimulationResult"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"amountLD"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"minAmountLD"`; `type`: `"uint256"`; }]; `name`: `"SlippageExceeded"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"TokensLocked"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"Unauthorized"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"UnauthorizedBurner"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"UnauthorizedMinter"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"ZeroAddress"`; `type`: `"error"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"owner"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"spender"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"value"`; `type`: `"uint256"`; }]; `name`: `"Approval"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[]; `name`: `"EIP712DomainChanged"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `components`: readonly \[{ `internalType`: `"uint32"`; `name`: `"eid"`; `type`: `"uint32"`; }, { `internalType`: `"uint16"`; `name`: `"msgType"`; `type`: `"uint16"`; }, { `internalType`: `"bytes"`; `name`: `"options"`; `type`: `"bytes"`; }]; `indexed`: `false`; `internalType`: `"struct EnforcedOptionParam[]"`; `name`: `"_enforcedOptions"`; `type`: `"tuple[]"`; }]; `name`: `"EnforcedOptionSet"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint64"`; `name`: `"version"`; `type`: `"uint64"`; }]; `name`: `"Initialized"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"address"`; `name`: `"inspector"`; `type`: `"address"`; }]; `name`: `"MsgInspectorSet"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"bytes32"`; `name`: `"guid"`; `type`: `"bytes32"`; }, { `indexed`: `false`; `internalType`: `"uint32"`; `name`: `"srcEid"`; `type`: `"uint32"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"toAddress"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"amountReceivedLD"`; `type`: `"uint256"`; }]; `name`: `"OFTReceived"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"bytes32"`; `name`: `"guid"`; `type`: `"bytes32"`; }, { `indexed`: `false`; `internalType`: `"uint32"`; `name`: `"dstEid"`; `type`: `"uint32"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"fromAddress"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"amountSentLD"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"amountReceivedLD"`; `type`: `"uint256"`; }]; `name`: `"OFTSent"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"address"`; `name`: `"holderAddr"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"untilEpoch"`; `type`: `"uint256"`; }]; `name`: `"OnTokensLocked"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"address"`; `name`: `"holderAddr"`; `type`: `"address"`; }]; `name`: `"OnTokensUnLocked"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"previousOwner"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }]; `name`: `"OwnershipTransferStarted"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"previousOwner"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }]; `name`: `"OwnershipTransferred"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint32"`; `name`: `"eid"`; `type`: `"uint32"`; }, { `indexed`: `false`; `internalType`: `"bytes32"`; `name`: `"peer"`; `type`: `"bytes32"`; }]; `name`: `"PeerSet"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"address"`; `name`: `"preCrimeAddress"`; `type`: `"address"`; }]; `name`: `"PreCrimeSet"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"from"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"to"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"value"`; `type`: `"uint256"`; }]; `name`: `"Transfer"`; `type`: `"event"`; }, { `inputs`: readonly \[]; `name`: `"DOMAIN_SEPARATOR"`; `outputs`: readonly \[{ `internalType`: `"bytes32"`; `name`: `""`; `type`: `"bytes32"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"PERMIT_TYPEHASH"`; `outputs`: readonly \[{ `internalType`: `"bytes32"`; `name`: `""`; `type`: `"bytes32"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"SEND"`; `outputs`: readonly \[{ `internalType`: `"uint16"`; `name`: `""`; `type`: `"uint16"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"SEND_AND_CALL"`; `outputs`: readonly \[{ `internalType`: `"uint16"`; `name`: `""`; `type`: `"uint16"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"acceptOwnership"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `components`: readonly \[{ `internalType`: `"uint32"`; `name`: `"srcEid"`; `type`: `"uint32"`; }, { `internalType`: `"bytes32"`; `name`: `"sender"`; `type`: `"bytes32"`; }, { `internalType`: `"uint64"`; `name`: `"nonce"`; `type`: `"uint64"`; }]; `internalType`: `"struct Origin"`; `name`: `"origin"`; `type`: `"tuple"`; }]; `name`: `"allowInitializePath"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"owner"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"spender"`; `type`: `"address"`; }]; `name`: `"allowance"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"approvalRequired"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"pure"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"spender"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }]; `name`: `"approve"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"account"`; `type`: `"address"`; }]; `name`: `"balanceOf"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"addr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }]; `name`: `"burn"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `name`: `"burners"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint32"`; `name`: `"_eid"`; `type`: `"uint32"`; }, { `internalType`: `"uint16"`; `name`: `"_msgType"`; `type`: `"uint16"`; }, { `internalType`: `"bytes"`; `name`: `"_extraOptions"`; `type`: `"bytes"`; }]; `name`: `"combineOptions"`; `outputs`: readonly \[{ `internalType`: `"bytes"`; `name`: `""`; `type`: `"bytes"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address[]"`; `name`: `"newMinters"`; `type`: `"address[]"`; }, { `internalType`: `"address[]"`; `name`: `"newBurners"`; `type`: `"address[]"`; }]; `name`: `"configure"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"decimalConversionRate"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"decimals"`; `outputs`: readonly \[{ `internalType`: `"uint8"`; `name`: `""`; `type`: `"uint8"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"eip712Domain"`; `outputs`: readonly \[{ `internalType`: `"bytes1"`; `name`: `"fields"`; `type`: `"bytes1"`; }, { `internalType`: `"string"`; `name`: `"domainName"`; `type`: `"string"`; }, { `internalType`: `"string"`; `name`: `"domainVersion"`; `type`: `"string"`; }, { `internalType`: `"uint256"`; `name`: `"chainId"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"verifyingContract"`; `type`: `"address"`; }, { `internalType`: `"bytes32"`; `name`: `"salt"`; `type`: `"bytes32"`; }, { `internalType`: `"uint256[]"`; `name`: `"extensions"`; `type`: `"uint256[]"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"endpoint"`; `outputs`: readonly \[{ `internalType`: `"contract ILayerZeroEndpointV2"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint32"`; `name`: `"_eid"`; `type`: `"uint32"`; }, { `internalType`: `"uint16"`; `name`: `"_msgType"`; `type`: `"uint16"`; }]; `name`: `"enforcedOptions"`; `outputs`: readonly \[{ `internalType`: `"bytes"`; `name`: `""`; `type`: `"bytes"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"newOwnerAddr"`; `type`: `"address"`; }, { `internalType`: `"uint8"`; `name`: `"erc20Decimals"`; `type`: `"uint8"`; }, { `internalType`: `"string"`; `name`: `"erc20Symbol"`; `type`: `"string"`; }, { `internalType`: `"string"`; `name`: `"erc20Name"`; `type`: `"string"`; }]; `name`: `"initialize"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `components`: readonly \[{ `internalType`: `"uint32"`; `name`: `"srcEid"`; `type`: `"uint32"`; }, { `internalType`: `"bytes32"`; `name`: `"sender"`; `type`: `"bytes32"`; }, { `internalType`: `"uint64"`; `name`: `"nonce"`; `type`: `"uint64"`; }]; `internalType`: `"struct Origin"`; `name`: `""`; `type`: `"tuple"`; }, { `internalType`: `"bytes"`; `name`: `""`; `type`: `"bytes"`; }, { `internalType`: `"address"`; `name`: `"_sender"`; `type`: `"address"`; }]; `name`: `"isComposeMsgSender"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint32"`; `name`: `"_eid"`; `type`: `"uint32"`; }, { `internalType`: `"bytes32"`; `name`: `"_peer"`; `type`: `"bytes32"`; }]; `name`: `"isPeer"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"holderAddr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"untilEpoch"`; `type`: `"uint256"`; }]; `name`: `"lockTokens"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `components`: readonly \[{ `internalType`: `"uint32"`; `name`: `"srcEid"`; `type`: `"uint32"`; }, { `internalType`: `"bytes32"`; `name`: `"sender"`; `type`: `"bytes32"`; }, { `internalType`: `"uint64"`; `name`: `"nonce"`; `type`: `"uint64"`; }]; `internalType`: `"struct Origin"`; `name`: `"_origin"`; `type`: `"tuple"`; }, { `internalType`: `"bytes32"`; `name`: `"_guid"`; `type`: `"bytes32"`; }, { `internalType`: `"bytes"`; `name`: `"_message"`; `type`: `"bytes"`; }, { `internalType`: `"address"`; `name`: `"_executor"`; `type`: `"address"`; }, { `internalType`: `"bytes"`; `name`: `"_extraData"`; `type`: `"bytes"`; }]; `name`: `"lzReceive"`; `outputs`: readonly \[]; `stateMutability`: `"payable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `components`: readonly \[{ `components`: readonly \[{ `internalType`: `"uint32"`; `name`: `"srcEid"`; `type`: `"uint32"`; }, { `internalType`: `"bytes32"`; `name`: `"sender"`; `type`: `"bytes32"`; }, { `internalType`: `"uint64"`; `name`: `"nonce"`; `type`: `"uint64"`; }]; `internalType`: `"struct Origin"`; `name`: `"origin"`; `type`: `"tuple"`; }, { `internalType`: `"uint32"`; `name`: `"dstEid"`; `type`: `"uint32"`; }, { `internalType`: `"address"`; `name`: `"receiver"`; `type`: `"address"`; }, { `internalType`: `"bytes32"`; `name`: `"guid"`; `type`: `"bytes32"`; }, { `internalType`: `"uint256"`; `name`: `"value"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"executor"`; `type`: `"address"`; }, { `internalType`: `"bytes"`; `name`: `"message"`; `type`: `"bytes"`; }, { `internalType`: `"bytes"`; `name`: `"extraData"`; `type`: `"bytes"`; }]; `internalType`: `"struct InboundPacket[]"`; `name`: `"_packets"`; `type`: `"tuple[]"`; }]; `name`: `"lzReceiveAndRevert"`; `outputs`: readonly \[]; `stateMutability`: `"payable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `components`: readonly \[{ `internalType`: `"uint32"`; `name`: `"srcEid"`; `type`: `"uint32"`; }, { `internalType`: `"bytes32"`; `name`: `"sender"`; `type`: `"bytes32"`; }, { `internalType`: `"uint64"`; `name`: `"nonce"`; `type`: `"uint64"`; }]; `internalType`: `"struct Origin"`; `name`: `"_origin"`; `type`: `"tuple"`; }, { `internalType`: `"bytes32"`; `name`: `"_guid"`; `type`: `"bytes32"`; }, { `internalType`: `"bytes"`; `name`: `"_message"`; `type`: `"bytes"`; }, { `internalType`: `"address"`; `name`: `"_executor"`; `type`: `"address"`; }, { `internalType`: `"bytes"`; `name`: `"_extraData"`; `type`: `"bytes"`; }]; `name`: `"lzReceiveSimulate"`; `outputs`: readonly \[]; `stateMutability`: `"payable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"addr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }]; `name`: `"mint"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `name`: `"minters"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"msgInspector"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"name"`; `outputs`: readonly \[{ `internalType`: `"string"`; `name`: `""`; `type`: `"string"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint32"`; `name`: `""`; `type`: `"uint32"`; }, { `internalType`: `"bytes32"`; `name`: `""`; `type`: `"bytes32"`; }]; `name`: `"nextNonce"`; `outputs`: readonly \[{ `internalType`: `"uint64"`; `name`: `"nonce"`; `type`: `"uint64"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"addr"`; `type`: `"address"`; }]; `name`: `"nonces"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"oApp"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"oAppVersion"`; `outputs`: readonly \[{ `internalType`: `"uint64"`; `name`: `"senderVersion"`; `type`: `"uint64"`; }, { `internalType`: `"uint64"`; `name`: `"receiverVersion"`; `type`: `"uint64"`; }]; `stateMutability`: `"pure"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"oftVersion"`; `outputs`: readonly \[{ `internalType`: `"bytes4"`; `name`: `"interfaceId"`; `type`: `"bytes4"`; }, { `internalType`: `"uint64"`; `name`: `"version"`; `type`: `"uint64"`; }]; `stateMutability`: `"pure"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"owner"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint32"`; `name`: `"_eid"`; `type`: `"uint32"`; }]; `name`: `"peers"`; `outputs`: readonly \[{ `internalType`: `"bytes32"`; `name`: `""`; `type`: `"bytes32"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"pendingOwner"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"holderAddr"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"spenderAddr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"value"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"deadline"`; `type`: `"uint256"`; }, { `internalType`: `"uint8"`; `name`: `"v"`; `type`: `"uint8"`; }, { `internalType`: `"bytes32"`; `name`: `"r"`; `type`: `"bytes32"`; }, { `internalType`: `"bytes32"`; `name`: `"s"`; `type`: `"bytes32"`; }]; `name`: `"permit"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"preCrime"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `components`: readonly \[{ `internalType`: `"uint32"`; `name`: `"dstEid"`; `type`: `"uint32"`; }, { `internalType`: `"bytes32"`; `name`: `"to"`; `type`: `"bytes32"`; }, { `internalType`: `"uint256"`; `name`: `"amountLD"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"minAmountLD"`; `type`: `"uint256"`; }, { `internalType`: `"bytes"`; `name`: `"extraOptions"`; `type`: `"bytes"`; }, { `internalType`: `"bytes"`; `name`: `"composeMsg"`; `type`: `"bytes"`; }, { `internalType`: `"bytes"`; `name`: `"oftCmd"`; `type`: `"bytes"`; }]; `internalType`: `"struct SendParam"`; `name`: `"_sendParam"`; `type`: `"tuple"`; }]; `name`: `"quoteOFT"`; `outputs`: readonly \[{ `components`: readonly \[{ `internalType`: `"uint256"`; `name`: `"minAmountLD"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"maxAmountLD"`; `type`: `"uint256"`; }]; `internalType`: `"struct OFTLimit"`; `name`: `"oftLimit"`; `type`: `"tuple"`; }, { `components`: readonly \[{ `internalType`: `"int256"`; `name`: `"feeAmountLD"`; `type`: `"int256"`; }, { `internalType`: `"string"`; `name`: `"description"`; `type`: `"string"`; }]; `internalType`: `"struct OFTFeeDetail[]"`; `name`: `"oftFeeDetails"`; `type`: `"tuple[]"`; }, { `components`: readonly \[{ `internalType`: `"uint256"`; `name`: `"amountSentLD"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"amountReceivedLD"`; `type`: `"uint256"`; }]; `internalType`: `"struct OFTReceipt"`; `name`: `"oftReceipt"`; `type`: `"tuple"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `components`: readonly \[{ `internalType`: `"uint32"`; `name`: `"dstEid"`; `type`: `"uint32"`; }, { `internalType`: `"bytes32"`; `name`: `"to"`; `type`: `"bytes32"`; }, { `internalType`: `"uint256"`; `name`: `"amountLD"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"minAmountLD"`; `type`: `"uint256"`; }, { `internalType`: `"bytes"`; `name`: `"extraOptions"`; `type`: `"bytes"`; }, { `internalType`: `"bytes"`; `name`: `"composeMsg"`; `type`: `"bytes"`; }, { `internalType`: `"bytes"`; `name`: `"oftCmd"`; `type`: `"bytes"`; }]; `internalType`: `"struct SendParam"`; `name`: `"_sendParam"`; `type`: `"tuple"`; }, { `internalType`: `"bool"`; `name`: `"_payInLzToken"`; `type`: `"bool"`; }]; `name`: `"quoteSend"`; `outputs`: readonly \[{ `components`: readonly \[{ `internalType`: `"uint256"`; `name`: `"nativeFee"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"lzTokenFee"`; `type`: `"uint256"`; }]; `internalType`: `"struct MessagingFee"`; `name`: `"msgFee"`; `type`: `"tuple"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"renounceOwnership"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `components`: readonly \[{ `internalType`: `"uint32"`; `name`: `"dstEid"`; `type`: `"uint32"`; }, { `internalType`: `"bytes32"`; `name`: `"to"`; `type`: `"bytes32"`; }, { `internalType`: `"uint256"`; `name`: `"amountLD"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"minAmountLD"`; `type`: `"uint256"`; }, { `internalType`: `"bytes"`; `name`: `"extraOptions"`; `type`: `"bytes"`; }, { `internalType`: `"bytes"`; `name`: `"composeMsg"`; `type`: `"bytes"`; }, { `internalType`: `"bytes"`; `name`: `"oftCmd"`; `type`: `"bytes"`; }]; `internalType`: `"struct SendParam"`; `name`: `"_sendParam"`; `type`: `"tuple"`; }, { `components`: readonly \[{ `internalType`: `"uint256"`; `name`: `"nativeFee"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"lzTokenFee"`; `type`: `"uint256"`; }]; `internalType`: `"struct MessagingFee"`; `name`: `"_fee"`; `type`: `"tuple"`; }, { `internalType`: `"address"`; `name`: `"_refundAddress"`; `type`: `"address"`; }]; `name`: `"send"`; `outputs`: readonly \[{ `components`: readonly \[{ `internalType`: `"bytes32"`; `name`: `"guid"`; `type`: `"bytes32"`; }, { `internalType`: `"uint64"`; `name`: `"nonce"`; `type`: `"uint64"`; }, { `components`: readonly \[{ `internalType`: `"uint256"`; `name`: `"nativeFee"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"lzTokenFee"`; `type`: `"uint256"`; }]; `internalType`: `"struct MessagingFee"`; `name`: `"fee"`; `type`: `"tuple"`; }]; `internalType`: `"struct MessagingReceipt"`; `name`: `"msgReceipt"`; `type`: `"tuple"`; }, { `components`: readonly \[{ `internalType`: `"uint256"`; `name`: `"amountSentLD"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"amountReceivedLD"`; `type`: `"uint256"`; }]; `internalType`: `"struct OFTReceipt"`; `name`: `"oftReceipt"`; `type`: `"tuple"`; }]; `stateMutability`: `"payable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"_delegate"`; `type`: `"address"`; }]; `name`: `"setDelegate"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `components`: readonly \[{ `internalType`: `"uint32"`; `name`: `"eid"`; `type`: `"uint32"`; }, { `internalType`: `"uint16"`; `name`: `"msgType"`; `type`: `"uint16"`; }, { `internalType`: `"bytes"`; `name`: `"options"`; `type`: `"bytes"`; }]; `internalType`: `"struct EnforcedOptionParam[]"`; `name`: `"_enforcedOptions"`; `type`: `"tuple[]"`; }]; `name`: `"setEnforcedOptions"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"_msgInspector"`; `type`: `"address"`; }]; `name`: `"setMsgInspector"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint32"`; `name`: `"_eid"`; `type`: `"uint32"`; }, { `internalType`: `"bytes32"`; `name`: `"_peer"`; `type`: `"bytes32"`; }]; `name`: `"setPeer"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"_preCrime"`; `type`: `"address"`; }]; `name`: `"setPreCrime"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"sharedDecimals"`; `outputs`: readonly \[{ `internalType`: `"uint8"`; `name`: `""`; `type`: `"uint8"`; }]; `stateMutability`: `"pure"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"symbol"`; `outputs`: readonly \[{ `internalType`: `"string"`; `name`: `""`; `type`: `"string"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"token"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"totalSupply"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"to"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }]; `name`: `"transfer"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"from"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"to"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }]; `name`: `"transferFrom"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }]; `name`: `"transferOwnership"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"holderAddr"`; `type`: `"address"`; }]; `name`: `"unlockTokens"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }]

***

#### ABI\_TOKENIZED\_VAULT\_V2\_SENDER\_ALLOCATION\_WHITELIST

> `const` **ABI\_TOKENIZED\_VAULT\_V2\_SENDER\_ALLOCATION\_WHITELIST**: readonly \[{ `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"ownerAddr"`; `type`: `"address"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"constructor"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"attempted"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"limit"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"alreadyDeposited"`; `type`: `"uint256"`; }]; `name`: `"AllocationExceeded"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"ArrayLengthMismatch"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"BatchSizeExceeded"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"EmptyBatch"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidAddress"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidBps"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"OwnerAddressRequired"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"OwnerOnly"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"ReceiverNotWhitelisted"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"ReentrancyGuardReentrantCall"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"UnauthorizedRecorder"`; `type`: `"error"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"addr"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"oldBps"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"newBps"`; `type`: `"uint256"`; }]; `name`: `"AllocationSet"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"recorder"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"bool"`; `name`: `"authorized"`; `type`: `"bool"`; }]; `name`: `"AuthorizedRecorderSet"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"addr"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"newDeposited"`; `type`: `"uint256"`; }]; `name`: `"DepositRecorded"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"addr"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"oldAmount"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"newAmount"`; `type`: `"uint256"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"admin"`; `type`: `"address"`; }]; `name`: `"DepositedSet"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"previousOwner"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }]; `name`: `"OwnershipTransferred"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"addr"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"newDeposited"`; `type`: `"uint256"`; }]; `name`: `"WithdrawalRecorded"`; `type`: `"event"`; }, { `inputs`: readonly \[]; `name`: `"MAX_BATCH_SIZE"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"MAX_BPS"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `name`: `"allocationBps"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `name`: `"authorizedRecorders"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"addr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }]; `name`: `"checkAndRecordDeposit"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newDeposited"`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `name`: `"deposited"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"addr"`; `type`: `"address"`; }]; `name`: `"disableSender"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"addr"`; `type`: `"address"`; }]; `name`: `"enableSender"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"addr"`; `type`: `"address"`; }]; `name`: `"getAllocationBps"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getAuthorizedRecorders"`; `outputs`: readonly \[{ `internalType`: `"address[]"`; `name`: `""`; `type`: `"address[]"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"addr"`; `type`: `"address"`; }]; `name`: `"getDeposited"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"addr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"depositCapAmount"`; `type`: `"uint256"`; }]; `name`: `"getRemainingAllocation"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"addr"`; `type`: `"address"`; }]; `name`: `"isWhitelisted"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"owner"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"addr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }]; `name`: `"recordWithdrawal"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"addr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"bps"`; `type`: `"uint256"`; }]; `name`: `"setAllocation"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address[]"`; `name`: `"addrs"`; `type`: `"address[]"`; }, { `internalType`: `"uint256[]"`; `name`: `"bpsValues"`; `type`: `"uint256[]"`; }]; `name`: `"setAllocationBatch"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"recorder"`; `type`: `"address"`; }, { `internalType`: `"bool"`; `name`: `"authorized"`; `type`: `"bool"`; }]; `name`: `"setAuthorizedRecorder"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"addr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }]; `name`: `"setDeposited"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address[]"`; `name`: `"addrs"`; `type`: `"address[]"`; }, { `internalType`: `"uint256[]"`; `name`: `"amounts"`; `type`: `"uint256[]"`; }]; `name`: `"setDepositedBatch"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }]; `name`: `"transferOwnership"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }]

***

#### ABI\_TOKENIZED\_VAULT\_V2\_WHITELISTED\_ALLOCATION

> `const` **ABI\_TOKENIZED\_VAULT\_V2\_WHITELISTED\_ALLOCATION**: readonly \[{ `inputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"constructor"`; }, { `inputs`: readonly \[]; `name`: `"AccountNotWhitelisted"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"AlreadyConfigured"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"AmountTooLow"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"AssetNotWhitelisted"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"fee"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"remaining"`; `type`: `"uint256"`; }]; `name`: `"CollectableFeesExceeded"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"DepositCapReached"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"DepositsPaused"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"FeeAmountTooLow"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"FeesMustSum100"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"HighWatermarkDurationError"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"HighWatermarkViolation"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InsufficientShares"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidAccountType"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidAddress"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidAmount"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidDepositLimit"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidExternalAssets"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidLagDuration"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidReceiver"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidTimestamp"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidWithdrawalLimit"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"LimitRequired"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"MaxAllowedChangeReached"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"MaxDepositAmountReached"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"MissingFeeCollectors"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"NoSharesForReceiver"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"NotConfigured"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"NothingToProcess"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"OnlyOwnerOrOperator"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"OperatorOnly"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"OwnerAddressRequired"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"OwnerOnly"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"ReentrancyGuardReentrantCall"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"ReferenceAssetMismatch"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"SenderNotWhitelisted"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"TokenDecimalsMismatch"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"TooEarly"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"Unauthorized"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"VaultNotTimelocked"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"WhitelistLimitReached"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"WithdrawalLimitReached"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"WithdrawalsPaused"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"ZeroAddressError"`; `type`: `"error"`; }, { `anonymous`: `false`; `inputs`: readonly \[]; `name`: `"ContractConfigured"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"address"`; `name`: `"assetIn"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"amountIn"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"senderAddr"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"Deposit"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"bool"`; `name`: `"bDepositsPaused"`; `type`: `"bool"`; }, { `indexed`: `false`; `internalType`: `"bool"`; `name`: `"bWithdrawalsPaused"`; `type`: `"bool"`; }]; `name`: `"DepositWithdrawalStatusChanged"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[]; `name`: `"FeesCollected"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint8"`; `name`: `"version"`; `type`: `"uint8"`; }]; `name`: `"Initialized"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"managementFeeAmount"`; `type`: `"uint256"`; }]; `name`: `"ManagementFeeCharged"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"newManagementFeePercent"`; `type`: `"uint256"`; }]; `name`: `"ManagementFeeUpdated"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"newValue"`; `type`: `"uint256"`; }]; `name`: `"MaxChangePercentUpdated"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"OnEmergencyWithdraw"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"previousOwner"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }]; `name`: `"OwnershipTransferStarted"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"previousOwner"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }]; `name`: `"OwnershipTransferred"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"address"`; `name`: `"newWhitelistAddr"`; `type`: `"address"`; }]; `name`: `"SendersWhitelistUpdated"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"address"`; `name`: `"subAccountAddr"`; `type`: `"address"`; }]; `name`: `"SubAccountDisabled"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"address"`; `name`: `"subAccountAddr"`; `type`: `"address"`; }]; `name`: `"SubAccountEnabled"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"sender"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"receiver"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"owner"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"assets"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `name`: `"Withdraw"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"assetsAmount"`; `type`: `"uint256"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"WithdrawalProcessed"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"holderAddr"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"WithdrawalRequested"`; `type`: `"event"`; }, { `inputs`: readonly \[]; `name`: `"acceptOwnership"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"asset"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"assetsUpdatedOn"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"assetsWhitelistAddress"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"chargeManagementFee"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"chargePerformanceFees"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"claim"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"collectFees"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `components`: readonly \[{ `internalType`: `"uint256"`; `name`: `"maxDepositAmount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"maxWithdrawalAmount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"instantRedemptionFee"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"lagDuration"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"withdrawalFee"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"watermarkTimeWindow"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"maxChangePercent"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"managementFeePercent"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"performanceFeeRate"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"sendersWhitelistAddress"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"operatorAddress"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"scheduledCallerAddress"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"lpTokenAddress"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"referenceAsset"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"futureOwnerAddress"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"assetsWhitelistAddress"`; `type`: `"address"`; }]; `internalType`: `"struct ITokenizedVault.ConfigInfo"`; `name`: `"newConfig"`; `type`: `"tuple"`; }]; `name`: `"configure"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"assetIn"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"amountIn"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"deposit"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"depositCap"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"inputAssetAddr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"depositAmount"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"subAccountAddr"`; `type`: `"address"`; }]; `name`: `"depositToSubaccount"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"assetIn"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"amountIn"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"deadline"`; `type`: `"uint256"`; }, { `internalType`: `"bytes32"`; `name`: `"r"`; `type`: `"bytes32"`; }, { `internalType`: `"bytes32"`; `name`: `"s"`; `type`: `"bytes32"`; }, { `internalType`: `"uint8"`; `name`: `"v"`; `type`: `"uint8"`; }]; `name`: `"depositWithPermit"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"depositsPaused"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"addr"`; `type`: `"address"`; }]; `name`: `"disableSubAccount"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"emergencyWithdraw"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"addr"`; `type`: `"address"`; }, { `internalType`: `"uint8"`; `name`: `"accountType"`; `type`: `"uint8"`; }]; `name`: `"enableSubAccount"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"externalAssets"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `name`: `"feeCollectors"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `"collectorAddress"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"percentage"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"feesTimestamp"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"getBurnableAmountByReceiver"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"externalAssetsAmount"`; `type`: `"uint256"`; }]; `name`: `"getChangePercentage"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getFeeCollectors"`; `outputs`: readonly \[{ `components`: readonly \[{ `internalType`: `"address"`; `name`: `"collectorAddress"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"percentage"`; `type`: `"uint256"`; }]; `internalType`: `"struct IFeeCollectorsAware.CollectorDefinition[]"`; `name`: `""`; `type`: `"tuple[]"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getMaxAllowedChange"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getPerformanceFeeRecipients"`; `outputs`: readonly \[{ `components`: readonly \[{ `internalType`: `"address"`; `name`: `"collectorAddress"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"percentage"`; `type`: `"uint256"`; }]; `internalType`: `"struct IFeeCollectorsAware.CollectorDefinition[]"`; `name`: `""`; `type`: `"tuple[]"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }]; `name`: `"getRequirementByDate"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }]; `name`: `"getScheduledTransactionsByDate"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"totalTransactions"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"executionEpoch"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getSharePrice"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getTotalAssets"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getWithdrawalEpoch"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"claimableEpoch"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"globalLiabilityShares"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"highWatermark"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"ownerAddr"`; `type`: `"address"`; }]; `name`: `"initialize"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"instantRedeem"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"instantRedemptionFee"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"keepFeeInVault"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"lagDuration"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"lpTokenAddress"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"managementFeePercent"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"maxChangePercent"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"maxDepositAmount"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"maxWithdrawalAmount"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"operatorAddress"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"owner"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"bool"`; `name`: `"bPauseDeposits"`; `type`: `"bool"`; }, { `internalType`: `"bool"`; `name`: `"bPauseWithdrawals"`; `type`: `"bool"`; }]; `name`: `"pauseDepositsAndWithdrawals"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"pendingOwner"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"performanceFeeRate"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `name`: `"performanceFeeRecipients"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `"collectorAddress"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"percentage"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"assetIn"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"amountIn"`; `type`: `"uint256"`; }]; `name`: `"previewDeposit"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }, { `internalType`: `"bool"`; `name`: `"isInstant"`; `type`: `"bool"`; }]; `name`: `"previewRedemption"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"assetsAmount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"assetsAfterFee"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"maxLimit"`; `type`: `"uint256"`; }]; `name`: `"processAllClaimsByDate"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"receiverAddr"`; `type`: `"address"`; }]; `name`: `"requestRedeem"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"claimableEpoch"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"year"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"month"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"day"`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"scheduledCallerAddress"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"sendersWhitelistAddress"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"totalCollectableFees"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }]; `name`: `"transferOwnership"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"newWhitelistAddr"`; `type`: `"address"`; }]; `name`: `"updateAssetsWhitelist"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `components`: readonly \[{ `internalType`: `"address"`; `name`: `"collectorAddress"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"percentage"`; `type`: `"uint256"`; }]; `internalType`: `"struct IFeeCollectorsAware.CollectorDefinition[]"`; `name`: `"collectors"`; `type`: `"tuple[]"`; }]; `name`: `"updateFeeCollectors"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newValue"`; `type`: `"uint256"`; }, { `internalType`: `"bool"`; `name`: `"pKeepFeeInVault"`; `type`: `"bool"`; }]; `name`: `"updateInstantRedemptionFee"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newMaxDepositAmount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"newMaxWithdrawalAmount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"newDepositCap"`; `type`: `"uint256"`; }]; `name`: `"updateLimits"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newManagementFeePercent"`; `type`: `"uint256"`; }]; `name`: `"updateManagementFee"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newValue"`; `type`: `"uint256"`; }]; `name`: `"updateMaxChangePercent"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newValue"`; `type`: `"uint256"`; }]; `name`: `"updatePerformanceFee"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `components`: readonly \[{ `internalType`: `"address"`; `name`: `"collectorAddress"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"percentage"`; `type`: `"uint256"`; }]; `internalType`: `"struct IFeeCollectorsAware.CollectorDefinition[]"`; `name`: `"collectors"`; `type`: `"tuple[]"`; }]; `name`: `"updatePerformanceFeeCollectors"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"newWhitelistAddr"`; `type`: `"address"`; }]; `name`: `"updateSendersWhitelist"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newDuration"`; `type`: `"uint256"`; }]; `name`: `"updateTimelockDuration"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"externalAssetsAmount"`; `type`: `"uint256"`; }]; `name`: `"updateTotalAssets"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"watermarkTimeWindow"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"watermarkUpdatedOn"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `name`: `"whitelistedSubAccounts"`; `outputs`: readonly \[{ `internalType`: `"uint8"`; `name`: `""`; `type`: `"uint8"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"inputAssetAddr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"subAccountAddr"`; `type`: `"address"`; }]; `name`: `"withdrawFromSubaccount"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"withdrawalFee"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"withdrawalsPaused"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }]

***

#### ABI\_TOKENIZED\_VAULT\_V2\_WHITELISTED\_ASSETS

> `const` **ABI\_TOKENIZED\_VAULT\_V2\_WHITELISTED\_ASSETS**: readonly \[{ `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"ownerAddr"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"referenceAssetAddr"`; `type`: `"address"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"constructor"`; }, { `inputs`: readonly \[]; `name`: `"AssetAlreadyEnabled"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidAddress"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidDecimalPlaces"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidOraclePrice"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidOracleTimestamp"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidTimePeriod"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"OwnerAddressRequired"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"OwnerOnly"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"ReentrancyGuardReentrantCall"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"ReferenceAssetNotPermitted"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"RoundNotComplete"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"StalePrice"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"WhitelistLimitReached"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"ZeroAddressError"`; `type`: `"error"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"previousOwner"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }]; `name`: `"OwnershipTransferred"`; `type`: `"event"`; }, { `inputs`: readonly \[]; `name`: `"REFERENCE_ASSET"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"REFERENCE_ASSET_DECIMALS"`; `outputs`: readonly \[{ `internalType`: `"uint8"`; `name`: `""`; `type`: `"uint8"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"lpTokenAddress"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"assetInAddr"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"vaultAddr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"assetInAmount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"externalAssets"`; `type`: `"uint256"`; }]; `name`: `"convertToShares"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"shares"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"amountInReferenceTokens"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"assetAddr"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"oracleAddr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"newOracleDuration"`; `type`: `"uint256"`; }]; `name`: `"enableAsset"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"assetAddr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }]; `name`: `"fromInputAssetToReferenceAsset"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"assetAddr"`; `type`: `"address"`; }]; `name`: `"getOracleAddress"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"externalAssets"`; `type`: `"uint256"`; }]; `name`: `"getTotalAssetsValuation"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getWhitelistedAssets"`; `outputs`: readonly \[{ `internalType`: `"address[]"`; `name`: `""`; `type`: `"address[]"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"assetAddr"`; `type`: `"address"`; }]; `name`: `"isWhitelisted"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `name`: `"maxOracleUpdatesDuration"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"owner"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"newOwner"`; `type`: `"address"`; }]; `name`: `"transferOwnership"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"newMaxOracleUpdatesDuration"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"assetAddr"`; `type`: `"address"`; }]; `name`: `"updateOracleLagDuration"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }]

***

#### ABI\_UNIVERSAL\_RESOLVER\_RESOLVE

> `const` **ABI\_UNIVERSAL\_RESOLVER\_RESOLVE**: readonly \[{ `inputs`: readonly \[{ `components`: readonly \[{ `name`: `"target"`; `type`: `"address"`; }, { `name`: `"allowFailure"`; `type`: `"bool"`; }, { `name`: `"callData"`; `type`: `"bytes"`; }]; `name`: `"calls"`; `type`: `"tuple[]"`; }]; `name`: `"aggregate3"`; `outputs`: readonly \[{ `components`: readonly \[{ `name`: `"success"`; `type`: `"bool"`; }, { `name`: `"returnData"`; `type`: `"bytes"`; }]; `name`: `"returnData"`; `type`: `"tuple[]"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"name"`; `type`: `"bytes"`; }, { `name`: `"data"`; `type`: `"bytes"`; }]; `name`: `"resolve"`; `outputs`: readonly \[{ `name`: `""`; `type`: `"bytes"`; }, { `name`: `"address"`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `name`: `"name"`; `type`: `"bytes"`; }, { `name`: `"data"`; `type`: `"bytes"`; }, { `name`: `"gateways"`; `type`: `"string[]"`; }]; `name`: `"resolve"`; `outputs`: readonly \[{ `name`: `""`; `type`: `"bytes"`; }, { `name`: `"address"`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }]

***

#### ABI\_UNIVERSAL\_SIGNATURE\_VALIDATOR

> `const` **ABI\_UNIVERSAL\_SIGNATURE\_VALIDATOR**: readonly \[{ `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"_signer"`; `type`: `"address"`; }, { `internalType`: `"bytes32"`; `name`: `"_hash"`; `type`: `"bytes32"`; }, { `internalType`: `"bytes"`; `name`: `"_signature"`; `type`: `"bytes"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"constructor"`; }]

***

#### ABI\_WRAPPER\_ADAPTER

> `const` **ABI\_WRAPPER\_ADAPTER**: readonly \[{ `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"referralId"`; `type`: `"address"`; }]; `name`: `"depositETH"`; `outputs`: readonly \[]; `stateMutability`: `"payable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"referralId"`; `type`: `"address"`; }]; `name`: `"depositWETH"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"referralId"`; `type`: `"address"`; }]; `name`: `"getRSETHWithETH"`; `outputs`: readonly \[]; `stateMutability`: `"payable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"asset"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"depositAmount"`; `type`: `"uint256"`; }, { `internalType`: `"string"`; `name`: `"referralId"`; `type`: `"string"`; }]; `name`: `"getRSETHWithERC20"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"asset"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"depositAmount"`; `type`: `"uint256"`; }]; `name`: `"getRsETHAmountToMint"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"rsETHAmount"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }]

***

#### RWA\_REDEEM\_SUBACCOUNT

> `const` **RWA\_REDEEM\_SUBACCOUNT**: readonly \[{ `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"_vault"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"_referenceAsset"`; `type`: `"address"`; }, { `internalType`: `"address"`; `name`: `"_idleVault"`; `type`: `"address"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"constructor"`; }, { `inputs`: readonly \[]; `name`: `"AssetMismatch"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"asset"`; `type`: `"address"`; }]; `name`: `"AssetNotRedeemable"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"CannotSweepIdleVaultShares"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"CannotSweepReferenceAsset"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"DepositFailed"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"required"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"available"`; `type`: `"uint256"`; }]; `name`: `"InsufficientLiquidity"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"requested"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"actual"`; `type`: `"uint256"`; }]; `name`: `"InsufficientWithdrawal"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidOracleDecimals"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidOraclePrice"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidOracleTimestamp"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidReceiver"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidTimePeriod"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"InvalidTokenDecimals"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"OnlyVault"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"OnlyVaultOwner"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"OnlyVaultOwnerOrOperator"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"provided"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"minimum"`; `type`: `"uint256"`; }]; `name`: `"OracleStalenessTooLow"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"referenceValue"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"normalizedAmount"`; `type`: `"uint256"`; }]; `name`: `"PriceDeviationExceeded"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"requested"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"limit"`; `type`: `"uint256"`; }]; `name`: `"RedemptionExceedsLimit"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"RedemptionsPaused"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"RoundNotComplete"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"SenderNotWhitelisted"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"expected"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"actual"`; `type`: `"uint256"`; }]; `name`: `"SlippageExceeded"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"provided"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"maximum"`; `type`: `"uint256"`; }]; `name`: `"SpreadTooHigh"`; `type`: `"error"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"provided"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"minimum"`; `type`: `"uint256"`; }]; `name`: `"SpreadTooLow"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"StalePrice"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"ZeroAddress"`; `type`: `"error"`; }, { `inputs`: readonly \[]; `name`: `"ZeroAmount"`; `type`: `"error"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"user"`; `type`: `"address"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"asset"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"assetIn"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"referenceOut"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"fee"`; `type`: `"uint256"`; }]; `name`: `"AssetRedeemed"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"token"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }]; `name`: `"Deposited"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"requested"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"actual"`; `type`: `"uint256"`; }]; `name`: `"EmergencyWithdrawAll"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"bytes"`; `name`: `"reason"`; `type`: `"bytes"`; }]; `name`: `"IdleDepositFailed"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }]; `name`: `"IdleDeposited"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"bytes"`; `name`: `"reason"`; `type`: `"bytes"`; }]; `name`: `"IdleVaultFallback"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"requested"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"actual"`; `type`: `"uint256"`; }]; `name`: `"IdleWithdrawn"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"oldLimit"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"newLimit"`; `type`: `"uint256"`; }]; `name`: `"MaxRedemptionPerTxUpdated"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"asset"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"bool"`; `name`: `"enabled"`; `type`: `"bool"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"spreadBps"`; `type`: `"uint256"`; }, { `indexed`: `false`; `internalType`: `"address"`; `name`: `"oracle"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"maxPriceDeviationBps"`; `type`: `"uint256"`; }]; `name`: `"RedeemableAssetSet"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `false`; `internalType`: `"bool"`; `name`: `"paused"`; `type`: `"bool"`; }]; `name`: `"RedemptionsPausedUpdated"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"token"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"to"`; `type`: `"address"`; }]; `name`: `"TokenSwept"`; `type`: `"event"`; }, { `anonymous`: `false`; `inputs`: readonly \[{ `indexed`: `true`; `internalType`: `"address"`; `name`: `"token"`; `type`: `"address"`; }, { `indexed`: `false`; `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }, { `indexed`: `true`; `internalType`: `"address"`; `name`: `"to"`; `type`: `"address"`; }]; `name`: `"Withdrawn"`; `type`: `"event"`; }, { `inputs`: readonly \[]; `name`: `"MAX_SPREAD_BPS"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"MIN_ORACLE_STALENESS"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"MIN_SPREAD_BPS"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"availableLiquidity"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"tokenAddr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }]; `name`: `"deposit"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }]; `name`: `"depositToIdle"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"minActual"`; `type`: `"uint256"`; }]; `name`: `"emergencyWithdrawAll"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"actual"`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getIdleUtilization"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"idle"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"idleVaultValue"`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"getRedeemableAssetsList"`; `outputs`: readonly \[{ `internalType`: `"address[]"`; `name`: `""`; `type`: `"address[]"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"IDLE_VAULT"`; `outputs`: readonly \[{ `internalType`: `"contract IERC4626"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"maxRedemptionPerTx"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"asset"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }]; `name`: `"previewRedemption"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `""`; `type`: `"uint256"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"asset"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"minOut"`; `type`: `"uint256"`; }]; `name`: `"redeemAsset"`; `outputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"referenceOut"`; `type`: `"uint256"`; }]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `name`: `"redeemableAssets"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `"oracle"`; `type`: `"address"`; }, { `internalType`: `"uint8"`; `name`: `"oracleDecimals"`; `type`: `"uint8"`; }, { `internalType`: `"uint8"`; `name`: `"tokenDecimals"`; `type`: `"uint8"`; }, { `internalType`: `"uint256"`; `name`: `"spreadBps"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"maxOracleStaleness"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"maxPriceDeviationBps"`; `type`: `"uint256"`; }, { `internalType`: `"bool"`; `name`: `"enabled"`; `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"redemptionsPaused"`; `outputs`: readonly \[{ `internalType`: `"bool"`; `name`: `""`; `type`: `"bool"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"REFERENCE_ASSET"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"REFERENCE_ASSET_DECIMALS"`; `outputs`: readonly \[{ `internalType`: `"uint8"`; `name`: `""`; `type`: `"uint8"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"limit"`; `type`: `"uint256"`; }]; `name`: `"setMaxRedemptionPerTx"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"asset"`; `type`: `"address"`; }, { `internalType`: `"bool"`; `name`: `"enabled"`; `type`: `"bool"`; }, { `internalType`: `"uint256"`; `name`: `"spreadBps"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"oracle"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"maxStaleness"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"maxPriceDeviationBps"`; `type`: `"uint256"`; }]; `name`: `"setRedeemableAsset"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"bool"`; `name`: `"paused"`; `type`: `"bool"`; }]; `name`: `"setRedemptionsPaused"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"token"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }, { `internalType`: `"address"`; `name`: `"to"`; `type`: `"address"`; }]; `name`: `"sweepToken"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[]; `name`: `"VAULT"`; `outputs`: readonly \[{ `internalType`: `"address"`; `name`: `""`; `type`: `"address"`; }]; `stateMutability`: `"view"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"address"`; `name`: `"tokenAddr"`; `type`: `"address"`; }, { `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }, { `internalType`: `"address payable"`; `name`: `"receivingAddr"`; `type`: `"address"`; }]; `name`: `"withdraw"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }, { `inputs`: readonly \[{ `internalType`: `"uint256"`; `name`: `"amount"`; `type`: `"uint256"`; }, { `internalType`: `"uint256"`; `name`: `"minActual"`; `type`: `"uint256"`; }]; `name`: `"withdrawFromIdle"`; `outputs`: readonly \[]; `stateMutability`: `"nonpayable"`; `type`: `"function"`; }]


# Changelog

{% updates format="full" %}
{% update date="2026-08-18" %}

## 8.24.0

{% hint style="info" %}
**Integrator highlights**

* **Breaking:** getAttributionSuffix(chainId?) now returns undefined when chains restriction is configured without chainId passed
* **Action:** Pass chainId through to attribution methods if unattributed writes were relied upon with chains restriction set
* **New:** isAttributionEnabled() exported to report attribution config presence independent of chain gate
* **New:** approveCrossChain takes optional trailing chainId parameter to gate dataSuffix
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 6e3caa0: fix: ERC-8021 attribution chain gate is fail-closed, unblocking Ledger approvals

  `attribution.chains` used to fail open: a write whose chain ID could not be determined got the suffix anyway, on the reasoning that over-attribution is harmless. It is not. The suffix makes calldata longer than the ABI encoding of the call, which breaks clear-signing on hardware wallets — a Ledger rejects an over-long ERC-20 `approve` with `EthAppCommandError: Invalid data 6a80`, so a user on an unattributed chain could not transact at all. Reported against a mainnet vault deposit from Rabby + Ledger Nano S.

  * **`getAttributionSuffix(chainId?)`** returns `undefined` when a `chains` restriction is configured and no chain ID is passed. Unrestricted attribution (no `chains`) is unchanged and still attributes every chain.
  * **`wrapSignerWithAttribution`** sends the transaction unattributed when the provider network lookup fails, instead of appending blind. Its enabled check now uses the new `isAttributionEnabled()`, so the chain gate no longer turns the whole wrap into a pass-through.
  * **`isAttributionEnabled()`** (new, exported) reports config presence independent of the chain gate.
  * **`approveCrossChain`** takes an optional trailing `chainId` and gates its `dataSuffix` on it; both call sites in `crossChainVault` pass the chain they already resolve (`props.userChainId`, `props.config.hubChainId`). This was the one remaining write that appended the suffix with no chain check — and an `approve`, the exact call Ledger refuses.

  Integrators that set `attribution.chains` and rely on unknown-chain writes being attributed will now see those writes go out clean; pass the chain ID through if the attribution matters more than clear-signing.

</details>
{% endupdate %}

{% update date="2026-08-14" %}

## 8.23.0

{% hint style="info" %}
**Integrator highlights**

* **Action:** Set AUGUST\_SDK\_SLACK\_WEBHOOK\_URL environment variable or Slack alerts from subgraph readers will be disabled
* **Action:** Migrate from deprecated DEFAULT\_SLACK\_WEBHOOK\_URL and use resolveSlackWebhookUrl() instead
* **New:** august.sdk\_version Sentry tag added for querying consumer SDK build version
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* b2a1376: fix: let consumers configure their own Slack webhook, and stop shipping August's

  Every `slackWebookUrl` parameter in the subgraph readers defaulted to `DEFAULT_SLACK_WEBHOOK_URL`, a hardcoded webhook path baked into the published bundle and the generated `.d.ts`. A Slack webhook path is a bearer credential, so this both exposed an internal August channel to anyone who installed the SDK and sent consumers' vault alerts to that channel with no way to redirect them.

  The webhook is now resolved at call time: an explicit argument wins, otherwise `AUGUST_SDK_SLACK_WEBHOOK_URL` from the environment, otherwise alerting is disabled (a one-time console warning, rather than defaulting to somebody else's channel). Both the full `https://hooks.slack.com/services/…` URL and the bare `T…/B…/x…` path are accepted.

  **Action required for deployments that relied on the default:** set `AUGUST_SDK_SLACK_WEBHOOK_URL`, or Slack alerts from the subgraph readers will be silently disabled.

  `DEFAULT_SLACK_WEBHOOK_URL` is now `''` and deprecated; it is removed in the next major. Use `resolveSlackWebhookUrl()` instead.

### Patch Changes

* 0ad9bd8: feat: add `august.sdk_version` Sentry tag so a consumer's SDK build is queryable

  `sdk.version` is a reserved Sentry field — Sentry populates it with the version of its own client, so querying it returned `@sentry/core`'s version for every consumer rather than the August SDK's. The real value was only reachable as `tags[sdk.version]`.

  The same value is now also tagged as `august.sdk_version`, which Sentry does not shadow. `sdk.version` is still set for back-compat with existing saved queries, dashboards, and alert rules; it is deprecated and will be removed in the next major.
* 82091ae: fix: retry rate-limited eth\_getLogs chunks in getVaultRedemptionHistory and lower batch size to 8
* 7fc29b2: fix: stop the four highest-volume production error paths
  * `getVaultAvailableRedemptions` no longer fails outright on vaults that do not implement `lagDuration()`. The empty `eth_call` response is retried, then treated as "no claim lag" — previously it threw, which both raised an error per call and returned an empty redemption list for the affected vaults.
  * `getVaultRedemptionHistory` retries `eth_getLogs` chunks rejected by a provider rate limit, and lowers batch concurrency from 20 to 8. A transient cap used to abort the entire scan.
  * `getDecimals` records a transient transport fault as a breadcrumb rather than an error. Its contract is unchanged: it still never throws, still does not retry, and still resolves `undefined` on failure.
  * CeFi/OTC subaccount enrichment treats a `400` ("borrower not tracked") like `404`/`204` — a breadcrumb. `401` and `5xx` stay error-level.
* 4c6ed05: fix: demote CeFi/OTC subaccount enrichment 400 to breadcrumb severity

</details>
{% endupdate %}

{% update date="2026-08-11" %}

## 8.21.1

{% hint style="info" %}
**Integrator highlights**

* **New:** X Layer (chain 196) is now registered with RPC endpoint and Multicall3 support
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* de20993: feat: register X Layer (chain 196)

  X Layer (OKX's Polygon-CDK zkEVM, native OKB, 18 decimals) joins the EVM chains the SDK understands:

  * **`NETWORKS[196]`** — `X Layer`, explorer `https://xlayerscan.com`. This is what `explorerLink` uses for tx/address links, and what `chainIdToTagValue` slugifies for the `sdk.chain` Sentry tag (`x-layer` instead of `unknown:196`). It also lands the chain in `AVAILABLE_CHAINS`.
  * **`FALLBACK_RPC_URLS[196]`** — `https://rpc.xlayer.tech`, used when a caller supplies no provider for the chain. Verified live on 2026-08-11: returns `eth_chainId` `0xc4` and sends `access-control-allow-origin: *`, so a browser-side read works without a proxy.
  * **`MULTICALL3_VERIFIED_CHAINS`** — 196 added. `eth_getCode` at `0xcA11bde05977b3631167028862bE2a173976CA11` returned the canonical 3808-byte runtime on 2026-08-11, so vault prefetch batches its reads rather than falling back to the per-call path. Deployment presence was verified on-chain, not assumed from the deterministic deployer.

  No vault is served on chain 196 yet — this is chain registration only, so no subgraph slug mapping is added.

</details>
{% endupdate %}

{% update date="2026-08-11" %}

## 8.21.0

{% hint style="info" %}
**Integrator highlights**

* **Breaking:** Pass `undefined` as `sendTransaction` positional argument to `vaultDeposit` and `vaultRedeem`
* **Action:** Deposit and redeem now throw before submission if balance cannot be established or is insufficient
* **Action:** Update calls to provider methods if you relied on implicit `'confirmed'` commitment behavior
* **Action:** Review frozen token account handling — deposit and redeem now reject frozen accounts with an error
* **New:** Configurable Solana commitment level via `AugustSDK` and `SolanaAdapter` options
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 8ad6c43: fix: Solana deposit/redeem create token accounts atomically, and every balance read now agrees with the write path (AUGUST-7221)

  `handleSolanaDeposit` and `handleSolanaRedeem` treated SPL token accounts as preconditions, and where they did create one they sent it as its own transaction without awaiting confirmation. Two production failures traced to this.

  **Deposit no longer races its own ATA creation.** When the depositor had no share account, the SDK fired `createAssociatedTokenAccountInstruction` via `sendTransaction` and then immediately simulated the deposit. Observed in production on 2026-08-11: the deposit failed with `Simulation failed … Logs: []` while the create was still in flight, then succeeded 17s later on retry. The empty log array means the transaction never reached program execution, so nothing was written on-chain to debug from. The on-chain program cannot self-heal here: `Deposit.sender_share_account` is a plain `InterfaceAccount<TokenAccount>` with no `init_if_needed`. Creation is now prepended to the deposit via `.preInstructions()`, so it is atomic with the transfer and costs one signature instead of two. This affected every first-time depositor into a vault.

  **Redeem no longer requires the payout account to pre-exist.** Redeem rejected any wallet holding no deposit-mint account with `No token account found for deposit mint`. That is backwards — redeeming is precisely how a holder first receives the deposit mint — and it left shares acquired by transfer, airdrop, or market buy unredeemable through this SDK. The payout account is now created inline when absent. (A zero-balance account already satisfied the old guard, so this affected only wallets that had never held the deposit token at all.)

  **Idempotent creation.** All account creation uses `createAssociatedTokenAccountIdempotentInstruction`, so a concurrent create (another tab, a wallet auto-provisioning the account) is a no-op rather than a failure. The fee-recipient account is created unconditionally on redeem, replacing a `getAccountInfo` read followed by a separate transaction and a hard-coded `setTimeout(1000)`.

  **One selection rule for every read and write.** A wallet's account of record for a mint is now the one holding the largest balance, applied uniformly across `fetchUserTokenBalance`, `fetchUserShareBalance`, `fetchUserShareBalanceRaw` and both vault handlers. Previously each took whichever account the RPC happened to return first, an ordering `getParsedTokenAccountsByOwner` does not guarantee — so for a wallet holding more than one account for a mint, the balance shown and the account transacted against could be different accounts. The rule is an internal helper, not part of the public API surface.

  An unreadable balance — an RPC response whose `amount` is not a u64 string — is now treated as *unknown* rather than as zero, since scoring it zero would silently demote a funded account below a dust one and reinstate the behaviour this rule exists to prevent. **On the write paths this surfaces**: deposit and redeem throw rather than transact against an account whose balance could not be established. The three balance readers keep their existing never-throw contract and still return their documented zero fallback, logging the failure — so read behaviour is unchanged for consumers.

  **Deposit and redeem now check the balance, not just that an account exists.** A wallet with an empty or under-funded account previously passed the guard and paid a signature to discover an on-chain insufficient-funds revert. The balance is already in hand from the account lookup, so this costs no extra RPC. Both handlers throw `AugustValidationError` before submitting.

  **Commitment is now explicit and configurable — the default is unchanged.** `SolanaAdapter` previously passed no commitment when constructing its `Connection` and no `commitment` to `.rpc()`, so reads *and* confirmations both fell through to the RPC's own `'finalized'` default. That default is now stated explicitly and exposed:

  ```ts
  new AugustSDK({ solana: { rpcUrl, network, commitment: "confirmed" } });
  // or directly:
  new SolanaAdapter(endpoint, network, commitment /* default: 'finalized' */);
  ```

  The one setting covers reads and write-confirmations together — the vault handlers and both Anchor providers (`SolanaUtils.getProvider`, `getReadOnlyProvider`) all derive their commitment from the same `Connection` rather than hard-coding one, so nothing can drift apart. Pass `'confirmed'` for a markedly faster round trip (seconds rather than tens of seconds), accepting that the state you act on can still, in principle, be rolled back.

  > **Action required if you call `getProgram(...).methods…rpc()` directly.** Both provider factories previously hard-coded `commitment: 'confirmed'`, while the connection they wrapped read at `'finalized'` — the inconsistency this change removes. Writes issued through that public API *without* a per-call `commitment` therefore confirmed at `'confirmed'` before this release and now confirm at the adapter default, `'finalized'`. They are strictly safer but noticeably slower (tens of seconds rather than seconds). To keep the previous latency, configure `commitment: 'confirmed'` — which now applies to reads and writes alike — or pass `commitment` per call to `.rpc()`. Consumers who only use `vaultDeposit` / `vaultRedeem` are unaffected: those already confirmed at `'finalized'`.

  Configuring Solana through the legacy `providers` map leaves the commitment at the default: `ISolanaConfig` requires `rpcUrl` and `network`, so a commitment-only object alongside that path is not expressible in TypeScript.

  **Frozen accounts are no longer selected for transfers.** A token issuer can freeze an account, and tokens can move neither out of nor into a frozen one. Selection now prefers a spendable account over a richer frozen one, and when every account for a mint is frozen, deposit and redeem raise `AugustValidationError` naming the cause instead of reverting with a bare SPL `0x11` after the user signs. This covers all four roles: the deposit's funding account and share destination, and the redeem's share source and payout destination. The balance readers are unchanged — they still report a frozen balance, because the user does own it.

  **Sub-unit amounts are rejected before submission.** A positive UI amount below one raw unit (`1e-7` into a 6-decimal mint) truncates to zero when scaled. Both handlers now re-check the *scaled* amount, so this raises `AugustValidationError` instead of clearing the balance gate (`0n < 0n` is false) and submitting a no-op transfer.

  **One confirmation per transaction.** Both handlers fetched a blockhash that was never used to build the transaction (`.rpc()` builds and signs with its own), then ran a second `confirmTransaction` against that unrelated hash after Anchor had already confirmed. `.rpc()` now owns submission and confirmation, with `commitment` passed explicitly.

  **`sendTransaction` is now ignored** by `SolanaAdapter.vaultDeposit`, `SolanaAdapter.vaultRedeem`, and both underlying handlers — there is no longer a second transaction to send, and signing goes through the provider's wallet. Existing call sites keep compiling.

  > On the two adapter methods it is a **positional** parameter sitting immediately before `vaultAddress`. **Pass `undefined` in that position — do not delete the argument.** Deleting it shifts your vault address into the `sendTransaction` slot and leaves `vaultAddress` undefined, which falls back to the legacy single-vault PDA derivation and targets a different vault. On the underlying handlers the parameter is a named object property, so it can simply be omitted.

  Note that deposit and redeem may debit SOL rent from the signer for accounts they create (\~0.00204 SOL each; on redeem this can include the vault's fee-recipient account). This was already true of the old two-transaction flow; it is now documented on both handlers.

</details>
{% endupdate %}

{% update date="2026-08-10" %}

## 8.20.1

{% hint style="info" %}
**Integrator highlights**

* **Action:** Review `getVaultRedemptionHistory` calls if using Alchemy, Infura, dRPC or QuickNode — default block range now 10k instead of 50k.
* **Action:** If using Solana or Stellar vaults, re-test `getVaultAllocations` as non-EVM identifiers are now URL-encoded instead of checksummed.
* **New:** New `determineRpcBatchMaxCount` export to derive batch size from RPC endpoint host.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 3bd6e3f: fix: honour provider RPC limits, stop crashing on non-EVM subaccounts, and cut duplicate error reporting

  Five production failures, in descending event volume:

  * **dRPC batch rejection.** `createProvider` hard-coded `batchMaxCount: 10`, but dRPC's free tier rejects batches larger than 3 — and rejects the *whole* batch, so every Mezo read failed with `server response 500 … "Batch of more than 3 requests are not allowed"`. Batch size is now derived from the endpoint host via the new `determineRpcBatchMaxCount` export.
  * **Non-EVM subaccounts.** Every `WEBSERVER_ENDPOINTS.subaccount.*` builder ran the identifier through ethers' `getAddress()`, so a Solana or Stellar vault operator threw `TypeError: invalid address` before any request was made — breaking `getVaultAllocations` for mixed-chain vaults. EVM addresses are still checksummed; other identifiers are URL-encoded.
  * **`BigInt(undefined)`.** `getVaultAvailableRedemptions` read the amount field of the other subgraph schema (`assets` vs `shares`) and threw `TypeError: Cannot convert undefined to a BigInt`, which emptied the returned redemption list — a claimable withdrawal silently disappeared. Absent or non-numeric amounts now coerce to `0n`.
  * **`eth_getLogs` range.** `determineBlockSkipInternal` defaulted to 50 000 blocks; Alchemy, Infura, dRPC and QuickNode all cap the range at 10 000 and reject with JSON-RPC `-32600`, failing `getVaultRedemptionHistory` on Ethereum mainnet. The default is now 10 000 (15 batched `eth_getLogs` calls per 150k-block lookback instead of 3).
  * **Duplicate reporting.** A failed log-fetch chunk was captured as an issue and then re-thrown into a catch block that captured it again.

  Reporting changes (no behaviour change for callers):

  * Per-borrower CeFi/OTC lookups that return 204/404 ("this subaccount has no such position" — the common case) are breadcrumbs instead of captured errors.
  * A missing portfolio fetcher for a chain type (Stellar, Sui) is a breadcrumb, and no longer forces `getVaultAllocations` to throw `failure to fetch debank response` — Stellar vaults now return the CeFi/OTC/loan allocations that did resolve.
  * `AugustHistoryUnavailableError` is no longer reported: it is a designed outcome thrown to the caller, not an SDK fault.
  * Mezo (chain 31612) errors are dropped entirely. Its public dRPC endpoint failed often enough to dominate the error stream without describing an SDK defect. This is a deliberate blind spot — genuine Mezo bugs are silenced too; remove the `MUTED_CHAIN_SLUGS` entry in `core/analytics/sentry.ts` to restore reporting.
  * Identical SDK errors are rate-limited to 3 per signature per minute before reaching Sentry, with the suppressed count attached to the next event that is sent (`sdk.suppressed_since_last`).

</details>
{% endupdate %}

{% update date="2026-08-10" %}

## 8.20.0

{% hint style="info" %}
**Integrator highlights**

* **Breaking:** `getVault`, `getVaultLoans`, `getVaultSubaccountLoans`, `getVaultAllocations` now throw `AugustValidationError` code `INVALID_CHAIN` instead of continuing with undefined RPC URL.
* **Breaking:** `assertKnownChainId` now only rejects truly unknown chain IDs, not EVM chains with missing `NETWORKS` entries if a provider is configured.
* **Action:** Wrap calls to vault methods in try-catch to handle new `AugustValidationError` with code `INVALID_CHAIN`.
* **Action:** If passing an unconfigured EVM chain ID, provide the RPC URL to the constructor or remove the unsupported chain from your calls.
* **New:** New exports: `isEvmChainId`, `isKnownChainId`, `assertKnownChainId`, `assertEvmProviderConfigured`, `SUI_CHAIN_ID`, `NON_EVM_CHAIN_IDS`.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 2c391b8: fix: vault methods now fail fast on an unroutable `chainId` instead of continuing without an RPC URL

  `getVault`, `getVaultLoans`, `getVaultSubaccountLoans` and `getVaultAllocations` previously logged `Missing RPC URL for chainId N` and carried on with an undefined RPC URL. That surfaced as a cascade of misleading downstream failures — `connect ECONNREFUSED 127.0.0.1:8545` (ethers falling back to its localhost default), `missing revert data` on `decimals()` reads issued against the wrong chain, and `TypeError: Cannot read properties of undefined`. Entirely unknown chain IDs were swallowed the same way.

  These methods now throw a typed `AugustValidationError` with code `INVALID_CHAIN`:

  * **Unknown chain ID** (not a supported EVM chain and not Solana `-1` / Stellar `-3` / Sui `101`) — the call site is wrong.
  * **Supported EVM chain with no configured RPC URL** — remediated by passing one to the constructor; the error message names the chain and shows the fix.

  Non-EVM chain IDs are exempt from the RPC-URL check: Solana, Stellar and Sui vaults route through their adapters and never read the `providers` map.

  New exported helpers: `isEvmChainId`, `isKnownChainId`, `assertKnownChainId`, `assertEvmProviderConfigured`, plus the `SUI_CHAIN_ID` and `NON_EVM_CHAIN_IDS` constants.

  Callers that previously relied on these methods continuing past a missing provider will now see an error at the call site rather than an opaque RPC failure later.

### Patch Changes

* 47f7e69: fix: `assertKnownChainId` no longer rejects an EVM chain ID missing from `NETWORKS` when the caller configured a provider for it (e.g. chain 10 / Optimism, which ships fallback RPCs and oracle addresses but has no `NETWORKS` entry). Previously such a chain was rejected as "unknown" before the provider check ever ran, breaking a previously-working call.

</details>
{% endupdate %}

{% update date="2026-08-07" %}

## 8.19.0

{% hint style="info" %}
**Integrator highlights**

* **New:** New `attribution` constructor option with `builderCodes` and optional `chains` appends ERC-8021 calldata suffix to EVM writes.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 8ab81d0: feat: ERC-8021 attribution (Base Builder Codes) — new `attribution` constructor option (`{ builderCodes, chains? }`) appends the ERC-8021 calldata suffix to every EVM write: ethers vault writes via the normalized-signer wrap and cross-chain OVault viem writes via `dataSuffix`. Off by default; no viem version requirement.

</details>
{% endupdate %}

{% update date="2026-08-06" %}

## 8.18.0

{% hint style="info" %}
**Integrator highlights**

* **Action:** Check if your UI handles the new `confirmationUnknown` flag to show pending instead of failed on lost confirmations.
* **Action:** Re-quote or refresh token decimals before submit if using custom decimals logic, as the SDK now caches more aggressively.
* **New:** `isRetryableRpcError` classifies transient JSON-RPC transport faults vs. genuine reverts.
* **New:** `isEmptyViewResponse` detects empty responses to argument-free ERC-20 view calls.
* **New:** `retryOnTransientRpc` retries with bounded exponential backoff on transient provider faults.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 32f2bc7: fix: stop reporting mined transactions as failed when the RPC hiccups mid-receipt-poll

  Bumped `minor` rather than `patch` per CLAUDE.md §3: although the driver is a bug fix, the change adds six exported symbols (`isRetryableRpcError`, `isEmptyViewResponse`, `retryOnTransientRpc`, `getDecimalsOrThrow`, `getReceiptTokenAddressOrThrow`, `LP_TOKEN_ADDRESS_SELECTOR`) to the public surface via `core`'s `export *`. No existing signature or behavior is removed or changed.

  `safeWaitForTx` previously only recovered from malformed-nonce RPC responses. Any other failure out of `tx.wait()` — most commonly a transient JSON-RPC transport fault while polling `eth_getTransactionReceipt` (`could not coalesce error (error={ "code": -32603 … })`) — was rethrown, so `vaultRequestRedeem` and every other write path reported a transaction that had already been broadcast and mined as FAILED. Users then retried and hit `ERC20InsufficientBalance`.

  * Adds `isRetryableRpcError(error)`, which classifies JSON-RPC `-32603`/`-32000`, ethers' "could not coalesce error", `eth_getTransactionReceipt` failures, network/timeout/fetch faults and HTTP 429/5xx as transient transport errors — while explicitly *not* matching genuine contract reverts (`CALL_EXCEPTION` carrying revert data, `execution reverted`, or a receipt with `status === 0`). `missing revert data` is intentionally excluded so this predicate never contradicts `isExpectedRevertError`.
  * Adds `isEmptyViewResponse(error, selector?)` for the one `missing revert data` shape that really is a provider artefact: an empty response to an argument-free ERC-20 view call (`decimals()`, `symbol()`, `name()`, `totalSupply()`), which a deployed token cannot legitimately revert on.
  * `safeWaitForTx` now re-polls `provider.waitForTransaction()` with bounded exponential backoff (3 attempts, 250ms base) on those transport faults. It still throws on a `status === 0` receipt and on a wait that times out with no receipt, and the existing nonce-parse fallback is unchanged.
  * **Failed writes now say whether the transaction reached the chain.** When a write is broadcast and only its confirmation is lost, the thrown `AugustSDKError.context` carries `txHash`, `broadcast: true` and `confirmationUnknown: true` — enough for a UI to render a pending state instead of "failed" (and to *not* prompt a retry, which is how a redeem gets double-submitted). A definitive on-chain revert reports `confirmationUnknown: false`, and a write that never left carries no `txHash` at all. Wired through `vaultDeposit`, `vaultRequestRedeem`, `vaultRedeem`, `depositNative`, `rwaRedeemAsset` and the approval path. No return type or call signature changed.
  * Every `decimals()` read in the write paths (approve, deposit, redeem, native deposit and the SwapRouter paths) now goes through a new `getDecimalsOrThrow`, which shares the **same cache namespace and the same in-flight dedup map** as the existing `getDecimals` used by read paths. So a read-then-write flow against the same token costs one `decimals()` RPC in total instead of two, and concurrent callers for an uncached token collapse to one call. `getDecimalsOrThrow` differs from `getDecimals` only in that it surfaces failures instead of resolving `undefined` (an `undefined` decimals reaching amount encoding silently means 18) and retries the transient ones.
  * **Every `lpTokenAddress()` read is now retried the same bounded way.** The evm-2 receipt-token lookup sits one line above those `decimals()` reads on the approve, deposit, request-redeem and SwapRouter-deposit paths, and was still a bare call — so a single truncated `eth_call` response failed the whole write with `missing revert data (action="call", data="0xf5ae497a", …)` (observed in production against the mainnet Tori Ecosystem Vault, whose `lpTokenAddress()` returns a real address when the provider is healthy). `0xf5ae497a` is added to the argument-free view selectors and exported as `LP_TOKEN_ADDRESS_SELECTOR`, and a new `getReceiptTokenAddressOrThrow` routes the read through `retryOnTransientRpc`. Applied at every call site: `vaultApprove`, `vaultDeposit`, `vaultRequestRedeem`, `swapRouterDeposit`, the cached `getReceiptTokenAddress` reader, `getVaultUserLifetimePnl`, `getPreviewRedemption`, and the evm-2 LP branch of `fetchTokenPrice` (which inlines the same retry because `core/helpers/web3` imports from `core/fetcher`, so sharing the helper would be a cycle). **This deliberately does not hide a misrouted vault.** `lpTokenAddress()` exists only on evm-2 vaults, so empty returndata is also the only signal that version routing put a vault in the wrong branch — and it is byte-identical to a provider blip. The retry is therefore bounded (3 attempts, \~750ms), rethrows the **original** error object once they are spent (identity, message, `code` and `transaction.data` intact, so `AugustSDKError.cause` and Sentry grouping are unchanged), and has no fallback: it never substitutes another address and never resolves `null`/`undefined`. A transient blip is absorbed; a deterministic misroute still fails exactly as loudly as before. Unlike `decimals`, the result is **not** cached — no vault→receipt-token mapping is memoized on the money path in this pass. Success-path RPC cost is unchanged at one `eth_call` per read.
  * `providerScope` now unwraps a runner to its provider before scoping the cache key. This is a **no-op for providers** (ethers' `AbstractProvider` defines `get provider() { return this; }`), so read paths key exactly as before; it is what lets a signer-backed write share a cache entry with a provider-backed read on the same chain instead of falling back to the `unknown` scope.
  * The retry loop (`retryOnTransientRpc`) is exported from `core/helpers/chain-error` so the receipt-poll fallback and the decimals reader share one implementation.

  Per CLAUDE.md §7.2: `isRetryableRpcError`, `isEmptyViewResponse`, `retryOnTransientRpc` and `getReceiptTokenAddressOrThrow` are **deliberately excluded from the benchmark suite**. The last is, on its success path, exactly the single `lpTokenAddress()` `eth_call` the evm-2 write paths already made (no cache, no extra round trip), so its latency is already covered by the existing `vaultDeposit` / `vaultRequestRedeem` entries. The first two are pure synchronous classifiers over an already-caught error (string `includes` plus property reads, no RPC or I/O) that only run on a failure path already dominated by the RPC round trip that failed; the third's cost is a fixed, deliberate 250/500ms backoff, not a regression surface. The rationale is recorded alongside the other benchmark exemptions in `benchmarks/suites/sdk-methods.js`. All three are covered by unit tests instead.

### Patch Changes

* 32b60bc: fix: report the correct broadcast state when a `depositWithPermit` deposit's confirmation is lost to a transient RPC fault

  `vaultDeposit`'s permit sub-path sends its single main transaction through `safeSendTx` and returns immediately on success, so the hoisted `depositTx` local — which every other sub-path assigns and which the catch block used to read the broadcast marker — was never set. If that internal wait hit a transient transport fault, the thrown error carried no `txHash` in its context, so a broadcast-but-unconfirmed permit deposit was reported as never sent, reintroducing the retry-into-double-submit window `retryable-rpc-transport-errors` closed for the other write paths. The catch now falls back to reading the marker off the error itself (`errorTxBroadcastContext`) when `depositTx` is unset — the same mechanism already used by `vaultRedeem`, `rwaRedeemAsset` and `approveCore` for their single-tx paths.
* 7c7c074: chore: route SDK telemetry to the `august-js-sdk-v2` Sentry project

</details>
{% endupdate %}

{% update date="2026-08-06" %}

## 8.17.1

{% hint style="info" %}
**Integrator highlights**

* **Action:** Monitor Slack alerts for 'Missing Subgraph' per-pool notifications, now including HTTP status reasons for subgraph failures.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* f0dd06d: fix: stop billing a dead subgraph as a Sentry error on every read

  The subgraph readers logged a missing subgraph URL, and a non-200 from a resolved one, at `error` level. Both conditions are per-vault, but the readers run on every portfolio/history request, so a handful of vaults with retired subgraphs produced over 2M Sentry error events in 30 days — the single largest consumer of the org's error quota.

  These paths now log at `warn` (a breadcrumb, still attached to any real error that follows) and route the durable signal through the existing per-pool, TTL-deduped "Missing Subgraph" Slack alert. The non-200 branches did not alert at all before, so a URL pointing at a deleted subgraph was previously only visible as error spam; it now raises the same one-per-pool alert as a missing URL, with the HTTP status as the reason.

  Every reader already resolves its chain id at the top of the function for its own use, so the alert reuses that value rather than making a second `getChainId` round trip on a cold provider.

  Behaviour is otherwise unchanged: every reader still returns its empty result on failure. Keeping the alert is deliberate — a 404 makes these readers fall back to empty history, and silently-empty subgraph history is what made the 2026-07-09 PnL overinflation incident hard to diagnose.

</details>
{% endupdate %}

{% update date="2026-08-04" %}

## 8.17.0

{% hint style="info" %}
**Integrator highlights**

* **New:** IVault now exposes `withdrawalMarginSeconds` (number | null) for withdrawal period display buffer.
* **New:** IVault now exposes `iatTraders` (string\[] | null) for IAT trader wallet addresses.
* **New:** `withdrawalMarginSeconds` property on `IVault` for display buffer configuration
* **New:** `iatTraders` property on `IVault` listing IAT trader wallet addresses
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 5d9f67e: Surface two backend tokenized-vault fields on `IVault`:
  * `withdrawalMarginSeconds` (number | null) from `withdrawal_margin_seconds` — the display buffer added on top of the on-chain lag for the withdrawal period shown to users. Null means the backend has not configured a margin and consumers should apply their own default; an explicit 0 is a real "no margin" value.
  * `iatTraders` (string\[] | null) from `iat_traders` — IAT trader wallet addresses for the vault, in the vault chain's address format. Null when not configured.

</details>
{% endupdate %}

{% update date="2026-07-30" %}

## 8.16.1

{% hint style="info" %}
**Integrator highlights**

* **Action:** getVaultUserLifetimePnl now computes totalDeposited from face value instead of live oracle quotes; lifetimePnl now correctly includes vault fees.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* efffd48: fix: `getVaultUserLifetimePnl` now computes `totalDeposited` from the face value of what a user actually deposited, rescaled to the vault's own decimals, instead of re-quoting each deposit through a live price oracle. Previously, `totalDeposited` (and therefore `lifetimePnl`) drifted between calls purely from stablecoin peg noise, and approximately re-inflated deposits back toward face value — which silently excluded the vault's entry/exit fees from PnL. `lifetimePnl` now correctly reflects those fees as a cost.

</details>
{% endupdate %}

{% update date="2026-07-27" %}

## 8.16.0

{% hint style="info" %}
**Integrator highlights**

* **Breaking:** getProgram and getProgramId now throw AugustValidationError instead of TypeError when program not deployed on network.
* **Breaking:** Removed testnet entry from programIds mapping; canonical august\_vault program is not deployed on Solana testnet.
* **Action:** Solana adapter now targets shared august\_vault program (up12…) on all networks; update integrations using retired per-vault programs.
* **Action:** APY rates on IVaultApy are percentages (7.95 means 7.95%); do not rescale these fields.
* **New:** IVault.freshness surface exposes apyComputedAt, shareRatioSnapshotAt, and cachedAt timestamps.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* f3dc1e6: fix(solana): target the shared august\_vault program and ship the deployed IDL
  * Point the Solana adapter at the shared, canonical program — `up12…`, now deployed under the same id on every network — instead of the retired per-vault SyrupBTC program (`7B8n…`) or the interim devnet deploy (`C8B1…`).
  * `getProgram` resolves the program id from an explicit `programId` or the per-network `programIds` map, independent of the IDL passed — the IDL's embedded `address` (a build stamp) is only a last-resort fallback when no `network` is known. This closes a sharp edge where a non-reference-equal copy of the built-in IDL on a non-mainnet network could resolve to the embedded mainnet program id.
  * Refresh the shipped IDL to the deployed versioned multi-vault interface (fetched from the devnet on-chain IDL), replacing the stale pre-versioned copy. Read paths (`VaultState` decode) and the `deposit`/`redeem` instructions are unchanged; the refresh adds `close_vault`/`set_aum_limits`/`update_share_token_metadata` and the versioned `initialize`. A CI drift guard (`solana-idl-drift`) fails if the committed IDL diverges from the deployed devnet program.
* 2da4cad: fix(solana): honour custom IDL program addresses, drop the undeployed testnet mapping
  * `SolanaAdapter.getProgram` now accepts an optional `programId` override and no longer discards the `address` on a caller-supplied IDL. Resolution order is explicit `programId` → custom IDL `address` → per-network default → the IDL's embedded build stamp. A copy of the SDK's bundled `vaultIdl` still defers to the network default, so the devnet-silently-targets-mainnet edge stays closed.
  * Removed the `testnet` entry from `programIds`: the canonical `august_vault` program is not deployed on Solana testnet, so the mapping handed callers an address with no executable behind it. `getProgram` and `SolanaAdapter.getProgramId` now throw `AugustValidationError` naming the deployed networks instead of returning a dead address (`getProgramId` previously threw a bare `TypeError`).
  * The Solana IDL drift guard now validates the program the SDK actually targets (`up12…`) by pinning its deployed binary across devnet/mainnet and decoding live `VaultState` accounts against the committed layout, rather than only comparing the structurally-matching `C8B1…` reference IDL.
* 8c306f7: feat: surface per-vault data-provenance timestamps as `IVault.freshness`

  Maps the backend's new `freshness` object onto `IVault` for every tokenized-vault read on both the August and Upshift surfaces: `apyComputedAt` (when `historical_apy` / TVL / drawdown were last recomputed), `shareRatioSnapshotAt` (newest persisted share-price snapshot), and `cachedAt` (when the backend assembled the response body). A `shareRatioSnapshotAt` later than `apyComputedAt` means a snapshot has landed that the APY has not been recomputed from yet — the staleness signal a UI needs to render "data as of X" instead of implying share price and APY are equally current (AUGUST-6124).

  All three are independently nullable and are never defaulted from one another. `shareRatioSnapshotAt` is populated regardless of `load_snapshots`, so it is present on the basic and sub-accounts views too. Values are passed through verbatim as RFC 3339 UTC strings with the trailing `Z`. Additive and non-breaking: `freshness` is null when the backend does not report it, and the existing top-level `cachedAt` is unchanged.

  `freshness` is read off the same response body as `historical_apy`, so the timestamps always describe the payload they annotate — including when that body is served from the SDK's in-process response cache.

  No new RPC or network calls — the field rides along on responses the SDK already fetches, and the mapping is a synchronous three-key rename.

### Patch Changes

* 75d5168: docs: document the unit contract on `IVaultApy`

  Every rate on `IVaultApy` (`apy`, `liquidApy`, `pointsApy`, `campaignApy`, `underlyingApy`) is a percentage — `7.95` means 7.95%. The backend reports decimal fractions and the SDK multiplies by 100 exactly once, uniformly, across all of them. That convention was never written down, which let a consumer scale a subset of the fields twice and display 1/100th of their real contribution (AUGUST-6967).

  Documentation only — no behaviour or value changes. `rewardsClaimable` / `rewardsCompounded` are also now marked as token amounts rather than rates.

</details>
{% endupdate %}

{% update date="2026-07-23" %}

## 8.15.0

{% hint style="info" %}
**Integrator highlights**

* **Action:** Check `is_show_compound_apy` flag to decide whether display simple or compound APY to users
* **Action:** `getVaultUserLifetimePnl` now throws `AugustHistoryUnavailableError` when deposit/withdrawal history unavailable
* **New:** `historical_compound_apy` field on `/tokenized_vault` with `apy_override.is_show_compound_apy` flag
* **New:** `AugustHistoryUnavailableError` and `assertPnlHistoryConsistent` exported for history validation
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 2277991: feat: expose compound-annualized historical APY (AUGUST-6765)

  `/tokenized_vault` now returns `historical_compound_apy` (same 1/7/30-day horizon shape as `historical_apy`) plus `apy_override.is_show_compound_apy` selecting which annualization convention the UI should display. The SDK now types both fields and passes `historical_compound_apy` through `buildBackendVault` / `buildFormattedVault` onto `IVault`, so consumers can honor the flag. Both fields are optional; absence means simple (existing behavior).
* ab1df85: feat: guard lifetime PnL against unavailable transaction history

  `getVaultUserLifetimePnl` now throws a typed `AugustHistoryUnavailableError` (code `HISTORY_UNAVAILABLE`) when a wallet holds a live on-chain position but the deposit/withdrawal history failed to load (empty deposits and empty withdrawals). Previously this state degenerated to reporting the entire position as profit — the 2026-07-09 over-inflation incident. Adds the exported `assertPnlHistoryConsistent` guard and the `AugustHistoryUnavailableError` error class.

</details>
{% endupdate %}

{% update date="2026-07-23" %}

## 8.14.0

{% hint style="info" %}
**Integrator highlights**

* **Breaking:** IVault.fees.isManagementWaived and isPerformanceWaived now return fully-resolved booleans instead of raw backend flags.
* **Action:** Review code reading isManagementWaived or isPerformanceWaived to confirm resolved boolean semantics match your use case.
* **New:** resolveFeeWaived helper function to evaluate fee-waiver state against clock and TVL latch.
* **New:** decodeRevertData, extractRevertFromErrorText, lookupSelector, simulateCall, and readTokenState helpers for transaction failure diagnostics.
* **New:** Non-EVM fee-waiver path now correctly resolves state instead of hardcoding false.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* fae58f3: feat: resolve fee-waiver state in the SDK (AUGUST-5584). `IVault.fees.isManagementWaived` and `isPerformanceWaived` now carry the fully-resolved "show Fee Waived right now?" boolean instead of the raw backend `platform_fee_override.is_fee_waived` flag. Adds the pure helper `resolveFeeWaived(isFeeWaivedToggle, waivedUntilDate, waivedUntilTvl, now?)`: the backend toggle is the master enable and one-way TVL latch (SDK does no TVL math, never reads `latest_reported_tvl`), while the SDK evaluates the date window live against the clock. Also fixes the non-EVM (Solana/Stellar/Sui) mapping path, which previously hardcoded both booleans to `false`. The `*_waived_until_date` / `*_waived_until_tvl` raw fields remain exposed for tooltip rendering. Behavioral change for consumers reading the two booleans — they were unresolved before.
* 70c960b: feat: add revert-decode helpers — `decodeRevertData` (offline decode of `Error(string)`, `Panic(uint256)`, and custom errors against an OZ ERC-6093 / SafeERC20 / LayerZero / vault-ABI corpus, extendable via `extraAbis`), `extractRevertFromErrorText` (recovers revert data, action, code, and transaction fields from an ethers v6 error string, tolerant of truncation), `lookupSelector` (openchain.xyz / 4byte.directory signature lookup for unknown selectors), `simulateCall` (`eth_call` replay that returns fresh, auto-decoded revert data), and `readTokenState` (bounded symbol/decimals/balance/allowance probe set plus issuer compliance getters `isAccountFrozen` / `isBlacklisted` / `isFrozen`). Together these let alert-triage tooling decode why a transaction failed at `estimateGas`, where no transaction hash ever exists.

</details>
{% endupdate %}

{% update date="2026-07-21" %}

## 8.13.0

{% hint style="info" %}
**Integrator highlights**

* **Action:** `getVaultVersion` (V1) is deprecated; migrate to `getVaultVersionV2` for correct multi-asset classification
* **Action:** Static `SWAP_ROUTER_ELIGIBLE_VAULTS` and `isSwapRouterEligible` are deprecated in favor of on-chain resolvers
* **New:** `getSwapRouterEligibleVaults(chainId)` resolves eligible vaults on-chain with 5-min cache
* **New:** `getSwapRouterWhitelistedTokens(chainId)` resolves chain token allowlist by scanning events
* **New:** `SWAP_ROUTER_NAMES` and `getSwapRouterName(chainId)` provide router display names
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 802b24f: feat: add `getSwapRouterEligibleVaults(chainId)` — resolves the SwapRouter's eligible-vault set on-chain (`VaultEnabled` event scan + `vaultInfo.referenceAsset` verification, fail-closed, 5-min cache) on the SDK root and `AugustVaults`; add `SWAP_ROUTER_NAMES` / `getSwapRouterName(chainId)` for the periphery contract's display name ('Upshift Swap Router' on mainnet). Deprecates the static `SWAP_ROUTER_ELIGIBLE_VAULTS` set and `isSwapRouterEligible` (kept functional as zero-RPC fallbacks) in favor of the on-chain resolver.
* b52a1ab: feat: add `getSwapRouterWhitelistedTokens(chainId)` — resolves a chain's SwapRouter token allowlist by scanning `TokenEnabled` events and verifying each against the on-chain `whitelistedTokens` mapping (the mapping is not enumerable). Exposed on the SDK root and the vaults module; lets UIs render swap-and-deposit token options without a hardcoded candidate list.

### Patch Changes

* 823b5d9: deprecate: `getVaultVersion` (V1) is now marked `@deprecated` in favour of `getVaultVersionV2`. V1 classifies multi-asset vaults only against the static `MULTI_ASSET_VAULTS` list, so any vault missing from it is misclassified as `evm-1` (the root cause of the 2026-07-06 Sentora preview/simulation break). `getVaultVersionV2` reads the backend `internal_type` and falls back to the static list only as a safety net. V1 is retained as a non-breaking shim and scheduled for removal in the next major.

</details>
{% endupdate %}

{% update date="2026-07-16" %}

## 8.12.0

{% hint style="info" %}
**Integrator highlights**

* **New:** `getSwapRouterDepositResult` resolves post-execution deposit amount and shares from mined SwapRouter events.
* **New:** `IVaultUserHistoryItem` now exposes `assetIn` and `shares` fields.
* **New:** `SWAP_ROUTER_DEX_AGGREGATOR` includes a `name` field for human-readable aggregator display.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* b3ea699: feat: add `getSwapRouterDepositResult` (and `EVMAdapter.getSwapRouterDepositResult`) to resolve the real, post-execution amount and shares from a mined SwapRouter deposit's own `Deposit` event, instead of relying on the pre-trade quote. Also adds a `name` field to `SWAP_ROUTER_DEX_AGGREGATOR` for displaying the aggregator's human-readable name instead of its address.
* a093373: feat: expose `assetIn` and `shares` on `IVaultUserHistoryItem` — `assetIn` lets consumers render the actual deposited token for multi-asset (pre-deposit) vaults instead of guessing the vault's first deposit asset; `shares` surfaces the receipt-token amount burned on a withdraw request, whose settled asset value isn't known until processing

### Patch Changes

* 6d9738a: refactor: move `getSwapRouterDepositResult` from `modules/vaults/getters` down to `core/helpers/swap-router` to break the `adapters/evm` ↔ `modules/vaults/getters` circular dependency (the repo's zero-cycle CI gate). The symbol is re-exported from its original location, so every existing import path and the public API are unchanged; no behavior change.
* add shares
* 011740e: perf: batch the per-vault `balanceOf`/`lagDuration` reads behind `getVaults({ wallet })` and `getVaultPositions` into chunked Multicall3 `aggregate3` calls, grouped by chain (10 calls per chunk). Enabled only on chains where the canonical Multicall3 deployment was verified on-chain via `eth_getCode` (all `NETWORKS` chains except Citrea 4114, which keeps the per-call path, as do non-EVM vaults) — 15 chains verified 2026-07-14, Tempo verified in a follow-up pass on 2026-07-15. Each batched call uses `allowFailure`, so a single reverting vault (e.g. paused) falls back to its own per-vault reads instead of affecting the rest of the batch — failure behavior is unchanged from the per-call path. No public API change. Measured with `benchmarks/request-counter.js` (cold cache, wallet with 62 vaults across Ethereum + Avalanche): 83 → 54 RPC HTTP requests (\~35% fewer; 124 per-vault `eth_call`s collapse into \~13 aggregated calls). The prefetch's cold-cache receipt-token (`lpTokenAddress`) resolution for evm-2 vaults is capped at 10 concurrent reads per chain, so a wallet with many uncached evm-2 vaults can't burst an unbounded number of simultaneous reads before the batch fires.

</details>
{% endupdate %}

{% update date="2026-07-16" %}

## 8.11.0

{% hint style="info" %}
**Integrator highlights**

* **Action:** Pass optional `sorobanRpcUrl` to `AugustSDK` or `StellarAdapter` to inject a keyed Soroban RPC endpoint.
* **New:** `IVaultUserHistoryItem` now exposes `assetIn` field for multi-asset vault deposits.
* **New:** Stellar adapter supports health-gated RPC failover with optional `sorobanRpcUrl` override on SDK/adapter/per-call.
* **New:** Failover retries idempotent Soroban operations on node-specific simulation errors.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* a093373: feat: expose `assetIn` on `IVaultUserHistoryItem` so consumers can render the actual deposited token for multi-asset (pre-deposit) vaults instead of guessing the vault's first deposit asset
* 84f6a59: feat(stellar): health-gated Soroban RPC failover + optional consumer RPC override (AUGUST-6653)

  The Stellar adapter resolved a single Soroban RPC endpoint and ran every read, transaction build, and submit against it. When that provider node stalled — as `soroban-rpc.mainnet.stellar.gateway.fm` did at the Protocol 27 upgrade boundary, freezing behind the network head so every simulation failed with `setting ContractComputeV0 is not present in the snapshot` — there was no way to route around it, and deposits/reads failed with `AugustSDKError: Soroban simulation failed: …`. (The EVM path already had `FALLBACK_RPC_URLS`; Stellar had none.)

  **Health-gated failover.** `queryContract`, `buildSorobanTx`, and `submitStellarTransaction` now obtain their server from an internal `getHealthyServer`, which probes the configured endpoints in priority order via `getHealth()`, uses the first healthy one, and falls back to the first reachable endpoint (so the caller still surfaces the node's real error) when none report healthy. A malformed configured endpoint (e.g. a typo'd override) is skipped rather than aborting the probe, so a bad primary can't disable every fallback. Mainnet gains `https://mainnet.sorobanrpc.com` as a keyless public fallback. The healthy-endpoint choice is cached \~30s, and concurrent callers on a cold cache share a single in-flight probe (no stampede on the parallel-read hot path).

  **Operation-level failover.** Health-gating only proves an endpoint answered `getHealth()` — a node can still hang or return a method-specific error on the real call, and the choice is cached \~30s. So `queryContract` and `buildSorobanTx` now run their (idempotent) RPC work through a failover wrapper that retries the operation against the remaining endpoints on a retryable failure, time-boxed so a hung node can't stall the call. Crucially, retryable failures include node/snapshot *simulation* errors (e.g. the `… is not present in the snapshot` post-upgrade case): these arrive as a simulation error but are node-specific, so they fail over — only a genuine contract revert (and other deterministic outcomes: unfunded account, archived-state restore) is terminal and never retried across nodes. The wrapper skips the endpoint the health-gated attempt already used (no double timeout; a sole endpoint isn't retried for nothing) and promotes a working fallback into the cache so the next call starts there. During a sustained outage the endpoint set is negative-cached (short TTL) even on the read/build path, so subsequent reads fast-fail on the primary rather than re-probing and re-looping every endpoint per call — the load amplification the negative cache exists to prevent. Submission is deliberately excluded — re-sending a signed transaction across endpoints risks a double-submit, so it needs sequence/DUPLICATE-based idempotency rather than blind retry.

  **Optional consumer RPC override (new, additive API).** Mirroring the existing `solana` config, `new AugustSDK({ stellar: { rpcUrl, network } })` now injects a Soroban RPC endpoint (e.g. a keyed Alchemy URL) — the SDK does not embed any key. The override becomes the primary with the built-in public endpoints kept behind it as failover. Also exposed via the `StellarAdapter` constructor (`new StellarAdapter(network, { sorobanRpcUrl })`), an optional per-call `sorobanRpcUrl` on the deposit/redeem params and the getter/submit functions (a per-call value wins over the adapter-level one), and threaded into the `vaults` module so `getVaults`/`getVaultPositions` Stellar reads honor the override too. All additions are optional — existing callers are unaffected.

  **Log & telemetry safety.** Health-check warnings redact the RPC URL to protocol+host; the analytics sanitizer treats `sorobanRpcUrl`/`rpcUrl` as sensitive *and* scrubs provider path-embedded keys (e.g. Alchemy `/v2/<key>`) from free-form strings and object values (not just named fields); and the failover path scrubs every configured URL from the message and chained `cause` of the error it throws. So a keyed provider endpoint — whether a per-call override captured as an instrumented argument or embedded in an SDK error string — never leaks its API key into SDK logs, telemetry, crash reporters, or a surfaced error.

  RPC cost: adds one lightweight `getHealth` probe before Soroban operations, cached \~30s per endpoint set (keyed by the full ordered list) and de-duped across concurrent callers — not per call.

</details>
{% endupdate %}

{% update date="2026-07-11" %}

## 8.10.0

{% hint style="info" %}
**Integrator highlights**

* **Action:** Check for `ACCOUNT_NOT_FUNDED` error code in write operations to prompt user top-up instead of generic error handling.
* **New:** Write helpers (`vaultApprove`, `vaultDeposit`, `vaultRequestRedeem`, `vaultRedeem`, `depositNative`, `rwaRedeemAsset`) now throw typed `AugustValidationError` with code `ACCOUNT_NOT_FUNDED` for insufficient gas/L1-fee failures.
* **New:** Export `isInsufficientFundsError(error)` classifier to detect insufficient-funds conditions.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* b774e66: feat: classify insufficient-gas/L1-fee failures on vault write paths

  When a chain node rejects a write because the sender can't cover gas — or, on rollups such as Citrea, the extra L1 data-availability fee — ethers v6 surfaces an opaque `CALL_EXCEPTION` / "missing revert data" that was previously wrapped as a generic `UNKNOWN` error and logged as an SDK fault. The real reason lives only in the nested provider error (`error.info.error.message`).

  The write helpers (`vaultApprove`, `vaultDeposit`, `vaultRequestRedeem`, `vaultRedeem`, `depositNative`, `rwaRedeemAsset`) now detect this case and throw a typed `AugustValidationError` with code `ACCOUNT_NOT_FUNDED`, so a consuming UI can branch on `err.code` to prompt the user to top up instead of string-matching. These failures are also demoted in telemetry (breadcrumb, not a billed Sentry issue) since they are a wallet-funding prompt, not a defect.

  Adds an exported `isInsufficientFundsError(error)` classifier for callers that want to detect the same condition directly.

</details>
{% endupdate %}

{% update date="2026-07-11" %}

## 8.9.0

{% hint style="info" %}
**Integrator highlights**

* **New:** `AugustApi` adds `getTimelockRequests`, `getVaultPerformanceFees`, `getVaultOracleClassification` for governance and metrics.
* **New:** `AugustApi` adds `getOtcPositions`, `getOtcMarginRequirements`, `getCuratorVaultSubaccounts`, `getCuratorVaultWhitelist` for OTC and curator operations.
* **New:** `AugustApi` adds `getDashboardLoans`, `getDiscountFactors`, `getCollateralExcessOrDeficit`, `simulateCollateral` for loan-book and risk.
* **New:** `AugustSubAccounts` adds `getSubaccountTransactions`, `getSubaccountLoanByAddress`, `getSubaccountDebank`, and `AugustApi.getRevertReason`.
* **New:** `AugustSubAccounts.getAllSubaccounts` returns paginated directory of all August subaccounts (admin-only).
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 29936be: feat: add governance & metrics read methods to `AugustApi` (`sdk.apiModule`) — `getTimelockRequests` (timelock/governance requests for a vault+chain), `getVaultPerformanceFees` (backend-computed performance fees over a period), and `getVaultOracleClassification` (public NAV-oracle classification table), with `ITimelockRequest`, `IVaultPerformanceFees`, `IOracleClassification`, and `IOracleClassificationRow` response types.
* 29936be: feat: add OTC & curator read methods to `AugustApi` (`sdk.apiModule`) — `getOtcPositions` (all tracked OTC positions), `getOtcMarginRequirements` (margin requirements, optionally filtered by counterparty/payer), `getCuratorVaultSubaccounts` (subaccounts linked to a vault), and `getCuratorVaultWhitelist` (EVM-only on-chain whitelist status), with `IOtcPositionRead`, `IOtcMarginRequirement`, and `ICuratorWhitelistStatus` response types (`getCuratorVaultSubaccounts` reuses `IWSSubaccountListItem`).
* 29936be: feat: add loan-book & risk read methods to `AugustApi` (`sdk.apiModule`) — `getDashboardLoans` (admin-only global loan book), `getDiscountFactors` (token collateral-haircut ladders), `getCollateralExcessOrDeficit` (per-subaccount collateral excess/deficit), and `simulateCollateral` (read-only collateral simulation), with `ILoanBookInfo`, `IDiscountFactorLadder`, `ICollateralExcessOrDeficit`, `ICollateralSimulationInput`, and `ICollateralSimulationResults` response types. `AugustApi` now extends `AugustBase` so it can reach the configured August API key.
* 29936be: feat: add tx-triage & activity read methods — `AugustSubAccounts.getSubaccountTransactions` (authenticated `/transactions/v2`), `AugustSubAccounts.getSubaccountLoanByAddress` (admin-only single-loan detail), `AugustSubAccounts.getSubaccountDebank` (cross-chain DeBank positions), and `AugustApi.getRevertReason` (public transaction revert-reason decode), with `ISubaccountTransaction`, `ILoanBookInfo` (reused), `ISubaccountDebank` / `IDebankAccountData`, and `IRevertReason` response types.
* acf2a4d: feat: add `AugustSubAccounts.getAllSubaccounts` — paginated directory of all August subaccounts (admin-only `GET /subaccount` backend endpoint), with `IWSSubaccountListItem` / `IWSSubaccountListChain` response types

### Patch Changes

* 7c86f9f: fix: register the Monarq XRP Yield Vault (Flare) in `VAULT_ALLOCATION_SUBACCOUNTS` so its Lending Allocation Breakdown and borrower subaccount surface (AUGUST-6485). Covered by a regression test that pins the entry.

</details>
{% endupdate %}

{% update date="2026-07-09" %}

## 8.8.0

{% hint style="info" %}
**Integrator highlights**

* **Action:** Deposit history now resolves decimals from each deposit's `assetIn` token instead of vault decimals; re-fetch and re-render deposit amounts if previously cached.
* **Action:** Native deposits now normalize against 18 decimals via `EVM_NATIVE_DECIMALS` constant; verify rendered native deposit amounts match expected values.
* **New:** Optional `publicApiBaseUrl` in SDK constructor config to override the public vault-catalog API base URL.
* **New:** New `setPublicApiBaseUrl` and `getPublicApiBaseUrl` fetcher overrides following the `timeoutMs` pattern.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 98176f4: feat: allow overriding the `public` vault-catalog API base URL

  Adds an optional `publicApiBaseUrl` to the SDK constructor config (backed by a new `setPublicApiBaseUrl` / `getPublicApiBaseUrl` fetcher override, mirroring the existing `timeoutMs` / `setSdkRequestTimeout` pattern). It repoints the unauthenticated `public` server base — the one `getVault` / `getVaults` / `fetchTokenizedVault` read from via `fetchAugustPublic` — so a non-prod deployment can serve its vault catalog from an isolated backend (e.g. a staging API serving staging-only vaults).

  Defaults to the compiled-in prod base (`https://api.augustdigital.io/api/v1`) when omitted, so production behaviour is unchanged. Invalid or non-http(s) URLs are ignored (warned) so a bad env value can't break fetches.

### Patch Changes

* 13f0dc9: fix: normalize deposit history against the deposited asset's own decimals

  Multi-asset (pre-deposit / evm-2) vaults accept deposit tokens whose decimals differ from the vault share token. User- and vault-history reads tagged every deposit with the vault's decimals, so an 18-decimal RLUSD deposit into the 6-decimal Sentora USD vault rendered \~1e12× too large ("500B TOKEN"). Deposit rows now resolve decimals from their `assetIn` token; single-asset vaults are unchanged.
* a5e4370: fix: normalize native-token subgraph deposits against 18 decimals instead of 0/vault decimals

  Native deposits carry a sentinel `assetIn` (the zero address or the EIP-7528 `NATIVE_ADDRESS`) that has no on-chain `decimals()`. `getDecimals(ZeroAddress)` returned `0` (which the `?? decimals` fallback can't override) and `getDecimals(NATIVE_ADDRESS)` reverted to the vault's decimals — either could misrender a native deposit's amount by up to \~1e18×. `buildDepositAssetDecimals` now maps both sentinels to the new `EVM_NATIVE_DECIMALS` (18) constant.

</details>
{% endupdate %}

{% update date="2026-07-09" %}

## 8.7.2

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 64d4e2b: Add Tempo network configuration and RPC URL

</details>
{% endupdate %}

{% update date="2026-07-08" %}

## 8.7.1

{% hint style="info" %}
**Integrator highlights**

* **Action:** Provide subgraph URLs via backend vault metadata instead of relying on SDK URL fabrication.
* **Action:** Non-EVM vaults (Solana/Stellar) now correctly skip EVM subgraph routing and no longer fail on history fetch.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 62c42c2: fix: stop fabricating dead subgraph URLs and stop routing non-EVM vaults through the EVM history path

  Two fixes surfaced while debugging missing Citrea vault data:

  1. `getDefaultSubgraphUrl` no longer fabricates a Goldsky URL from the chain name and vault symbol. That guess was unreliable — the chain name isn't the subgraph slug (ethers reports Citrea as `unknown`), a vault's symbol isn't its subgraph name (`EctUSD` vs `earn-ctusd`), and the path used a legacy hosted-service segment. The bogus URL 404'd silently, so a missing subgraph read as "no data". It now returns `undefined`, so callers hit their existing "Missing Subgraph" branch (warn + alert). Subgraph URLs must come from backend vault metadata. That alert branch was previously unreachable (the fabricated URL was always truthy); it is now deduped per pool so a metadata-less vault surfaces once rather than flooding the webhook on every read.
  2. `getUserHistory` and `getSubgraphUserHistory` no longer route non-EVM (Solana / Stellar) vaults into the EVM subgraph path. The Solana RPC is registered under chainId -1, so Solana vaults previously passed the provider filter and triggered `eth_chainId` against the Solana RPC, failing with "eth\_chainId is not available on SOLANA\_MAINNET" on every history fetch. Both the dispatch filter and the function now gate on an EVM address.
* e8b862a: fix: detect subgraph schema at runtime so History and Pending Withdrawals populate for every vault

  Subgraph reads chose their field schema (old snake\_case vs new camelCase) from whether the vault symbol appeared in the deprecated `SUBGRAPH_VAULT_URLS` map. A newly-added vault whose subgraph was deployed from the old template (e.g. `august-citrea-earn-ctusd`) is absent from that map, so the SDK queried new-schema field names (`blockNumber`/`blockTimestamp`/`transactionHash`) the subgraph does not expose. The subgraph returned GraphQL errors with no `data`, and the reads collapsed to empty — silently emptying the Portfolio's Pending Withdrawals and History tabs while the vault, provider and RPC were all healthy.

  The schema is now probed once per subgraph URL (`resolveSubgraphSchema`, cached) and drives the field selection in every subgraph read — withdrawal requests, processed withdrawals, combined withdrawals, user history, and vault history. Across a page's reads this adds at most one lightweight query per subgraph; the result is transparent to callers, which continue to see the internal (snake\_case) shape.

</details>
{% endupdate %}

{% update date="2026-07-08" %}

## 8.7.0

{% hint style="info" %}
**Integrator highlights**

* **Breaking:** vaultDeposit no longer routes through SwapRouter; use swapRouterDeposit for swap-based deposits.
* **Breaking:** VAULTS\_USING\_SWAP\_ROUTER renamed to SWAP\_ROUTER\_ELIGIBLE\_VAULTS; vaultUsesSwapRouter renamed to isSwapRouterEligible.
* **Action:** Migrate from deprecated VAULTS\_USING\_SWAP\_ROUTER and vaultUsesSwapRouter to new names before next major version.
* **Action:** Re-quote and call swapRouterDeposit if you were relying on implicit SwapRouter routing via vaultDeposit.
* **New:** New swapRouterDeposit method for explicit SwapRouter deposit routing with asset path selection.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 1d92be0: feat(swap-router): add explicit `swapRouterDeposit` deposit method

  New high-level method `augustSdk.evm.swapRouterDeposit(options)` (and the standalone `swapRouterDeposit(signer, options)` export) that always routes a deposit through the on-chain `SwapRouter`, reading the vault's reference asset and decimals on-chain and picking the correct path from `depositAsset` (direct deposit, native wrap, or a swap to the reference asset with a fail-closed aggregator quote).

  This gives the client an explicit opt-in to SwapRouter deposits instead of depending on `vaultDeposit`'s implicit `VAULTS_USING_SWAP_ROUTER` allowlist routing — the mechanism that accidentally swapped a native-deposit multi-asset vault (Sentora USD). `vaultDeposit` is unchanged; use it for native/adapter deposits and `swapRouterDeposit` for SwapRouter deposits.
* 282dc2b: feat: expand the MCP server into a fuller read/analytics suite (19 new tools)

  **SDK** — new `getVaultActivity({ vault, chainId, sinceTs, untilTs, types })`: the vault-wide counterpart to `getVaultUserHistory`, returning every deposit/withdrawal event for a pool (not scoped to one wallet). Its subgraph reader now paginates past the 1000-row page cap and stops early once it pages past the `sinceTs` window, so busy vaults are no longer silently truncated.

  **MCP** — 19 new tools:

  * Activity/flow: `vault_activity` (per-vault flow feed + computed summary: deposit/withdrawal counts, volumes, net flow, unique actors), `activity_ranking` ("which vaults had the most deposits last week"), `user_activity`, `user_transfers`.
  * Reads: `total_deposited`, `token_price`, `vault_withdrawals`, `vault_pnl`, `vault_annualized_apy`, `withdrawal_requests_status`.
  * Subaccounts: `subaccount_summary`, `subaccount_health_factor`, `subaccount_loans`, `subaccount_cefi_positions`, `subaccount_otc_positions`.
  * Ops: `ops_health`, `ops_redemptions` (parity with the `august ops` CLI).
  * LayerZero: `layerzero_deposits`, `layerzero_redeems`.

  **config** — new Zod result schemas backing all of the above.
* ef0bdf6: feat(swap-router): fully separate SwapRouter routing from `vaultDeposit`

  `vaultDeposit` no longer auto-routes any vault through the SwapRouter — it is now purely the native / multi-asset / adapter path. This removes the implicit, registry-driven routing that could silently swap a natively-accepted asset (e.g. depositing RLUSD/PYUSD/USDT into the multi-asset Sentora USD vault, or forcing a non-underlying token through a swap). Any-token swap deposits are the explicit, opt-in job of `swapRouterDeposit`.

  The registry is now eligibility metadata, not a routing switch:

  * `VAULTS_USING_SWAP_ROUTER` → renamed `SWAP_ROUTER_ELIGIBLE_VAULTS`
  * `vaultUsesSwapRouter` → renamed `isSwapRouterEligible`

  Both old names remain as `@deprecated` aliases for one release. The set now marks vaults whose UI may offer the (opt-in) swap-router deposit surface — consumed by app UIs and, optionally, by `swapRouterDeposit` as a fail-fast check — and is **never** read by `vaultDeposit`. Sentora USD is the initial eligible vault; its native assets still deposit via `vaultDeposit`, only foreign tokens route through `swapRouterDeposit`.

### Patch Changes

* 3f74779: fix(solana): surface the real Anchor revert reason in deposit/redeem errors

  `handleSolanaDeposit` / `handleSolanaRedeem` built their wrapped error from `e instanceof Error ? e.message : 'Unknown error'`. When an Anchor program reverts with a recognized error code, `@coral-xyz/anchor`'s `translateError` returns a `ProgramError` whose constructor calls `super()` with no argument — so `.message` is the empty string by construction (the real reason lives on `.msg`/`.code`, and `AnchorError` puts it on `.error.errorMessage`/`.error.errorCode.number`). Every recognized on-chain revert therefore surfaced — and paged Slack — as `"Solana deposit failed: "` with nothing after the colon, discarding the numeric code needed to tell `VaultPaused` (6008) from `InsufficientAmount` (6002) from an account-constraint violation.

  Both catch blocks now route the caught error through a new `describeSolanaError` helper that prefers `AnchorError.error.errorMessage`/`errorCode.number`, then `ProgramError.msg`/`code`, then a non-empty `.message`, then `.toString()`, and only falls back to an actionable `"please try again"` for a genuinely reason-less throwable (rather than an "unknown error" admission to the user; the raw throwable is still preserved on `cause` and in telemetry). The message becomes e.g. `Solana deposit failed: Vault is paused (code 6008)`. `cause` and structured `context` on the thrown `AugustSDKError` are unchanged; no public API changes.

</details>
{% endupdate %}

{% update date="2026-06-30" %}

## 8.6.1

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 543442d: fix: show pending withdrawals for new-schema vaults (e.g. Clearstar Prism)

  `getWithdrawalRequestsWithStatus` prunes requests outside a block-based lookback window via `Number(req.block_number) >= blockCutoff`. New-schema subgraphs expose the block height as `blockNumber`, but `NEW_WITHDRAWALS_REQUESTED_QUERY_PROPS` returned it un-aliased, so `req.block_number` was `undefined`, `Number(undefined)` was `NaN`, and `NaN >= blockCutoff` dropped every request. The endpoint returned `[]`, silently emptying the Pending Withdrawals tab for every vault on the new subgraph schema (any metadata-sourced vault not in the legacy `SUBGRAPH_VAULT_URLS` list) — while transaction history, which is sourced independently, still listed the redeem.

  The new-schema withdrawal query props now alias `block_number: blockNumber`, matching the existing aliasing used for `transactionHash_`/`timestamp_` (and already applied in the transfer props). The aliases on the processed/withdrawals prop sets are not read today but are added for consistency with the shared `ISubgraphBase` contract to prevent the same `NaN` prune recurring. No public API or thrown-error behaviour changes.
* a5dd13b: fix: reduce Sentry transaction volume and fix data quality issues in analytics instrumentation
  * Reduce default `tracesSampleRate` from `1.0` to `0.1` — captures a statistically valid 10% sample while cutting transaction event volume by \~90%
  * Remove `captureConsoleIntegration` — SDK errors already route through `Logger.setSentrySink`; the integration was redundantly capturing consumer app `console.error` calls as SDK error events
  * Add `beforeSendTransaction` sub-sampling for the `network` category (switchNetwork, updateWallet, clearWallet, setSigner) — these fire on every wallet/chain update and are high-frequency relative to their dashboard signal value; effective rate drops to \~1% of calls
  * Remove redundant `setTag` calls for `sdk.category`, `sdk.chain`, and `sdk.last_chainId` from `trackMethodCall` — these values are already recorded as span attributes; the global mutations were contaminating subsequent unrelated events with stale tag values
  * Remove `setMeasurement` calls from the sync method tracking path — sync methods have no span of their own, so measurements were attaching to a random parent transaction and overwriting its counters
* 14c56ca: fix: stop billing user-rejected transactions and expected on-chain reverts as Sentry issues

  Wallet user-rejections (deposit/redeem/approve) and routine read reverts (probing a function a vault doesn't implement) were logged at `error` level, turning normal product behaviour into high-volume billed Sentry issues. They are now classified via a new `isUserRejectionError` / `isExpectedRevertError` helper and demoted to `warn` (Sentry breadcrumbs, not issues); genuine failures are unchanged and still surface as errors. A narrow `ignoreErrors` backstop also drops user-rejection and localhost-node (`:8545`) noise at the transport. No public API or thrown-error behaviour changes.

</details>
{% endupdate %}

{% update date="2026-06-24" %}

## 8.6.0

{% hint style="info" %}
**Integrator highlights**

* **Action:** Update code using `getVaultTvl` — it now returns assets under management, not share count.
* **Action:** Check `fetchTokenPricesFromCoinGecko` for typed errors: `AugustValidationError` for unmapped symbols, `AugustRateLimitError` for 429 responses.
* **Action:** Verify archived-vault user history calculations; deposit asset decimals now propagate through PnL correctly.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 15c99c1: feat: serve user history for archived vaults from the backend Mongo snapshot

  `getVaultUserHistory` / `getSubgraphUserHistory` now route archived vaults to the backend `/upshift/vault_history` REST endpoint instead of their Goldsky subgraph, so deposit/withdraw history survives retiring those subgraphs. The archived set is fetched from the backend (`fetchArchivedVaults`, cached) — the routing source of truth — so a vault is only rerouted once its history has been backfilled. Adds `fetchArchivedVaults` and async `isArchivedVault`, plus the `tokenizedVault.userHistory` / `tokenizedVault.archivedVaults` endpoints. Return shape (`ISubgraphUserHistoryItem`, types deposit / withdraw-processed / withdraw-request) is unchanged.
* cd53624: feat(stellar): classify unfunded Stellar accounts under a dedicated `ACCOUNT_NOT_FUNDED` error code (AUGUST-6468)

  When a Soroban deposit/redeem targets a source account that has never been activated, `buildSorobanTx` now throws an `AugustValidationError` with the new `ACCOUNT_NOT_FUNDED` code instead of the generic `INVALID_INPUT`. This is an expected, user-actionable condition (the address just needs ≥1 XLM), so giving it its own code lets it group on its own key in telemetry rather than spamming the generic-error alert bucket. The remediation message and structured context (`sourceAddress`, `method`, `contractId`, original error as `cause`) are unchanged.

  `ACCOUNT_NOT_FUNDED` is added to the exported `AugustErrorCode` union and to the codes accepted by `AugustValidationError` — additive, so existing consumers narrowing on `AugustErrorCode` are unaffected.
* 5f47a00: fix(swap-router): pin ParaSwap to a single contract method and fail closed on router/selector drift

  `vaultDeposit` through the SwapRouter now constrains ParaSwap to one generic contract method (`swapExactAmountIn`) via the `/prices` `includeContractMethods` filter, so the resulting calldata's selector is deterministic. After fetching the quote it asserts the quote's `router` and payload selector match the new `SWAP_ROUTER_DEX_AGGREGATOR` entry for the chain, throwing a clear `AugustValidationError` instead of letting the deposit revert on-chain with `InvalidRouter()` / `InvalidNotWhitelisted()`.

  Adds the exported `SWAP_ROUTER_DEX_AGGREGATOR` constant (the single source of truth tying the off-chain swap-leg builder to the on-chain router whitelist) and an optional `contractMethod` field on `fetchSwapQuote`'s request.
* 93a983c: feat: surface per-reward backend logos via `additionalPointsDetailed`

  `getVaultRewards` now emits `additionalPointsDetailed` on `IVaultRewards`, pairing each reward's display label with its backend-provided `img_url`. Consumers can resolve a reward's logo from this `imgUrl` first and fall back to a bundled asset only when absent — so a newly-added reward with a backend logo (e.g. "Cores") renders its icon without any client-side keyword mapping. Adds the `IVaultRewardDetail` type, which carries the reward's stable `id` as the join key (labels are display-only and not guaranteed unique).

### Patch Changes

* 34dc7c6: chore: bump TypeScript `target`/`lib` to es2022 so modern APIs (e.g. `Object.hasOwn`) type-check. Emitted output now targets es2022 — requires Node 16.9+ / modern browsers.
* 1b106e7: fix(coingecko): surface typed errors for unmapped symbols and non-2xx responses

  `fetchTokenPricesFromCoinGecko` previously silently returned `null` for every failure, making rate-limits and server errors indistinguishable from "no price data". Two latent defects fixed:

  * Unmapped symbols now throw `AugustValidationError` (`INVALID_INPUT`) before any network call is made, avoiding a wasted round-trip with `"undefined"` in the URL.
  * A 429 response now throws `AugustRateLimitError`; any other non-2xx throws `AugustServerError`. JSON parse errors and network-level failures continue to return `null` (unchanged).
* 4db12d7: chore: resolve biome and tsdoc lint warnings in `core/fetcher.ts` and `core/helpers/core.ts` — replace `any` with `unknown`/generics, use template literals and `Date.now()`, drop non-null assertions and unused catch bindings, and add the missing `@param` hyphens. No behavior change.
* b9b59c4: fix: carry the deposit asset (`assetIn`/decimals) through archived-vault history so mixed-decimal pre-deposit vaults compute lifetime PnL correctly. Without it, an 18-decimal deposit (e.g. USDS) into a 6-decimal-vault was normalized at the vault's decimals, inflating the cost basis \~1e12 and showing -100% / multi-billion PnL.
* 50a29b4: fix: archived-vault user history now sorts ascending by timestamp (matching the subgraph path's ordering contract) and drops rows with an unparseable timestamp instead of emitting a "NaN" stamp
* 34dc7c6: fix: drop unused `@ts-expect-error` in Buffer polyfill; use `globalThis` cast instead of bare `global`
* 03ba56b: docs(readme): fix broken quick-start snippet and sub-accounts accessor in the package README

  The `@augustdigital/sdk` package README (rendered on npmjs.com and bundled in the tarball) used a named import `import { AugustSDK } from '@augustdigital/sdk'`, but the package only exposes `AugustSDK` as a default export — so the copy-pasted snippet resolved to `undefined` and `new AugustSDK(...)` threw. Switched to the default import `import AugustSDK from '@augustdigital/sdk'`.

  Also corrected the Sub-Accounts section heading from `sdk.subaccounts` (a private field) to the public accessor `sdk.subAccountsModule`.
* a8a9c74: fix: correct vault LP share-price math and `round()` on bigints
  * `fetchTokenPrice` computed a vault LP token's share price by integer-dividing the raw `totalAssets`/`totalSupply` bigints, which floored a \~1.05 ratio to `1` and re-normalized it to \~1e-18 — collapsing the LP price to \~0 (and throwing on a zero-supply vault). Share price is now derived from the normalized values.
  * `round()` threw `TypeError` when called on a `bigint` without an options object, because the bigint branch read `options.decimals` instead of `options?.decimals`. It now falls back to the default decimals as documented.
* c2cfd5c: fix: correct current-TVL value, loan-cache staleness, and the musd CoinGecko price
  * `getVaultTvl` (current/non-historical path) returned the vault's `totalSupply()` (shares minted) instead of assets under management. It now reads `getTotalAssets()` (evm-2) / `totalAssets()` (v1), matching the historical path. TVL is no longer understated by the share-price ratio.
  * `fetchTokenizedVaultLoans` / `fetchTokenizedVaultSubaccountLoans` read the shared LRU cache twice (`if (CACHE.get(key)) loans = CACHE.get(key)`). Because the cache allows stale reads and deletes a stale entry on first `get`, a stale hit returned `undefined` instead of refetching. They now use `getSafeCache`/`setSafeCache`, which refetch on expiry like the rest of the SDK.
  * `fetchTokenPricesFromCoinGecko` returned a nested tuple (`[['…', 1]]`) for the `musd` (mezo-usd) stablecoin while every other branch returns a scalar, yielding `NaN` (or a non-number "price") downstream. It now returns the scalar peg `1`.
* 093f09d: fix(stellar): surface the decoded Soroban transaction result code on submit failures (AUGUST-6412)

  `submitStellarTransaction` now decodes the transaction-level XDR result-code discriminant (e.g. `txBadSeq`, `txTooLate`) and attaches it as `resultCode` on both the thrown `AugustSDKError` context and the error log — on the send-time `ERROR` path and the confirm-time `FAILED` path. Previously the reason was only available buried inside the stringified XDR in the error message.

  Decoding is best-effort: if the RPC result is not a decoded union, `resultCode` is omitted (`undefined`) and the error still carries the stringified XDR, so the message text is unchanged. As a side effect of the refactor, the failure-detail guard changed from key-presence (`'errorResult' in sendResult`) to truthiness — a present-but-falsy result now yields an empty detail (the message falls back to the status) instead of the literal `"null"`.

  No public API surface changes.
* b57c70c: chore: resolve biome and tsdoc lint warnings in `modules/vaults/getters.ts` and `services/coingecko/fetcher.ts` — type the `poolTotalSupply` locals and `defiPerBorrower`/`renderStatus`/CoinGecko response shapes instead of `any`, initialize the redemption-date locals, drop non-null assertions, switch to optional chaining, and fix the `@param` hyphens, `{@link}` throws tags, and a brace-laden `@returns`. No behavior change.

</details>
{% endupdate %}

{% update date="2026-06-18" %}

## 8.5.0

{% hint style="info" %}
**Integrator highlights**

* **New:** CROSS\_CHAIN\_VAULT\_CONFIGS registry exports August LayerZero OVault deployments by address.
* **New:** getCrossChainVaultConfig, isCrossChainVault, getOVaultChains, isHubOnlyReceipt, getWithdrawDestinationChains helpers resolve cross-chain vault configuration.
* **New:** Pass ICrossChainVaultConfig directly to crossChainVaultDeposit and quoteCrossChainDeposit instead of assembling per-chain maps.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 621e098: feat(evm): add cross-chain OVault vault registry + resolver helpers

  Adds an address-keyed registry (`CROSS_CHAIN_VAULT_CONFIGS`) of August's LayerZero OVault deployments plus `getCrossChainVaultConfig`, `isCrossChainVault`, `getOVaultChains`, `isHubOnlyReceipt`, and `getWithdrawDestinationChains`. Consumers can now resolve a full `ICrossChainVaultConfig` by vault address — and pass it straight to `crossChainVaultDeposit` / `quoteCrossChainDeposit` — instead of hand-assembling per-chain contract maps and LayerZero EIDs. Mirrors the SwapRouter registry pattern.

</details>
{% endupdate %}

{% update date="2026-06-18" %}

## 8.4.0

{% hint style="info" %}
**Integrator highlights**

* **Action:** Review `getVaults` behavior — closed vaults are excluded by default; pass `includeClosed: true` for portfolio/position-tracking use cases.
* **New:** New `AugustApi` backend module with `getVaultUnrealizedPnlHistory()` and `getLatestUnrealizedPnl()` methods.
* **New:** `getVaults` now accepts optional `includeClosed` flag to include closed vaults in results.
* **New:** Published type declarations now include full TSDoc and exclude `@internal` helpers from autocomplete.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 70e1792: feat: new `AugustApi` backend module — `sdk.apiModule` (methods also exposed directly on `AugustSDK`) for backend-computed data with no on-chain equivalent:

  * `getVaultUnrealizedPnlHistory({ vault, limit? })` — a vault's unrealized-PnL snapshot series, newest first.
  * `getLatestUnrealizedPnl()` — the most recent unrealized-PnL snapshot for every tracked vault.

  Both methods hit the public (unauthenticated) August API with exactly one HTTPS request and no RPC calls, validate inputs up front (`AugustValidationError`), throw typed errors on HTTP failures and response-contract mismatches, and return camelCased `IUnrealizedPnlSnapshot` objects.
* 8191dc7: feat: `getVaults` gains an opt-in `includeClosed` flag for portfolio use. By default `getVaults` excludes closed vaults, so marketplace/discovery callers never receive a `status: 'closed'` vault and don't have to filter it out themselves. When `includeClosed: true` is passed, closed vaults are returned (regardless of `is_visible`, since closed + invisible vaults bucket as closed) so a consumer joining user positions can render a position held in a closed vault. In that mode, loans/allocations enrichment is also skipped for closed vaults — they have none, and `getVaultAllocations` otherwise re-throws (no debank data / no subaccounts), which previously dropped the vault into the `failed` bucket and silently removed it from the result. Additionally, `includeClosed` now propagates down to the per-vault EVM getter (`getEvmVaultV1`/`getEvmVaultV2`), which otherwise returns `null` for any `status: 'closed'` + `is_visible: false` vault ("skip closed staging vaults") — that null caused `getVault` to return null and the vault to vanish from `getVaults` even with the closed bucket spread in. With `includeClosed`, closed + invisible vaults resolve their metadata. Active vaults are always fully enriched and unaffected.
* 1e1d1b1: feat: trim `@internal` helpers from the published type surface and restore TSDoc in published declarations
  * `package.json#types` now points at an api-extractor rollup (`lib/sdk.d.ts`) that omits every export tagged `@internal` (`safeBigInt`, `safeSendTx`, `safeWaitForTx`, `tryRecoverTxHash`, `resolveSpender`, `validateAmountPrecision`, and friends) so they no longer appear in integrator autocomplete or type resolution from the package root.
  * The SDK build no longer strips comments from emitted output, so the published `.d.ts` carries the full TSDoc — editors now show hover documentation for every public method.
  * Runtime exports are unchanged and deep `lib/**` imports still resolve; this is a types-surface change only. `walletClientToSigner` intentionally remains public until the viem-native signer path ships.
  * CI fails if an `@internal` export reappears in the public types (`scripts/check-internal-dts.mjs`).

### Patch Changes

* db5a53a: fix: Phase-2 review hardening
  * `@augustdigital/config`: result-schema `address` fields now accept Stellar (`G…` account / `C…` contract) addresses, matching the SDK and backend address contract — previously a Stellar vault passed input validation but failed output-schema validation with a misleading `SCHEMA_MISMATCH`.
  * `@augustdigital/mcp`: address validation now accepts Stellar `C…` contract addresses (parity with the SDK's `isStellarAddress`), and the HTTP transport compares bearer tokens in constant time via `crypto.timingSafeEqual`.
  * `@augustdigital/sdk`: the unrealized-PnL response guard validates every required snapshot field — including the numeric monetary fields — so backend contract drift throws a typed `AugustServerError` instead of silently emitting `undefined` PnL values.

</details>
{% endupdate %}

{% update date="2026-06-17" %}

## 8.3.2

{% hint style="info" %}
**Integrator highlights**

* **New:** Add `apyOverride` and `website_url` fields to vault types.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 572b363: feat: add apyOverride and website\_url fields to vault types

</details>
{% endupdate %}

{% update date="2026-06-17" %}

## 8.3.1

{% hint style="info" %}
**Integrator highlights**

* **New:** Add `apy_override` field to `ITokenizedVault` and `website_url` to `ITokenizedVaultStrategist`.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* a7077e3: feat: add `apy_override` field to `ITokenizedVault` and `website_url` to `ITokenizedVaultStrategist`

</details>
{% endupdate %}

{% update date="2026-06-16" %}

## 8.3.0

{% hint style="info" %}
**Integrator highlights**

* **Action:** IStellarUserPosition gains optional `decimalsFromFallback?: boolean`; callers sizing a redeem must refuse to settle when it is `true`.
* **Action:** Stellar Soroban transactions now use a 10-minute validity window anchored to network time, reducing `txTOO_LATE` errors on slow signers.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* ee58832: feat(telemetry): forward SDK-internal logs to Sentry in production

  `initializeSentry` now bridges the SDK's `Logger` to the resolved Sentry SDK. `Logger.log.error` is captured as a sanitized Sentry issue (the call-site label becomes the `sdk.origin` tag; structured context becomes scope extras), and `Logger.log.warn` is recorded as a `warning`-level breadcrumb that rides along with the next captured event.

  Previously these were no-ops in production unless an integrator manually wired a logger, so the SDK's own diagnostics never reached the partner-usage dashboard. The bridge is installed only when analytics is enabled (it respects every existing disable path — `analytics.enabled: false`, `AUGUST_SDK_DISABLE_ANALYTICS`, dev/test `NODE_ENV`, and localhost), never throws back into the caller, and is cleared by `resetAnalytics()`. The integrator-pluggable `Logger.setLogger` / `Logger.setStructuredLogger` slots are unchanged.
* 908c2c4: fix(stellar): anchor Soroban tx timebounds to the network clock and widen the validity window to 10 minutes (AUGUST-6386)

  Stellar Soroban deposit/redeem transactions could fail with `txTOO_LATE` after signing. `buildSorobanTx` stamped the transaction's `maxTime` from the signer's local clock via `.setTimeout(120)`, so:

  * a device clock lagging behind network time built an already-expired transaction, and
  * slow / asynchronous signing paths (hardware wallets, institutional approval flows) could not complete within the 120-second window.

  Changes:

  * `maxTime` is now anchored to the **network** clock. `buildSorobanTx` reads the latest ledger close time (`getLatestLedger` → `getLedgers().latestLedgerCloseTime`) and builds the tx with `setTimebounds(0, networkCloseTime + TX_TIMEOUT_SECONDS)`, immunizing the deadline against signer clock skew. The network read runs in parallel with the account fetch (no added latency) and falls back to the previous local-clock `setTimeout` window on any RPC failure, so it never regresses.
  * `TX_TIMEOUT_SECONDS` raised from 120 to 600 (10 minutes) to cover slow/async signing while staying within the Soroban footprint/ledger-entry TTL.

  No public API surface changes. The read-only `queryContract` path is unaffected.
* 15a6fcf: fix(stellar): surface a `decimals()` read failure on `getStellarUserPosition` instead of silently falling back to 7

  `getStellarUserPosition` reads `balance()` and `decimals()` in parallel. When `decimals()` failed but `balance()` succeeded, it returned a confident `{ shares, decimals: 7 }` indistinguishable from a genuine 7-decimal vault. A consumer sizing a `redeem` against an ERC4626 offset vault (share decimals = asset + offset, e.g. 13) would then under-redeem by `10^offset` — a silent money-correctness gap (AUGUST-6381, follow-up to AUGUST-6380).

  `IStellarUserPosition` now carries an optional `decimalsFromFallback?: boolean` (optional for source back-compat — existing consumer object literals still compile — but always populated by `getStellarUserPosition`). It is `true` when `decimals` is the fallback (the on-chain read failed) and `false` when it is the authoritative on-chain value. Callers that size a redeem MUST refuse to settle when it is `true` rather than trusting `decimals`. The SDK's own `getVaultPositions` now treats a fallback-decimals position as a failed read and reports a zero balance instead of a mis-scaled one. No change to the `null`-on-balance-failure behavior.

### Patch Changes

* d548100: chore: migrate tooling to Biome (lint + format) and add Knip (dead-code/unused-deps)

  Replaces ESLint + Prettier + oxlint with [Biome](https://biomejs.dev) for linting and formatting, and adds [Knip](https://knip.dev) for unused-file/dependency detection (report-only baseline). A minimal ESLint config is retained solely to run `eslint-plugin-tsdoc` (`pnpm lint:tsdoc`), which Biome has no equivalent for. Inline `// eslint-disable` directives that referenced now-Biome rules were translated to `// biome-ignore` / `// biome-ignore-all`. No runtime behavior or public API change.
* 769c982: refactor(logging): route remaining console.\* calls through Logger

  Swept the last non-Solana `console.{log,warn,error}` sites onto `Logger.log.{info,warn,error}`, each tagged with its originating function: `core/fetcher.ts`, `core/helpers/web3.ts`, `core/base.class.ts`, `adapters/sui/getters.ts`, and `modules/vaults/fetcher.ts`. Combined with the Logger→Sentry bridge, these diagnostics are now sanitized and (in production) forwarded to Sentry instead of leaking to the integrator's console.

  The `no-console` ESLint rule is tightened to flag every console method (previously `warn`/`error` were allowed). The logger module — the dev-mode floor (`core/logger/index.ts`) and the Slack transport (`core/logger/slack.ts`, which cannot import `Logger` without a cycle) — is exempted, and a few deliberately integrator-facing notices (the version-update nudge and the `override` deprecation warning) keep `console.warn` behind documented inline exceptions.

</details>
{% endupdate %}

{% update date="2026-06-10" %}

## 8.2.0

{% hint style="info" %}
**Integrator highlights**

* **Action:** Indexers watching vaults now in `VAULTS_USING_SWAP_ROUTER` must also index SwapRouter events (`Deposit`, `SwapExecuted`, etc.) as vault-direct deposit events no longer fire.
* **Action:** Call `vaultDeposit` with `slippageBps` option to override the default 1% slippage on SwapRouter-routed deposits.
* **New:** `EVMAdapter` gains `swapAndDeposit`, `depositViaSwapRouter`, and `depositNativeViaSwapRouter` for single-call swap-and-deposit flows.
* **New:** New `fetchSwapQuote` function builds calldata for the SwapRouter swap leg; results include `fetchedAt` for staleness detection.
* **New:** New `IContractWriteOptions.receiver` lets callers mint vault shares to an address other than `wallet`.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 0070001: feat: SwapRouter integration for vault deposits (AUGUST-5475).

  Adds the on-chain `SwapRouter` periphery contract to the SDK so users can deposit any whitelisted ERC-20 (or native ETH) into any opted-in August vault via a single atomic call. The SwapRouter swaps the input to the vault's reference asset and forwards the proceeds to the vault's deposit interface, normalizing ERC-4626 (v1/v3) and multi-asset (v2) flows behind one entry point.

  ### New public surface

  * New methods on `EVMAdapter`: `swapAndDeposit`, `depositViaSwapRouter`, `depositNativeViaSwapRouter` (all in `modules/vaults/write.actions.ts`). Each handles approval automatically against the SwapRouter as spender and returns the resulting tx hash.
  * New public function `fetchSwapQuote` in `services/swap-quotes` builds the calldata needed for a SwapRouter swap leg. v1 uses Paraswap; the result is shaped so 1inch/0x can be added later without breaking callers. Results include `fetchedAt` so UI integrators can detect stale quotes.
  * `vaultDeposit` now routes through the SwapRouter automatically when the target vault is in `VAULTS_USING_SWAP_ROUTER` and the chain has a registered router. The existing call signature is unchanged. New optional `IContractWriteOptions.receiver` lets callers mint shares to a different address than `wallet` (treasury / cold-storage flows).
  * New per-chain constants: `SWAP_ROUTER_ADDRESSES` (Ethereum mainnet: `0xAC771209FF2b71EECfF6E85a9AD01db8Ff2618B0`), `SWAP_ROUTER_WRAPPED_NATIVE` (mainnet: WETH), and `SWAP_ROUTER_MAX_SWAPS` (mirrors the on-chain `MAX_SWAPS = 9`). New vault opt-in set `VAULTS_USING_SWAP_ROUTER` and `ORIGIN_CODES` registry for partner/referral fee tracking.
  * New types: `ISwapParams`, `ISwapAndDepositOptions`, `ISwapRouterDirectDepositOptions`, `ISwapRouterNativeDepositOptions`, `SwapRouterVaultType` (values `1` for ERC-4626, `2` for TokenizedVaultV2 — mirrors the on-chain constants).
  * New ABI `ABI_SWAP_ROUTER`.

  ### Safety hardening (vs. naive integration)

  * Per-leg `ISwapParams` validation rejects `amountIn === 0n`, `minAmountOut === 0n` (slippage off), `tokenIn === tokenOut`, malformed router/payload at the SDK boundary.
  * `slippageBps` accepts `[0, 10_000)` — `10_000` (100% slippage = no protection) is rejected.
  * `originCode` must be a 32-byte hex string; the SDK throws a typed `AugustValidationError` instead of waiting for the on-chain `InvalidOrigin` revert.
  * Paraswap response shape is validated end-to-end: `priceRoute.destAmount` must be a numeric string, `to` must be a valid address, `data` must be hex calldata with at least a 4-byte selector.
  * Vaults in `VAULTS_USING_SWAP_ROUTER` cannot silently fall through to the legacy adapter path. If the chain has no SwapRouter deployed, or `chainId` cannot be resolved, the SDK throws `AugustValidationError('INVALID_CHAIN')` — never routes through the MEV-vulnerable legacy `minAmountOut: 0` path.
  * `isDepositWithPermit: true` on a SwapRouter-routed vault throws rather than silently dropping the permit signature.
  * Native ETH deposits target only vaults whose reference asset equals the chain's wrapped-native token; other configurations throw with actionable guidance.
  * `swapAndDeposit` strictly requires `signer.getAddress()` to return a valid EOA (no silent fallback to receiver). Smart-account integrators (Safe, ERC-4337) should be aware that the SwapRouter pulls from `msg.sender`, not the controlling EOA — for those flows the SDK currently expects the smart account itself to be the signer's address.
  * Paraswap quote fetches accept an optional `AbortSignal` for cancellation/timeout.

  ### Coexistence with legacy adapters

  Legacy adapter paths (Treehouse, Kelp, AVAX native, Paraswap `UniversalAdapter` for non-opted-in vaults) continue to work unchanged. The two systems coexist; vaults will converge onto the SwapRouter in follow-up PRs.

  ### Deployment checklist (operator)

  Before adding a vault to `VAULTS_USING_SWAP_ROUTER`, the contract owner must complete the following on the SwapRouter (`0xAC77…18B0` on mainnet):

  1. `enableVault(vaultAddr, vaultType, swapFee)` — register the vault with the correct `vaultType` (1 for ERC-4626, 2 for TokenizedVaultV2) and any per-vault swap fee in bps.
  2. `enableToken(token)` — per accepted input token (e.g. WBTC, cbBTC, tBTC for the BTC v2 vault).
  3. `enableRouter(routerAddr, tokenApprovalAddr, authorizedSelector)` — per DEX router the quote provider may target. Paraswap's "augustor" address is set per chain; the approval-target (`TokenTransferProxy`) and the selectors used by `/transactions` are admin inputs.
  4. For non-default origin codes, `addOrigin(originCode, originFee, originFeeCollector)`.
  5. For v2 multi-asset vaults: add the SwapRouter to the vault's sender whitelist.

  The forknet smoke test at `tests/vaults/forknet-swap-router-abi.test.js` reads `vaultInfo`, `whitelistedTokens`, and the contract constants from the deployed router and fails if any expected vault is unregistered. Run `pnpm test:forknet` to verify before release.

  ### Behavior change for indexers

  For vaults moved to the SwapRouter, deposits no longer emit from the vault contract directly — events are emitted by the SwapRouter (`Deposit`, `SwapExecuted`, `SwapFeeApplied`, `OriginFeeApplied`). Subgraphs that index the vault's deposit events for the BTC v2 vault should be updated to also index the SwapRouter.

### Patch Changes

* 7d4f38f: fix: sync `VAULTS_USING_SWAP_ROUTER` with on-chain `enableVault` state on the mainnet SwapRouter (`0xAC771209FF2b71EECfF6E85a9AD01db8Ff2618B0`).

  The set previously listed `0x8AcA0841…362C21` (uptBTC) as a placeholder, but no `VaultEnabled` event was ever emitted for that address — `vaultUsesSwapRouter` was reporting `true` for a vault that the on-chain router would reject with `InvalidVault` at deposit time.

  Replaces the set with the two vaults currently registered on the contract:

  * `0xE9B725010A9E419412ed67d0fA5f3A5f40159D32` — **Upshift Core USDC** (vaultType=1, ERC-4626, reference asset USDC).
  * `0x74aD2F789Ed583DBd141bbdafC673fE1F033718b` — **Sentora USD** (vaultType=2, Tokenized Vault V2, reference asset USDC).

  Verified via `vaultInfo(addr)` reads and the full `VaultEnabled` event log on the deployed router. Consumers gated on `vaultUsesSwapRouter` (notably `vaultDeposit` dispatch) will now route the two registered vaults through the SwapRouter and continue to fall back to the legacy adapter path for everything else.
* ea679fc: fix: SwapRouter dispatch now reads the underlying asset's on-chain decimals when fetching a swap quote (previously reused the vault share-token decimals, which diverge for multi-asset v2 vaults — e.g. the 18-decimal share over the 8-decimal WBTC reference asset on the BTC v2 vault — and yielded a mispriced Paraswap quote).

  fix: Paraswap calldata now embeds the slippage-adjusted minimum `destAmount` so the aggregator's own min-out check matches the SwapRouter's `minAmountOut`. Previously the calldata was built with the exact priceRoute `destAmount` (0% tolerance) and the DEX leg would revert on any adverse movement before the SwapRouter's slippage check could apply.

  feat: `IContractWriteOptions.slippageBps` lets callers of `vaultDeposit` override the default 1% slippage tolerance applied on SwapRouter-routed deposits that require a swap.
* 5242f18: fix: honor `IContractWriteOptions.receiver` on the SwapRouter swap-and-deposit path

  `vaultDeposit` dispatched through the SwapRouter was passing `wallet` as the share recipient on the swap leg, ignoring an explicit `receiver` override. The direct-deposit and native-deposit paths already honored it; the swap path now matches.

</details>
{% endupdate %}

{% update date="2026-06-05" %}

## 8.1.0

{% hint style="info" %}
**Integrator highlights**

* **Breaking:** Result record from `getHealthFactorOfBorrowersByVault` is now keyed by lowercased vault address; lookups using mixed-case addresses will miss.
* **Action:** Update vault-address lookup keys to use `address.toLowerCase()` when reading health-factor results.
* **New:** `AugustSDK.getVaultBorrowerHealthFactor` accepts an optional `vault` field to scope the fetch to a single vault.
* **New:** New exported type `IVaultBorrowerHealthFactor` replaces the previous inline result shape.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* bc5d468: feat: `getVaultBorrowerHealthFactor` is now vault-scopable and resilient to per-loan failures.

  * New optional `vault` field on `AugustSDK.getVaultBorrowerHealthFactor({ chainId, vault })` (and matching positional param on `AugustVaults.getVaultBorrowerHealthFactor`). When provided, only that vault's tokenized record is fetched and only its loans are walked — the all-vaults / all-chains fanout is skipped entirely.
  * Internal `getVaultBorrowerHealthFactor({ vault, options })` and `getHealthFactorOfBorrowersByVault({ options, vault? })` (both in `modules/vaults/getters.ts`) now use `Promise.allSettled` for the loan-state / borrower / per-vault iterations. A single bad loan contract (e.g. a test loan whose address isn't a real deployed contract, or whose `loanState()` reverts) drops that row from the result and is logged via `Logger.log.warn` instead of rejecting the whole batch. Same applies to the per-borrower August backend call.
  * The `Record<vault, …>` returned by `getHealthFactorOfBorrowersByVault` is now keyed by **lowercased** vault address. Callers must look entries up with `address.toLowerCase()`. The previous keys reflected whatever casing the upstream `/public/tokenized_vault/` endpoint returned, which silently caused lookups against `getAddress(pool)` to miss.
  * New exported type `IVaultBorrowerHealthFactor` replaces the previous inline `{ borrower, loan, health_factor? }` shape.

  Closes the upshift-app issue where the Allocation Breakdown HF column would render a perpetual loading skeleton on Upshift USDC because one bad test loan's RPC call sank the entire health-factor batch (AUGUST-6291).

</details>
{% endupdate %}

{% update date="2026-06-04" %}

## 8.0.0

{% hint style="info" %}
**Integrator highlights**

* **Breaking:** `StellarNetwork` type alias is removed; switch to `IStellarNetwork`.
* **Breaking:** Constructor `keys.octavfi` field is removed; passing it was always a no-op.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Major Changes

* ebeb2c6: chore: remove two unused symbols from the published type surface — the `@deprecated StellarNetwork` alias (use `IStellarNetwork` instead; the alias existed for back-compat and has 0 internal consumers across our repos) and the `octavfi?: string` field on the SDK constructor's `keys` config (the field was never read; the octavfi service uses a hardcoded API key, not this config). No runtime behavior changes. Consumers that referenced `StellarNetwork` should switch to `IStellarNetwork`; consumers that passed `keys.octavfi` can drop it — it was a no-op.

### Patch Changes

* 66b18f2: fix: `fetchTokenPricesFromCoinGecko` now returns the latest price on the success path. The previous `if (data && data.length)` guard checked the `length` property on an object response (`{ prices, market_caps, total_volumes }`) and silently collapsed every successful response to `null` — only the hardcoded `musd` short-circuit was returning a real value. Fixes defect #1 from `todo/32-coingecko-fetcher-defects.md`; defects #2 (typed errors on non-2xx) and #3 (up-front symbol validation) remain pending.
* 175da88: fix: `fetchVaultsBatch` no longer mis-routes successful fetches that resolve to a falsy value (`0`, `''`, `0n`, `null`, `false`) into the failed pile. The success/failure branch now keys on `result.success` only, respecting the function's documented contract that `data` is the source of truth when `success === true`.
* 10b3b85: fix: break circular dependency `core/index.ts → core/auth → core/fetcher.ts → services/coingecko/fetcher.ts → core/index.ts` by importing `Logger` from the `core/logger` leaf module in `services/coingecko/fetcher.ts` instead of the `core` barrel. Restores the zero-cycle invariant enforced by the `Circular Dependency Check` CI job.
* 66b18f2: chore: route all `console.*` calls under `packages/sdk/src.ts/services/` (coingecko, debank, octavfi, subgraph) through `Logger.log.{info,error}`. Each call is now tagged with the originating function name and carries structured context (status, statusText, pool, address, etc.) instead of the previous raw, unsanitized strings. Errors now flow through `sanitizeError` before reaching Sentry, and dashboards can group by function tag rather than by error-message text. A new `tests/services/services-logger-hygiene.test.ts` regression-tests the floor: no `console.*` in `services/`.

</details>
{% endupdate %}

{% update date="2026-06-03" %}

## 7.0.1

{% hint style="info" %}
**Integrator highlights**

* **Breaking:** `explorerLink` return type is restored to `string`; code relying on the brief `string | undefined` shape from 7.0.0 should remove undefined guards.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* ddbfa62: fix: restore `explorerLink` return type to `string` (regression in 7.0.0)

  The circular-dependency cleanup unintentionally tightened `explorerLink`'s return type to `string | undefined` by surfacing a branch that was previously masked by `strictNullChecks: false`. Consumers had always compiled against `string` via the emitted `.d.ts`. Restore the historical public shape by returning `''` when `chain` is falsy or unknown.

</details>
{% endupdate %}

{% update date="2026-06-03" %}

## 7.0.0

{% hint style="info" %}
**Integrator highlights**

* **Breaking:** Write helpers now throw `AugustValidationError` / `AugustSDKError` instead of returning `undefined` or throwing plain `Error`; callers must use `try/catch` and narrow on these types.
* **Breaking:** `handleSolanaDeposit` and `handleSolanaRedeem` now throw on failure instead of returning `null`; replace null-return checks with `try/catch`.
* **Breaking:** Solana/Stellar adapters now throw `AugustValidationError` for input validation failures; existing plain-`Error` message-string matches will break.
* **Action:** Cross-chain: call `isQuoteStale(quote)` before submitting a cross-chain deposit/redeem and re-quote when it returns `true`; `quotedAt`/`expiresAt` are now populated.
* **Action:** Solana deposit/redeem `depositAmount`/`redeemShares` now accept `bigint` for raw on-chain units; prefer `bigint` for money flows to avoid float precision loss.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Major Changes

* 7ede403: fix(audit): correctness, validation, and observability hardening across deposit / withdraw / redeem flows

  **Breaking** — write helpers now throw `AugustValidationError` on bad input and `AugustSDKError` on downstream failures (previously returned `undefined` or threw a plain `Error`). Callers that depended on the silent no-op or were matching on `Error` message strings need to wrap calls in `try`/`catch` and narrow on `AugustValidationError` / `AugustSDKError`.

  **Breaking** — `handleSolanaDeposit` and `handleSolanaRedeem` (the Solana adapter's `vaultDeposit` / `vaultRedeem`) now `throw` on failure instead of returning `null`. Callers checking for a `null` return must convert to `try`/`catch`.

  ### EVM `write.actions`

  * **vaultDeposit**: amount is now encoded against the *deposit token's* decimals (not the vault's share decimals). Fixes a silent mis-scaling on EVM-2 multi-asset vaults and any native-token deposit into a vault whose share decimals ≠ 18. Native deposits always use 18 decimals.
  * **vaultApprove**: now mirrors `vaultDeposit`'s routing — picks the wrapper as spender for adapter deposits and the vault for multi-asset / standard deposits. Compares the existing on-chain allowance against the required amount (was: only re-approved when allowance was exactly `0`).
  * **vaultRequestRedeem**: receipt-token approval now goes through `safeSendTx` so Monad-style RPCs that return malformed pending-tx fields don't throw during parsing.
  * **vaultRedeem** (dated-claim flow) and **rwaRedeemAsset**: both now use `safeSendTx` + `tryRecoverTxHash` for nonce-fallback parity with `vaultDeposit` / `vaultRequestRedeem`.
  * **rwaRedeemAsset**: doc fix — the **vault share** must be approved to the subaccount, not the redeemable (output) asset. Caller responsibility unchanged; the comment was wrong.
  * All write helpers (`vaultApprove`, `vaultDeposit`, `vaultRequestRedeem`, `vaultRedeem`, `depositNative`, `rwaRedeemAsset`) now throw `AugustValidationError` on invalid wallet/target/wrapper addresses or missing required inputs, and reject JS `number` amounts that exceed `Number.MAX_SAFE_INTEGER`.
  * `vaultDeposit` and `vaultRequestRedeem` now require `amount` (previously silently encoded as `0` via `toNormalizedBn(undefined)`).
  * `vaultDeposit` throws `AugustValidationError` when `depositAsset` differs from the vault's underlying but no adapter is configured for the vault (previously fell through to a cryptic on-chain revert).
  * `vaultDeposit` and `vaultRequestRedeem` always wait for the ERC-20 approval receipt before sending the deposit/redeem tx, regardless of the caller's `wait` flag — closes a race window where a follow-up tx could be re-ordered ahead of the approval on some RPCs.
  * Downstream tx failures (e.g. on-chain reverts) are now wrapped in `AugustSDKError` with the original error preserved on `cause` and a structured `context` payload, instead of a plain `Error("Deposit failed: …")`.
  * `safeBigInt` allowance read inside `vaultDeposit` now passes a `'vaultDeposit:allowance'` context so flaky-RPC warnings are discriminable from approve-path warnings.
  * **safeBigInt**: emits a `Logger.warn` on malformed RPC responses (e.g. bare `"0x"`) so flaky RPCs don't cause silent gas waste from spurious approvals.

  ### EVM cross-chain (`crossChainVault`)

  * **crossChainVaultDeposit**: now rejects unsupported user chains up front with a clear error (was: cryptic config-lookup or gas-estimation revert).
  * **approveCrossChain**: throws when the approval receipt reports `reverted` (was: returned the hash unconditionally).
  * Monkey-patch lock: timing out now **throws** instead of silently proceeding with conflicting concurrent patches.
  * Fee patch: warns via `Logger.warn` when the LayerZero SDK returns an unexpected `contractFunctionName`, so the in-place LZ-fee buffer being silently no-op'd is visible in telemetry.
  * TSDoc on `crossChainVaultDeposit`, `crossChainVaultRedeem`, `buildCrossChainVaultTx`, and `needsCrossChainApproval` now states the default slippage / fee / gas buffers and documents the "approval needed on RPC failure" defensive behavior.

  ### Solana

  * **handleSolanaRedeem**: replaced `parseInt` with the new `uiAmountToRawBn` BN-based helper. Fixes precision loss for any 18-decimal mint above a few thousandths or any 9-decimal mint above \~9M tokens.
  * **handleSolanaDeposit**: now uses the same helper for consistency.
  * Both handlers now throw `AugustValidationError` / `AugustSDKError` on failure instead of returning `null`, matching the EVM helpers' error contract.

  ### Stellar

  * **submitStellarTransaction**: polling now backs off geometrically (1.5x, capped at 8s) instead of fixed 2s — same worst-case ceiling on attempts, lower RPC pressure on long waits.
  * `handleStellarRedeem` TSDoc now documents the exact Soroban contract interface it assumes (`redeem(shares: i128, receiver, owner, operator)`).

  ### Telemetry

  * `rwaRedeemAsset` is now classified under `write.redeem` in `METHOD_CATEGORIES` (previously fell back to `'unknown'`).

  ### New exports

  * `uiAmountToRawBn` (from `adapters/solana/utils`).
  * `resolveDepositTokenDecimals`, `resolveSpender`, `validateAmountPrecision`, `safeBigInt`, `safeSendTx`, `safeWaitForTx`, `tryRecoverTxHash`, `isNonceParsing` from `modules/vaults/write.actions` (marked `@internal` — exported for unit testing).
  * New polling constants: `POLL_INTERVAL_MAX_MS`, `POLL_INTERVAL_BACKOFF`.

### Minor Changes

* ae03a7b: feat(sdk): new `approve` method returns a discriminated `ApproveResult`

  Adds `augustSdk.evm.approve(...)` (and the underlying `approve` export from `modules/vaults/write.actions`) that returns one of:

  ```ts
  type ApproveResult =
    | { kind: "sent"; hash: string }
    | { kind: "sufficient"; existing: bigint }
    | { kind: "native" };
  ```

  Lets callers tell apart "we sent a tx", "existing allowance already covers the amount", and "the resolved deposit asset is native (msg.value, no allowance applies)" without re-reading on-chain state.

  `vaultApprove` is unchanged — same `Promise<string | undefined>` shape, same spender routing, same allowance / native short-circuits. Both functions share the routing implementation via an internal helper so behavior stays identical.

  Method-taxonomy entry `approve → write.approve` added so Sentry rolls the new method up next to `vaultApprove`.
* dee70e0: feat(AUG-6139): partner-usage telemetry — isomorphic Sentry bootstrap, method taxonomy, dimension tags, and arg-shape capture
  * Node + browser Sentry resolved at runtime (`@sentry/node` added alongside `@sentry/browser`); CLI now emits telemetry from its top-level error handler.
  * Every method span carries `sdk.category`, `sdk.chain`, and `sdk.argShape` so dashboards can slice partner usage by intent, chain, and call shape without leaking values.
  * Fallback `partner.id = 'unverified:<appName>'` and `partner.tier = 'unverified'` tags ship until the verified-partner endpoint exists.
  * `setMeasurement('sdk.method.invocation' | 'sdk.method.error', …)` adds counter-style aggregates for sum-based dashboards.
  * New public exports: `getSentrySDK`, `getSentryRuntime`, `getMethodCategory`, `METHOD_CATEGORIES`, `chainIdToTagValue`, `computeArgShape`, `captureSdkException`.
* ae03a7b: feat(sdk): preview / allowance / balance / maxDeposit read helpers on the EVM adapter

  Adds five additive read methods to `augustSdk.evm` so consumers can stop reaching into raw ABIs for the most common vault reads:

  * `previewDeposit({ vault, amount, asset? })` — shares returned by a deposit. Routes EVM-1 vaults to `IERC4626.previewDeposit(uint256)` and EVM-2 multi- asset vaults to `previewDeposit(address, uint256)` (returns the share slot of the tuple).
  * `previewRedeem({ vault, shares })` — assets returned by a redeem. Routes EVM-1 vaults to `IERC4626.previewRedeem(uint256)` and EVM-2 to `previewRedemption(uint256, false)` (gross slot).
  * `allowance({ vault, owner, asset? })` — raw ERC-20 allowance the owner has granted the vault. When `asset` is omitted the SDK resolves the vault's underlying via `IERC4626.asset()`.
  * `balanceOf({ asset, owner })` — raw ERC-20 balance.
  * `maxDeposit({ vault, receiver? })` — vault deposit cap. EVM-2 multi-asset vaults resolve via `maxDepositAmount()`; EVM-1 vaults use `maxDeposit(receiver)` with a zero-address default.

  All helpers return a raw `bigint` so BigInt math stays precise. Existing helpers (`vaultAllowance`, `previewRedemption`) are unchanged.

  Notes:

  * These methods require a signer because they live on `EVMAdapter`, matching the existing read pattern (`vaultAllowance`, `sendersWhitelistAddress`, etc.). A read-only `JsonRpcProvider` wrapped via `Wallet.createRandom().connect(provider)` works for query-only use.
  * Method-taxonomy entries (`previewDeposit`, `previewRedeem`, `allowance`, `balanceOf`, `maxDeposit`) added so Sentry rolls them up correctly.
  * Benchmarks for these helpers are deferred — they need a signer plumbed into `packages/sdk/benchmarks/suites/sdk-methods.js`; unit tests with mocked contracts cover the routing and validation paths.
* ae03a7b: feat(sdk): constructor option `timeoutMs` overrides the request timeout default

  Adds an additive `timeoutMs` option to the `AugustSDK` constructor (via the shared `IAugustBase` config) that overrides the default request timeout used by every August fetcher helper. The compiled-in default (90 s) is preserved when the option is omitted; per-call `IFetchAugustOptions.timeoutMs` still wins over the SDK-level default.

  ```ts
  const sdk = new AugustSDK({
    appName: "acme-trader",
    providers: { 1: "..." },
    keys: { august: process.env.AUGUST_KEY },
    timeoutMs: 20_000, // shorten the default deadline to 20s for this instance
  });
  ```

  Also exports two helpers for advanced use:

  * `setSdkRequestTimeout(ms | null)` — apply / clear the override directly.
  * `getSdkRequestTimeout()` — read the active default (override or compiled-in).

  Notes:

  * This is process-global state. If you instantiate multiple `AugustSDK` objects in the same process with different timeouts, the last constructor call wins.
  * Lowering the default for the entire package was deliberately skipped — that change is behaviorally observable for current integrators and belongs on a major bump.
* e3d589e: feat(audit-followup): tx-flow audit fixes — Solana bigint amounts, cross-chain destination validation, quote staleness, Stellar account error

  Additive correctness improvements identified during the deposit / withdraw / redeem audit. No new exported types are renamed or removed.

  ### Solana (`adapters/solana`)

  * **`handleSolanaDeposit` / `handleSolanaRedeem`** now accept `bigint` for `depositAmount` / `redeemShares`, in addition to the existing `number` form. When `bigint` is passed it is treated as the raw on-chain unit and used directly — no `uiAmountToRawBn` round-trip through a JS float. Recommended for money flows so the value the wallet signs cannot drift from the value the UI displayed. The `number` form is still supported for back-compat.
  * The SDK wrapper methods `augustSdk.solana.vaultDeposit` and `vaultRedeem` widen their `depositAmount` / `redeemShares` parameter to `number | bigint` accordingly.
  * Both handlers reject `0n` (and `0`) via `AugustValidationError`.

  ### Cross-chain (`evm/methods/crossChainVault`)

  * **`buildCrossChainVaultTx`** now rejects requests where `destinationChainId` or `userChainId` (on `DEPOSIT`) is neither the configured `hubChainId` nor present in `config.layerZeroEids.spokes`. Previously the unknown chain ID silently fell back to the hub EID, routing user funds to a chain they did not pick. Behavior unchanged when the chain ID is omitted / equals the hub / is a configured spoke.
  * **`quoteCrossChainDeposit` / `quoteCrossChainRedeem`** now populate `quotedAt` and `expiresAt` on the returned `IQuoteCrossChainResult`. The UI should call `isQuoteStale(quote)` before submit and re-quote when it returns `true` — LayerZero fees drift between quote and submit.
  * New exports from `evm/types/crossChain`:
    * `CROSS_CHAIN_QUOTE_TTL_MS` (30 000 ms default validity window).
    * `isQuoteStale(quote, now?)` helper.

  ### Stellar (`adapters/stellar/soroban`)

  * **`buildSorobanTx`** now wraps `server.getAccount` failures: when the account does not exist or is unfunded, the SDK throws an `AugustValidationError` with copy that names the actual fix ("send at least 1 XLM to activate"). Detected via both `instanceof NotFoundError` (forward-compat) and the current `"Account not found: <addr>"` message the rpc server actually throws. Other RPC errors propagate unchanged.

  ### Known limitations (deferred)

  * The Solana `deposit` instruction's IDL does not yet accept a `min_shares_out` argument, so client-side slippage protection cannot be enforced on-chain for Solana vaults. A `TODO(slippage)` comment marks the call site in `vault.actions.ts`; on-chain enforcement requires a program update.

### Patch Changes

* a18ea6d: chore(benchmarks): per-iteration RPC/API request counting

  Adds `benchmarks/request-counter.js`, a `globalThis.fetch` wrapper that buckets requests as `rpc` (Alchemy, Helius, QuickNode, etc.) vs `api` (everything else, with a per-host breakdown). The harness now resets the counter before each measured iteration and surfaces `meanRpc`, `meanApi`, `meanRequests`, and a `hostBreakdown` on every result.

  Console + markdown reporters render the new columns when counts are present and append a "Total requests across all measured iterations" section so AUGUST-5835-style perf claims (in-flight dedup, whitelist cache, `parallelLimit` fix) can be measured directly instead of estimated from the diff.

  Counting is on by default. Set `BENCHMARK_ALCHEMY_REQUEST_COUNT=0` to skip the global fetch patch (e.g. in environments where another tool already wraps `fetch`). No behavior change to the SDK itself — this is a benchmark-tooling-only change.
* 0f92c9c: refactor(vaults/date-utils): lift duplicate `TIMESTAMP_MANIPULATION_WINDOW = 300` to module scope

  `computeClaimableDate` and `isClaimableNow` each re-declared the same `const TIMESTAMP_MANIPULATION_WINDOW = 300` inside their function bodies. Lifted to a single module-level constant mirroring `TimelockedVault.sol`'s 5-minute window. Pure refactor — identical observable behavior.

  Coverage was thin (no existing tests for `date-utils.ts`); adds `tests/vaults/date-utils.test.ts` covering `computeClaimableDate`, `isClaimableNow`, `formatDateKey`, `isValidClaimableDate`, and `getDaysInMonth` (8 tests, including UTC-day rollover and leap-February).
* 0f92c9c: perf(adapters/evm): parallelize receipt-token + whitelisted-assets fetch in `getEvmVaultV2`

  After the initial vault-contract `Promise.all` resolves, `getEvmVaultV2` previously fetched the receipt-token metadata batch (5 RPCs) and the whitelisted-assets list (1 RPC) **sequentially**, even though both depend only on `vaultContractCalls` and have no data dependency on each other. They now run inside a shared outer `Promise.all`, so the wall time per V2 vault read is bounded by the slower of the two batches instead of their sum.

  No change to the merged `combinedCalls` / `combinedFunctions` shape, so downstream `buildFormattedVault` sees identical inputs. Static regression test (`tests/adapters/evm-vault-v2-parallel-fetch.test.ts`) guards the wrapping pattern.
* 0f92c9c: docs(adapters/evm): TSDoc for `vaultAllowance`, `vaultDeposit`, `vaultRequestRedeem`, `depositNative`, and `vaultRedeem`

  The EVM adapter's public write methods shipped without TSDoc blocks, which CLAUDE.md section 1 requires for every exported symbol on the published surface. Integrators saw "(no description)" in their IDE and had to read `modules/vaults/write.actions.ts` to learn the parameter shape and return semantics. Each method now has a one-sentence summary, `@param` / `@returns` / `@throws` notes, and an `@example`. A static presence test (`tests/adapters/evm-write-tsdoc.test.ts`) guards against regression.

  No behavior change.
* 0f92c9c: refactor(vaults/utils): extract local `IEvmAssetMetadata` type

  `buildFormattedVault` declared the same `{ address: IAddress; symbol: string; decimals: number }` shape twice as inline types (once for `depositAssets[]`, once for `receipt`). Lifted to a single file-local `@internal` type `IEvmAssetMetadata`. Not exported — kept internal so the public surface doesn't grow. Pure refactor.
* 0f92c9c: perf(core/web3): in-flight request dedup for `getDecimals` and `getSymbol`

  `getDecimals` and `getSymbol` already cache results in the shared `lru-cache`, but concurrent identical calls (e.g. a fresh page-load with multiple components asking for the same token's decimals before any cache write lands) each fired their own RPC. The price-fetcher path already used an in-flight `Map<key, Promise>` to coalesce these — `PRICE_REQUESTS` in `core/fetcher.ts:250` — and this change applies the same pattern to `getDecimals` (`DECIMALS_REQUESTS`) and `getSymbol` (`SYMBOL_REQUESTS`).

  Behavior on a cold cache: the first caller initiates the RPC; subsequent callers within the same tick share that promise instead of starting their own. On error, the in-flight entry is cleared in a `finally` so the next caller can retry. Cache-hit and Solana-address fast paths are unchanged, so no observable difference for callers that aren't concurrent.

  Adds `tests/utils/getdecimals-getsymbol-dedup.test.ts` with three cases (coalescing, no-false-coalescing across addresses, getSymbol parity).
* 0f92c9c: perf(core/web3): in-flight request dedup for `getReceiptTokenAddress`

  `getReceiptTokenAddress` already caches results in the shared `lru-cache`, but concurrent identical reads (multiple components or vault paths resolving the same vault's receipt-token address before the first cache write lands) each fired their own `lpTokenAddress()` RPC. This change adds a `RECEIPT_TOKEN_REQUESTS` in-flight `Map<string, Promise>` so simultaneous identical reads share a single promise — same pattern as the existing `DECIMALS_REQUESTS`, `SYMBOL_REQUESTS`, and `WHITELISTED_ASSETS_REQUESTS` maps. The in-flight entry is cleared in a `finally` so the next caller can retry after a failure.

  Cache-hit and missing-arg fast paths are unchanged.

  Adds `tests/utils/getreceipttokenaddress-dedup.test.ts` (coalescing + no false-coalescing across addresses).
* 0f92c9c: perf(vaults/getters): lift duplicate `getReceiptTokenAddress` call in the V2 position-read path

  Inside the `version === 'evm-2'` branch of the position loop in `modules/vaults/getters.ts`, `getReceiptTokenAddress(provider, vault)` was awaited twice for the same vault in back-to-back lines — once to derive decimals, once again to construct the receipt contract for the balance read. The second call was a cache hit (so cheap in RPC terms) but still incurred a function call, a cache lookup, and a Promise hop per iteration. Both call sites now reuse a single `receiptAddress` local.

  Pure lift with no behavior change — same value returned in both spots either way, and the wallet-balance branch only runs when the first await would also have run.
* ae03a7b: fix(adapters): Solana / Stellar adapters now throw typed errors for input validation

  Replaces every `throw new Error(...)` in the Solana and Stellar adapter paths that represents an input-validation failure with `AugustValidationError`, and the Stellar submit / Soroban downstream failures with `AugustSDKError` / `AugustTimeoutError`. Consumers can now narrow:

  ```ts
  catch (err) {
    if (err instanceof AugustValidationError) { ... }
  }
  ```

  …on non-EVM paths, just like EVM. Error messages are unchanged, so existing substring assertions and Sentry message-based grouping continue to work; the class-based bucket gains signal.

  Affected files:

  * `adapters/stellar/actions.ts` — `validateContractAddress`, `validateAccountAddress`
  * `adapters/stellar/soroban.ts` — `toBigIntAmount`, simulation / assembly failures (now `AugustSDKError`)
  * `adapters/stellar/submit.ts` — submission failures (`AugustSDKError`), poll-timeout (`AugustTimeoutError`)
  * `adapters/stellar/getters.ts` — `getStellarUserPosition` / `convertToShares` address validators
  * `adapters/stellar/utils.ts` — `assertNotStellar` (now `INVALID_CHAIN`)
  * `adapters/solana/vault.actions.ts` — input-validation failures inside `handleSolanaDeposit` / `handleSolanaRedeem`
  * `adapters/solana/utils.ts` — wallet / program-id / vault-version validation and `uiAmountToRawBn` precision checks
* bb0873f: fix(perf-pr-review): address review findings on the perf-optimizations PR

  Bundle of small fixes responding to the code review of `AUGUST-5835-perf-optimizations`. No public-API change.

  * **`CACHE.has` vs `CACHE.get` truthy check** — flipped 4 sites in `core/helpers/web3.ts` (`getDecimals`, `getSymbol`, `getReceiptTokenAddress`, `getWhitelistedAssets`) from `if (CACHE.get(key))` to `if (CACHE.has(key))`. Tokens with `decimals === 0`, empty-string symbols, or empty whitelist arrays were silently re-fetching on every sequential call because the cached value was falsy. Resolves and supersedes `todo/29`.
  * **`getWhitelistedAssets` typed error** — replaced `throw new Error(...)` with `AugustValidationError('INVALID_INPUT', ...)`. The function stays `@internal`; the change keeps Sentry's error-grouping intact (raw `Error` collapsed to the generic bucket).
  * **`generatePermitSignature` Logger** — the `console.error('Could not fetch DOMAIN_SEPARATOR…')` that the Solana sweep had skipped is now `Logger.log.error('generatePermitSignature', error, { message: … })`, with the original throw preserved.
  * **Dead `name` write** — moved `let name` into the cache-miss discovery block (`const name = …`). The assignment on the cache-hit path was never read; `signTypedData` uses `matchingDomain` directly.
  * **`runWithConcurrency` correctness note** — one-line comment explaining why `nextIndex++` is safe across workers (JS single-threaded; increment finishes before any `await`).
  * **Parallel-fetch test upgrade** — `tests/adapters/evm-vault-v2-parallel-fetch.test.ts` is rewritten from a regex-on-source assertion to a behavior test that mocks `Contract` / `getDecimals` / `getSymbol` / `getWhitelistedAssets` with controlled delays and asserts wall time falls in the parallel range (`1.5×–2.5× RPC_DELAY`), not the serial range (`3× RPC_DELAY`).
  * **New regression test** — `tests/utils/cache-falsy-value-hit.test.ts` proves `getDecimals` returning `0` is cached and the second call doesn't re-fetch.
* 0f92c9c: perf(vaults/utils): cache matched permit domain per (chainId, token)

  `generatePermitSignature` previously, on every invocation, fetched the token's `name()` (RPC), built 4 candidate EIP-2612 domain configurations, hashed each with `TypedDataEncoder.hashDomain`, and — only if all 4 failed — fell back to fetching `version()` (another RPC). For integrators generating multiple permits against the same token in a session, every signature reran the full discovery.

  The matched `TypedDataDomain` is now cached in the SDK's shared `lru-cache` keyed `permit-domain-<chainId>-<token>` for 1 hour. The live `DOMAIN_SEPARATOR()` is still fetched on every call and compared against the cached domain's hash; on mismatch (e.g. an upgraded token contract) the cache entry is invalidated and the original discovery loop runs. On a cache hit the `name()` RPC, the 4-iteration hashing loop, and the rare `version()` fallback are all skipped.

  The function also pairs `nonces()` with `DOMAIN_SEPARATOR()` in a single `Promise.all` (they were previously sequential), shaving a round trip on the cache-miss path.

  Adds `tests/vaults/permit-domain-cache.test.ts` covering the discovery path and the cached fast-path.
* 0f92c9c: refactor(adapters/solana): route console.\* through Logger

  Replaces all 50 raw `console.log` / `console.warn` / `console.error` calls in `adapters/solana/{vault.actions,utils}.ts` with the equivalent `Logger.log.{info,warn,error}` calls. Output is now sanitized via the analytics pipeline and gated by `Logger.setDevMode()` / `Logger.setStructuredLogger()` rather than being printed unconditionally to stdout. Level mapping is preserved (`console.log` → `info`, `console.warn` → `warn`, `console.error` → `error`). No behavior change for callers that have not configured a logger; consumers that have already enabled dev mode or plugged in a structured logger will now receive Solana adapter events on the same channel as the rest of the SDK. A static test (`tests/adapters/solana-logger-hygiene.test.ts`) guards against regression.
* a18ea6d: fix(adapters/solana): propagate the underlying error from `getVaultMints` instead of swallowing it

  `SolanaUtils.getVaultMints` previously caught any failure inside `program.account.vaultState.fetch(vaultStatePda)` — Anchor discriminator mismatch, account-not-found, RPC error — logged it, and returned `{ depositMint: '', shareMint: '', vaultVersion: undefined }`. Downstream `handleSolanaDeposit` / `handleSolanaRedeem` checked the empty mints and threw the generic `"Failed to read vault mints from on-chain state"`, which carried zero diagnostic signal. Operators triaging a failed deposit on a specific vault (e.g. Sentora xBTC on the Upshift portfolio page) had nothing actionable in the user-visible error.

  `getVaultMints` now throws an `AugustSDKError` (`code: 'UNKNOWN'`) whose `message` includes the underlying cause and whose `context` carries `vaultProgramId` and `vaultAddress`. The original error is set as `.cause`. Successful reads still cache as before; the existing read-side `getVaultStateReadOnly` path is unchanged.

  The outer catch in `handleSolanaDeposit` already re-wraps SDK errors with `cause`, so the user-visible message becomes `"Solana deposit failed: Failed to read vault mints from on-chain state: <real cause>"` — pointing at whether the IDL is wrong, the PDA doesn't exist, or the RPC failed.

  Adds `tests/vaults/solana-vault-mints-error-propagation.test.ts` covering account-not-found and discriminator-mismatch causes, asserting the typed-error shape and that the cause string flows through.
* 0f92c9c: fix(vaults/fetcher): honor `parallelLimit` in batch + comprehensive vault fetchers

  `fetchVaultsBatch` and `fetchVaultsComprehensive` previously accepted a `parallelLimit` option but renamed it to `_parallelLimit` and ran every task in a batch concurrently via `Promise.all` — the option was a no-op. The default `getVaults` call site (`modules/vaults/main.ts`) passes `parallelLimit: 8` expecting it to take effect, so RPC fan-out for a typical batch of 15 vaults was running 15-wide instead of the intended 8-wide.

  Both fetchers now route their per-batch work through an internal `runWithConcurrency` helper that pulls tasks from a queue with a hard in-flight cap. The default `parallelLimit` is `batchSize`, so any caller that did not specify `parallelLimit` sees identical pre-fix concurrency (no regression). Callers that did specify it — including the SDK's own `getVaults` — now get the cap they asked for.

  Adds `tests/vaults/fetcher-parallel-limit.test.ts` covering: the cap, the default-preserves-prior-behavior path, and that every task still completes when `parallelLimit < batchSize`.
* 0f92c9c: perf(core/vaults): pre-compute lowercase `VAULT_SYMBOLS` lookup map

  `getVaultSymbol`'s hardcoded-fallback path used `Object.entries(VAULT_SYMBOLS).find(([k]) => k.toLowerCase() === address.toLowerCase())` — an O(n) scan over the table on every cache-miss / non-canonical-case lookup. The canonical-case fast path (`VAULT_SYMBOLS[address]`) is preserved; the case-insensitive fallback now reads from a module-level `VAULT_SYMBOLS_LOWERCASE` map built once via `Object.fromEntries`, making it O(1).

  The lookup precedence (backend metadata → hardcoded fallback → on-chain `getSymbol`) is unchanged. The hardcoded list is `@deprecated` per its existing TSDoc — backend remains canonical.

  Adds `tests/utils/get-vault-symbol-lowercase.test.ts` covering canonical-case, lowercase, and unknown-address paths.
* 0f92c9c: perf(core/web3): cache `getWhitelistedAssets` list per (chain, whitelist contract)

  V2 vault reads (`getEvmVaultV2`) call `getWhitelistedAssets` on the vault's whitelist contract on every invocation, and the returned list immediately fans out into per-asset `getDecimals` + `getSymbol` reads inside `buildFormattedVault`. The list itself rarely changes, so a new internal helper `getWhitelistedAssets` (in `core/helpers/web3.ts`) wraps the contract call with an `lru-cache` entry keyed `whitelisted-assets-<providerScope>-<whitelistAddress>` and a 5-minute TTL. Concurrent identical reads share an in-flight promise — same pattern as `getDecimals` / `getSymbol`.

  `getEvmVaultV2` now delegates to that helper instead of building the contract inline; the merge step that flattens `contractCalls.getWhitelistedAssets` into the formatted vault is unchanged, so callers see the same shape.

  Adds `tests/utils/get-whitelisted-assets-cache.test.ts` (in-flight coalescing, sequential cache-hit, no false-coalescing across addresses).

</details>
{% endupdate %}

{% update date="2026-05-26" %}

## 6.0.1

{% hint style="info" %}
**Integrator highlights**

* **Action:** Update any hardcoded Flare explorer URLs from `flare-explorer.flare.network` to `flarescan.com`.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* c7c508b: fix Flare chain explorer URL from flare-explorer.flare.network to flarescan.com

</details>
{% endupdate %}

{% update date="2026-05-22" %}

## 6.0.0

{% hint style="info" %}
**Integrator highlights**

* **Breaking:** `registerUserForPoints` now requires four additional parameters (`chainId`, `signature`, `nonce`, `expiry`) and no longer uses an admin API key; all existing call sites must be updated.
* **Action:** Callers must obtain an EIP-191 personal\_sign signature over the canonical message template before calling `registerUserForPoints`; see TSDoc for exact message format.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Major Changes

* 00c6ba9: `registerUserForPoints` now authenticates via a wallet signature instead of an admin API key. The function gains four required parameters — `chainId`, `signature`, `nonce`, `expiry` — and no longer reads `options.augustKey`. Callers must obtain a personal\_sign (EIP-191) signature over a canonical message containing the lowercased user address, lowercased referrer (or `"none"`), chain id, nonce, and expiry; the backend reconstructs the same message and verifies the signature against the claimed wallet (EOA recovery first, then EIP-1271 for smart-contract wallets such as Safe). `chainId` must be one of the chains Upshift supports (see backend `SUPPORTED_REGISTRATION_CHAINS`); unsupported chains return 422. The class method `AugustVaults#registerUserForPoints` and the top-level `Sdk#registerUserForPoints` add `chainId`, `signature`, `nonce`, `expiry` as required positional arguments after `referrerAddress`. See the TSDoc on `registerUserForPoints` for the exact message template and a worked example.

### Patch Changes

* 0422e61: patch an issue with version ts. This patches a broken import in v 5.1.0 and 5.1.1

</details>
{% endupdate %}

{% update date="2026-05-22" %}

## 5.1.1

{% hint style="info" %}
**Integrator highlights**

* **Action:** Upgrade from 5.1.0 to 5.1.1 immediately; the 5.1.0 npm tarball was built from a stale directory and is missing the Solana share-price and position fixes.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* Re-publish of 5.1.0 with a clean build. The 5.1.0 tarball on npm was shipped from a stale `lib/` directory and was missing the Solana share-price + position fixes described in the 5.1.0 changelog below — `lib/adapters/solana/getters.js` still read only `deployedAum` for `totalAssets`. Anyone on `@augustdigital/sdk@5.1.0` should bump to `5.1.1`.
* Added a `prepublishOnly` script (`pnpm clean && pnpm build`) so subsequent publishes refuse to ship a stale `lib/` and force a fresh transpile. The 5.1.0 mishap was caused by a manual `pnpm publish` run without a preceding `pnpm build`; the new hook makes that impossible by construction.

</details>
{% endupdate %}

{% update date="2026-05-22" %}

## 5.1.0

{% hint style="info" %}
**Integrator highlights**

* **Action:** Solana vault share prices and position sizes were previously mis-calculated; verify any redemption-sizing or max-action logic that relied on those values.
* **Action:** Upgrade from any prior 5.x release to pick up the corrected Borsh IDL field order; earlier builds may have deserialized vault state fields from wrong byte offsets.
* **New:** New `SolanaAdapter.fetchUserShareBalanceRaw({ publicKey, shareMint })` returns raw share balance and decimals.
* **New:** SDK constructor now accepts a dedicated `solana: { rpcUrl, network }` config entry so Solana can be configured without polluting the EVM `providers` map.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 9dbc693: fix(solana): use `local_aum + deployed_aum` for vault total assets; add BigInt-safe share-balance helper; stop dropping Solana from `getVaults` / `getVaultPositions`

  **Bump rationale (minor, not patch):** this release is bug-fix-driven but adds two purely additive public-surface elements — `SolanaAdapter.fetchUserShareBalanceRaw()` and the dedicated `IAugustBase.solana = { rpcUrl, network }` config entry point. Per the additive-public-API rule a minor bump is required even though no existing API breaks.

  **Root causes**

  * `getSolanaVault` read only `vaultState.deployedAum` for `totalAssets`, but the on-chain `VaultState::total_assets()` is `local_aum + deployed_aum`. The displayed share price dropped below 1.0 the instant the operator deployed any portion of the vault, even with zero PnL (jitoSOL showed `0.7370` against a 1:1 share supply).
  * `getVaultPositions` Solana branch passed `uiAmount` (a JS number) into `toNormalizedBn` with no decimals argument. It defaulted to 18 and produced a `walletBalance.raw` off by `10**(18 − mintDecimals)`, breaking redemption sizing and max-action math even though the displayed `normalized` looked plausible.
  * The provider-availability filter (`vaultsPerAvailableProviders`) had an explicit Stellar pass-through but no Solana one — Solana vaults were silently dropped from both the vault list and position list on any SDK instance whose `providers` map didn't register chainId `-1`.
  * The IDL (`vault-idl.ts` / `.json`) and `ISolanaVaultState` were missing `local_aum`, `aum_increase_limit`, `aum_decrease_limit`, and `vault_version` — fields that exist in the Rust `VaultState` struct (see `programs/august-vault/src/state/vault.rs`). Because the missing fields sat *after* `deployed_aum`, the earlier fields still deserialized correctly but every field after the drift (`pda_bump`, `paused`, `padding`) read from the wrong bytes. `paused` happening to read `0x00` is why this didn't blow up in production sooner.

  **Changes**

  * `adapters/solana/getters.ts`: sum `localAum + deployedAum` for `totalAssets`. Falls back to backend TVL when on-chain is unavailable.
  * `adapters/solana/utils.ts`: new `fetchUserShareBalanceRaw({ publicKey, shareMint })` returning `{ amount: string; decimals: number | null }` from a single `getParsedTokenAccountsByOwner`.
  * `adapters/solana/index.ts`: expose the helper on `SolanaAdapter` with TSDoc and a worst-case RPC note.
  * `adapters/solana/types.ts`: extend `ISolanaVaultState` with `localAum`, `aumIncreaseLimit`, `aumDecreaseLimit`, and the (re-positioned) `vaultVersion`.
  * `adapters/solana/idl/vault-idl.{ts,json}`: re-sync `VaultState` field order with the Rust source.
  * `main.ts`: construct `SolanaAdapter` from either `providers[-1]` or the dedicated `solana: { rpcUrl, network }` config, so partner SDK instances can opt into Solana without polluting their EVM providers map.
  * `modules/vaults/main.ts`: pass `chain_type === 'solana'` through the provider filter when `this.solanaService` is available — mirrors the existing Stellar clause.
  * `modules/vaults/getters.ts`: Solana branch now reads via the raw helper, uses the mint's true decimals, drops the `as any` on `vaultState`, and returns `vault: v.address` instead of the outer parameter (mirrors the Stellar branch).
  * `modules/vaults/types.ts`: `ISolanaService.fetchUserShareBalanceRaw` is required (only impl is the in-package `SolanaAdapter`, which now always provides it).

  **No behaviour change for EVM or Stellar paths.**

  **Verification**

  * Borsh layout sanity-checked against `programs/august-vault/src/state/vault.rs:36-50` and against the live jitoSOL vault state at `2tmMcVv2Ene7wFGebPivhwYhAZyjaJoibMz1GYVaXsB1`: 455-byte account decodes cleanly with the new field order — `local_aum=564_529_610`, `deployed_aum=1_582_093_475`, `aum_increase_limit=20`, `aum_decrease_limit=20`, `pda_bump=[254]`, `vault_version=[0]`, `paused=false`, padding all-zero. `local_aum + deployed_aum` equals the share-mint supply at parity. Every byte accounted for.
  * Benchmark entry added at `benchmarks/suites/sdk-methods.js`: `fetchUserShareBalanceRaw() [cold, no account]`. Gated on `BENCHMARK_SOLANA_RPC_URL` so the existing EVM-only CI run isn't affected; set the env var to opt in. Uses the jitoSOL share mint with the system-program key as wallet — deterministic "no account" path that measures `getParsedTokenAccountsByOwner` round-trip plus the short-circuit return, which is the hot path on the vault grid for users without a position.

</details>
{% endupdate %}

{% update date="2026-05-21" %}

## 5.0.0

{% hint style="info" %}
**Integrator highlights**

* **Breaking:** AugustSDK constructor now requires `appName` (kebab-case slug, 3–64 chars); throws synchronously if missing or invalid.
* **Breaking:** fetchAugustWithKey(undefined, …) now throws `AugustAuthError` instead of returning a synthetic `{status:500}` response.
* **Breaking:** Removed `name` field from `AugustSDK`; use `appName` on `AugustBase` instead.
* **Action:** Add `appName: '<your-slug>'` to every `new AugustSDK({…})` call before upgrading.
* **Action:** Replace any `if (res.status === 500)` missing-auth checks; missing key now throws `AugustAuthError` instead.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Major Changes

* 8881c9b: Integrator experience: require `appName`, add a runtime version-nudge.

  **Breaking — required `appName`.** `appName` is now a required field on the `AugustSDK` constructor (and `IAugustBase`). Pass a stable kebab-case slug identifying your application — e.g. `new AugustSDK({ appName: 'acme-trader', ... })`. Despite the friendly name the value is identifier-shaped: 3–64 chars, `[a-zA-Z0-9._-]` only (it's used as a Sentry tag and HTTP header). Use a slug like `'acme-trader'`, not a display name like `'Acme Trader'`. The SDK throws synchronously from the constructor when the value is missing, empty, or out of the allowed shape.

  Why: the SDK now tags outbound analytics events with `app.name`, so the August Digital team can attribute error spikes to the right consuming application and reach out about breaking changes / critical bugs. See the "App Name" section in `packages/sdk/README.md`.

  Migration: add `appName: '<your-slug>'` to your existing `new AugustSDK({ ... })` call. No other changes required.

  **Additive — version-nudge on construction.** On non-production builds the SDK now performs one best-effort npm-registry check per session and prints a `console.warn` banner when a newer `@augustdigital/sdk` is available. The check never runs in `NODE_ENV=production`, can be silenced with `AUGUST_SDK_DISABLE_VERSION_CHECK=1`, or programmatically with `new AugustSDK({ versionCheck: { enabled: false }, ... })`. Never blocks construction; failures are silent. New exports: `runVersionCheck`, `IVersionCheckConfig`, `compareSemver`.

### Minor Changes

* c24003b: feat: production-grade hardening

  **Security & errors**

  * New typed error hierarchy: `AugustSDKError`, `AugustAuthError`, `AugustNetworkError`, `AugustTimeoutError`, `AugustValidationError`, `AugustRateLimitError`, `AugustServerError`, plus `isAugustSDKError` type guard. All extend `Error` so existing `instanceof Error` consumers are unaffected.
  * Secret sanitization in error messages, logger, and Slack adapter via `sanitizeString` / `sanitizeError` / `sanitizeForLogging`.
  * URL injection hardening: `buildAugustUrl` rejects unknown server keys, absolute URLs, and protocol-relative paths; origin check enforces same-origin.
  * `fetchAugustWithKey(undefined, …)` now throws `AugustAuthError(AUTH_MISSING_KEY)` instead of returning a synthetic `{status: 500}` response — callers using `if (res.status === 200)` previously misclassified missing-auth as a 500 server error; they now receive a proper typed error. `verifyAugustKey` short-circuits empty keys so `init()` behavior is unchanged.
  * `override` flag on `IFetchAugustOptions` is `@deprecated` with a one-time runtime warning; will be removed in the next major.
  * HTTP errors are now typed by status: 401 → `AugustAuthError`, 429 → `AugustRateLimitError`, else `AugustServerError`.
  * `Response.headers.get('x-correlation-id')` (was bracket-accessed; always `undefined`).

  **Transport**

  * Per-request `signal: AbortSignal` and `timeoutMs: number` on `IFetchAugustOptions`. Combined with the default timeout via `AbortSignal.any` (Node 22+) with a manual relay + cleanup fallback. Distinguishes caller-cancel from timeout via an internal `timedOut` flag.

  **Observability**

  * New `ILogger` interface and `Logger.setStructuredLogger()` alongside the existing Sentry-compatible `SDKLogger`. Pino-friendly: pass a context object as the first arg.

  **Performance**

  * Parallelized `getVault` loans + allocations (`Promise.allSettled`, preserves original control flow).
  * Removed redundant `fetchTokenizedVault` calls in `getVaultLoans` / `getVaultSubaccountLoans`.
  * `createProvider(rpcUrl, chainId?)` enables ethers' `staticNetwork` (skips the `eth_chainId` round-trip).
  * `getInfuraProvider` routes through `createProvider` (was rebuilding per call).
  * `decimals` / `symbol` / `receipt-token` caches are chain-scoped via `providerScope`.

  **Bundle**

  * Buffer polyfill extracted to `polyfills.ts`; guarded against clobbering a consumer-set `Buffer`.
  * `sideEffects: ["./lib/polyfills.js"]` lets bundlers tree-shake the rest of the SDK.
  * Source maps excluded from the npm tarball.

  **Bug fixes**

  * `fetchAugustWithBearer` no longer crashes when `options` is undefined (`options?.` everywhere).
  * `AbortSignal` fallback path now removes its `abort` listener on completion (no more leak across long-lived caller signals).
  * Slack adapter's webhook fetch has a 5s timeout.
  * `sanitizeError` preserves typed-error subclasses by cloning via prototype + own properties instead of calling the constructor (which would have misaligned positional args like `AugustAuthError(code, message, opts)`).
  * `AugustSDKError` and subclasses ship a `toJSON()` so `JSON.stringify(err)` no longer returns `"{}"`. `code`, `correlationId`, `status`, `timeoutMs`, `retryAfterMs`, and `cause` are all included.

  **No public API breaks.** All additions are opt-in. The only behavior change is `fetchAugustWithKey(undefined, …)` throwing instead of returning a fake 500 — the thrown value is still an `Error` instance.
* 8881c9b: feat(sdk): expose `getVaultRedemptionHistory` on the `AugustVaults` module and the top-level `AugustSDK` class. Wraps the existing module-level getter with the standard option-plumbing (RPC resolution from `chainId`, `augustKey`/`subgraphKey`/`headers` from the SDK instance), validates the vault input, and returns the same historical redemption records the underlying getter produces. Stellar vaults continue to return `[]` until on-chain indexing lands for that adapter.

### Patch Changes

* 7027223: fix: vault read paths no longer hang or surface ethers' `network is not available yet` when the configured RPC is unreachable or rate-limited

  Three related changes that together resolve `august vault tvl <addr> --chain <id>` failures (cryptic `NETWORK_ERROR` on a healthy RPC, infinite "JsonRpcProvider failed to detect network" retry loop on a 403/401 RPC):

  * `providerScope` (cache-key builder used by `getDecimals`, `getReceiptTokenAddress`, …) now tolerates ethers v6's lazy-network state. Reading `provider._network` is a *getter* that throws `network is not available yet` until the first successful request resolves the chain id; the throw was bubbling out of every cached vault read on freshly constructed providers.
  * `AugustVaults.getVaultTvl` now threads `chainId` into the getter options, and the EVM branch of `getVaultTvl` (`packages/sdk/src.ts/modules/vaults/getters.ts`) forwards it to `createProvider`. This sets ethers' `staticNetwork`, skipping the `eth_chainId` round-trip and, more importantly, preventing the indefinite network-detection retry loop when the RPC returns 4xx errors.
  * `createProvider` now throws a clear, remediable error when called with a missing or empty `rpcUrl`, instead of silently constructing a `JsonRpcProvider` pointed at `http://localhost:8545`.
* f0741e2: fix: HyperEVM RPC compatibility for `getWithdrawalRequestsWithStatus`
* c14c10b: chore: remove unused `name` field from `AugustSDK`. The field was declared but never assigned and never read — `appName` (on `AugustBase`) is the single source of truth for the app identifier.
* 0cb921a: fix: cap `fetchTokenizedVaults` cache at 10 minutes and avoid stale-get eviction

  `fetchTokenizedVaults` (bulk list) was calling `CACHE.set(key, value)` with no TTL override, falling back to the 24-hour global default — so vault config changes made on the backend (fee rates, fee waivers, etc.) could take up to 24h to surface to bulk-list consumers. The cache lookup also called `CACHE.get(key)` twice in a row; because the global `CACHE` is configured with `allowStale: true`, the first `.get()` on a stale entry returns it *and* evicts it, leaving the second `.get()` `undefined`. Switched to `getSafeCache` (which uses `.has()` and so never triggers stale-get eviction) and set an explicit 10-minute TTL to match `fetchTokenizedVault` (single).

</details>
{% endupdate %}

{% update date="2026-05-12" %}

## 4.27.3

{% hint style="info" %}
**Integrator highlights**

* **Action:** Blacklisted vault addresses are now excluded from `totalDeposited`; verify any TVL aggregations that relied on all vaults being counted.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 651d08f: feat: add a TVL exclusion list for vaults so blacklisted addresses no longer count toward `totalDeposited`.
* b07fd3f: chore: update Goldsky subgraph routes for improved query performance.

</details>
{% endupdate %}

{% update date="2026-05-12" %}

## 4.27.2

{% hint style="info" %}
**Integrator highlights**

* **Action:** Older withdrawal requests previously missed by `getWithdrawalRequestsWithStatus` will now appear; update any UI or logic that assumed a complete list.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 7fc6a6b: fix: correct the lookback block window in `getWithdrawalRequestsWithStatus` so older withdrawal requests are no longer missed.

</details>
{% endupdate %}

{% update date="2026-05-12" %}

## 4.27.1

{% hint style="info" %}
**Integrator highlights**

* **New:** Fluent network is now supported with a default RPC URL and block explorer.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 178dbfc: feat: add support for the Fluent network, including default RPC URL and block explorer.

</details>
{% endupdate %}

{% update date="2026-05-12" %}

## 4.27.0

{% hint style="info" %}
**Integrator highlights**

* **Breaking:** getWithdrawalRequestsWithStatus now requires a chainId argument; calls without it will break cross-chain queries.
* **Action:** Pass `chainId` to all existing `getWithdrawalRequestsWithStatus` calls.
* **New:** `AugustVaults.rwaRedeemAsset()` and `previewRwaRedemption()` added for RWA instant redemption flows.
* **New:** New `instant_redeem_config` field on `IVault` returned from `getVault`/`getVaults`.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 78231b6: feat: add RWA instant redemption — new `AugustVaults.rwaRedeemAsset()` and `previewRwaRedemption()` methods, plus an `instant_redeem_config` field on `IVault` returned from `getVault`/`getVaults`. The SDK automatically routes redemption calls to the correct `RwaRedeemSubaccount` for each vault.

### Patch Changes

* 5766173: fix: `getWithdrawalRequestsWithStatus` now requires a `chainId` argument so cross-chain queries return correct results.
* 8872391: feat: add helpers for OFT (LayerZero Omnichain Fungible Token) flows.

</details>
{% endupdate %}

{% update date="2026-04-14" %}

## 4.25.2

{% hint style="info" %}
**Integrator highlights**

* **Action:** Non-EVM Debank positions previously missing from `getVaultAllocations` now appear; update any allocation totals accordingly.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* f002124: fix: include non-EVM Debank positions in the response from `getVaultAllocations`.

</details>
{% endupdate %}

{% update date="2026-04-14" %}

## 4.25.1

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 3102191: fix: prevent `ethers v6 tx.wait()` from crashing on Monad RPC when pending transactions return a malformed nonce.

</details>
{% endupdate %}

{% update date="2026-04-14" %}

## 4.25.0

{% hint style="info" %}
**Integrator highlights**

* **Action:** New `show_cap_filled` field on tokenized vault responses can now drive cap-filled UI states.
* **New:** `getWithdrawalRequestsWithStatus` added for tracking withdrawal request statuses.
* **New:** New `getVaultPendingRedemptions` method added on `AugustVaults`.
* **New:** New `fetchTokenizedVaultSubaccountLoans` function available for subaccount loan data on tokenized vaults.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* a267145: feat: add a Stellar SDK adapter — Soroban RPC support, transaction building and submission, and end-to-end localnet test coverage.
* 455b625: feat: add `getWithdrawalRequestsWithStatus` for tracking the status of withdrawal requests.
* ad5ea73: chore: remove SUI points from vault responses.
* 7e5aa22: feat: add Stellar vault support (backend-only) including a Stellar adapter, routing, and a shared vault builder.

### Patch Changes

* 8f1bcee: chore: refactor Solana vault adapter getters into a shared `buildBackendVault` utility (no public API change).
* c721801: fix: include PnL data in LayerZero (LZ) vault responses.
* e12e957: fix: prevent silent data loss in `getWithdrawalRequestsWithStatus` when responses span multiple pages.
* d6e7f96: feat: add `fetchTokenizedVaultSubaccountLoans` for retrieving subaccount loan data on tokenized vaults.
* bba0483: feat: add `show_cap_filled` to the tokenized vault response so callers can render cap-filled UI states.
* fd90233: feat: add a `getVaultPendingRedemptions` method on `AugustVaults`.

</details>
{% endupdate %}

{% update date="2026-03-04" %}

## 4.24.10

{% hint style="info" %}
**Integrator highlights**

* **Action:** CeFi positions previously missing from allocations responses now appear; update any allocation aggregations.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* ac2bb72: fix: include CeFi positions that were previously missing from the allocations response.

</details>
{% endupdate %}

{% update date="2026-03-03" %}

## 4.24.9

{% hint style="info" %}
**Integrator highlights**

* **New:** Withdraw support added for the earnAUSD vault.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* ff68463: feat: add withdraw support for the earnAUSD vault.

</details>
{% endupdate %}

{% update date="2026-03-02" %}

## 4.24.8

{% hint style="info" %}
**Integrator highlights**

* **Action:** Solana share balances now reflect correct decimals via `uiAmount`; verify any balance display logic.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 78b4b2a: fix: use the parsed `uiAmount` when reading Solana share balances so they reflect the correct decimals.

</details>
{% endupdate %}

{% update date="2026-03-02" %}

## 4.24.7

{% hint style="info" %}
**Integrator highlights**

* **New:** Vault version is now supported in Solana PDA derivation.
* **New:** Additional fields are available on vault response objects.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 40e6410: feat: support vault version in Solana PDA derivation; remove unused vault token-balance fetching.
* bad15e1: feat: add additional fields to vault responses.

</details>
{% endupdate %}

{% update date="2026-02-26" %}

## 4.24.6

{% hint style="info" %}
**Integrator highlights**

* **Action:** CommonJS builds previously had `AugustBase` undefined due to circular imports; upgrade to fix.
* **Action:** Solana multi-vault programs now correctly read the share mint from on-chain state instead of PDA derivation.
* **New:** earnAUSD support added over LayerZero.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* bf55850: feat: add earnAUSD support over LayerZero.
* 301e84e: fix: resolve a circular dependency in the Solana adapter imports that caused `AugustBase` to be undefined in CommonJS builds.
* e0a1135: fix: forward `vaultAddress` to `getVaultState` from `getVaultPositions` so PDA derivation no longer returns the wrong address.
* 40d8d3f: fix: read the share mint from on-chain vault state (instead of PDA derivation) so multi-vault Solana programs are supported correctly.
* ebefff4: fix: ensure the tokenized vault API call always issues its query.

</details>
{% endupdate %}

{% update date="2026-02-19" %}

## 4.24.5

{% hint style="info" %}
**Integrator highlights**

* **New:** `default_apy_horizon` field is now exposed on vault responses.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 6ab5765: feat: expose `default_apy_horizon` on vault responses.

</details>
{% endupdate %}

{% update date="2026-02-17" %}

## 4.24.4

{% hint style="info" %}
**Integrator highlights**

* **New:** A staging API URL is now available for non-production environments.
* **New:** Deposits made through LayerZero relayers are now supported.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* a3bf6eb: feat: add a staging API URL for use in non-production environments.
* 4365252: feat: support deposits made through LayerZero relayers.

</details>
{% endupdate %}

{% update date="2026-02-12" %}

## 4.24.3

{% hint style="info" %}
**Integrator highlights**

* **New:** Citrea chain support added to explorer link helpers.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 4cd81a9: feat: add Citrea chain support to explorer link helpers.

</details>
{% endupdate %}

{% update date="2026-02-06" %}

## 4.24.2

{% hint style="info" %}
**Integrator highlights**

* **New:** `getSubaccountSummary` method added for fetching summarized subaccount data.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* c53ae5e: feat: add `getSubaccountSummary` for fetching summarized subaccount data.

</details>
{% endupdate %}

{% update date="2026-02-04" %}

## 4.24.1

{% hint style="info" %}
**Integrator highlights**

* **Action:** `getVaultUserLifetimePnl` now excludes invalid transactions and handles multi-asset deposit vaults correctly; verify PnL calculations.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 6213fb9: fix: `getVaultUserLifetimePnl` now excludes invalid transactions when computing PnL.
* 52cc399: fix: `getVaultUserLifetimePnl` correctly handles vaults that accept multi-asset deposits.

</details>
{% endupdate %}

{% update date="2026-02-02" %}

## 4.24.0

{% hint style="info" %}
**Integrator highlights**

* **New:** Sender-whitelist allocations are now supported on the vault contract.
* **New:** The `withdrawal_only` field is now included on vault responses.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 654d3f2: feat: support sender-whitelist allocations on the vault contract; fix: include the `withdrawal_only` field on vault responses.

</details>
{% endupdate %}

{% update date="2026-01-29" %}

## 4.23.2

{% hint style="info" %}
**Integrator highlights**

* **New:** `cachedAt` is now exposed on cached responses so callers can reason about staleness.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* cec539b: perf: improve loading speed of `getVaultPositions`.
* a498e6e: feat: expose `cachedAt` on cached responses so callers can reason about staleness.

</details>
{% endupdate %}

{% update date="2026-01-23" %}

## 4.23.1

{% hint style="info" %}
**Integrator highlights**

* **New:** Debank service is now exposed publicly, allowing consumers to access raw Debank data directly.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 2d5af1c: feat: expose the Debank service so consumers can access raw Debank data directly.

</details>
{% endupdate %}

{% update date="2026-01-23" %}

## 4.23.0

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 9bbcc06: chore: internal version bump — no customer-facing changes.

</details>
{% endupdate %}

{% update date="2026-01-23" %}

## 4.22.0

{% hint style="info" %}
**Integrator highlights**

* **Action:** CJS consumers should update to restore CommonJS compatibility broken by the prior `uuid` version.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 1700a0c: fix: fetch earnAUSD exposures from the Debank API.
* e1c36f3: fix: downgrade the `uuid` dependency to a version that ships CommonJS, restoring CJS consumer compatibility.

</details>
{% endupdate %}

{% update date="2026-01-21" %}

## 4.20.1

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* e6d592f: fix: improve type safety of the contract wrapper.

</details>
{% endupdate %}

{% update date="2026-01-21" %}

## 4.20.0

{% hint style="info" %}
**Integrator highlights**

* **New:** Sentry integration for SDK error reporting is now available as an opt-in feature.
* **New:** A strongly typed ABI-driven contract class is introduced for safer on-chain reads and writes.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 9c456e8: feat: integrate Sentry for SDK observability and error reporting (opt-in).

### Patch Changes

* 0252a45: feat: introduce a strongly typed ABI-driven contract class for safer reads and writes.

</details>
{% endupdate %}

{% update date="2026-01-14" %}

## 4.18.1

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 444f2d9: fix: add a hardcoded subaccount address for earnAUSD where on-chain discovery is not available.

</details>
{% endupdate %}

{% update date="2026-01-13" %}

## 4.18.0

{% hint style="info" %}
**Integrator highlights**

* **New:** New write function available for depositing native assets into multi-asset vaults.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* a765147: feat: add a write function for depositing native assets into multi-asset vaults.

</details>
{% endupdate %}

{% update date="2026-01-12" %}

## 4.17.0

{% hint style="info" %}
**Integrator highlights**

* **New:** The SUI limited vault is now exposed via the SDK.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* dd2bc24: feat: expose the SUI limited vault.

</details>
{% endupdate %}

{% update date="2026-01-09" %}

## 4.16.0

{% hint style="info" %}
**Integrator highlights**

* **New:** Subgraph URLs and vault symbols are now fetched from the backend at runtime; new vaults appear without an SDK release.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* d7b8729: feat: remove hardcoded subgraph URLs and vault symbols — these are now fetched from the backend at runtime, so new vaults can appear without an SDK release.

</details>
{% endupdate %}

{% update date="2026-01-06" %}

## 4.15.4

{% hint style="info" %}
**Integrator highlights**

* **Action:** Instant redemption fee values may change; the corrected fetch function is now used.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 3f45029: fix: correct the function used to fetch the instant redemption fee.

</details>
{% endupdate %}

{% update date="2026-01-05" %}

## 4.15.3

{% hint style="info" %}
**Integrator highlights**

* **New:** EVM2 instant withdrawal logic is now supported.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 1e34016: chore: generalize the Goldsky URL for better scaling; feat: add EVM2 instant withdrawal logic.

</details>
{% endupdate %}

{% update date="2026-01-01" %}

## 4.15.2

{% hint style="info" %}
**Integrator highlights**

* **Action:** `toNormalizeBN` now correctly handles exponential notation values; verify dependent calculations.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 769b4c7: fix: `toNormalizeBN` now correctly handles values represented in exponential notation.

</details>
{% endupdate %}

{% update date="2025-12-23" %}

## 4.15.1

{% hint style="info" %}
**Integrator highlights**

* **New:** `previewRedemption()` method is now available.
* **New:** `campaignApy` field is now included on `IVault`.
* **New:** sentUSD is now available in subgraph configuration.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* e79ced7: feat: add sentUSD to the subgraph configuration.
* fff8076: feat: add `previewRedemption()`; perf: cache the tokenized vault API response in `fetchTokenizedVault`; fix: add the missing `campaignApy` field to `IVault`.

</details>
{% endupdate %}

{% update date="2025-12-19" %}

## 4.15.0

{% hint style="info" %}
**Integrator highlights**

* **New:** `getTotalDeposit()`, `depositCap`, `maxDepositAmount`, `enabled_historical_price_horizons`, and `latest_reported_tvl` are now exposed on vault responses.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* c7422f7: feat: expose `getTotalDeposit()`, `depositCap`, `maxDepositAmount`, `enabled_historical_price_horizons`, and `latest_reported_tvl` on vault responses.

</details>
{% endupdate %}

{% update date="2025-12-19" %}

## 4.14.1

{% hint style="info" %}
**Integrator highlights**

* **New:** Campaign APY is now included in the tokenized vault response.
* **New:** earnXRP and Tydro vaults are now supported.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 1d6fae6: chore: upgrade the supported Node.js version to 22.
* 04c9281: feat: include campaign APY in the tokenized vault response.
* cfc7f40: feat: add support for the earnXRP and Tydro vaults.

</details>
{% endupdate %}

{% update date="2025-12-16" %}

## 4.14.0

{% hint style="info" %}
**Integrator highlights**

* **New:** Campaign APY is now included in the tokenized vault response.
* **New:** earnXRP and Tydro vaults are now supported.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 1d6fae6: chore: upgrade the supported Node.js version to 22.
* 04c9281: feat: include campaign APY in the tokenized vault response.
* cfc7f40: feat: add support for the earnXRP and Tydro vaults.

</details>
{% endupdate %}

{% update date="2025-12-20" %}

## 4.14.0

{% hint style="info" %}
**Integrator highlights**

* **Action:** Migrate `IVaultAnnualizedApy.hgETH30dLiquidAPY` to `liquidAPY30Day` before 2026-01-01.
* **Action:** Migrate `IVaultAnnualizedApy.hgETH7dLiquidAPY` to `liquidAPY7Day` before 2026-01-01.
* **New:** `getVaultAnnualizedApy`, `getVaultSummary`, and `getVaultWithdrawals` methods are now available.
* **New:** New types `IVaultAnnualizedApy`, `IVaultSummary`, and `IVaultWithdrawals` are exported.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 0364b53: feat: add new vault API methods.

  **New Methods:**

  * `getVaultAnnualizedApy` — fetch annualized APY metrics for vaults (cUSDO, tETH, wstETH, rsETH).
  * `getVaultSummary` — fetch a summary of a vault (name, type, chain, recent returns).
  * `getVaultWithdrawals` — fetch a withdrawal summary and the pending withdrawal queue.

  **New Types:**

  * `IVaultAnnualizedApy`
  * `IVaultSummary`
  * `IVaultWithdrawals`

  **Deprecation Notice:**

  * `IVaultAnnualizedApy.hgETH30dLiquidAPY` — use `liquidAPY30Day` instead (removal: 2026-01-01).
  * `IVaultAnnualizedApy.hgETH7dLiquidAPY` — use `liquidAPY7Day` instead (removal: 2026-01-01).

  **Documentation:**

  * Vault method documentation added to `docs/02-vaults.md`.

</details>
{% endupdate %}

{% update date="2025-12-11" %}

## 4.13.2

{% hint style="info" %}
**Integrator highlights**

* **Action:** Migrate from deprecated `getVaultApy` to `getVaultHistoricalTimeseries`.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* c6d5ad5: fix: update the type of historical APY values; deprecate `getVaultApy` — use `getVaultHistoricalTimeseries` instead.

</details>
{% endupdate %}

{% update date="2025-12-10" %}

## 4.13.1

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* e67bb0c: fix: make subaccount and snapshot loading optional in `fetchVaultsComprehensive` to reduce unneeded RPC volume.

</details>
{% endupdate %}

{% update date="2025-12-10" %}

## 4.13.0

{% hint style="info" %}
**Integrator highlights**

* **Action:** Migrate from deprecated `historical_snapshots` on vault response to `getVaultHistoricalTimeseries`.
* **New:** Katana chain is now supported.
* **New:** Subgraph configuration added for superMON, earnMON, and k3EUROP vaults.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 01f6203: feat: add support for the Katana chain.

### Patch Changes

* e58170f: fix: improve observability when Goldsky subgraph requests fail.
* d417f0b: feat: add subgraph configuration for the superMON, earnMON, and k3EUROP vaults.
* fe74f64: fix: update the query parameters used by the tokenized vault endpoints; deprecate `historical_snapshots` on the vault response — use `getVaultHistoricalTimeseries` instead.

</details>
{% endupdate %}

{% update date="2025-12-09" %}

## 4.12.1

{% hint style="info" %}
**Integrator highlights**

* **New:** getVaultTimeSeries endpoint is now exposed on the AugustSDK class.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 01cb0b6: feat: expose the `getVaultTimeSeries` endpoint on the `AugustSDK` class.

</details>
{% endupdate %}

{% update date="2025-12-09" %}

## 4.12.0

{% hint style="info" %}
**Integrator highlights**

* **New:** New vault time-series endpoint added to the SDK.
* **New:** getTokenizedVault accepts a new optional loadSubaccounts parameter.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 8ef93e5: feat: add a vault time-series endpoint; fix: add an optional `loadSubaccounts` parameter to the get tokenized vault endpoint.

</details>
{% endupdate %}

{% update date="2025-12-07" %}

## 4.11.6

{% hint style="info" %}
**Integrator highlights**

* **New:** New getVaultPnl method available for fetching vault-level PnL.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* b842e02: feat: add `getVaultPnl` for fetching vault-level PnL.

</details>
{% endupdate %}

{% update date="2025-12-04" %}

## 4.11.5

{% hint style="info" %}
**Integrator highlights**

* **Action:** getVaultUserLifetimePnl now uses share price for position derivation; verify PnL values against previous results.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* f4eb84c: fix: `getVaultUserLifetimePnl` now derives the user's current position from the share price for a more accurate PnL.

</details>
{% endupdate %}

{% update date="2025-12-04" %}

## 4.11.4

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 3f210b1: fix: update the Monad block explorer URL.

</details>
{% endupdate %}

{% update date="2025-12-03" %}

## 4.11.3

{% hint style="info" %}
**Integrator highlights**

* **Action:** getVaultUserLifetimePnl calculation logic corrected; re-verify any cached or displayed PnL values.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 623f3ec: fix: correct the calculation logic in `getVaultUserLifetimePnl`.

</details>
{% endupdate %}

{% update date="2025-12-02" %}

## 4.11.2

{% hint style="info" %}
**Integrator highlights**

* **Action:** lagDuration calculation corrected; results depending on this value may change.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 73636bd: fix: correct the `lagDuration` calculation.

</details>
{% endupdate %}

{% update date="2025-12-02" %}

## 4.11.1

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 38dbaa8: fix: additional fixes for the Hyena vaults.

</details>
{% endupdate %}

{% update date="2025-12-02" %}

## 4.11.0

{% hint style="info" %}
**Integrator highlights**

* **New:** New external points interface added for vaults integrating third-party point programs.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 74af6be: feat: add an external points interface for vaults that integrate third-party point programs.

</details>
{% endupdate %}

{% update date="2025-12-02" %}

## 4.10.0

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* a23bce0: perf: optimize `getVaultUserLifetimePnl` for faster execution.

</details>
{% endupdate %}

{% update date="2025-11-26" %}

## 4.9.0

{% hint style="info" %}
**Integrator highlights**

* **New:** New `getVaultUserLifetimePnl` function retrieves a user's lifetime PnL for a vault.
* **New:** Subgraph history queries now support the EVM2 network.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 83ee1e1: feat: add `getVaultUserLifetimePnl` for retrieving a user's lifetime PnL on a vault.

### Patch Changes

* f2582b9: feat: support EVM2 for subgraph history queries.

</details>
{% endupdate %}

{% update date="2025-11-21" %}

## 4.7.3

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* f2e0046: chore: update Monad Goldsky subgraph endpoints.

</details>
{% endupdate %}

{% update date="2025-11-20" %}

## 4.7.2

{% hint style="info" %}
**Integrator highlights**

* **Breaking:** The `getVault` family of functions has been renamed to `fetchTokenizedVault`; update all call sites.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 545dd1b: refactor: rename the `getVault` family of functions to `fetchTokenizedVault`.

</details>
{% endupdate %}

{% update date="2025-11-21" %}

## 4.7.2

{% hint style="info" %}
**Integrator highlights**

* **New:** Vault response objects now include additional fields.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* acd34a8: feat: include additional fields on vault responses.

</details>
{% endupdate %}

{% update date="2025-11-19" %}

## 4.7.1

{% hint style="info" %}
**Integrator highlights**

* **Action:** A regression was introduced in tokenized vault fetching; update to this patch to restore correct behavior.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 4ffaeeb: fix: revert a recent change to the tokenized vault fetch logic that introduced regressions.

</details>
{% endupdate %}

{% update date="2025-11-19" %}

## 4.7.0

{% hint style="info" %}
**Integrator highlights**

* **New:** Added support for the Ink and Flare chains.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 88e5d79: feat: add support for the Ink and Flare chains.

</details>
{% endupdate %}

{% update date="2025-11-14" %}

## 4.6.1

{% hint style="info" %}
**Integrator highlights**

* **Action:** Deposit cap is no longer fetched on initial vault load; ensure your integration handles on-demand loading.
* **New:** Tokenized vault response now includes a `historical_apy` field.
* **New:** New deposit-with-permit function allows depositing using EIP-2612 signatures.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 79c3917: feat: add `historical_apy` to the tokenized vault response.
* b01879f: feat: add a deposit-with-permit function so callers can deposit using EIP-2612 signatures.
* 5506682: perf: reduce RPC calls during vault fetching.
* c7b052e: perf: remove the deposit cap query from the initial vault fetch — it's loaded on demand instead.

</details>
{% endupdate %}

{% update date="2025-11-19" %}

## 4.6.1

{% hint style="info" %}
**Integrator highlights**

* **Action:** `integration` and `apy` fields are now sourced from the backend; verify values match your expectations.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 87c24b2: chore: source the `integration` and `apy` fields from the backend instead of computing them client-side.

</details>
{% endupdate %}

{% update date="2025-11-14" %}

## 4.6.0

{% hint style="info" %}
**Integrator highlights**

* **Breaking:** `getAvailableRedemptions` now uses the correct normalization function, which may change returned values.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 4cbe3b4: fix: `getAvailableRedemptions` now uses the correct normalization function.

</details>
{% endupdate %}

{% update date="2025-11-14" %}

## 4.5.2

{% hint style="info" %}
**Integrator highlights**

* **Action:** Available and pending withdrawal values have changed for accuracy; verify your withdrawal logic against updated results.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 50d47da: fix: improve the available and pending withdrawal logic for accuracy.

</details>
{% endupdate %}

{% update date="2025-11-12" %}

## 4.5.1

{% hint style="info" %}
**Integrator highlights**

* **New:** New `depositCap` contract call is exposed when the vault implements it.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 4d1c505: feat: expose the `depositCap` contract call when the vault implements it.

</details>
{% endupdate %}

{% update date="2025-11-07" %}

## 4.5.0

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 7e03e06: chore: update the SDK to consume the latest subgraph schema.

</details>
{% endupdate %}

{% update date="2025-11-06" %}

## 4.4.7

{% hint style="info" %}
**Integrator highlights**

* **Action:** Improved `bigint` arithmetic handling may change results for large amounts; verify calculations.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 3a43ccc: fix: improve `bigint` handling for safer arithmetic on large amounts.

</details>
{% endupdate %}

{% update date="2025-11-06" %}

## 4.4.6

{% hint style="info" %}
**Integrator highlights**

* **New:** New vault reader function available for direct on-chain reads.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 715c56f: feat: expose a vault reader function for direct on-chain reads.

</details>
{% endupdate %}

{% update date="2025-11-06" %}

## 4.4.5

{% hint style="info" %}
**Integrator highlights**

* **Breaking:** The `vaultRequestRedeem` function signature has changed; update all call sites.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 394a38e: feat: update the `vaultRequestRedeem` function signature.

</details>
{% endupdate %}

{% update date="2025-11-05" %}

## 4.4.4

{% hint style="info" %}
**Integrator highlights**

* **New:** `walletToSigner` helper added for converting a wallet to an ethers signer.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 9a77fbe: feat: add a `walletToSigner` helper for converting a wallet to an ethers signer.

</details>
{% endupdate %}

{% update date="2025-11-04" %}

## 4.4.3

{% hint style="info" %}
**Integrator highlights**

* **Breaking:** The `vaultDeposit` function signature has changed; update all call sites.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* e704bc7: feat: update the `vaultDeposit` function signature.

</details>
{% endupdate %}

{% update date="2025-11-03" %}

## 4.4.2

{% hint style="info" %}
**Integrator highlights**

* **New:** Monad chain is now supported.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* e76546f: feat: add support for the Monad chain.

</details>
{% endupdate %}

{% update date="2025-11-03" %}

## 4.4.1

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* cc0e6cf: chore: internal version bump — no customer-facing changes.

</details>
{% endupdate %}

{% update date="2025-10-31" %}

## 4.4.0

{% hint style="info" %}
**Integrator highlights**

* **New:** `getVault` API version has been bumped; responses may include new schema fields.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* d4bad1a: feat: bump the `getVault` API version.

</details>
{% endupdate %}

{% update date="2025-10-31" %}

## 4.3.5

{% hint style="info" %}
**Integrator highlights**

* **New:** Added support for the farmBOLD vault.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 19ffdd2: feat: add support for the farmBOLD vault.

</details>
{% endupdate %}

{% update date="2025-10-31" %}

## 4.3.4

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* f761bfb: chore: update EOA-operator types.

</details>
{% endupdate %}

{% update date="2025-10-30" %}

## 4.3.3

{% hint style="info" %}
**Integrator highlights**

* **New:** Points response now includes a `rank` field for the user.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 92a0cef: feat: add a user `rank` to the points response.

</details>
{% endupdate %}

{% update date="2025-10-30" %}

## 4.3.2

{% hint style="info" %}
**Integrator highlights**

* **New:** Vaults now support EOA operators.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* b79ab00: chore: update the Goldsky URL.
* 051fece: feat: support EOA operators on vaults.

</details>
{% endupdate %}

{% update date="2025-10-29" %}

## 4.3.1

{% hint style="info" %}
**Integrator highlights**

* **New:** `getVault` accepts updated/additional parameters.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* cf57cc7: feat: update the parameters accepted by `getVault`.

</details>
{% endupdate %}

{% update date="2025-10-29" %}

## 4.3.0

{% hint style="info" %}
**Integrator highlights**

* **Action:** Historical APY data URL corrected; verify APY results if you cache or depend on that endpoint.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* ebccf02: fix: correct the URL used to fetch historical APY data.

</details>
{% endupdate %}

{% update date="2025-10-29" %}

## 4.2.3

{% hint style="info" %}
**Integrator highlights**

* **New:** Added support for Sentora WBTC and Sentora USCC vaults.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* fa53783: feat: add support for the Sentora WBTC and Sentora USCC vaults.

</details>
{% endupdate %}

{% update date="2025-10-23" %}

## 4.2.1

{% hint style="info" %}
**Integrator highlights**

* **New:** Goldsky subgraph configuration added for new vaults.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* d5a62f1: feat: add Goldsky subgraph configuration for new vaults.

</details>
{% endupdate %}

{% update date="2025-10-23" %}

## 4.2.0

{% hint style="info" %}
**Integrator highlights**

* **Breaking:** `getVaultTVL` now requires a `chainId` parameter for cross-chain accuracy.
* **Action:** Pass `chainId` when calling `getVaultTVL` to ensure correct results.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* bc9a666: feat: `getVaultTVL` now takes a `chainId` for cross-chain accuracy.

</details>
{% endupdate %}

{% update date="2025-10-21" %}

## 4.1.0

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* d3cec8b: chore: update the strategists fallback list.

### Patch Changes

* 8ab6dab: chore: add hardcoded fallback values for some vault metadata.

</details>
{% endupdate %}

{% update date="2025-09-22" %}

## 3.16.1

{% hint style="info" %}
**Integrator highlights**

* **New:** Raw tokens response from Debank is now exposed directly in the SDK.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 0b615f9: expose raw tokens response from debank
* Updated dependencies \[0b615f9]
  * @augustdigital/services\@3.16.1
  * @augustdigital/vaults\@3.16.1
  * @augustdigital/pools\@3.16.1
  * @augustdigital/types\@3.16.1
  * @augustdigital/utils\@3.16.1
  * @augustdigital/abis\@3.16.1

</details>
{% endupdate %}

{% update date="2025-09-19" %}

## 3.16.0

{% hint style="info" %}
**Integrator highlights**

* **New:** An optional Sentry logger can now be configured in the SDK.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 2edc611: adding an optional logger for sentry

### Patch Changes

* Updated dependencies \[2edc611]
  * @augustdigital/services\@3.16.0
  * @augustdigital/vaults\@3.16.0
  * @augustdigital/pools\@3.16.0
  * @augustdigital/types\@3.16.0
  * @augustdigital/utils\@3.16.0
  * @augustdigital/abis\@3.16.0

</details>
{% endupdate %}

{% update date="2025-09-10" %}

## 3.15.2

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 23fcd01: add xhype subgraph
* Updated dependencies \[23fcd01]
  * @augustdigital/services\@3.15.2
  * @augustdigital/vaults\@3.15.2
  * @augustdigital/pools\@3.15.2
  * @augustdigital/types\@3.15.2
  * @augustdigital/utils\@3.15.2
  * @augustdigital/abis\@3.15.2

</details>
{% endupdate %}

{% update date="2025-09-09" %}

## 3.15.1

{% hint style="info" %}
**Integrator highlights**

* **New:** Debank response now includes an error field for failed responses.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 1ef7bfb: adding coingecko key to staking
* 04c7782: add error response to debank res
* Updated dependencies \[1ef7bfb]
* Updated dependencies \[04c7782]
  * @augustdigital/services\@3.15.1
  * @augustdigital/vaults\@3.15.1
  * @augustdigital/pools\@3.15.1
  * @augustdigital/types\@3.15.1
  * @augustdigital/utils\@3.15.1
  * @augustdigital/abis\@3.15.1

</details>
{% endupdate %}

{% update date="2025-09-09" %}

## 3.15.0

{% hint style="info" %}
**Integrator highlights**

* **New:** API fallback fetch behavior has been updated.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 3bf450e: update API fallback fetch

### Patch Changes

* Updated dependencies \[3bf450e]
  * @augustdigital/services\@3.15.0
  * @augustdigital/vaults\@3.15.0
  * @augustdigital/pools\@3.15.0
  * @augustdigital/types\@3.15.0
  * @augustdigital/utils\@3.15.0
  * @augustdigital/abis\@3.15.0

</details>
{% endupdate %}

{% update date="2025-08-19" %}

## 3.13.10

{% hint style="info" %}
**Integrator highlights**

* **New:** `getWithdraws` now includes withdraw events in its returned data.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* d2e7f94: adding withdraw event to getWithdraws
* Updated dependencies \[d2e7f94]
  * @augustdigital/services\@3.13.10
  * @augustdigital/vaults\@3.13.10
  * @augustdigital/pools\@3.13.10
  * @augustdigital/types\@3.13.10
  * @augustdigital/utils\@3.13.10
  * @augustdigital/abis\@3.13.10

</details>
{% endupdate %}

{% update date="2025-08-12" %}

## 3.13.6

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* a2ca1dd: update lendiingpoolv3
* Updated dependencies \[a2ca1dd]
  * @augustdigital/services\@3.13.6
  * @augustdigital/vaults\@3.13.6
  * @augustdigital/pools\@3.13.6
  * @augustdigital/types\@3.13.6
  * @augustdigital/utils\@3.13.6
  * @augustdigital/abis\@3.13.6

</details>
{% endupdate %}

{% update date="2025-08-12" %}

## 3.13.4

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 383cf57: add upGAMMAusdc subgraph
* Updated dependencies \[383cf57]
  * @augustdigital/services\@3.13.4
  * @augustdigital/vaults\@3.13.4
  * @augustdigital/pools\@3.13.4
  * @augustdigital/types\@3.13.4
  * @augustdigital/utils\@3.13.4
  * @augustdigital/abis\@3.13.4

</details>
{% endupdate %}

{% update date="2025-08-07" %}

## 3.13.3

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* Updated dependencies \[82d0738]
  * @augustdigital/utils\@3.13.3
  * @augustdigital/pools\@3.13.3
  * @augustdigital/services\@3.13.2
  * @augustdigital/vaults\@3.13.3

</details>
{% endupdate %}

{% update date="2025-08-05" %}

## 3.13.0

{% hint style="info" %}
**Integrator highlights**

* **Breaking:** Token exposure return value has been updated, which may require code changes.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 3c1913d: updating token exposure return value

### Patch Changes

* Updated dependencies \[3c1913d]
  * @augustdigital/vaults\@3.13.0
  * @augustdigital/pools\@3.13.0
  * @augustdigital/types\@3.13.0
  * @augustdigital/utils\@3.13.0
  * @augustdigital/abis\@3.13.0

</details>
{% endupdate %}

{% update date="2025-07-25" %}

## 3.12.2

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* Updated dependencies \[cbf643f]
  * @augustdigital/utils\@3.12.2
  * @augustdigital/pools\@3.12.2
  * @augustdigital/vaults\@3.12.2

</details>
{% endupdate %}

{% update date="2025-07-23" %}

## 3.12.1

{% hint style="info" %}
**Integrator highlights**

* **New:** earnAUSD subgraph support added.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 4ce6f73: add earnAUSD subgraph
* Updated dependencies \[4ce6f73]
  * @augustdigital/vaults\@3.12.1
  * @augustdigital/pools\@3.12.1
  * @augustdigital/types\@3.12.1
  * @augustdigital/utils\@3.12.1
  * @augustdigital/abis\@3.12.1

</details>
{% endupdate %}

{% update date="2025-07-21" %}

## 3.12.0

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 1aa9169: fix mezo explorer

### Patch Changes

* Updated dependencies \[1aa9169]
  * @augustdigital/vaults\@3.12.0
  * @augustdigital/pools\@3.12.0
  * @augustdigital/types\@3.12.0
  * @augustdigital/utils\@3.12.0
  * @augustdigital/abis\@3.12.0

</details>
{% endupdate %}

{% update date="2025-07-17" %}

## 3.11.0

{% hint style="info" %}
**Integrator highlights**

* **New:** mezo-mUSD asset support added.
* **New:** Unichain explorer support added.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 2ab0157: adding mezo-mUSD support

### Patch Changes

* b441f0b: add unichain explorer
* Updated dependencies \[b441f0b]
* Updated dependencies \[2ab0157]
  * @augustdigital/vaults\@3.11.0
  * @augustdigital/pools\@3.11.0
  * @augustdigital/types\@3.11.0
  * @augustdigital/utils\@3.11.0
  * @augustdigital/abis\@3.11.0

</details>
{% endupdate %}

{% update date="2025-07-10" %}

## 3.9.1

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* e1ee449: patch bump
* Updated dependencies \[e1ee449]
  * @augustdigital/vaults\@3.9.1
  * @augustdigital/pools\@3.9.1
  * @augustdigital/types\@3.9.1
  * @augustdigital/utils\@3.9.1
  * @augustdigital/abis\@3.9.1

</details>
{% endupdate %}

{% update date="2025-06-28" %}

## 3.6.0

{% hint style="info" %}
**Integrator highlights**

* **New:** Vault and services now surface handled errors instead of throwing silently.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 1eba6a4: handled errors in vault & services

### Patch Changes

* Updated dependencies \[1eba6a4]
  * @augustdigital/vaults\@3.6.0
  * @augustdigital/utils\@3.8.0
  * @augustdigital/abis\@3.6.0
  * @augustdigital/pools\@3.6.0
  * @augustdigital/types\@3.6.0

</details>
{% endupdate %}

{% update date="2025-06-26" %}

## 3.5.1

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* Updated dependencies \[b56895f]
  * @augustdigital/utils\@3.7.0
  * @augustdigital/pools\@3.5.1
  * @augustdigital/vaults\@3.5.1

</details>
{% endupdate %}

{% update date="2025-06-26" %}

## 3.5.0

{% hint style="info" %}
**Integrator highlights**

* **New:** HyperEVM transaction history for users is now available.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* f9edb34: add hyper evm history for user

### Patch Changes

* Updated dependencies \[f9edb34]
  * @augustdigital/abis\@3.5.0
  * @augustdigital/pools\@3.5.0
  * @augustdigital/types\@3.5.0
  * @augustdigital/utils\@3.6.0
  * @augustdigital/vaults\@3.5.0

</details>
{% endupdate %}

{% update date="2025-06-25" %}

## 3.4.1

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* Updated dependencies \[e945c91]
  * @augustdigital/utils\@3.5.0
  * @augustdigital/pools\@3.4.1
  * @augustdigital/vaults\@3.4.1

</details>
{% endupdate %}

{% update date="2025-06-23" %}

## 3.4.0

{% hint style="info" %}
**Integrator highlights**

* **New:** Vault objects now include risk data.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* f98bdf4: update vault with risk

### Patch Changes

* Updated dependencies \[f98bdf4]
  * @augustdigital/vaults\@3.4.0
  * @augustdigital/pools\@3.4.0
  * @augustdigital/types\@3.4.0
  * @augustdigital/utils\@3.4.0
  * @augustdigital/abis\@3.4.0

</details>
{% endupdate %}

{% update date="2025-06-18" %}

## 3.3.1

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* b364c2b: update fetching isVisible vault logic
* Updated dependencies \[b364c2b]
  * @augustdigital/vaults\@3.3.1
  * @augustdigital/pools\@3.3.1
  * @augustdigital/types\@3.3.1
  * @augustdigital/utils\@3.3.1
  * @augustdigital/abis\@3.3.1

</details>
{% endupdate %}

{% update date="2025-06-16" %}

## 3.3.0

{% hint style="info" %}
**Integrator highlights**

* **New:** Event objects now include a hash field for easier transaction lookup.
* **New:** User history fetching behavior has been updated.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* a86b316: update
* c5c2570: update hash in events
* c9b3c1a: update
* 705637a: update fetch user history
* b6e3aba: update version

### Patch Changes

* Updated dependencies \[a86b316]
* Updated dependencies \[c5c2570]
* Updated dependencies \[c9b3c1a]
* Updated dependencies \[705637a]
* Updated dependencies \[b6e3aba]
  * @augustdigital/pools\@3.3.0
  * @augustdigital/types\@3.3.0
  * @augustdigital/utils\@3.3.0
  * @augustdigital/abis\@3.3.0
  * @augustdigital/vaults\@3.3.0

</details>
{% endupdate %}

{% update date="2025-05-27" %}

## 3.1.0

{% hint style="info" %}
**Integrator highlights**

* **New:** Pools now expose an `isFeeWaived` boolean field.
* **New:** User history data has been updated with new information.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 81ab166: add isFeeWaived to pools
* 25bc103: update user history
* 2c4618a: remove console

### Patch Changes

* Updated dependencies \[81ab166]
* Updated dependencies \[25bc103]
* Updated dependencies \[2c4618a]
  * @augustdigital/pools\@3.1.0
  * @augustdigital/types\@3.1.0
  * @augustdigital/utils\@3.1.0
  * @augustdigital/abis\@3.1.0
  * @augustdigital/sdk\@3.1.0

</details>
{% endupdate %}

{% update date="2025-05-21" %}

## 2.18.11

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* Updated dependencies \[311a622]
  * @augustdigital/utils\@2.18.11
  * @augustdigital/pools\@2.18.11

</details>
{% endupdate %}

{% update date="2025-05-08" %}

## 2.18.5

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 7ebbe39: Update Injective Description
* Updated dependencies \[7ebbe39]
  * @augustdigital/pools\@2.18.5
  * @augustdigital/types\@2.18.5
  * @augustdigital/utils\@2.18.5
  * @augustdigital/abis\@2.18.5

</details>
{% endupdate %}

{% update date="2025-05-08" %}

## 2.18.4

{% hint style="info" %}
**Integrator highlights**

* **New:** A new Injective Vault USDT pool is now available.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* b6b86a0: Added Injective Vault USDT
* Updated dependencies \[b6b86a0]
  * @augustdigital/pools\@2.18.4
  * @augustdigital/types\@2.18.4
  * @augustdigital/utils\@2.18.4
  * @augustdigital/abis\@2.18.4

</details>
{% endupdate %}

{% update date="2025-04-19" %}

## 2.16.8

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* 70f3fa8: Mezo Vault Change
* Updated dependencies \[70f3fa8]
* Updated dependencies \[a3ad743]
  * @augustdigital/pools\@2.16.8
  * @augustdigital/types\@2.16.8
  * @augustdigital/utils\@2.16.8
  * @augustdigital/abis\@2.16.8

</details>
{% endupdate %}

{% update date="2025-04-18" %}

## 2.16.2

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* Updated dependencies \[ba9846d]
  * @augustdigital/utils\@2.16.2
  * @augustdigital/pools\@2.16.2

</details>
{% endupdate %}

{% update date="2025-04-17" %}

## 2.16.0

{% hint style="info" %}
**Integrator highlights**

* **New:** Vault whitelist address is now publicly exposed on vault/pool data.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 9cf59d6: expose vault whitelist address

### Patch Changes

* Updated dependencies \[9cf59d6]
  * @augustdigital/pools\@2.16.0
  * @augustdigital/types\@2.16.0
  * @augustdigital/utils\@2.16.0
  * @augustdigital/abis\@2.16.0

</details>
{% endupdate %}

{% update date="2025-04-11" %}

## 2.15.0

{% hint style="info" %}
**Integrator highlights**

* **New:** OTC positions are now available and can be fetched via the SDK.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* e32fce4: add otc positions

### Patch Changes

* Updated dependencies \[e32fce4]
  * @augustdigital/pools\@2.15.0
  * @augustdigital/types\@2.15.0
  * @augustdigital/utils\@2.15.0
  * @augustdigital/abis\@2.15.0

</details>
{% endupdate %}

{% update date="2025-03-31" %}

## 2.13.1

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* Updated dependencies \[f57d7e3]
  * @augustdigital/pools\@2.14.0
  * @augustdigital/utils\@2.14.0

</details>
{% endupdate %}

{% update date="2025-03-28" %}

## 2.13.0

{% hint style="info" %}
**Integrator highlights**

* **New:** DeBank response data is now supported in the SDK.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 83dc214: add debank response

### Patch Changes

* Updated dependencies \[83dc214]
  * @augustdigital/pools\@2.13.0
  * @augustdigital/types\@2.13.0
  * @augustdigital/utils\@2.13.0
  * @augustdigital/abis\@2.13.0

</details>
{% endupdate %}

{% update date="2025-03-25" %}

## 2.12.0

{% hint style="info" %}
**Integrator highlights**

* **New:** Protocol exposure data has been updated with new values.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* dd2cb76: update protocol exposure data

### Patch Changes

* Updated dependencies \[dd2cb76]
  * @augustdigital/pools\@2.12.0
  * @augustdigital/types\@2.12.0
  * @augustdigital/utils\@2.12.0
  * @augustdigital/abis\@2.12.0

</details>
{% endupdate %}

{% update date="2025-03-05" %}

## 2.10.2

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* Updated dependencies \[dcc926f]
  * @augustdigital/abis\@2.10.2
  * @augustdigital/pools\@2.10.2
  * @augustdigital/utils\@2.10.2

</details>
{% endupdate %}

{% update date="2025-03-05" %}

## 2.10.1

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* Updated dependencies \[f8f709d]
  * @augustdigital/abis\@2.10.1
  * @augustdigital/pools\@2.10.1
  * @augustdigital/utils\@2.10.1

</details>
{% endupdate %}

{% update date="2025-03-03" %}

## 2.10.0

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 034db45: spelling error

### Patch Changes

* Updated dependencies \[034db45]
  * @augustdigital/pools\@2.10.0
  * @augustdigital/types\@2.10.0
  * @augustdigital/utils\@2.10.0
  * @augustdigital/abis\@2.10.0

</details>
{% endupdate %}

{% update date="2025-03-03" %}

## 2.9.0

{% hint style="info" %}
**Integrator highlights**

* **New:** Idle capital data is now available in the SDK.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 31ae26a: add idle capital

### Patch Changes

* Updated dependencies \[31ae26a]
  * @augustdigital/pools\@2.9.0
  * @augustdigital/types\@2.9.0
  * @augustdigital/utils\@2.9.0
  * @augustdigital/abis\@2.9.0

</details>
{% endupdate %}

{% update date="2025-01-23" %}

## 2.6.5

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* Updated dependencies \[62619e1]
  * @augustdigital/pools\@2.6.5

</details>
{% endupdate %}

{% update date="2025-01-22" %}

## 2.6.2

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* Updated dependencies \[61d51d4]
  * @augustdigital/pools\@2.6.2

</details>
{% endupdate %}

{% update date="2025-01-21" %}

## 2.6.1

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* Updated dependencies \[8d45228]
  * @augustdigital/pools\@2.6.1
  * @augustdigital/utils\@2.5.1

</details>
{% endupdate %}

{% update date="2025-01-17" %}

## 2.6.0

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* update upshift rewards typography
* d56eb68: update AVAX rewards

### Patch Changes

* Updated dependencies
* Updated dependencies \[d56eb68]
  * @augustdigital/pools\@2.6.0
  * @augustdigital/types\@2.6.0
  * @augustdigital/utils\@2.5.0
  * @augustdigital/abis\@2.5.0

</details>
{% endupdate %}

{% update date="2025-01-17" %}

## 2.5.0

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* ca9514d: update rewards for AVAX

### Patch Changes

* Updated dependencies \[ca9514d]
  * @augustdigital/pools\@2.5.0
  * @augustdigital/types\@2.5.0
  * @augustdigital/utils\@2.4.1

</details>
{% endupdate %}

{% update date="2025-01-17" %}

## 2.4.1

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* Updated dependencies \[44876f7]
  * @augustdigital/pools\@2.4.1

</details>
{% endupdate %}

{% update date="2025-01-16" %}

## 2.4.0

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* ab136b2: update upshift points multiplier

### Patch Changes

* Updated dependencies \[ab136b2]
  * @augustdigital/pools\@2.4.0
  * @augustdigital/types\@2.4.0
  * @augustdigital/utils\@2.4.0
  * @augustdigital/abis\@2.4.0

</details>
{% endupdate %}

{% update date="2025-01-15" %}

## 2.3.1

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* Updated dependencies \[4c562dd]
  * @augustdigital/pools\@2.3.1

</details>
{% endupdate %}

{% update date="2025-01-13" %}

## 2.3.0

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 5515b33: override managementFee

### Patch Changes

* Updated dependencies \[5515b33]
  * @augustdigital/pools\@2.3.0
  * @augustdigital/types\@2.3.0
  * @augustdigital/utils\@2.3.0
  * @augustdigital/abis\@2.3.0

</details>
{% endupdate %}

{% update date="2025-01-10" %}

## 2.2.0

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* f47df7b: updated management fee call

### Patch Changes

* Updated dependencies \[f47df7b]
  * @augustdigital/pools\@2.2.0
  * @augustdigital/types\@2.2.0
  * @augustdigital/utils\@2.2.0
  * @augustdigital/abis\@2.2.0

</details>
{% endupdate %}

{% update date="2025-01-10" %}

## 2.1.2

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* Updated dependencies \[cf49466]
  * @augustdigital/pools\@2.1.1

</details>
{% endupdate %}

{% update date="2025-01-08" %}

## 2.1.1

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* Updated dependencies \[fe65b9d]
  * @augustdigital/pools\@2.1.0
  * @augustdigital/types\@2.1.0
  * @augustdigital/utils\@2.1.3

</details>
{% endupdate %}

{% update date="2025-01-08" %}

## 2.1.0

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 8c457fa: update static keys

</details>
{% endupdate %}

{% update date="2025-01-07" %}

## 2.0.4

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* Updated dependencies \[e96e036]
  * @augustdigital/pools\@2.0.4

</details>
{% endupdate %}

{% update date="2025-01-02" %}

## 2.0.3

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* Updated dependencies \[0ade132]
  * @augustdigital/utils\@2.1.2
  * @augustdigital/abis\@2.1.2
  * @augustdigital/pools\@2.0.3

</details>
{% endupdate %}

{% update date="2024-12-30" %}

## 2.0.2

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* Updated dependencies \[ac83b7d]
* Updated dependencies \[5c34d73]
  * @augustdigital/utils\@2.1.1
  * @augustdigital/abis\@2.1.1
  * @augustdigital/pools\@2.0.2

</details>
{% endupdate %}

{% update date="2024-12-30" %}

## 2.0.1

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* Updated dependencies \[4c16fd6]
  * @augustdigital/utils\@2.1.0
  * @augustdigital/abis\@2.1.0
  * @augustdigital/pools\@2.0.1

</details>
{% endupdate %}

{% update date="2024-12-27" %}

## 2.0.0

{% hint style="info" %}
**Integrator highlights**

* **Breaking:** This release contains breaking changes — see the full changelog below.
* **Action:** Ethena APY value has been updated; verify any hardcoded or cached APY values are refreshed.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Major Changes

* 4267b9a: update ethena apy val

### Patch Changes

* Updated dependencies \[4267b9a]
  * @augustdigital/pools\@2.0.0
  * @augustdigital/types\@2.0.0
  * @augustdigital/utils\@2.0.0
  * @augustdigital/abis\@2.0.0

</details>
{% endupdate %}

{% update date="2024-11-04" %}

## 1.3.0

{% hint style="info" %}
**Integrator highlights**

* **New:** Ava Labs aUSD pool is now available in the pools package.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* c9505a1: added ava labs ausd pool to pool package

### Patch Changes

* Updated dependencies \[c9505a1]
  * @augustdigital/pools\@1.3.0
  * @augustdigital/types\@1.3.0
  * @augustdigital/utils\@1.3.0
  * @augustdigital/abis\@1.3.0

</details>
{% endupdate %}

{% update date="2024-11-01" %}

## 1.2.0

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 3bfe99b: Added build to workflow

### Patch Changes

* Updated dependencies \[3bfe99b]
  * @augustdigital/pools\@1.2.0
  * @augustdigital/types\@1.2.0
  * @augustdigital/utils\@1.2.0
  * @augustdigital/abis\@1.2.0

</details>
{% endupdate %}

{% update date="2024-11-01" %}

## 1.1.0

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* 4504eda: Testing new github workflow"

### Patch Changes

* Updated dependencies \[4504eda]
  * @augustdigital/pools\@1.1.0
  * @augustdigital/types\@1.1.0
  * @augustdigital/utils\@1.1.0
  * @augustdigital/abis\@1.1.0

</details>
{% endupdate %}

{% update date="2024-10-26" %}

## 0.1.0

{% hint style="info" %}
**Integrator highlights**

* **New:** Pool fetchers now accept additional parameters for more granular data fetching.
  {% endhint %}

<details>

<summary>Full changelog</summary>

### Minor Changes

* f9df78f: added parameters to pool fetchers in sdk"

### Patch Changes

* Updated dependencies \[f9df78f]
  * @augustdigital/pools\@0.1.0
  * @augustdigital/types\@0.1.0
  * @augustdigital/utils\@0.1.0
  * @augustdigital/abis\@0.1.0

</details>
{% endupdate %}

{% update date="2024-10-08" %}

## 0.0.3

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* d72f854: (v0.0.3) testing github workflows
* 2f95c56: v0.0.3 edited readme and testing automated npm publish github workflow
* c388be5: (v0.0.2) changeset working appropriately
* Updated dependencies \[d72f854]
* Updated dependencies \[2f95c56]
* Updated dependencies \[c388be5]
  * @augustdigital/pools\@0.0.3
  * @augustdigital/types\@0.0.3
  * @augustdigital/utils\@0.0.3
  * @augustdigital/abis\@0.0.3

</details>
{% endupdate %}

{% update date="2024-10-08" %}

## 0.0.2

{% hint style="info" %}
**Integrator highlights** — internal changes only; no integrator action needed.
{% endhint %}

<details>

<summary>Full changelog</summary>

### Patch Changes

* (0.0.1) testing changeset
* Updated dependencies
  * @augustdigital/pools\@0.0.2
  * @augustdigital/types\@0.0.2
  * @augustdigital/utils\@0.0.2
  * @augustdigital/abis\@0.0.2

</details>
{% endupdate %}
{% endupdates %}


# CLI (august)

Read-only command-line client for August Digital vaults and Upshift pools.

## Quickstart

```bash
npm install -g @augustdigital/cli

august init                 # one-time: encrypted keystore + config
august whoami               # confirm config dir + API-key source
august vault list           # discover vault names and addresses
august vault apy eth-coreusdc
```

Every command accepts `--json` (stable envelope, `schemaVersion: 1`) and `--csv` for list-shaped output. Vault arguments accept a raw address, a bare symbol (`coreusdc`), or a chain-prefixed symbol (`eth-coreusdc`).

## Data commands

```bash
august points leaderboard --per-page 10 --sort-by totalPoints
august vault pending-redemptions <vault>     # backend redemption queue
august vault pnl-history <vault> --limit 30  # unrealized-PnL series
august vault pnl-latest                      # latest snapshot, every vault
august user pnl <wallet> --vault <vault>
```

## Ops commands

```bash
august ops health --vault eth-coreusdc       # RPC + summary + queue sweep
august ops redemptions <vault> --watch 30    # poll queue health every 30s
```

Exit codes: `0` all clear, `1` execution error, `2` anomalies found — cron a non-zero exit to alert. `--watch <seconds>` re-renders in place, or emits NDJSON (one envelope per tick) with `--json`.

## Reference

The full command map, envelope format, and error codes live in the [package README](https://github.com/fractal-protocol/js-sdk/tree/main/packages/cli/README.md) and the bundled Claude Code skill (`august skill install`).


# MCP Server (august-mcp)

Read-only [Model Context Protocol](https://modelcontextprotocol.io) server exposing August Digital data as tools, resources, and prompts for AI agents.

## Quickstart (Claude Code)

```bash
claude mcp add august -- npx -y @augustdigital/mcp
```

Claude Desktop (`claude_desktop_config.json`):

```json
{
  "mcpServers": {
    "august": { "command": "npx", "args": ["-y", "@augustdigital/mcp"] }
  }
}
```

Then ask the agent to start from discovery: `vault_list` / `vault_search` resolve vault addresses, after which the per-vault tools (`vault_summary`, `vault_apy`, `vault_pending_redemptions`, `vault_pnl_history`, …) apply.

## Surface

* **21 read-only tools** — vault metadata/APY/TVL/positions/loans/redemptions, discovery, points leaderboard, unrealized-PnL series, RPC diagnostics.
* **Resources** — `august://chains`, `august://errors`, `august://vaults/{chainId}`.
* **Prompts** — `analyze-vault-health`, `compare-vaults`, `explain-user-position`.

Every tool returns the same JSON envelope as `august … --json` (`schemaVersion: 1`, typed `error.code` + remediation on failure).

## Shared HTTP instance

```bash
AUGUST_MCP_TOKEN=<team-token> august-mcp --http --port 8787
```

Connect with `Authorization: Bearer <team-token>`. The surface is identical to stdio; no keystore is read in HTTP mode (`AUGUST_API_KEY` via env when authenticated tools are needed).

## Config

Shares `~/.augustdigital/` with the CLI (`AUGUST_CONFIG_DIR` to override). RPCs come from `AUGUST_RPC_<chainId>` env vars or the config file; set `AUGUST_PASSPHRASE` to auto-unlock the keystore on startup.


# Legal

{% content-ref url="/pages/uTy6ntIT24cM6NTgEYCf" %}
[Terms of Service](/legal/legal-notices/terms-of-service)
{% endcontent-ref %}

{% content-ref url="/pages/iw7tWAi0Y2PaKXPy8l3h" %}
[Privacy Policy](/legal/legal-notices/privacy-policy)
{% endcontent-ref %}

{% content-ref url="/pages/jcQSYXNYY9GhEyrr8Qmy" %}
[Cookie Policy](/legal/legal-notices/cookie-policy)
{% endcontent-ref %}

{% content-ref url="/pages/lXtKI3E7UONkHrJar60o" %}
[Loan Product Terms](/legal/legal-notices/loan-product-terms)
{% endcontent-ref %}


# Terms of Service

*Last Updated: April 2026*

These terms of use, together with any documents and additional terms they expressly incorporate by reference, which includes any other terms and conditions or other agreement that Fractal Network Ltd. ("August," "we," "us" and "our") posts publicly or makes available to you or the company or other legal entity you represent ("you" or "your") (collectively, these "Terms" or "Agreement"), are entered into between August and you concerning your use of, and access to, August's websites, including August; web applications; mobile applications; and all associated sites linked thereto by August or its affiliates (collectively with any materials and services available therein, and successor website(s) or application(s) thereto, the "Site") and the Services (as defined in Section 2.1 hereto).

By clicking "I agree" (or a similar language) to these Terms, acknowledging these Terms by other means, or otherwise accessing or using the Site or the Services, you accept and agree to be bound by and to comply with these Terms, including, without limitation, the mandatory arbitration provision in Section 14. If you do not agree to these Terms, then you must not access or use the Site or the Services. Please carefully review the disclosures and disclaimers set forth in Section 12 in their entirety before using any software developed or owned by August. The information in Section 12 provides important details about the legal obligations associated with your use of the Services.

### 1. Modification of These Terms

We reserve the right, in our sole discretion, to modify these Terms from time to time. If we make changes, we will provide you with notice of such changes, such as by providing notice through the Services or updating the "Last Updated" date at the top of these Terms. Unless we state otherwise in our notice, all such modifications are effective immediately, and your continued use of the Site and the Services after we provide that notice will confirm your acceptance of the changes. If you do not agree to the amended Terms, then you must stop using the Site and the Services.

### 2. Use of Services​

2.1 The Services. The Site provides access to the decentralized applications; APIs; all other software that August has developed or otherwise owns for entering into bilateral cryptocurrencies transactions and contract arrangement and other blockchain-based assets (collectively, "Digital Assets"), including, without limitation, entering into smart contract-based decentralized transactions related to Digital Assets; and messaging layer service available through the August Protocol (the "Services"). By accessing or using the Site or the Services, you agree that August does not provide execution, settlement, or clearing services of any kind and is not responsible for the execution, settlement, or clearing of transactions automated through the Services. You acknowledge that any execution and settlement occurs directly on the Ethereum, EVM-compatible and Solana blockchains.

2.2 Conditions. As a condition to accessing or using the Services or the Site, you represent and warrant to August the following:

2.2.1 if you are entering into these Terms as an individual, then you are of legal age in the jurisdiction in which you reside and you have the legal capacity to enter into these Terms and be bound by them and if you are entering into these Terms as an entity, then you must have the legal authority to accept these Terms on that entity's behalf, in which case "you" (except as used in this paragraph) will mean that entity;

2.2.2 you are not a resident, national, or agent of Iran, Cuba, North Korea, Syria, or the Crimean Region of the Ukraine or any other country to which the United States embargoes goods or imposes similar sanctions (collectively, "Restricted Territories");

2.2.3 you are not a member of any sanctions list or equivalent maintained by the United States government, the United Kingdom government, the European Union, or the United Nations (collectively, "Sanctions Lists Persons") and you do not intend to transact with any Restricted Person or Sanctions List Person;

2.2.4 neither you nor any of your affiliates, nor any officer, director, agent or employee purporting to act on behalf of the DAO, has at any time, directly or indirectly, (i) made, provided or paid any unlawful contributions, gifts, entertainment or other unlawful expenses to any candidate for political office, or failed to disclose fully any such contributions in violation of law, (ii) made any payment to any local, state, federal or foreign governmental officer or official, or other person charged with similar public or quasi-public duties, other than payments required or allowed by Applicable Laws, (iii) made any payment to any agent, employee, officer or director of any entity to which you nor any of your affiliates do business with for the purpose of influencing such agent, employee, officer or director to do business with the DAO or such affiliate, (iv) engaged in any transactions, maintained any bank account or used any corporate funds, except for transactions, bank accounts and funds which have been and are reflected in the normally maintained books and records of the DAO and/or such affiliate, (v) violated any provision of Applicable Law concerning anti-corruption, or (vi) made any payment in the nature of criminal bribery or any other unlawful payment;

2.2.5 you do not, and will not, use VPN software or any other privacy or anonymization tools or techniques to circumvent, or attempt to circumvent, any restrictions that apply to the Services; and

2.2.6 your access to the Services is not (a) prohibited by and does not otherwise violate or assist you to violate any domestic or foreign law, rule, statute, regulation, by-law, order, protocol, code, decree, or another directive, requirement, or guideline, published or in force that applies to or is otherwise intended to govern or regulate any person, property, transaction, activity, event or other matter, including any rule, order, judgment, directive or other requirement or guideline issued by any domestic or foreign federal, provincial or state, municipal, local or other governmental, regulatory, judicial or administrative authority having jurisdiction over August, you, the Site or the Services, or as otherwise duly enacted, enforceable by law, the common law or equity (collectively, "Applicable Laws"); or (b) contribute to or facilitate any illegal activity.

2.3 As a condition to accessing or using the Services or the Site, you acknowledge, understand, and agree to the following:

2.3.1 from time to time the Site and the Services may be inaccessible or inoperable for any reason, including, without limitation: (a) equipment malfunctions; (b) periodic maintenance procedures or repairs that August or any of its suppliers or contractors may undertake from time to time; (c) causes beyond August's control or that August could not reasonably foresee; (d) disruptions and temporary or permanent unavailability of underlying blockchain infrastructure; or (e) unavailability of third-party service providers or external partners for any reason;

2.3.2 we reserve the right to disable or modify access to the Site and the Services at any time in the event of any breach of these Terms, including, without limitation, if we reasonably believe any of your representations and warranties may be untrue or inaccurate, and we will not be liable to you for any losses or damages you may suffer as a result of or in connection with the Site or the Services being inaccessible to you at any time or for any reason;

2.3.3 the Site and the Services may evolve, which means August may apply changes, replace, or discontinue (temporarily or permanently) the Services at any time in its sole discretion;

2.3.4 the pricing information provided on the Site does not represent an offer, a solicitation of an offer, or any advice regarding, or recommendation to enter into, a transaction with August;

2.3.5 August does not act as an agent for you or any other user of the Site or the Services;

2.3.6 you are solely responsible for your use of the Services, including all of your transfers of Digital Assets and the custody and control of your Digital Assets;

2.3.7 to the fullest extent not prohibited by Applicable Law, we owe no fiduciary duties or liabilities to you or any other party, and that to the extent any such duties or liabilities may exist at law or in equity, you hereby irrevocably disclaim, waive, and eliminate those duties and liabilities;

2.3.8 you are solely responsible for reporting and paying any taxes applicable to your use of the Services; and

2.3.9 we have no control over, or liability for, the delivery, quality, safety, legality, or any other aspect of any Digital Assets that you may transfer to or from a third party, and we are not responsible for ensuring that an entity with whom you transact completes the transaction or is authorized to do so, and if you experience a problem with any transactions in Digital Assets using the Services, then you bear the entire risk.

2.4 As a condition to accessing or using the Services or the Site, you covenant to August the following:

2.4.1 in connection with using the Services, you only will transfer legally-obtained Digital Assets that belong to you;

2.4.2 you will comply with all Applicable Laws in connection with using the Services, and you will not use the Site or the Services if the laws of your country, or any other Applicable Law, prohibit you from doing so;

2.4.3 any Digital Assets you use in connection with the Services are either owned by you or you are validly authorized to carry our actions using such Digital Assets;

2.4.4 in addition to complying with all restrictions, prohibitions, and other provisions of these Terms, you will ensure that, at all times, all information that you provide on the Site and during your use of the Services is current, complete, and accurate; (b) maintain the security and confidentiality of your private keys associated with your public Ether address, passwords, API keys, private keys associated with your Services account and other related credentials.

### 3. Fees and Price Estimates​

In connection with your use of the Services, you are required to pay all fees necessary for interacting with the Ethereum, EVM-compatible and Solana blockchains, including transaction costs, as well as all other fees reflected on the Site at the time of your use of the Services. Although we attempt to provide accurate fee information, this information reflects our estimates of fees, which may vary from the actual fees paid to use the Services and interact with the Ethereum, EVM-compatible and Solana blockchains.

### 4. No Professional Advice or Fiduciary Duties​

All information provided in connection with your access and use of the Site and the Services is for informational purposes only and should not be construed as professional advice. You should not take, or refrain from taking, any action based on any information contained on the Site or any other information that we make available at any time, including, without limitation, blog posts, articles, links to third-party content, discord content, news feeds, tutorials, tweets, and videos. Before you make any financial, legal, or other decisions involving the Services, you should seek independent professional advice from an individual who is licensed and qualified in the area for which such advice would be appropriate. The Terms are not intended to, and do not, create or impose any fiduciary duties on us. You further agree that the only duties and obligations that we owe you are those set out expressly in these Terms.

### 5. Prohibited Activity​

You may not use the Services to engage in the categories of activity set forth below ("Prohibited Uses"). The specific activities set forth below are representative, but not exhaustive, of Prohibited Uses. If you are uncertain as to whether or not your use of the Services involves a Prohibited Use or have other questions about how these requirements apply to you, then please contact us <legal@augustmarkets.com>. By using the Site or Services, you confirm that you will not use the Site or Services to do any of the following:

5.1 violate any Applicable Laws including, without limitation, any relevant and applicable anti-money laundering and anti-terrorist financing laws and sanctions programs, such as, without limitation, the U.S. Department of Treasury's Office of Foreign Asset Controls;

5.2 engage in transactions involving items that infringe or violate any copyright, trademark, right of publicity or privacy or any other proprietary right under Applicable Law, including but not limited to, sales, distribution, or access to counterfeit music, movies, software, or other licensed materials without the appropriate authorization from the rights holder; use of August's intellectual property, name, or logo, including use of August's trade or service marks, without express consent from August or in a manner that otherwise harm August; any action that implies an untrue endorsement by or affiliation with August;

5.3 use the Services in any manner that could interfere with, disrupt, negatively affect, or inhibit other users from fully enjoying the Services, or that could damage, disable, overburden, or impair the functioning of the Site or the Services in any manner;

5.4 engage in activity that violates any applicable law, rule, or regulation concerning the integrity of trading markets, including (but not limited to) the manipulative tactics commonly known as spoofing and wash trading.

5.5 circumvent any content-filtering techniques, security measures or access controls that August employs on the Site, including, without limitation, through the use of a VPN;

5.6 use any robot, spider, crawler, scraper, or other automated means or interface not provided by us, to access the Services or to extract data, or introduce any malware, virus, Trojan horse, worm, logic bomb, drop-dead device, backdoor, shutdown mechanism or other harmful material into the Site or the Services;

5.7 provide false, inaccurate, or misleading information while using the Site or the Services or engage in activity that operates to defraud August, other users of the Services, or any other person;

5.8 use or access the Site or Services to transmit or exchange Digital Assets that are the direct or indirect proceeds of any criminal or fraudulent activity, including, without limitation, terrorism or tax evasion;

5.9 use the Site in any way that is, in our sole discretion, libelous, defamatory, profane, obscene, pornographic, sexually explicit, indecent, lewd, vulgar, suggestive, harassing, stalking, hateful, threatening, offensive, discriminatory, bigoted, abusive, inflammatory, fraudulent, deceptive, or otherwise objectionable or likely or intended to incite, threaten, facilitate, promote, or encourage hate, racial intolerance, or violent acts against others; 5.10 use the Site or the Services from a jurisdiction that we have, in our sole discretion, determined is a jurisdiction where the use of the Site or the Services is prohibited;

5.11 harass, abuse, or harm of another person or entity, including August's employees and service providers; impersonate another user of the Services or otherwise misrepresent yourself; or

5.12 engage in activity that violates any applicable law, rule, or regulation of the United States or another relevant jurisdiction, including (but not limited to) the restrictions and regulatory requirements imposed by U.S. law.

5.13 encourage, induce or assist any third party, or yourself attempt, to engage in any of the activities prohibited under this Section 5 or any other provision of these Terms.

### 6. Content​

You hereby grant to us a royalty-free, fully paid-up, sublicensable, transferable, perpetual, irrevocable, non- exclusive, worldwide license to use, copy, modify, create derivative works of, display, perform, publish and distribute, in any form, medium, or manner, any content that is available to other users as a result of your use of the Site or the Services (collectively, "Your Content"), including, without limitation, for promoting August, its affiliates, the Services or the Site. You represent and warrant that (a) you own Your Content or have the right to grant the rights and licenses in these Terms; and (b) Your Content and our use of Your Content, as licensed herein, does not and will not violate, misappropriate or infringe on any third party's rights.

### 7. Proprietary Rights​

7.1 Any of August's product or service names, logos, and other marks used on the Site or as a part of the Services, including August's name and logo are trademarks owned by August, its affiliates, or its applicable licensors. You may not copy, imitate, or use them without the prior written consent of August or the applicable licensors, and these Terms do not grant you any rights in those trademarks. You may not remove, obscure, or alter any legal notices displayed in or along with the Services.

### 8. Links​

The Services provide, or third parties may provide, links to other World Wide Web or accessible sites, applications, or resources. You acknowledge and agree that the Company is not responsible for the availability of such external sites, applications or resources, and does not endorse and is not responsible or liable for any content, advertising, products, or other materials on or available from such sites or resources. You further acknowledge and agree that Company shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with use of or reliance on any such content, goods, or services available on or through any such site or resource.

### 9. Modification, Suspension, and Termination​

We may, at our sole discretion, from time to time and with or without prior notice to you, modify, suspend or disable (temporarily or permanently) the Services, in whole or in part, for any reason whatsoever, including, without limitation, to only allow open August funds to be closed. Upon termination of your access, your right to use the Services will immediately cease. We will not be liable for any losses suffered by you resulting from any modification to any Services or from any modification, suspension, or termination, for any reason, of your access to all or any portion of the Site or the Services. The following sections of these Terms will survive any termination of your access to the Site or the Services, regardless of the reasons for its expiration or termination, in addition to any other provision which by law or by its nature should survive: Sections 7 through 15.

### 10. Assumption of Risks​, Warranties

10.1 By utilizing the Services or interacting with the Site in any way, you represent and warrant that you understand the inherent risks associated with cryptographic systems and blockchain-based networks; Digital Assets, including the usage and intricacies of native Digital Assets, like Ether (ETH); Ethereum, EVM-compatible and Solana blockchain-based tokens, and systems that interact with blockchain-based networks. August does not own or control any of the underlying software through which blockchain networks are formed. In general, the software underlying blockchain networks, including the Ethereum, EVM-compatible and Solana blockchains, is open source, such that anyone can use, copy, modify, and distribute it. By using the Services, you acknowledge and agree (a) that August is not responsible for the operation of the software and networks underlying the Services, (b) that there exists no guarantee of the functionality, security, or availability of that software and networks, and (c) that the underlying networks are subject to sudden changes in operating rules, such as those commonly referred to as "forks," which may materially affect the Services. Blockchain networks use public/private key cryptography. You alone are responsible for securing your private key(s). We do not have access to your private key(s). Losing control of your private key(s) will permanently and irreversibly deny you access to Digital Assets on the Ethereum blockchain or other blockchain-based network. Neither August nor any other person or entity will be able to retrieve or protect your Digital Assets. If your private key(s) are lost, then you will not be able to transfer your Digital Assets to any other blockchain address or wallet. If this occurs, then you will not be able to realize any value or utility from the Digital Assets that you may hold.

10.2 The Services and your Digital Assets could be impacted by one or more regulatory inquiries or regulatory actions, which could impede or limit the ability of August to continue to make available its proprietary software and, thus, could impede or limit your ability to access or use the Services.

10.3 You acknowledge and understand that cryptography is a progressing field with advances in code cracking or other technical advancements, such as the development of quantum computers, which may present risks to Digital Assets and the Services, and could result in the theft or loss of your Digital Assets. To the extent possible, we intend to update August-developed or owned software related to the Services to incorporate additional security measures necessary to address risks presented from technological advancements, but that intention does not guarantee or otherwise ensure full security of the Services.

10.4 You understand that the Ethereum, EVM-compatible and Solana blockchains remains under development, which creates technological and security risks when using the Services in addition to uncertainty relating to Digital Assets and transactions therein. You acknowledge that the cost of transacting on the Ethereum, EVM-compatible and Solana blockchains is variable and may increase at any time causing impact to any activities taking place on the Ethereum, EVM-compatible and Solana blockchains, which may result in price fluctuations or increased costs when using the Services.

10.5 You acknowledge that the Services are subject to flaws and that you are solely responsible for evaluating any code provided by the Services or Site. This warning and others August provides in these Terms in no way evidence or represent an on-going duty to alert you to all of the potential risks of utilizing the Services or accessing the Site.

10.6 Although we intend to provide accurate and timely information on the Site and during your use of the Services, the Site and other information available when using the Services may not always be entirely accurate, complete, or current and may also include technical inaccuracies or typographical errors. To continue to provide you with as complete and accurate information as possible, information may be changed or updated from time to time without notice, including, without limitation, information regarding our policies. Accordingly, you should verify all information before relying on it, and all decisions based on information contained on the Site or as part of the Services are your sole responsibility. No representation is made as to the accuracy, completeness, or appropriateness for any particular purpose of any pricing information distributed via the Site or otherwise when using the Services. Prices and pricing information may be higher or lower than prices available on platforms providing similar services.

10.7 Any use or interaction with the Services requires a comprehensive understanding of applied cryptography and computer science to appreciate the inherent risks, including those listed above. You represent and warrant that you possess relevant knowledge and skills. Any reference to a type of Digital Asset on the Site or otherwise during the use of the Services does not indicate our approval or disapproval of the technology on which the Digital Asset relies, and should not be used as a substitute for your understanding of the risks specific to each type of Digital Asset.

10.8 Use of the Services, in particular for Digital Assets transactions and entering into August funds, may carry financial risk. Digital Assets and the Protocol are highly experimental, risky, and volatile. Transactions entered into in connection with the Services are irreversible, final and there are no refunds. You acknowledge and agree that you will access and use the Site and the Services at your own risk. The risk of loss in transacting in Digital Assets using August Finance funds can be substantial. You should, therefore, carefully consider whether such transactions are suitable for you in light of your circumstances and financial resources. By using the Services, you represent and warrant that you have been, are, and will be solely responsible for making your independent appraisal and investigations into the risks of a given August pool transaction. You represent that you have sufficient knowledge, market sophistication, professional advice, and experience to make your evaluation of the merits and risks of any transaction conducted in connection with the Services. You accept all consequences of using the Services, including the risk that you may lose access to your Digital Assets indefinitely. All transaction decisions are made solely by you. Notwithstanding anything in these Terms, we accept no responsibility whatsoever for, and will in no circumstances be liable to you in connection with, your use of the Services.

10.9 We must comply with Applicable Law, which may require us to, upon request by government agencies, take certain actions or provide information, which may not be in your best interests.

10.10 You understand that the Service remains under development, which creates technological, transaction related, and other risks when using the Services. These risks include, among others, delays in trades, withdrawals, and deposits resulting from the servers of August or the operator of the Services being offline; an incorrect display of information on the Site in the case of server errors; or transactions using the Services being rolled back in the case of server errors. You acknowledge that these risks may have a material impact on your transactions using the Services, which may result in, among other things, failing to fulfill transactions at your desired price or at all.

10.11 Volatility of Cryptocurrency.

You understand that Ethereum and other blockchain technologies and associated currencies or tokens are highly volatile due to many factors including but not limited to adoption, speculation, technology and security risks. You also acknowledge that the cost of transacting on such technologies is variable and may increase at any time causing impact to any activities taking place on the Ethereum, EVM-compatible and Solana blockchains. You acknowledge these risks and represent that August or any related entity or person cannot be held liable for such fluctuations or increased costs.

10.12 You hereby assume, and agree that August will have no responsibility or liability for, the risks set forth in this Section 10. You hereby irrevocably waive, release and discharge all claims, whether known or unknown to you, against August, its affiliates, and their respective shareholders, members, directors, officers, employees, agents, and representatives, suppliers, and contractors related to any of the risks set forth in this Section 10.

10.13 Warranty Disclaimers. THE INTERFACE AND THE PROTOCOL IS PROVIDED “AS IS,” WITHOUT WARRANTY OF ANY KIND. WITHOUT LIMITING THE FOREGOING, WE EXPLICITLY DISCLAIM ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT AND NON-INFRINGEMENT, AND ANY WARRANTIES ARISING OUT OF COURSE OF DEALING OR USAGE OF TRADE. WE MAKE NO WARRANTY THAT THE INTERFACE WILL MEET YOUR REQUIREMENTS OR BE AVAILABLE ON AN UNINTERRUPTED, SECURE, OR ERROR-FREE BASIS. WE MAKE NO WARRANTY REGARDING THE QUALITY, ACCURACY, TIMELINESS, TRUTHFULNESS, COMPLETENESS OR RELIABILITY OF ANY INFORMATION OR CONTENT ON THE INTERFACE OR THE PROTOCOL.

THE COMPANY WILL NOT BE RESPONSIBLE OR LIABLE TO YOU FOR ANY LOSS AND TAKES NO RESPONSIBILITY FOR, AND WILL NOT BE LIABLE TO YOU FOR, ANY USE OF THE INTERFACE OR THE PROTOCOL, INCLUDING BUT NOT LIMITED TO ANY LOSSES, DAMAGES OR CLAIMS ARISING FROM: (I) USER ERROR SUCH AS FORGOTTEN PASSWORDS, INCORRECTLY CONSTRUCTED TRANSACTIONS, OR MISTYPED WALLET ADDRESSES; (II) SERVER FAILURE OR DATA LOSS; (III) CRYPTOCURRENCY WALLETS OR CORRUPT FILES; (IV) UNAUTHORIZED ACCESS TO INTERFACE; OR (V) ANY THIRD PARTY ACTIVITIES, INCLUDING WITHOUT LIMITATION THE USE OF VIRUSES, PHISHING, BRUTEFORCING OR OTHER MEANS OF ATTACK AGAINST ANY BLOCKCHAIN NETWORK UNDERLYING THE INTERFACE OR THE PROTOCOL.

### 11. Indemnification​

You will defend, indemnify, and hold harmless August, its affiliates, and its and its affiliates' respective stockholders, members, directors, officers, managers, employees, attorneys, agents, representatives, suppliers, and contractors (collectively, "Indemnified Parties") from any claim, demand, lawsuit, action, proceeding, investigation, liability, damage, loss, cost or expense, including without limitation reasonable attorneys' fees, arising out of or relating to (a) your use of, or conduct in connection with, the Site or the Services (including, without limitation, the Service); (b) Digital Assets associated with your Ethereum, EVM-compatible or Solana blockchain address; (c) any feedback or user content you provide to August, if any, concerning the Site or the Services; (d) your violation of these Terms; or (e) your infringement or misappropriation of the rights of any other person or entity. If you are obligated to indemnify any Indemnified Party, August (or, at its discretion, the applicable Indemnified Party) will have the right, in its sole discretion, to control any action or proceeding and to determine whether August wishes to settle, and if so, on what terms, and you agree to corporate with August in the defense.

### 12 Disclosures; Disclaimers​

August is a developer and owner of software. August does not operate a Digital Asset or derivatives exchange platform or offer trade execution or clearing services and, therefore, has no oversight, involvement, or control concerning your transactions using the Services. All transactions between users of the Services are executed peer-to-peer directly between the users' Ethereum addresses through a smart contract. You are responsible for complying with all Applicable Laws that govern your August pools, including, but not limited to, the Commodity Exchange Act and the regulations promulgated thereunder by the U.S. Commodity Futures Trading Commission ("CFTC"), the federal securities laws and the regulations promulgated thereunder by the U.S. Securities and Exchange Commission ("SEC") and all foreign Applicable Laws. You understand that August is not registered or licensed by the BVI Financial Services Commission. the CFTC, SEC, or any financial regulatory authority. No financial regulatory authority has reviewed or approved the use of the August-developed or owned open- source software. The Site and the August-developed or owned software do not constitute advice or a recommendation concerning any commodity, security, or other Digital Asset or instrument. August is not acting as an investment adviser or commodity trading adviser to any person or entity. August does not own or control the underlying software protocols that are used in connection with Ethereum Blockchain used to enter into August pools using the Services. In general, the underlying protocols are open source and anyone can use, copy, modify, and distribute them. August is not responsible for the operation of the underlying protocols, and August makes no guarantee of their functionality, security, or availability.

To the maximum extent permitted under Applicable Law, the Site and the Services (and any of their content or functionality) provided by or on behalf of us are provided on an "AS IS" and "AS AVAILABLE" basis, and we expressly disclaim, and you hereby waive, any representations, conditions or warranties of any kind, whether express or implied, legal, statutory or otherwise, or arising from statute, otherwise in law, course of dealing, or usage of trade, including, without limitation, the implied or legal warranties and conditions of merchantability, merchantable quality, quality or fitness for a particular purpose, title, security, availability, reliability, accuracy, quiet enjoyment and non-infringement of third party rights. Without limiting the foregoing, we do not represent or warrant that the Site or the Services (including any data relating thereto) will be uninterrupted, available at any particular time, or error-free. Further, we do not warrant that errors in the Site or the Services are correctable or will be correctable.

You acknowledge that your data on the Site may become irretrievably lost or corrupted or temporarily unavailable due to a variety of causes, and agree that, to the maximum extent permitted under Applicable Law, we will not be liable for any loss or damage caused by denial-of-service attacks, software failures, viruses or other technologically harmful materials (including those which may infect your computer equipment), protocol changes by third-party providers, Internet outages, force majeure events or other disasters, scheduled or unscheduled maintenance, or other causes either within or outside our control.

The disclaimer of implied warranties contained herein may not apply if and to the extent such warranties cannot be excluded or limited under the Applicable Law of the jurisdiction in which you reside.

### 13. Limitation of Liability​

In no event shall August's aggregate liability (together with its affiliates, including its and its affiliates' respective stockholders, members, directors, managers, officers, employees, attorneys, agents, representatives, suppliers, or contractors) arising out of or in connection with the Site and the Services (and any of their content and functionality), any performance or nonperformance of the Services, your Digital Assets, August pools or any product, service or other item provided by or on behalf of August, whether under contract, tort, negligence, civil liability, statute, strict liability or other theory of liability exceed the lesser of US $50 or the amount of fees paid by you to August under these Terms, if any, in the twelve (12) month period immediately preceding the event giving rise to the claim for liability, except to the extent of a final judicial determination that such damages were the result of August's gross negligence, fraud, willful misconduct or intentional violation of the law.

### 14. Dispute Resolution & Arbitration​

14.1 Mandatory Arbitration of Disputes. We each agree that any dispute, claim or controversy arising out of or relating to this User Agreement or the breach, termination, enforcement, interpretation or validity thereof or the use of the Interface (collectively, “Disputes”) will be resolved solely by binding, individual arbitration and not in a class, representative or consolidated action or proceeding. You and the Company agree that the British Virgin Islands Arbitration Act governs the interpretation and enforcement of this User Agreement, and that you and the Company are each waiving the right to a trial by jury or to participate in a class action. This arbitration provision shall survive termination of this User Agreement.

14.2 Exceptions. As limited exceptions to Section 14.1 above: (i) we both may seek to resolve a Dispute in small claims court if it qualifies; and (ii) we each retain the right to seek injunctive or other equitable relief from a court to prevent (or enjoin) the infringement or misappropriation of our intellectual property rights.

14.3 Conducting Arbitration and Arbitration Rules. The arbitration will be conducted by JAMS under its JAMS Comprehensive Arbitration Rules and Procedures (the “JAMS Rules”) then in effect, except as modified by this User Agreement. The JAMS Rules are available at <https://www.jamsadr.com/>. A party who wishes to start arbitration must submit a written Demand for Arbitration to JAMS and give notice to the other party as specified in the JAMS Rules. JAMS provides a form Demand for Arbitration at <https://www.jamsadr.com/>.

Any arbitration hearings will take place in the county (or parish) where you live, unless we both agree to a different location, but will be conducted remotely to the extent permitted by the JAMS Rules. The parties agree that the arbitrator shall have exclusive authority to decide all issues relating to the interpretation, applicability, enforceability and scope of this arbitration agreement.

14.4 Arbitration Costs. Payment of all filing, administration and arbitrator fees will be governed by the JAMS Rules, and we won’t seek to recover the administration and arbitrator fees we are responsible for paying, unless the arbitrator finds your Dispute frivolous. If we prevail in arbitration we’ll pay all of our attorneys’ fees and costs and won’t seek to recover them from you. If you prevail in arbitration you will be entitled to an award of attorneys’ fees and expenses to the extent provided under applicable law.

14.5 Injunctive and Declaratory Relief. Except as provided in Section 14.2 above, the arbitrator shall determine all issues of liability on the merits of any claim asserted by either party and may award declaratory or injunctive relief only in favor of the individual party seeking relief and only to the extent necessary to provide relief warranted by that party’s individual claim. To the extent that you or we prevail on a claim and seek public injunctive relief (that is, injunctive relief that has the primary purpose and effect of prohibiting unlawful acts that threaten future injury to the public), the entitlement to and extent of such relief must be litigated in a civil court of competent jurisdiction and not in arbitration. The parties agree that litigation of any issues of public injunctive relief shall be stayed pending the outcome of the merits of any individual claims in arbitration.

14.6 Class Action Waiver. YOU AND THE COMPANY AGREE THAT EACH MAY BRING CLAIMS AGAINST THE OTHER ONLY IN YOUR OR ITS INDIVIDUAL CAPACITY, AND NOT AS A PLAINTIFF OR CLASS MEMBER IN ANY PURPORTED CLASS OR REPRESENTATIVE PROCEEDING. Further, if the parties’ Dispute is resolved through arbitration, the arbitrator may not consolidate another person’s claims with your claims, and may not otherwise preside over any form of a representative or class proceeding. If this specific provision is found to be unenforceable, then the entirety of this Dispute Resolution section shall be null and void.

14.7 Severability. With the exception of any of the provisions in Section 14.6 of this User Agreement (“Class Action Waiver”), if an arbitrator or court of competent jurisdiction decides that any part of this User Agreement is invalid or unenforceable, the other parts of this User Agreement will still apply.

### 15. General Information​

15.1 Privacy Policy. Please refer to our privacy policy, which is incorporated herein by reference and available here at <https://docs.augustdigital.io/legal/legal-notices/terms-of-service> for information about how we collect, use, share and otherwise process information about you.

15.2 Consent to Electronic Delivery. You consent to receive all communications, agreements, documents, receipts, notices, and disclosures electronically (collectively, our "Communications") that we provide in connection with these Terms or any Services. You agree that we may provide our Communications to you by posting them on the Site or by emailing them to you at the email address you provide in connection with using the Services, if any. You should maintain copies of our Communications by printing a paper copy or saving an electronic copy. You may also contact us with questions, complaints, or claims concerning the Services at <legal@augustmarkets.com>.

15.3 Remedies. Any right or remedy of August set forth in these Terms is in addition to, and not in lieu of, any other right or remedy whether described in these Terms, under Applicable Law, at law, or in equity. The failure or delay of August in exercising any right, power, or privilege under these Terms shall not operate as a waiver thereof.

15.4 Severability. The invalidity or unenforceability of any of these Terms shall not affect the validity or enforceability of any other of these Terms, all of which shall remain in full force and effect.

15.5 Force Majeure. We will have no responsibility or liability for any failure or delay in performance of the Site or any of the Services, or any loss or damage that you may incur, due to any circumstance or event beyond our control, including without limitation any flood, extraordinary weather conditions, earthquake, or other act of God, fire, war, insurrection, riot, labor dispute, accident, action of government, communications, power failure, or equipment or software malfunction.

15.6 Assignment. You may not assign or transfer any right to use the Site or the Services, or any of your rights or obligations under these Terms, without our express prior written consent, including by operation of law or in connection with any change of control. We may assign or transfer any or all of our rights or obligations under these Terms, in whole or in part, without notice or obtaining your consent or approval.

15.7 Governing Law. The interpretation and enforcement of these Terms, and any dispute related to these Terms, the Site or the Services, will be governed by and construed and enforced under the laws of the British Virgin Islands. You agree that we may initiate a proceeding related to the enforcement or validity of our intellectual property rights in any court having jurisdiction. For any other proceeding that is not subject to arbitration under these Terms, the courts located in the British Virgin Islands will have exclusive jurisdiction. You waive any objection to venue in any such courts.

15.8 Headings. Headings of sections are for convenience only and shall not be used to limit or construe such sections.

15.9 Entire Agreement. These Terms contain the entire agreement between you and August, and supersede all prior and contemporaneous understandings between the parties regarding the Site and the Services.

15.10 Interpretation. In the event of any conflict between these Terms and any other agreement you may have with us, these Terms will control unless the other agreement specifically identifies these Terms and declares that the other agreement supersedes these Terms.

15.11 No Third Parties. You agree that, except as otherwise expressly provided in these Terms, there shall be no third-party beneficiaries to the Terms other than the Indemnified Parties.


# Privacy Policy

*Last Updated: May 17th, 2023*

This Privacy Policy ("Policy") describes how Fractal Network Ltd. ("August previously Fractal," "we," "us" or "our") may collect, use and disclose information, and your choices regarding this information. Please read this Policy carefully and contact us with questions at <legal@augustdigital.com>.

### Applicability of This Policy

This Policy applies to our services, which include the services we provide on our platform, user interface to the Protocol or any other websites, pages, features, mobile applications, or content we own or operate (collectively, the "Sites") or when you use any August API or third party applications relying on such an API, and related services (collectively, the "Services"). If you do not agree with the terms of this Policy, do not access or use the Services, Sites, or any other aspect of our business.

### What We Collect​

When you interact with our Services, we may collect:

* Contact Information, such as your email address.
* Financial Information, such as your Ethereum address, cryptocurrency wallet information, transaction history, and associated fees paid.
* Transaction Information, such as information about the transactions you make on our Services, such as the type of transaction, transaction amount, and timestamp.
* Correspondence, such as your feedback, questionnaire and other survey responses, and information you provide to our support teams, including via our help chat.
* Online Identifiers, such as geo location/tracking details, browser fingerprint, operating system, browser name and version, and/or personal IP addresses.
* Usage Data, such as user preferences and other data collected via cookies and similar technologies.
* Information We Get from Others. We may get information about you from other sources as required or permitted by applicable law, including public databases, credit bureaus & ID verification partners. We may combine the information collected from these sources with the information we get from this Site in order to comply with our legal obligations and limit the use of our Services in connection with fraudulent or other illicit activities.
* Information from cookies and other tracking technologies. We, and third parties we authorize, may Sites and mobile apps, and collect information about the use of the Services, as well as about our interactions with you. This information may include internet protocol (IP) addresses, browser type, internet service provider (ISP), referring/exit pages, operating system, date/time stamp, and clickstream data, and information about your interactions with the communications we send to you. We may combine this automatically collected log information with other information we collect about you. You may choose to set your web browser to refuse cookies, or to alert you when cookies are being sent. If you do so, please note that some parts of our Services may not function properly.

### How We Use Information​

We use your information in accordance with your instructions, including any applicable terms in the Terms of Use, and as required by applicable law. We may also use the information we collect for:

#### Providing Services and Features​

We may use the information we collect to provide, personalize, maintain, and improve our products and Services, including as we described in the Terms of Use. This includes using information to:

* operate, maintain, customize, measure, and improve our Services, and manage our business;
* process transactions;
* send information, including confirmations, notices, updates, security alerts, and support and administrative messages; and
* to create de-identified or aggregated data.

#### Safety and Security​

We may use your information to help maintain the safety, security, and integrity of you and our Services, including to:

* protect, investigate, and deter against fraudulent, unauthorized, or illegal activity;
* monitor and verify identity or service access, combat spam, malware or security risks;
* perform internal operations necessary to provide our Services, including to troubleshoot software bugs and operational problems;
* enforce our agreements with third parties, and address violations of our Terms of Use or agreements for other Services; and
* comply with applicable security laws and regulations.

#### User Support​

We may use information we collect to provide support, including to:

* direct questions to the appropriate support person;
* investigate and address user concerns; and
* monitor and improve our customer support responses and processes.

#### Research and Development​

We may use the information we collect for testing, research, analysis, and product development to improve your experience. This helps us to improve and enhance the safety and security of our Services, improve our ability to prevent the use of our Services for illegal or improper purposes and develop new features and products relating to our Services.

#### Legal and Regulatory Compliance​

We may verify your identity by comparing the personal information you provide against third-party databases and public records. We may use the information we collect to investigate or address claims or disputes relating to use of our Services, or as otherwise allowed by applicable law, or as requested by regulators, government entities, and official inquiries.

#### Direct Marketing​

We may use the information we collect to market our Services to you. This may include sending you communications about our Services, features, promotions, surveys, news, updates, and events, and managing your participation in these promotions and events. If you do not want us to send you marketing communications, please opt out by selecting "unsubscribe" to any marketing email sent by us or by contacting us at <legal@augustdigital.io>.

### How We Share & Disclose Information​

We may share your information in the following circumstances:

* With Your Consent. For example, you may let us share personal information with others for their own marketing uses. Those uses will be subject to their privacy policies.
* To Comply with Our Legal Obligations. We may share your information: (A) to cooperate with government or regulatory investigations; (B) when we are compelled to do so by a subpoena, court order, or similar legal procedure; (C) when we believe in good faith that the disclosure of personal information is necessary to prevent harm to another person; (D) to report suspected illegal activity; or (E) to investigate violations of our User Agreement or any other applicable policies.
* With Service Providers. We may share your information with service providers who help facilitate business and compliance operations such as marketing and technology services. Our contracts require these service providers to only use your information in connection with the services they perform for us.
* During a Change to Our Business. If we engage in a merger, acquisition, bankruptcy, dissolution, reorganization, sale of some or all of our assets or stock, financing, public offering of securities, acquisition of all or a portion of our business, a similar transaction or proceeding, or steps in contemplation of such activities, some or all of your information may be shared or transferred, subject to standard confidentiality arrangements.
* Aggregated or De-identified Data. We may share aggregated and/or anonymized data with others for their own uses.

### Data Retention​

To view or update your information, contact us at <legal@augustdigital.io>. We store your information throughout the life of your use of the Protocol and retain your information for a minimum of five (5) years to comply with our legal obligations or to resolve disputes. If you cease using the Protocol, we will neither use your information for any further purposes, nor sell or share your information with third parties, except as necessary to prevent fraud and assist law enforcement, as required by law, or in accordance with this Policy.

### Security​

We maintain administrative, technical and physical safeguards designed to protect the personal information we maintain against unauthorized access or disclosure. No system can be completely secure. Therefore, although we take steps to secure your information, we cannot guarantee that your information, searches, or other communication will always remain secure. You are responsible for all activity on the Protocol relating to any of your blockchain network addresses and/or cryptocurrency wallets.

#### Your Rights

You have various rights in respect of the personal information that we collect, use, disclose and transfer concerning you. These rights are set out below. Should you wish to exercise your rights please contact us at <legal@augustmarkets.com>.

| Right of Access                   | <p>You are entitled to obtain from us details concerning the processing of your personal information. This includes details of the data being processed, the purposes of the processing, any recipients of that information, the period for which the information is processed, the source of the information (if it is not provided by you), any international transfers of the information and the protections we put in place to protect your information. You are also entitled to details of any automated decision making, including profiling, involving your information.<br>You are entitled to a copy of the personal information we process about you (including in electronic form). Additional copies may be subject to a reasonable administrative fee.</p>                                                                                                                             |
| --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Right to Rectification            | You are entitled to have any incomplete and inaccurate personal information held by us rectified.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| Right to Erasure ("be forgotten") | <p>In certain circumstances you are entitled to have personal information erased, including where this is no longer necessary for the purposes for which it was collected and/or processed; or you withdraw consent to our use of the information.<br>We may continue processing the information in certain circumstances, including: if there are grounds other than consent for processing the information; where processing is in compliance with a legal obligation or for reasons of public interest; or for the exercise or defence of legal claims.<br>If you request that we erase your personal information we shall advise you if we consider that there are on-going grounds permitting us to continue processing your information.</p>                                                                                                                                                    |
| Right to Restrict Processing      | <p>You can ask us to restrict the processing of personal information that August holds if: you contest the accuracy of the personal information we process about you; you consider that the processing is unlawful but you do not want us to erase the information; we do not require to continue processing the information but you wish the information to be retained in connection with a legal claim; or you have objected to the grounds upon which we process the information.<br>Where you have asked us to restrict processing the information we shall only hold, process and erase the information as permitted by you or as permitted by applicable data protection laws. We will advise you if we do not agree with your request to restrict processing and our reasons.</p>                                                                                                             |
| Right to Data Portability         | Where you provide personal information to us and consent to us using it and the processing is carried out by automatic means you are entitled to receive a copy of that information in a machine-readable format and for that to be provided to another data controller, where technically possible.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| Right to Object                   | <p>You are entitled to object to August collecting, using and otherwise processing your personal information where the basis for the processing is August’s legitimate interests or the processing is in the public interest. In such circumstances we shall cease processing your personal information unless: we are legitimately processing the information on a different basis; there are compelling legitimate grounds for continuing to process the personal information; or we are otherwise permitted to process the information under applicable data protection laws. If applicable, we will advise you of the basis upon which August continues to process your personal information.<br>If you are not clear of the ground(s) upon which we collect, use and process your personal information you can ask us to confirm this to you, as part of the Right of Access outlined above.</p> |
| Right to Withdraw Consent         | Where you have given us consent to make use of your personal information for any of the purposes outlined in this Privacy Policy you shall be entitled to withdraw that consent. You may do this by emailing us at <legal@augustmarkets.com>.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| Right to Complain                 | <p>In the event that you have any questions, concerns or complaints regarding this Privacy Policy or the manner in which August collects, uses and otherwise processes your personal information we shall always seek to address the same promptly and to your satisfaction. However if you consider that we have not done so you are entitled to lodge a complaint to your local supervisory authority.<br>If you are unclear who the appropriate supervisory authority is for you, please contact us at <legal@augustmarkets.com>.</p>                                                                                                                                                                                                                                                                                                                                                              |

### Age Limitations​

To the extent prohibited by applicable law, we do not allow use of our Services and Sites by anyone younger than the legal age in the jurisdiction in which the user resides. If you learn that anyone younger than the legal age has unlawfully provided us with personal data, please contact us at <legal@augustmarkets.com> and we will take steps to delete such information, close any such accounts, and, to the extent possible, prevent the user from continuing to use our Services.

### Changes to This Policy​

If we make any changes, we will change the Last Updated date above. We encourage you to review this Policy to stay informed. If we make material changes, we will provide additional notice, such as via the email specified in your account or through the Services or Sites.

### Online Tracking Opt-out Guide​

Like many companies online, we use services provided by Google and other companies that use tracking technology. These services rely on tracking technologies-such as cookies and web beacons-to collect directly from your device information about your browsing activities, your interactions with websites, and the device you are using to connect to the Internet. There are a number of ways to opt out of having your online activity and device data collected through these services, which we have summarized below:

* Blocking cookies in your browser. Most browsers let you remove or reject cookies, including cookies used for interest-based advertising. To do this, follow the instructions in your browser settings. Many browsers accept cookies by default until you change your settings. For more information about cookies, including how to see what cookies have been set on your device and how to manage and delete them, visit [www.allaboutcookies.org](http://www.allaboutcookies.org/).
* Blocking advertising ID use in your mobile settings. Your mobile device settings may provide functionality to limit use of the advertising ID associated with your mobile device for interest-based advertising purposes. Using privacy plug-ins or browsers. You can block our websites from setting cookies used for interest-based ads by using a browser with privacy features.
* Platform opt-outs. The following advertising partner offers opt-out features that let you opt-out of use of your information for interest-based advertising - Google: [https://adssettings.google.com.](https://adssettings.google.com/) Advertising industry opt-out tools. You can also use the opt-out options set forth below to limit use of your information for interest-based advertising by participating companies. Note that because these opt-out mechanisms are specific to the device or browser on which they are exercised, you will need to opt out on every browser and device that you use. Digital Advertising Alliance: [http://optout.aboutads.info](http://optout.aboutads.info/) Network Advertising Initiative: <http://optout.networkadvertising.org/>.

### Additional Notice to California Residents (“CCPA Notice”)

The California Consumer Privacy Act of 2018 (“CCPA”) requires certain businesses to provide a CCPA Notice to California residents to explain how we collect, use, and share their personal information, and the rights and choices we offer California residents regarding our handling of their information.

* **Privacy Practices.** We do not “sell” personal information as defined under the CCPA. Please review the “Sharing and Disclosure of Information” section above for further details about the categories of parties with whom we share information.
* **Privacy Rights.** The CCPA gives individuals the right to request information about how we have collected, used, and shared your personal information. It also gives you the right to request a copy of any information we may maintain about you. You may also ask us to delete any personal information that we may have received about you. Please note that the CCPA limits these rights, for example, by prohibiting us from providing certain sensitive information in response to access requests and limiting the circumstances under which we must comply with a deletion request. We will respond to requests for information, access, and deletion only to the extent we are able to associate, with a reasonable effort, the information we maintain with the identifying details you provide in your request. If we deny the request, we will communicate the decision to you. You are entitled to exercise the rights described above free from discrimination.
* **Submitting a Request.** You can submit a request for information, access, or deletion to <legal@augustmarkets.com>.
* **Identity Verification.** The CCPA requires us to collect and verify the identity of any individual submitting a request to access or delete personal information before providing a substantive response.
* **Authorized Agents.** California residents can designate an “authorized agent” to submit requests on their behalf. We will require the authorized agent to have a written authorization confirming their authority.

**Disclosures for European Union Data Subjects**

We process personal data for the purposes described in the section titled “How We Use Data” above. Our bases for processing your data include: (i) you have given consent to the process to us or our service provides for one or more specific purposes; (ii) processing is necessary for the performance of a contract with you; (iii) processing is necessary for compliance with a legal obligation; and/or (iv) processing is necessary for the purposes of the legitimate interested pursued by us or a third party, and your interests and fundamental rights and freedoms do not override those interests.

Your rights under the General Data Protection Regulations (“GDPR”) include the right to (i) request access and obtain a copy of your personal data, (ii) request rectification or erasure of your personal data, (iii) object to or restrict the processing of your personal data; and (iv) request portability of your personal data. Additionally, you may withdraw your consent to our collection at any time. Nevertheless, we cannot edit or delete information that is stored on a particular blockchain. Information such as your transaction data, blockchain wallet address, and assets held by your address that may be related to the data we collect is beyond our control.

To exercise any of your rights under the GDPR, please contact us at <legal@augustmarkets.com>. We may require additional information from you to process your request. Please note that we may retain information as necessary to fulfill the purpose for which it was collected and may continue to do so even after a data subject request in accordance with our legitimate interests, including to comply with our legal obligations, resolves disputes, prevent fraud, and enforce our agreements.

### **Cookies**

Cookies are text files containing small amounts of information which are downloaded to your device when you visit a website. Cookies are then sent back to the originating website on each subsequent visit, or to another website that recognises that cookie. Cookies are useful because they allow a website to recognise a user’s device.

Cookies do lots of different jobs, like letting you navigate between pages efficiently, remembering your preferences, and generally improve the user experience. They can also help to ensure that adverts you see online are more relevant to you and your interests.

For information on the cookies used on August's website, please see our Cookie Policy.

**Contact information**

If you have any questions in relation to this Privacy Policy please contact us at <legal@augustdigital.io>

[<br>](https://legal-us.openeden.com/esign-policy)


# Cookie Policy

*Last Updated: May 18th, 2023*

### Introduction and Scope of Policy​

This Fractal Network Ltd. Cookies Policy (“Policy”) applies to your interaction with Fractal Network Ltd. or any of its subsidiaries or affiliates (“August, previously Fractal” or “we”).

Please read the following carefully to understand our policies and practices regarding the use of cookies on our Platform. By using or accessing our Platform, you agree to this Cookie Policy. This policy may change from time to time and your continued use of the Platform is deemed to be acceptance of such changes, so please check the policy periodically for updates.

### About "Cookies"

Cookies are pieces of data stored on your device. Browser cookies are assigned by a web server to the browser on your device. When you return to a site you have visited before, your browser gives this data back to the server. Mobile applications may also use cookies.

We do not generally use cookies. We do not intentionally collect information to customize your experience on the website or the August user interface (UI) to the August. (“Sites” or “Site”).

Industry standards are currently evolving, and we may not separately respond to or take any action with respect to a “do not track” configuration set in your internet browser. Other parties that may collect information about your web browsing behavior when you use our Site are generally limited to service providers who may only use any information collected to provide services for us and not to provide services or advertising for any other party. Note, however, that we also provide certain widgets or tools on our sites that allow you to interact with third parties who provide these features, such as tools that allow web surfers to easily share information on another platform. At other times, information from a third party may be embedded on our Site, such as a map. These widgets, tools, and informational items often function through the use of third-party cookies utilized by the third party site. As a result, these third parties may have access to information about your web browsing on the pages of our Site where these widgets, tools, or information are placed. You may wish to review information at third party sites, where you have an account, to determine how these third parties treat data that they obtain through the use of cookies.

### Do you have to accept Cookies?​

You may be able to set your browser to reject cookies. If you set your browser options to disallow cookies, you may limit the functionality we can provide when you visit our Site. The latest versions of internet browsers provide cookie management tools, such as the ability to delete or reject cookies. We recommend that you refer to information supplied by browser providers for more specific information, including how to use these tools.

### Additional Technologies​

We do not typically use additional technologies such as pixel tags, web beacons, and clear GIFs. We may permit third-party service providers to use these technologies. They may use these technologies for purposes such as determining viewing and response rates.

### Using Information​

In addition to the uses described above, we may use information for purposes as allowed by law such as: servicing; communicating with you; improving our Site, products, or services; legal compliance; risk control; information security; anti-fraud purposes; tracking website usage, such as number of hits, pages visited, and the length of user sessions in order to evaluate the usefulness of our sites.

### Sharing​

We may share information with service providers with whom we work, such as service providers and companies that help us service you better. When permitted or required by law, we may share information with additional third parties for purposes including response to legal process. As applicable, please see our Privacy Policy for more information on how we may share information with affiliates and third parties.


# Loan Product Terms

Standard Terms Governing Loans Originated on the August Platform. Effective for all loans originated through the August platform (augustdigita.io)

### 1. Overview

These Loan Product Terms set forth the standard terms and conditions governing loans of Digital Currency originated through the August platform. Individual loan parameters (size, rate, LTV, recall period, and maturity) are agreed between Lender and Borrower prior to loan origination and confirmed in writing. These terms provide the operational and legal framework within which each loan is administered.

### 2. Loan Terms

Loans originated on the platform may take one of the following structures:

<table data-header-hidden><thead><tr><th valign="top"></th><th valign="top"></th></tr></thead><tbody><tr><td valign="top">Loan Type</td><td valign="top">Description</td></tr><tr><td valign="top">Open Loan</td><td valign="top">No maturity date. Borrower has a Prepayment Option and Lender has a Call Option.</td></tr><tr><td valign="top">Fixed Term Loan</td><td valign="top">Pre-determined maturity date. Borrower does not have a Prepayment Option and Lender does not have a Call Option.</td></tr><tr><td valign="top">Term + Call Option</td><td valign="top">Pre-determined maturity date with Lender retaining a Call Option to demand repayment at any time.</td></tr><tr><td valign="top">Term + Prepayment</td><td valign="top">Pre-determined maturity date with Borrower retaining a Prepayment Option to repay early without penalty.</td></tr></tbody></table>

### 3. Loan Economics

The following economic parameters are agreed between Lender and Borrower in writing prior to each loan origination:

* Loan Size - The principal amount of Digital Currency or U.S. Dollars to be lent
* Loan Fee (Rate) - The financing fee payable by Borrower, accruing daily and payable monthly in arrears
* Initial LTV / Collateral Ratio - The ratio of Loaned Assets to Collateral required at origination
* Margin Call LTV - The threshold at which additional collateral is required
* Recall Period - The timeframe within which Borrower must return Loaned Assets upon a Call Option exercise
* Maturity Date - For term loans, the date upon which the loan becomes due in full

The minimum Loan Fee for any loan is the fee that would accrue for one day. Loan Fees are calculated daily and provided to Borrower via the platform interface.

### 4. Additional Fees

<table data-header-hidden><thead><tr><th valign="top">Fee</th><th valign="top"></th></tr></thead><tbody><tr><td valign="top">Fee</td><td valign="top">Terms</td></tr><tr><td valign="top">Origination Fee</td><td valign="top">May apply to certain loans, payable at the time collateral is delivered. Amount and currency specified per loan.</td></tr><tr><td valign="top">Late Fee</td><td valign="top">1% annualized (calculated daily) on all outstanding Loaned Assets and Loan Fees for each calendar day past the repayment date.</td></tr><tr><td valign="top">Early Termination Fee</td><td valign="top">For Fixed Term Loans and Term Loans with Call Options: 20% of the Loan Fee that would have accrued from repayment date through Maturity Date. Does not apply to Prepayment Option exercises or Lender Call Option exercises.</td></tr><tr><td valign="top">Liquidation Penalty</td><td valign="top">An additional 2% penalty charge applies in the event of full liquidation of the collateral position.</td></tr></tbody></table>

All fees are payable in the same currency as the Loaned Assets unless otherwise agreed. Upon an Event of Default, all outstanding fees become immediately due and payable.

### 6. Margin Calls and Liquidations

Lender marks collateral to market daily using the agreed reference price. The margin call and liquidation mechanics operate as follows:

<table data-header-hidden><thead><tr><th valign="top"></th><th valign="top"></th></tr></thead><tbody><tr><td valign="top">Trigger</td><td valign="top">Action</td></tr><tr><td valign="top">Health Factor &#x3C; 1.07</td><td valign="top">Borrower receives notification and must immediately top up collateral to avoid partial liquidation.</td></tr><tr><td valign="top">Health Factor reaches 1.03</td><td valign="top">Partial liquidations begin automatically to restore the position to a Health Factor of 1.1.</td></tr><tr><td valign="top">Full Liquidation</td><td valign="top">If the position is fully liquidated, an additional 2% penalty charge applies. Failure to provide Additional Collateral may constitute an Event of Default.</td></tr></tbody></table>

Borrower’s obligations continue regardless of whether Lender has requested Additional Collateral.

### 7. Loan Recall

For Term Loans with a Call Option and Open Loans, Lender may demand repayment of a portion or the entirety of the Loan Balance at any time during Business Hours on any Business Day. Upon exercise of the Call Option:

* Lender notifies Borrower by email of the recall and the Recall Amount.
* Borrower must deliver the Recall Amount by Close of Business on the first Business Day after the Recall Request Day (24-hour callback, unless otherwise agreed).
* Partial recalls are permitted. The remaining portion is due on the earlier of the Maturity Date or a subsequent Recall Delivery Day.

### 8. Events of Default

The following constitute Events of Default:

1. Failure to return Loaned Assets upon loan termination (1 Business Day cure period after notice)
2. Failure to pay Loan Fees, Late Fees, or Early Termination Fees when due (10 day cure period after notice)
3. Failure to transfer Collateral or Additional Collateral as required (10 Business Day cure period after notice)
4. Material default in performance of any obligation under these terms (10 Business Day cure period after notice)
5. Bankruptcy, insolvency, reorganization, or liquidation proceedings (15 day dismissal period for involuntary proceedings)
6. Any material representation or warranty proving incorrect (10 Business Day cure period after notice)

### 9. Remedies upon Default

Upon an Event of Default by Borrower, Lender may, upon written notice:

* Declare the entire Loan Balance immediately due and payable
* Terminate the loan upon notice to Borrower
* Transfer Collateral to satisfy any outstanding obligations, including purchasing replacement Digital Currency
* Set off amounts payable against the Collateral
* Exercise all other rights and remedies available under applicable law, including rights of a secured creditor

Where the cost of replacement Digital Currency exceeds the Collateral, Borrower is liable for the excess plus interest at 10%. All remedies survive termination of the loan and return of Loaned Assets or Collateral.

### 10. Loan Termination

A loan will terminate upon the earliest of:

1. The Maturity Date
2. Repayment of the Loan Balance by Borrower prior to Maturity
3. The occurrence of an Event of Default (subject to Lender’s right to waive)
4. A determination by Lender that the Loaned Assets risk being classified as a security, swap, derivative, or similarly-regulated instrument, or becoming subject to materially impactful regulation

Upon termination, all Loaned Assets must be returned immediately and all outstanding fees become immediately payable. Lender shall return Collateral within five (5) Business Days of receiving repayment.

### 11. Governing Law and Dispute Resolution

These terms are governed by the laws of the British Virgin Islands. Any dispute arising out of or relating to a loan shall be administered by JAMS under the JAMS Streamlined Arbitration Rules & Procedures. One arbitrator shall be chosen by JAMS, costs are shared equally, and proceedings may continue in the absence of any party with proper notice.

### 12. Confidentiality

All information exchanged in connection with a loan is confidential. Each party shall restrict access to its representatives on a need-to-know basis. Confidentiality obligations survive for three (3) years from the date of the applicable agreement, subject to standard exceptions for public information, prior possession, independent development, and legally compelled disclosure.


