> 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/api/solanaadapter.md).

# SolanaAdapter

[SDK Reference](/developers/typescript-sdk/api.md) / 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?`, `options?`): `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 in the next major release.** 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`                                          | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| `options?`         | [`ISolanaDepositOptions`](#isolanadepositoptions)                | Slippage protection. By default the SDK quotes the shares this deposit should mint from the vault's current state and passes that quote, lowered by 50 bps, as the floor to the program's checked instruction. See [ISolanaDepositOptions](#isolanadepositoptions).                                                                                                                                                                                                                                                                             |

**Returns**

`Promise`<`any`>

**vaultRedeem()**

> **vaultRedeem**(`vaultProgramId`, `idl`, `publicKey`, `redeemShares`, `sendTransaction?`, `vaultAddress?`, `options?`): `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 in the next major release.** 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`                                          | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| `options?`         | [`ISolanaRedeemOptions`](#isolanaredeemoptions)                  | Slippage protection. By default the SDK quotes the net payout these shares should return from the vault's current state and passes that quote, lowered by 50 bps, as the floor to the program's checked instruction. See [ISolanaRedeemOptions](#isolanaredeemoptions).                                                                                                                                                                                                                                                                                            |

**Returns**

`Promise`<`any`>

### Interfaces

#### ISolanaDepositOptions

Slippage protection for SolanaAdapter.vaultDeposit.

The SDK quotes the shares a deposit should mint from the vault's current state and passes a floor to the program's `deposit_checked` instruction, which reverts with `SlippageExceeded` if the share price moves past it before execution.

**Properties**

| Property        | Type     | Default value | Description                                                                                                                                                                                                                                                                                                             |
| --------------- | -------- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `minSharesOut?` | `bigint` | `undefined`   | Explicit floor in raw share units, passed to `deposit_checked` as is. Skips the quote and the single snapshot read it needs. `0n` restores the unguarded behaviour of the plain `deposit` instruction. Must be a `bigint` in `0 .. 2^64-1`; anything else throws AugustValidationError before the transaction is built. |
| `slippageBps?`  | `number` | `50 (0.5%)`   | Tolerance below the quoted shares, in basis points (`0` to `10000`). `0` demands the quote exactly. Ignored when `minSharesOut` is given.                                                                                                                                                                               |

***

#### ISolanaRedeemOptions

Slippage protection for SolanaAdapter.vaultRedeem.

The floor is measured **net of the withdrawal fee**, i.e. on what the wallet actually receives, matching the program's `redeem_checked`.

**Properties**

| Property        | Type     | Default value | Description                                                                                                                                                                                      |
| --------------- | -------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `minAssetsOut?` | `bigint` | `undefined`   | Explicit floor in raw deposit-mint units, net of the withdrawal fee, passed to `redeem_checked` as is. Skips the quote. `0n` restores the unguarded behaviour of the plain `redeem` instruction. |
| `slippageBps?`  | `number` | `50 (0.5%)`   | Tolerance below the quoted net payout, in basis points (`0` to `10000`). `0` demands the quote exactly. Ignored when `minAssetsOut` is given.                                                    |

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