# 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.

### 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!');
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.augustdigital.io/developers/typescript-sdk/code-examples/abis.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
