> For the complete documentation index, see [llms.txt](https://docs.augustdigital.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.augustdigital.io/developers/typescript-sdk/code-examples/abis.md).

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