Skip to content

Commit

Permalink
testing
Browse files Browse the repository at this point in the history
  • Loading branch information
00xSam committed Dec 2, 2024
1 parent f33c810 commit 7f0f671
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 22 deletions.
40 changes: 23 additions & 17 deletions ts-client/README.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,20 @@
# Mercurial Vault SDK

<p align="center">
<img align="center" src="https://vaults.mercurial.finance/icons/logo.svg" width="180" height="180" />
<img align="center" src="https://app.meteora.ag/icons/logo.svg" width="180" height="180" />
</p>
<br>

## Getting started
NPM: https://www.npmjs.com/package/@mercurial-finance/vault-sdk

NPM: https://www.npmjs.com/package/@meteora-ag/vault-sdk

SDK: https://github.com/mercurial-finance/vault-sdk

Demo: https://vault-sdk-demo.vercel.app/

Demo repo: https://github.com/mercurial-finance/vault-sdk-demo

- Easiest way to get started with our Typescript SDK, the example demo includes all functionality and information we display on our own site.

Docs: https://docs.mercurial.finance/mercurial-dynamic-yield-infra/
Expand All @@ -26,40 +28,40 @@ Discord: https://discord.com/channels/841152225564950528/864859354335412224
1. Install deps

```
npm i @mercurial-finance/vault-sdk @project-serum/anchor @solana/web3.js @solana/spl-token @solana/spl-token-registry
npm i @meteora-ag/vault-sdk @project-serum/anchor @solana/web3.js @solana/spl-token
```

2. Initialize VaultImpl instance

- Affiliate or partner? refer to the [Vault Affiliate Program]()

```ts
import VaultImpl from '@mercurial-finance/vault-sdk';
import VaultImpl from '@meteora-ag/vault-sdk';
import { PublicKey } from '@solana/web3.js';
import { StaticTokenListResolutionStrategy, TokenInfo } from "@solana/spl-token-registry";
import { NATIVE_MINT } from '@solana/spl-token';
import { Wallet, AnchorProvider } from '@project-serum/anchor';

// Connection, Wallet, and AnchorProvider to interact with the network
const mainnetConnection = new Connection('https://api.mainnet-beta.solana.com');
const mockWallet = new Wallet(new Keypair());
const provider = new AnchorProvider(mainnetConnection, mockWallet, {
commitment: 'confirmed',
commitment: 'confirmed',
});
// Alternatively, to use Solana Wallet Adapter, refer to `Demo Repo`

const tokenMap = new StaticTokenListResolutionStrategy().resolve();
// Find the token info you want to use.
const SOL_TOKEN_INFO = tokenMap.find(token => token.symbol === 'SOL') as TokenInfo;
const vaultImpl = await VaultImpl.create(connection, SOL_TOKEN_INFO);
const vaultImpl = await VaultImpl.create(connection, NATIVE_MINT);
```

3. To interact with the VaultImpl

```ts
// To refetch the vault's latest supply
// Alternatively, use `vaultImpl.lpSupply`
const lpSupply = await vaultImpl.getVaultSupply();

// Rewards are not instantly redeemable, and are subject to a lock.
// This function returns the amount of LP that are redeemable.
const unlockedAmount = await vaultImpl.getWithdrawableAmount()
const unlockedAmount = await vaultImpl.getWithdrawableAmount();

// To deposit into the vault
const amountInLamports = 1 * 10 ** SOL_TOKEN_INFO.decimals; // 1.0 SOL
Expand All @@ -75,34 +77,37 @@ const withdrawResult = await provider.sendAndConfirm(withdrawTx); // Transaction
```

4. Helper function

```ts
import { helper } from '@mercurial-finance/vault-sdk';
import { helper } from '@meteora-ag/vault-sdk';

const userShare = await vaultImpl.getUserBalance(mockWallet.publicKey);
const unlockedAmount = await vaultImpl.getWithdrawableAmount()
const unlockedAmount = await vaultImpl.getWithdrawableAmount();
const lpSupply = await vaultImpl.getVaultSupply();

// To convert user's LP balance into underlying token amount
const underlyingShare = helper.getAmountByShare(userShare, unlockedAmount, lpSupply)
const underlyingShare = helper.getAmountByShare(userShare, unlockedAmount, lpSupply);

// To convert underlying token amount into user's LP balance
const amountInLamports = 1 * 10 ** SOL_TOKEN_INFO.decimals; // 1.0 SOL
const lpToUnmint = helper.getUnmintAmount(new BN(amountInLamports), unlockedAmount, lpSupply) // To withdraw 1.0 SOL
const lpToUnmint = helper.getUnmintAmount(new BN(amountInLamports), unlockedAmount, lpSupply); // To withdraw 1.0 SOL
```

<hr>

## Vault Affiliate

To be a part of the Mercurial Finance's Vault Affiliate Program, visit our Discord above!

<br>

#### To initialize vault with affiliate

Affiliates only need to initialize the vault instance with the third paratemer `opt.affiliate`, subsequently, all interaction with the vault are the same as the usage guide above, no further configuration required.

```ts
const vaultImpl = await VaultImpl.create(
connection,
connection,
SOL_TOKEN_INFO,
{
affiliateId: new PublicKey('YOUR_PARTNER_PUBLIC_KEY');
Expand All @@ -111,7 +116,8 @@ const vaultImpl = await VaultImpl.create(
```

#### To check Partner info

```ts
// Affiliate / Partner info
const partnerInfo = await vaultImpl.getAffiliateInfo();
```
```
12 changes: 8 additions & 4 deletions ts-client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
"main": "dist/cjs/index.js",
"module": "dist/esm/index.js",
"scripts": {
"prepare": "npm rm @meteora-ag/config && npm install @meteora-ag/config",
"postinstall": "pnpm i --lockfile-only",
"postclone": "pnpm rm @meteora-ag/config && pnpm install @meteora-ag/config",
"build": "rm -rf dist && tsc -p tsconfig.build.json && tsc -p tsconfig.esm.json",
"test": "jest ./src/vault/tests/*.test.ts --runInBand",
"test-affiliate": "jest ./src/vault/tests/affiliate.test.ts --runInBand"
Expand All @@ -30,10 +31,10 @@
"typescript": "^5.5.4"
},
"peerDependencies": {
"bn.js": "^5.2.1",
"@coral-xyz/anchor": "^0.28.0",
"@solana/spl-token": "^0.4.9",
"@solana/web3.js": "^1.95.3"
"@solana/web3.js": "^1.95.5",
"bn.js": "^5.2.1"
},
"directories": {
"test": "tests"
Expand All @@ -45,5 +46,8 @@
"bugs": {
"url": "https://github.com/mercurial-finance/mercurial_sdk/issues"
},
"homepage": "https://github.com/mercurial-finance/mercurial_sdk#readme"
"homepage": "https://github.com/mercurial-finance/mercurial_sdk#readme",
"dependencies": {
"@mcsam/recharts": "^2.10.3"
}
}
2 changes: 1 addition & 1 deletion ts-client/src/vault/utils/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ export const getLpSupply = async (connection: Connection, tokenMint: PublicKey):
};

export function chunks<T>(array: T[], size: number): T[][] {
return Array.apply<number, T[], T[][]>(0, new Array(Math.ceil(array.length / size))).map((_, index) =>
return Array.apply(0, new Array(Math.ceil(array.length / size))).map((_, index) =>
array.slice(index * size, (index + 1) * size),
);
}
Expand Down

0 comments on commit 7f0f671

Please sign in to comment.