@carrot-protocol/clend-vaults-rpc 0.0.2 → 0.0.3-pub2-dev-be4bd59
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/addresses.d.ts +4 -0
- package/dist/addresses.js +14 -0
- package/dist/addresses.js.map +1 -0
- package/dist/idl/clend_vaults.d.ts +1556 -0
- package/dist/idl/clend_vaults.js +3 -0
- package/dist/idl/clend_vaults.js.map +1 -0
- package/dist/idl/clend_vaults.json +1550 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/math.d.ts +38 -0
- package/dist/math.js +79 -0
- package/dist/math.js.map +1 -0
- package/dist/program.d.ts +27 -0
- package/dist/program.js +294 -0
- package/dist/program.js.map +1 -0
- package/dist/rpc.d.ts +56 -0
- package/dist/rpc.js +685 -0
- package/dist/rpc.js.map +1 -0
- package/dist/state.d.ts +48 -0
- package/dist/state.js +108 -0
- package/dist/state.js.map +1 -0
- package/dist/swapper.d.ts +58 -0
- package/dist/swapper.js +109 -0
- package/dist/swapper.js.map +1 -0
- package/dist/utils.d.ts +2 -0
- package/dist/utils.js +10 -0
- package/dist/utils.js.map +1 -0
- package/package.json +7 -2
- package/.prettierignore +0 -2
- package/makefile +0 -18
- package/src/addresses.ts +0 -19
- package/src/idl/clend_vaults.json +0 -1550
- package/src/idl/clend_vaults.ts +0 -1556
- package/src/math.ts +0 -103
- package/src/program.ts +0 -551
- package/src/rpc.ts +0 -1354
- package/src/state.ts +0 -188
- package/src/swapper.ts +0 -221
- package/src/utils.ts +0 -7
- package/tsconfig.json +0 -18
- /package/{src/index.ts → dist/index.d.ts} +0 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./addresses"), exports);
|
|
18
|
+
__exportStar(require("./program"), exports);
|
|
19
|
+
__exportStar(require("./rpc"), exports);
|
|
20
|
+
__exportStar(require("./state"), exports);
|
|
21
|
+
__exportStar(require("./math"), exports);
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,4CAA0B;AAC1B,wCAAsB;AACtB,0CAAwB;AACxB,yCAAuB"}
|
package/dist/math.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { LendingAccount } from "@carrot-protocol/clend-rpc";
|
|
2
|
+
import { BN } from "@coral-xyz/anchor";
|
|
3
|
+
/**
|
|
4
|
+
* Computes the net asset value (NAV) per share based on vault equity and share supply.
|
|
5
|
+
*/
|
|
6
|
+
export declare function calculateVaultNav(equity: number, sharesSupplyUi: number): number;
|
|
7
|
+
/**
|
|
8
|
+
* Calculates the USD value earned from a given number of shares and NAV.
|
|
9
|
+
*/
|
|
10
|
+
export declare function usdEarned(sharesUi: number, nav: number): number;
|
|
11
|
+
/**
|
|
12
|
+
* Convert a UI number to a token amount BN
|
|
13
|
+
* @param uiAmount Amount in UI format (e.g., 1.5 USDC)
|
|
14
|
+
* @param decimals Token decimals
|
|
15
|
+
* @returns BN representing the token amount in smallest units (lamports)
|
|
16
|
+
*/
|
|
17
|
+
export declare function uiToAmount(uiAmount: number, decimals: number): BN;
|
|
18
|
+
/**
|
|
19
|
+
* Convert a token amount BN to a UI number
|
|
20
|
+
* @param amount BN representing the token amount in smallest units (lamports)
|
|
21
|
+
* @param decimals Token decimals
|
|
22
|
+
* @returns Number in UI format (e.g., 1.5 USDC)
|
|
23
|
+
*/
|
|
24
|
+
export declare function amountToUi(amount: BN, decimals: number): number;
|
|
25
|
+
export declare function calculateLendingAccountEquity(lendingAccount: LendingAccount): number;
|
|
26
|
+
/**
|
|
27
|
+
* Converts a token amount to its USD value based on price and decimals.
|
|
28
|
+
*/
|
|
29
|
+
export declare function amountToUsd(amount: BN, decimals: number, price: number): number;
|
|
30
|
+
/**
|
|
31
|
+
* Converts a USD amount to its token representation based on price and decimals.
|
|
32
|
+
*/
|
|
33
|
+
export declare function usdToAmount(usdAmount: number, decimals: number, price: number): BN;
|
|
34
|
+
/**
|
|
35
|
+
* Converts shares to asset tokens.
|
|
36
|
+
*/
|
|
37
|
+
export declare function convertSharesToAsset(vaultNav: number, sharesAmountUi: number, assetDecimals: number, assetPrice: number): BN;
|
|
38
|
+
export declare function convertAssetToShares(vaultNav: number, assetAmount: BN, assetDecimals: number, sharesDecimals: number, assetPrice: number): BN;
|
package/dist/math.js
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.calculateVaultNav = calculateVaultNav;
|
|
4
|
+
exports.usdEarned = usdEarned;
|
|
5
|
+
exports.uiToAmount = uiToAmount;
|
|
6
|
+
exports.amountToUi = amountToUi;
|
|
7
|
+
exports.calculateLendingAccountEquity = calculateLendingAccountEquity;
|
|
8
|
+
exports.amountToUsd = amountToUsd;
|
|
9
|
+
exports.usdToAmount = usdToAmount;
|
|
10
|
+
exports.convertSharesToAsset = convertSharesToAsset;
|
|
11
|
+
exports.convertAssetToShares = convertAssetToShares;
|
|
12
|
+
const anchor_1 = require("@coral-xyz/anchor");
|
|
13
|
+
/**
|
|
14
|
+
* Computes the net asset value (NAV) per share based on vault equity and share supply.
|
|
15
|
+
*/
|
|
16
|
+
function calculateVaultNav(equity, sharesSupplyUi) {
|
|
17
|
+
if (equity === 0 || sharesSupplyUi === 0) {
|
|
18
|
+
return 0;
|
|
19
|
+
}
|
|
20
|
+
return equity / sharesSupplyUi;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Calculates the USD value earned from a given number of shares and NAV.
|
|
24
|
+
*/
|
|
25
|
+
function usdEarned(sharesUi, nav) {
|
|
26
|
+
return sharesUi * nav;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Convert a UI number to a token amount BN
|
|
30
|
+
* @param uiAmount Amount in UI format (e.g., 1.5 USDC)
|
|
31
|
+
* @param decimals Token decimals
|
|
32
|
+
* @returns BN representing the token amount in smallest units (lamports)
|
|
33
|
+
*/
|
|
34
|
+
function uiToAmount(uiAmount, decimals) {
|
|
35
|
+
// floor to avoid over-minting
|
|
36
|
+
return new anchor_1.BN(Math.floor(uiAmount * 10 ** decimals));
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Convert a token amount BN to a UI number
|
|
40
|
+
* @param amount BN representing the token amount in smallest units (lamports)
|
|
41
|
+
* @param decimals Token decimals
|
|
42
|
+
* @returns Number in UI format (e.g., 1.5 USDC)
|
|
43
|
+
*/
|
|
44
|
+
function amountToUi(amount, decimals) {
|
|
45
|
+
return amount.toNumber() / 10 ** decimals;
|
|
46
|
+
}
|
|
47
|
+
function calculateLendingAccountEquity(lendingAccount) {
|
|
48
|
+
let accountEquity = 0;
|
|
49
|
+
for (const balance of lendingAccount.balances) {
|
|
50
|
+
accountEquity =
|
|
51
|
+
accountEquity + (balance.assetValue - balance.liabilityValue);
|
|
52
|
+
}
|
|
53
|
+
return accountEquity;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Converts a token amount to its USD value based on price and decimals.
|
|
57
|
+
*/
|
|
58
|
+
function amountToUsd(amount, decimals, price) {
|
|
59
|
+
return amountToUi(amount, decimals) * price;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Converts a USD amount to its token representation based on price and decimals.
|
|
63
|
+
*/
|
|
64
|
+
function usdToAmount(usdAmount, decimals, price) {
|
|
65
|
+
return uiToAmount(usdAmount / price, decimals);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Converts shares to asset tokens.
|
|
69
|
+
*/
|
|
70
|
+
function convertSharesToAsset(vaultNav, sharesAmountUi, assetDecimals, assetPrice) {
|
|
71
|
+
const sharesUsd = usdEarned(sharesAmountUi, vaultNav);
|
|
72
|
+
const tokenAmount = usdToAmount(sharesUsd, assetDecimals, assetPrice);
|
|
73
|
+
return tokenAmount;
|
|
74
|
+
}
|
|
75
|
+
function convertAssetToShares(vaultNav, assetAmount, assetDecimals, sharesDecimals, assetPrice) {
|
|
76
|
+
const assetUsd = amountToUsd(assetAmount, assetDecimals, assetPrice);
|
|
77
|
+
return usdToAmount(assetUsd, sharesDecimals, vaultNav);
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=math.js.map
|
package/dist/math.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"math.js","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":";;AAMA,8CAQC;AAKD,8BAEC;AAQD,gCAGC;AAQD,gCAEC;AAED,sEASC;AAKD,kCAMC;AAKD,kCAMC;AAKD,oDAWC;AAED,oDASC;AArGD,8CAAuC;AAEvC;;GAEG;AACH,SAAgB,iBAAiB,CAC/B,MAAc,EACd,cAAsB;IAEtB,IAAI,MAAM,KAAK,CAAC,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,MAAM,GAAG,cAAc,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS,CAAC,QAAgB,EAAE,GAAW;IACrD,OAAO,QAAQ,GAAG,GAAG,CAAC;AACxB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,UAAU,CAAC,QAAgB,EAAE,QAAgB;IAC3D,8BAA8B;IAC9B,OAAO,IAAI,WAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,IAAI,QAAQ,CAAC,CAAC,CAAC;AACvD,CAAC;AAED;;;;;GAKG;AACH,SAAgB,UAAU,CAAC,MAAU,EAAE,QAAgB;IACrD,OAAO,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,QAAQ,CAAC;AAC5C,CAAC;AAED,SAAgB,6BAA6B,CAC3C,cAA8B;IAE9B,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,KAAK,MAAM,OAAO,IAAI,cAAc,CAAC,QAAQ,EAAE,CAAC;QAC9C,aAAa;YACX,aAAa,GAAG,CAAC,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CACzB,MAAU,EACV,QAAgB,EAChB,KAAa;IAEb,OAAO,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CACzB,SAAiB,EACjB,QAAgB,EAChB,KAAa;IAEb,OAAO,UAAU,CAAC,SAAS,GAAG,KAAK,EAAE,QAAQ,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAClC,QAAgB,EAChB,cAAsB,EACtB,aAAqB,EACrB,UAAkB;IAElB,MAAM,SAAS,GAAG,SAAS,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IAEtD,MAAM,WAAW,GAAG,WAAW,CAAC,SAAS,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;IAEtE,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAgB,oBAAoB,CAClC,QAAgB,EAChB,WAAe,EACf,aAAqB,EACrB,cAAsB,EACtB,UAAkB;IAElB,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;IACrE,OAAO,WAAW,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { AnchorProvider, BN, Program, web3 } from "@coral-xyz/anchor";
|
|
2
|
+
import { type ClendVaults } from "./idl/clend_vaults";
|
|
3
|
+
export declare class ClendVaultsProgram {
|
|
4
|
+
readonly program: Program<ClendVaults>;
|
|
5
|
+
constructor(provider?: AnchorProvider);
|
|
6
|
+
initVault(vaultSharesMint: web3.PublicKey, manager: web3.PublicKey, managementFeeBps: number): Promise<{
|
|
7
|
+
vault: web3.PublicKey;
|
|
8
|
+
ixns: web3.TransactionInstruction[];
|
|
9
|
+
}>;
|
|
10
|
+
addAsset(vault: web3.PublicKey, manager: web3.PublicKey, assetMint: web3.PublicKey, assetOracle: web3.PublicKey, assetTokenProgram: web3.PublicKey, addAssetArgs: AddAssetArgs): Promise<web3.TransactionInstruction[]>;
|
|
11
|
+
addClendAccount(vault: web3.PublicKey, manager: web3.PublicKey, clendGroup: web3.PublicKey, clendAccount: web3.Keypair): Promise<web3.TransactionInstruction[]>;
|
|
12
|
+
updateVaultManager(vault: web3.PublicKey, currentManager: web3.PublicKey, newManager: web3.PublicKey): Promise<web3.TransactionInstruction[]>;
|
|
13
|
+
issue(vault: web3.PublicKey, sharesMint: web3.PublicKey, user: web3.PublicKey, assetMint: web3.PublicKey, assetOracle: web3.PublicKey, amount: BN | number, assetTokenProgram: web3.PublicKey, sharesTokenProgram: web3.PublicKey, remainingAccounts: web3.AccountMeta[]): Promise<web3.TransactionInstruction[]>;
|
|
14
|
+
redeem(vault: web3.PublicKey, sharesMint: web3.PublicKey, user: web3.PublicKey, assetMint: web3.PublicKey, assetOracle: web3.PublicKey, amount: BN, assetTokenProgram: web3.PublicKey, sharesTokenProgram: web3.PublicKey, remainingAccounts: web3.AccountMeta[]): Promise<web3.TransactionInstruction[]>;
|
|
15
|
+
clendAccountDeposit(vault: web3.PublicKey, vaultManager: web3.PublicKey, clendGroup: web3.PublicKey, clendAccount: web3.PublicKey, assetMint: web3.PublicKey, assetMintTokenProgram: web3.PublicKey, amount: BN, vaultReserve: web3.PublicKey, remainingAccounts: web3.AccountMeta[]): Promise<web3.TransactionInstruction[]>;
|
|
16
|
+
clendAccountWithdraw(vault: web3.PublicKey, vaultManager: web3.PublicKey, clendGroup: web3.PublicKey, clendAccount: web3.PublicKey, assetMint: web3.PublicKey, assetMintTokenProgram: web3.PublicKey, amount: BN, remainingAccounts: web3.AccountMeta[]): Promise<web3.TransactionInstruction[]>;
|
|
17
|
+
clendAccountRepay(vault: web3.PublicKey, vaultManager: web3.PublicKey, clendGroup: web3.PublicKey, clendAccount: web3.PublicKey, assetMint: web3.PublicKey, mintTokenProgram: web3.PublicKey, amount: BN, remainingAccounts: web3.AccountMeta[]): Promise<web3.TransactionInstruction[]>;
|
|
18
|
+
clendAccountBorrow(vault: web3.PublicKey, vaultManager: web3.PublicKey, clendGroup: web3.PublicKey, clendAccount: web3.PublicKey, assetMint: web3.PublicKey, mintTokenProgram: web3.PublicKey, amount: BN, remainingAccounts: web3.AccountMeta[]): Promise<web3.TransactionInstruction[]>;
|
|
19
|
+
clendAccountClaimEmissions(vault: web3.PublicKey, vaultManager: web3.PublicKey, clendGroup: web3.PublicKey, clendAccount: web3.PublicKey, bank: web3.PublicKey, assetMint: web3.PublicKey, emissionsMint: web3.PublicKey, destinationAccount: web3.PublicKey, // vault-owned ATA for emissions mint
|
|
20
|
+
mintTokenProgram: web3.PublicKey, emissionsVault: web3.PublicKey, emissionsAuthority: web3.PublicKey, clendProgramId: web3.PublicKey): Promise<web3.TransactionInstruction[]>;
|
|
21
|
+
swap(vault: web3.PublicKey, vaultManager: web3.PublicKey, assetInMint: web3.PublicKey, assetOutMint: web3.PublicKey, vaultAssetInReserve: web3.PublicKey, vaultAssetOutReserve: web3.PublicKey, swapData: Buffer, remainingAccounts: web3.AccountMeta[], swapProgram?: web3.PublicKey): Promise<web3.TransactionInstruction[]>;
|
|
22
|
+
distributeFees(vault: web3.PublicKey, manager: web3.PublicKey, shares: web3.PublicKey, sharesDestinationOwner: web3.PublicKey): Promise<web3.TransactionInstruction[]>;
|
|
23
|
+
}
|
|
24
|
+
export interface AddAssetArgs {
|
|
25
|
+
issueFeeBps: number;
|
|
26
|
+
redemptionFeeBps: number;
|
|
27
|
+
}
|
package/dist/program.js
ADDED
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ClendVaultsProgram = void 0;
|
|
7
|
+
// instructions.ts
|
|
8
|
+
const anchor_1 = require("@coral-xyz/anchor");
|
|
9
|
+
const spl_token_1 = require("@solana/spl-token");
|
|
10
|
+
const addresses_1 = require("./addresses");
|
|
11
|
+
const clend_vaults_json_1 = __importDefault(require("./idl/clend_vaults.json"));
|
|
12
|
+
const clend_rpc_1 = require("@carrot-protocol/clend-rpc");
|
|
13
|
+
const utils_1 = require("./utils");
|
|
14
|
+
class ClendVaultsProgram {
|
|
15
|
+
constructor(provider) {
|
|
16
|
+
if (!provider) {
|
|
17
|
+
provider = (0, utils_1.getDummyProvider)();
|
|
18
|
+
}
|
|
19
|
+
this.program = new anchor_1.Program(clend_vaults_json_1.default, provider);
|
|
20
|
+
}
|
|
21
|
+
async initVault(vaultSharesMint, manager, managementFeeBps) {
|
|
22
|
+
const vault = (0, addresses_1.getVaultPda)(vaultSharesMint);
|
|
23
|
+
const transferMintAuthorityIx = (0, spl_token_1.createSetAuthorityInstruction)(vaultSharesMint, manager, spl_token_1.AuthorityType.MintTokens, vault, [], spl_token_1.TOKEN_2022_PROGRAM_ID);
|
|
24
|
+
const args = {
|
|
25
|
+
managementFeeBps,
|
|
26
|
+
};
|
|
27
|
+
const ix = await this.program.methods
|
|
28
|
+
.initVault(args)
|
|
29
|
+
.accountsStrict({
|
|
30
|
+
manager,
|
|
31
|
+
payer: manager,
|
|
32
|
+
vault,
|
|
33
|
+
vaultShares: vaultSharesMint,
|
|
34
|
+
systemProgram: anchor_1.web3.SystemProgram.programId,
|
|
35
|
+
})
|
|
36
|
+
.instruction();
|
|
37
|
+
return { vault, ixns: [transferMintAuthorityIx, ix] };
|
|
38
|
+
}
|
|
39
|
+
async addAsset(vault, manager, assetMint, assetOracle, assetTokenProgram, addAssetArgs) {
|
|
40
|
+
const vaultAssetReserve = (0, spl_token_1.getAssociatedTokenAddressSync)(assetMint, vault, true, assetTokenProgram);
|
|
41
|
+
// Create ATA idempotently
|
|
42
|
+
const createVaultReserveIx = (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(manager, // payer
|
|
43
|
+
vaultAssetReserve, vault, assetMint, assetTokenProgram);
|
|
44
|
+
const addAssetIx = await this.program.methods
|
|
45
|
+
.addAsset(addAssetArgs)
|
|
46
|
+
.accountsStrict({
|
|
47
|
+
vault,
|
|
48
|
+
assetMint,
|
|
49
|
+
assetOracle,
|
|
50
|
+
vaultAssetReserve,
|
|
51
|
+
manager,
|
|
52
|
+
tokenProgram: assetTokenProgram,
|
|
53
|
+
systemProgram: anchor_1.web3.SystemProgram.programId,
|
|
54
|
+
})
|
|
55
|
+
.instruction();
|
|
56
|
+
return [createVaultReserveIx, addAssetIx];
|
|
57
|
+
}
|
|
58
|
+
async addClendAccount(vault, manager, clendGroup, clendAccount) {
|
|
59
|
+
const ix = await this.program.methods
|
|
60
|
+
.addClendAccount()
|
|
61
|
+
.accountsStrict({
|
|
62
|
+
vault,
|
|
63
|
+
clendAccount: clendAccount.publicKey,
|
|
64
|
+
clendGroup,
|
|
65
|
+
manager,
|
|
66
|
+
clendProgram: clend_rpc_1.CLEND_PROGRAM_ID,
|
|
67
|
+
systemProgram: anchor_1.web3.SystemProgram.programId,
|
|
68
|
+
})
|
|
69
|
+
.instruction();
|
|
70
|
+
return [ix];
|
|
71
|
+
}
|
|
72
|
+
async updateVaultManager(vault, currentManager, newManager) {
|
|
73
|
+
const ix = await this.program.methods
|
|
74
|
+
.updateVaultManager()
|
|
75
|
+
.accountsStrict({
|
|
76
|
+
vault,
|
|
77
|
+
newManager,
|
|
78
|
+
manager: currentManager,
|
|
79
|
+
})
|
|
80
|
+
.instruction();
|
|
81
|
+
return [ix];
|
|
82
|
+
}
|
|
83
|
+
// -----------------
|
|
84
|
+
// Shares ops
|
|
85
|
+
// -----------------
|
|
86
|
+
async issue(vault, sharesMint, user, assetMint, assetOracle, amount, assetTokenProgram, sharesTokenProgram, remainingAccounts) {
|
|
87
|
+
const amt = new anchor_1.BN(amount);
|
|
88
|
+
// Vault reserve (owner is vault PDA)
|
|
89
|
+
const vaultAssetReserve = (0, spl_token_1.getAssociatedTokenAddressSync)(assetMint, vault, true, assetTokenProgram);
|
|
90
|
+
// User ATAs (owner is user)
|
|
91
|
+
const userAssetAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(assetMint, user, true, assetTokenProgram);
|
|
92
|
+
const userSharesAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(sharesMint, user, true, sharesTokenProgram);
|
|
93
|
+
// Ensure user's ATAs exist (idempotent)
|
|
94
|
+
const createUserAssetIx = (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(user, userAssetAccount, user, assetMint, assetTokenProgram);
|
|
95
|
+
const createUserSharesIx = (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(user, userSharesAccount, user, sharesMint, sharesTokenProgram);
|
|
96
|
+
const ix = await this.program.methods
|
|
97
|
+
.issue({ amount: amt })
|
|
98
|
+
.accountsStrict({
|
|
99
|
+
vault,
|
|
100
|
+
shares: sharesMint,
|
|
101
|
+
assetMint,
|
|
102
|
+
assetOracle,
|
|
103
|
+
vaultAssetReserve,
|
|
104
|
+
userAssetAccount,
|
|
105
|
+
userSharesAccount,
|
|
106
|
+
user,
|
|
107
|
+
assetTokenProgram,
|
|
108
|
+
sharesTokenProgram,
|
|
109
|
+
systemProgram: anchor_1.web3.SystemProgram.programId,
|
|
110
|
+
})
|
|
111
|
+
.remainingAccounts(remainingAccounts)
|
|
112
|
+
.instruction();
|
|
113
|
+
return [createUserAssetIx, createUserSharesIx, ix];
|
|
114
|
+
}
|
|
115
|
+
async redeem(vault, sharesMint, user, assetMint, assetOracle, amount, assetTokenProgram, sharesTokenProgram, remainingAccounts) {
|
|
116
|
+
const amt = new anchor_1.BN(amount);
|
|
117
|
+
const vaultAssetReserve = (0, spl_token_1.getAssociatedTokenAddressSync)(assetMint, vault, true, assetTokenProgram);
|
|
118
|
+
const userAssetAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(assetMint, user, true, assetTokenProgram);
|
|
119
|
+
const userSharesAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(sharesMint, user, true, sharesTokenProgram);
|
|
120
|
+
// Make sure the user asset ATA exists
|
|
121
|
+
const createUserAssetIx = (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(user, userAssetAccount, user, assetMint, assetTokenProgram);
|
|
122
|
+
const ix = await this.program.methods
|
|
123
|
+
.redeem({ amount: amt })
|
|
124
|
+
.accountsStrict({
|
|
125
|
+
vault,
|
|
126
|
+
shares: sharesMint,
|
|
127
|
+
assetMint,
|
|
128
|
+
assetOracle,
|
|
129
|
+
vaultAssetReserve,
|
|
130
|
+
userAssetAccount,
|
|
131
|
+
userSharesAccount,
|
|
132
|
+
user,
|
|
133
|
+
assetTokenProgram,
|
|
134
|
+
sharesTokenProgram,
|
|
135
|
+
systemProgram: anchor_1.web3.SystemProgram.programId,
|
|
136
|
+
})
|
|
137
|
+
.remainingAccounts(remainingAccounts)
|
|
138
|
+
.instruction();
|
|
139
|
+
return [createUserAssetIx, ix];
|
|
140
|
+
}
|
|
141
|
+
// -----------------
|
|
142
|
+
// Clend-account ops (builders; vault PDA signs via seeds)
|
|
143
|
+
// -----------------
|
|
144
|
+
async clendAccountDeposit(vault, vaultManager, clendGroup, clendAccount, assetMint, assetMintTokenProgram, amount, vaultReserve, remainingAccounts) {
|
|
145
|
+
const bank = (0, clend_rpc_1.getBankPda)(clendGroup, assetMint);
|
|
146
|
+
const bankLiquidityVault = (0, clend_rpc_1.getBankLiquidityVaultPda)(bank);
|
|
147
|
+
const ix = await this.program.methods
|
|
148
|
+
.clendAccountDeposit({ amount })
|
|
149
|
+
.accountsStrict({
|
|
150
|
+
vault,
|
|
151
|
+
assetMint,
|
|
152
|
+
clendGroup,
|
|
153
|
+
clendAccount,
|
|
154
|
+
bank,
|
|
155
|
+
vaultReserve,
|
|
156
|
+
bankLiquidityVault,
|
|
157
|
+
manager: vaultManager,
|
|
158
|
+
tokenProgram: assetMintTokenProgram,
|
|
159
|
+
clendProgram: clend_rpc_1.CLEND_PROGRAM_ID,
|
|
160
|
+
systemProgram: anchor_1.web3.SystemProgram.programId,
|
|
161
|
+
})
|
|
162
|
+
.remainingAccounts(remainingAccounts)
|
|
163
|
+
.instruction();
|
|
164
|
+
return [ix];
|
|
165
|
+
}
|
|
166
|
+
async clendAccountWithdraw(vault, vaultManager, clendGroup, clendAccount, assetMint, assetMintTokenProgram, amount, remainingAccounts) {
|
|
167
|
+
const bank = (0, clend_rpc_1.getBankPda)(clendGroup, assetMint);
|
|
168
|
+
const bankLiquidityVault = (0, clend_rpc_1.getBankLiquidityVaultPda)(bank);
|
|
169
|
+
const bankLiquidityVaultAuthority = (0, clend_rpc_1.getBankLiquidityVaultAuthorityPda)(bank);
|
|
170
|
+
const destinationTokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(assetMint, vault, true, assetMintTokenProgram);
|
|
171
|
+
const ix = await this.program.methods
|
|
172
|
+
.clendAccountWithdraw({ amount })
|
|
173
|
+
.accountsStrict({
|
|
174
|
+
vault,
|
|
175
|
+
assetMint,
|
|
176
|
+
clendGroup,
|
|
177
|
+
clendAccount,
|
|
178
|
+
bank,
|
|
179
|
+
destinationTokenAccount,
|
|
180
|
+
bankLiquidityVaultAuthority,
|
|
181
|
+
bankLiquidityVault,
|
|
182
|
+
manager: vaultManager,
|
|
183
|
+
tokenProgram: assetMintTokenProgram,
|
|
184
|
+
clendProgram: clend_rpc_1.CLEND_PROGRAM_ID,
|
|
185
|
+
systemProgram: anchor_1.web3.SystemProgram.programId,
|
|
186
|
+
})
|
|
187
|
+
.remainingAccounts(remainingAccounts)
|
|
188
|
+
.instruction();
|
|
189
|
+
return [ix];
|
|
190
|
+
}
|
|
191
|
+
async clendAccountRepay(vault, vaultManager, clendGroup, clendAccount, assetMint, mintTokenProgram, amount, remainingAccounts) {
|
|
192
|
+
const bank = (0, clend_rpc_1.getBankPda)(clendGroup, assetMint);
|
|
193
|
+
const bankLiquidityVault = (0, clend_rpc_1.getBankLiquidityVaultPda)(bank);
|
|
194
|
+
const signerTokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(assetMint, vault, true, mintTokenProgram);
|
|
195
|
+
const ix = await this.program.methods
|
|
196
|
+
.clendAccountRepay({ amount: new anchor_1.BN(amount) })
|
|
197
|
+
.accountsStrict({
|
|
198
|
+
vault,
|
|
199
|
+
assetMint,
|
|
200
|
+
clendGroup,
|
|
201
|
+
clendAccount,
|
|
202
|
+
bank,
|
|
203
|
+
signerTokenAccount,
|
|
204
|
+
bankLiquidityVault,
|
|
205
|
+
manager: vaultManager,
|
|
206
|
+
tokenProgram: mintTokenProgram,
|
|
207
|
+
clendProgram: clend_rpc_1.CLEND_PROGRAM_ID,
|
|
208
|
+
systemProgram: anchor_1.web3.SystemProgram.programId,
|
|
209
|
+
})
|
|
210
|
+
.remainingAccounts(remainingAccounts)
|
|
211
|
+
.instruction();
|
|
212
|
+
return [ix];
|
|
213
|
+
}
|
|
214
|
+
async clendAccountBorrow(vault, vaultManager, clendGroup, clendAccount, assetMint, mintTokenProgram, amount, remainingAccounts) {
|
|
215
|
+
const bank = (0, clend_rpc_1.getBankPda)(clendGroup, assetMint);
|
|
216
|
+
const bankLiquidityVault = (0, clend_rpc_1.getBankLiquidityVaultPda)(bank);
|
|
217
|
+
const bankLiquidityVaultAuthority = (0, clend_rpc_1.getBankLiquidityVaultAuthorityPda)(bank);
|
|
218
|
+
const destinationTokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(assetMint, vault, true, mintTokenProgram);
|
|
219
|
+
const ix = await this.program.methods
|
|
220
|
+
.clendAccountBorrow({ amount })
|
|
221
|
+
.accountsStrict({
|
|
222
|
+
vault,
|
|
223
|
+
assetMint,
|
|
224
|
+
clendGroup,
|
|
225
|
+
clendAccount,
|
|
226
|
+
bank,
|
|
227
|
+
destinationTokenAccount,
|
|
228
|
+
bankLiquidityVaultAuthority,
|
|
229
|
+
bankLiquidityVault,
|
|
230
|
+
manager: vaultManager,
|
|
231
|
+
tokenProgram: mintTokenProgram,
|
|
232
|
+
clendProgram: clend_rpc_1.CLEND_PROGRAM_ID,
|
|
233
|
+
systemProgram: anchor_1.web3.SystemProgram.programId,
|
|
234
|
+
})
|
|
235
|
+
.remainingAccounts(remainingAccounts)
|
|
236
|
+
.instruction();
|
|
237
|
+
return [ix];
|
|
238
|
+
}
|
|
239
|
+
async clendAccountClaimEmissions(vault, vaultManager, clendGroup, clendAccount, bank, assetMint, emissionsMint, destinationAccount, // vault-owned ATA for emissions mint
|
|
240
|
+
mintTokenProgram, emissionsVault, emissionsAuthority, clendProgramId) {
|
|
241
|
+
const ix = await this.program.methods
|
|
242
|
+
.clendAccountClaimEmissions()
|
|
243
|
+
.accountsStrict({
|
|
244
|
+
vault,
|
|
245
|
+
assetMint,
|
|
246
|
+
clendGroup,
|
|
247
|
+
clendAccount,
|
|
248
|
+
bank,
|
|
249
|
+
emissionsMint,
|
|
250
|
+
emissionsAuth: emissionsAuthority,
|
|
251
|
+
emissionsVault,
|
|
252
|
+
destinationAccount,
|
|
253
|
+
manager: vaultManager,
|
|
254
|
+
tokenProgram: mintTokenProgram,
|
|
255
|
+
clendProgram: clendProgramId,
|
|
256
|
+
systemProgram: anchor_1.web3.SystemProgram.programId,
|
|
257
|
+
})
|
|
258
|
+
.instruction();
|
|
259
|
+
return [ix];
|
|
260
|
+
}
|
|
261
|
+
async swap(vault, vaultManager, assetInMint, assetOutMint, vaultAssetInReserve, vaultAssetOutReserve, swapData, remainingAccounts, swapProgram = addresses_1.JUPITER_SWAP_PROGRAM_ID) {
|
|
262
|
+
const ix = await this.program.methods
|
|
263
|
+
.swap({ swapData: Buffer.from(swapData) })
|
|
264
|
+
.accountsStrict({
|
|
265
|
+
vault,
|
|
266
|
+
assetInMint,
|
|
267
|
+
assetOutMint,
|
|
268
|
+
vaultAssetInReserve,
|
|
269
|
+
vaultAssetOutReserve,
|
|
270
|
+
manager: vaultManager,
|
|
271
|
+
swapProgram,
|
|
272
|
+
})
|
|
273
|
+
.remainingAccounts(remainingAccounts)
|
|
274
|
+
.instruction();
|
|
275
|
+
return [ix];
|
|
276
|
+
}
|
|
277
|
+
async distributeFees(vault, manager, shares, sharesDestinationOwner) {
|
|
278
|
+
const sharesDestination = (0, spl_token_1.getAssociatedTokenAddressSync)(shares, sharesDestinationOwner, true, spl_token_1.TOKEN_2022_PROGRAM_ID);
|
|
279
|
+
const createSharesDestinationIx = (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(manager, sharesDestination, sharesDestinationOwner, shares, spl_token_1.TOKEN_2022_PROGRAM_ID);
|
|
280
|
+
const ix = await this.program.methods
|
|
281
|
+
.distributeFees()
|
|
282
|
+
.accountsStrict({
|
|
283
|
+
vault,
|
|
284
|
+
manager,
|
|
285
|
+
shares,
|
|
286
|
+
sharesDestination,
|
|
287
|
+
tokenProgram: spl_token_1.TOKEN_2022_PROGRAM_ID,
|
|
288
|
+
})
|
|
289
|
+
.instruction();
|
|
290
|
+
return [createSharesDestinationIx, ix];
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
exports.ClendVaultsProgram = ClendVaultsProgram;
|
|
294
|
+
//# sourceMappingURL=program.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":";;;;;;AAAA,kBAAkB;AAClB,8CAAsE;AACtE,iDAM2B;AAC3B,2CAAmE;AAEnE,gFAA0C;AAE1C,0DAKoC;AACpC,mCAA2C;AAE3C,MAAa,kBAAkB;IAG7B,YAAY,QAAyB;QACnC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG,IAAA,wBAAgB,GAAE,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,gBAAO,CAAc,2BAAG,EAAE,QAAQ,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,SAAS,CACb,eAA+B,EAC/B,OAAuB,EACvB,gBAAwB;QAExB,MAAM,KAAK,GAAG,IAAA,uBAAW,EAAC,eAAe,CAAC,CAAC;QAE3C,MAAM,uBAAuB,GAAG,IAAA,yCAA6B,EAC3D,eAAe,EACf,OAAO,EACP,yBAAa,CAAC,UAAU,EACxB,KAAK,EACL,EAAE,EACF,iCAAqB,CACtB,CAAC;QAEF,MAAM,IAAI,GAAG;YACX,gBAAgB;SACjB,CAAC;QAEF,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAClC,SAAS,CAAC,IAAI,CAAC;aACf,cAAc,CAAC;YACd,OAAO;YACP,KAAK,EAAE,OAAO;YACd,KAAK;YACL,WAAW,EAAE,eAAe;YAC5B,aAAa,EAAE,aAAI,CAAC,aAAa,CAAC,SAAS;SAC5C,CAAC;aACD,WAAW,EAAE,CAAC;QAEjB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,uBAAuB,EAAE,EAAE,CAAC,EAAE,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,KAAqB,EACrB,OAAuB,EACvB,SAAyB,EACzB,WAA2B,EAC3B,iBAAiC,EACjC,YAA0B;QAE1B,MAAM,iBAAiB,GAAG,IAAA,yCAA6B,EACrD,SAAS,EACT,KAAK,EACL,IAAI,EACJ,iBAAiB,CAClB,CAAC;QAEF,0BAA0B;QAC1B,MAAM,oBAAoB,GACxB,IAAA,6DAAiD,EAC/C,OAAO,EAAE,QAAQ;QACjB,iBAAiB,EACjB,KAAK,EACL,SAAS,EACT,iBAAiB,CAClB,CAAC;QAEJ,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAC1C,QAAQ,CAAC,YAAY,CAAC;aACtB,cAAc,CAAC;YACd,KAAK;YACL,SAAS;YACT,WAAW;YACX,iBAAiB;YACjB,OAAO;YACP,YAAY,EAAE,iBAAiB;YAC/B,aAAa,EAAE,aAAI,CAAC,aAAa,CAAC,SAAS;SAC5C,CAAC;aACD,WAAW,EAAE,CAAC;QAEjB,OAAO,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,KAAqB,EACrB,OAAuB,EACvB,UAA0B,EAC1B,YAA0B;QAE1B,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAClC,eAAe,EAAE;aACjB,cAAc,CAAC;YACd,KAAK;YACL,YAAY,EAAE,YAAY,CAAC,SAAS;YACpC,UAAU;YACV,OAAO;YACP,YAAY,EAAE,4BAAgB;YAC9B,aAAa,EAAE,aAAI,CAAC,aAAa,CAAC,SAAS;SAC5C,CAAC;aACD,WAAW,EAAE,CAAC;QAEjB,OAAO,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,KAAqB,EACrB,cAA8B,EAC9B,UAA0B;QAE1B,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAClC,kBAAkB,EAAE;aACpB,cAAc,CAAC;YACd,KAAK;YACL,UAAU;YACV,OAAO,EAAE,cAAc;SACxB,CAAC;aACD,WAAW,EAAE,CAAC;QACjB,OAAO,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;IAED,oBAAoB;IACpB,aAAa;IACb,oBAAoB;IAEpB,KAAK,CAAC,KAAK,CACT,KAAqB,EACrB,UAA0B,EAC1B,IAAoB,EACpB,SAAyB,EACzB,WAA2B,EAC3B,MAAmB,EACnB,iBAAiC,EACjC,kBAAkC,EAClC,iBAAqC;QAErC,MAAM,GAAG,GAAG,IAAI,WAAE,CAAC,MAAa,CAAC,CAAC;QAElC,qCAAqC;QACrC,MAAM,iBAAiB,GAAG,IAAA,yCAA6B,EACrD,SAAS,EACT,KAAK,EACL,IAAI,EACJ,iBAAiB,CAClB,CAAC;QAEF,4BAA4B;QAC5B,MAAM,gBAAgB,GAAG,IAAA,yCAA6B,EACpD,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,iBAAiB,CAClB,CAAC;QACF,MAAM,iBAAiB,GAAG,IAAA,yCAA6B,EACrD,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,kBAAkB,CACnB,CAAC;QAEF,wCAAwC;QACxC,MAAM,iBAAiB,GAAG,IAAA,6DAAiD,EACzE,IAAI,EACJ,gBAAgB,EAChB,IAAI,EACJ,SAAS,EACT,iBAAiB,CAClB,CAAC;QACF,MAAM,kBAAkB,GACtB,IAAA,6DAAiD,EAC/C,IAAI,EACJ,iBAAiB,EACjB,IAAI,EACJ,UAAU,EACV,kBAAkB,CACnB,CAAC;QAEJ,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAClC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;aACtB,cAAc,CAAC;YACd,KAAK;YACL,MAAM,EAAE,UAAU;YAClB,SAAS;YACT,WAAW;YACX,iBAAiB;YACjB,gBAAgB;YAChB,iBAAiB;YACjB,IAAI;YACJ,iBAAiB;YACjB,kBAAkB;YAClB,aAAa,EAAE,aAAI,CAAC,aAAa,CAAC,SAAS;SAC5C,CAAC;aACD,iBAAiB,CAAC,iBAAiB,CAAC;aACpC,WAAW,EAAE,CAAC;QAEjB,OAAO,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,MAAM,CACV,KAAqB,EACrB,UAA0B,EAC1B,IAAoB,EACpB,SAAyB,EACzB,WAA2B,EAC3B,MAAU,EACV,iBAAiC,EACjC,kBAAkC,EAClC,iBAAqC;QAErC,MAAM,GAAG,GAAG,IAAI,WAAE,CAAC,MAAa,CAAC,CAAC;QAElC,MAAM,iBAAiB,GAAG,IAAA,yCAA6B,EACrD,SAAS,EACT,KAAK,EACL,IAAI,EACJ,iBAAiB,CAClB,CAAC;QACF,MAAM,gBAAgB,GAAG,IAAA,yCAA6B,EACpD,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,iBAAiB,CAClB,CAAC;QACF,MAAM,iBAAiB,GAAG,IAAA,yCAA6B,EACrD,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,kBAAkB,CACnB,CAAC;QAEF,sCAAsC;QACtC,MAAM,iBAAiB,GAAG,IAAA,6DAAiD,EACzE,IAAI,EACJ,gBAAgB,EAChB,IAAI,EACJ,SAAS,EACT,iBAAiB,CAClB,CAAC;QAEF,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAClC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;aACvB,cAAc,CAAC;YACd,KAAK;YACL,MAAM,EAAE,UAAU;YAClB,SAAS;YACT,WAAW;YACX,iBAAiB;YACjB,gBAAgB;YAChB,iBAAiB;YACjB,IAAI;YACJ,iBAAiB;YACjB,kBAAkB;YAClB,aAAa,EAAE,aAAI,CAAC,aAAa,CAAC,SAAS;SAC5C,CAAC;aACD,iBAAiB,CAAC,iBAAiB,CAAC;aACpC,WAAW,EAAE,CAAC;QAEjB,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,oBAAoB;IACpB,0DAA0D;IAC1D,oBAAoB;IAEpB,KAAK,CAAC,mBAAmB,CACvB,KAAqB,EACrB,YAA4B,EAC5B,UAA0B,EAC1B,YAA4B,EAC5B,SAAyB,EACzB,qBAAqC,EACrC,MAAU,EACV,YAA4B,EAC5B,iBAAqC;QAErC,MAAM,IAAI,GAAG,IAAA,sBAAU,EAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC/C,MAAM,kBAAkB,GAAG,IAAA,oCAAwB,EAAC,IAAI,CAAC,CAAC;QAE1D,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAClC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;aAC/B,cAAc,CAAC;YACd,KAAK;YACL,SAAS;YACT,UAAU;YACV,YAAY;YACZ,IAAI;YACJ,YAAY;YACZ,kBAAkB;YAClB,OAAO,EAAE,YAAY;YACrB,YAAY,EAAE,qBAAqB;YACnC,YAAY,EAAE,4BAAgB;YAC9B,aAAa,EAAE,aAAI,CAAC,aAAa,CAAC,SAAS;SAC5C,CAAC;aACD,iBAAiB,CAAC,iBAAiB,CAAC;aACpC,WAAW,EAAE,CAAC;QAEjB,OAAO,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,KAAqB,EACrB,YAA4B,EAC5B,UAA0B,EAC1B,YAA4B,EAC5B,SAAyB,EACzB,qBAAqC,EACrC,MAAU,EACV,iBAAqC;QAErC,MAAM,IAAI,GAAG,IAAA,sBAAU,EAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC/C,MAAM,kBAAkB,GAAG,IAAA,oCAAwB,EAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,2BAA2B,GAAG,IAAA,6CAAiC,EAAC,IAAI,CAAC,CAAC;QAE5E,MAAM,uBAAuB,GAAG,IAAA,yCAA6B,EAC3D,SAAS,EACT,KAAK,EACL,IAAI,EACJ,qBAAqB,CACtB,CAAC;QAEF,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAClC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;aAChC,cAAc,CAAC;YACd,KAAK;YACL,SAAS;YACT,UAAU;YACV,YAAY;YACZ,IAAI;YACJ,uBAAuB;YACvB,2BAA2B;YAC3B,kBAAkB;YAClB,OAAO,EAAE,YAAY;YACrB,YAAY,EAAE,qBAAqB;YACnC,YAAY,EAAE,4BAAgB;YAC9B,aAAa,EAAE,aAAI,CAAC,aAAa,CAAC,SAAS;SAC5C,CAAC;aACD,iBAAiB,CAAC,iBAAiB,CAAC;aACpC,WAAW,EAAE,CAAC;QAEjB,OAAO,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;IAED,KAAK,CAAC,iBAAiB,CACrB,KAAqB,EACrB,YAA4B,EAC5B,UAA0B,EAC1B,YAA4B,EAC5B,SAAyB,EACzB,gBAAgC,EAChC,MAAU,EACV,iBAAqC;QAErC,MAAM,IAAI,GAAG,IAAA,sBAAU,EAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC/C,MAAM,kBAAkB,GAAG,IAAA,oCAAwB,EAAC,IAAI,CAAC,CAAC;QAE1D,MAAM,kBAAkB,GAAG,IAAA,yCAA6B,EACtD,SAAS,EACT,KAAK,EACL,IAAI,EACJ,gBAAgB,CACjB,CAAC;QAEF,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAClC,iBAAiB,CAAC,EAAE,MAAM,EAAE,IAAI,WAAE,CAAC,MAAa,CAAC,EAAE,CAAC;aACpD,cAAc,CAAC;YACd,KAAK;YACL,SAAS;YACT,UAAU;YACV,YAAY;YACZ,IAAI;YACJ,kBAAkB;YAClB,kBAAkB;YAClB,OAAO,EAAE,YAAY;YACrB,YAAY,EAAE,gBAAgB;YAC9B,YAAY,EAAE,4BAAgB;YAC9B,aAAa,EAAE,aAAI,CAAC,aAAa,CAAC,SAAS;SAC5C,CAAC;aACD,iBAAiB,CAAC,iBAAiB,CAAC;aACpC,WAAW,EAAE,CAAC;QAEjB,OAAO,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,KAAqB,EACrB,YAA4B,EAC5B,UAA0B,EAC1B,YAA4B,EAC5B,SAAyB,EACzB,gBAAgC,EAChC,MAAU,EACV,iBAAqC;QAErC,MAAM,IAAI,GAAG,IAAA,sBAAU,EAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC/C,MAAM,kBAAkB,GAAG,IAAA,oCAAwB,EAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,2BAA2B,GAAG,IAAA,6CAAiC,EAAC,IAAI,CAAC,CAAC;QAE5E,MAAM,uBAAuB,GAAG,IAAA,yCAA6B,EAC3D,SAAS,EACT,KAAK,EACL,IAAI,EACJ,gBAAgB,CACjB,CAAC;QAEF,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAClC,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;aAC9B,cAAc,CAAC;YACd,KAAK;YACL,SAAS;YACT,UAAU;YACV,YAAY;YACZ,IAAI;YACJ,uBAAuB;YACvB,2BAA2B;YAC3B,kBAAkB;YAClB,OAAO,EAAE,YAAY;YACrB,YAAY,EAAE,gBAAgB;YAC9B,YAAY,EAAE,4BAAgB;YAC9B,aAAa,EAAE,aAAI,CAAC,aAAa,CAAC,SAAS;SAC5C,CAAC;aACD,iBAAiB,CAAC,iBAAiB,CAAC;aACpC,WAAW,EAAE,CAAC;QAEjB,OAAO,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;IAED,KAAK,CAAC,0BAA0B,CAC9B,KAAqB,EACrB,YAA4B,EAC5B,UAA0B,EAC1B,YAA4B,EAC5B,IAAoB,EACpB,SAAyB,EACzB,aAA6B,EAC7B,kBAAkC,EAAE,qCAAqC;IACzE,gBAAgC,EAChC,cAA8B,EAC9B,kBAAkC,EAClC,cAA8B;QAE9B,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAClC,0BAA0B,EAAE;aAC5B,cAAc,CAAC;YACd,KAAK;YACL,SAAS;YACT,UAAU;YACV,YAAY;YACZ,IAAI;YACJ,aAAa;YACb,aAAa,EAAE,kBAAkB;YACjC,cAAc;YACd,kBAAkB;YAClB,OAAO,EAAE,YAAY;YACrB,YAAY,EAAE,gBAAgB;YAC9B,YAAY,EAAE,cAAc;YAC5B,aAAa,EAAE,aAAI,CAAC,aAAa,CAAC,SAAS;SAC5C,CAAC;aACD,WAAW,EAAE,CAAC;QAEjB,OAAO,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;IAED,KAAK,CAAC,IAAI,CACR,KAAqB,EACrB,YAA4B,EAC5B,WAA2B,EAC3B,YAA4B,EAC5B,mBAAmC,EACnC,oBAAoC,EACpC,QAAgB,EAChB,iBAAqC,EACrC,cAA8B,mCAAuB;QAErD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAClC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;aACzC,cAAc,CAAC;YACd,KAAK;YACL,WAAW;YACX,YAAY;YACZ,mBAAmB;YACnB,oBAAoB;YACpB,OAAO,EAAE,YAAY;YACrB,WAAW;SACZ,CAAC;aACD,iBAAiB,CAAC,iBAAiB,CAAC;aACpC,WAAW,EAAE,CAAC;QAEjB,OAAO,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,KAAqB,EACrB,OAAuB,EACvB,MAAsB,EACtB,sBAAsC;QAEtC,MAAM,iBAAiB,GAAG,IAAA,yCAA6B,EACrD,MAAM,EACN,sBAAsB,EACtB,IAAI,EACJ,iCAAqB,CACtB,CAAC;QACF,MAAM,yBAAyB,GAC7B,IAAA,6DAAiD,EAC/C,OAAO,EACP,iBAAiB,EACjB,sBAAsB,EACtB,MAAM,EACN,iCAAqB,CACtB,CAAC;QACJ,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAClC,cAAc,EAAE;aAChB,cAAc,CAAC;YACd,KAAK;YACL,OAAO;YACP,MAAM;YACN,iBAAiB;YACjB,YAAY,EAAE,iCAAqB;SACpC,CAAC;aACD,WAAW,EAAE,CAAC;QAEjB,OAAO,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC;IACzC,CAAC;CACF;AA5gBD,gDA4gBC"}
|
package/dist/rpc.d.ts
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { AnchorProvider, BN, web3 } from "@coral-xyz/anchor";
|
|
2
|
+
import { Connection } from "@solana/web3.js";
|
|
3
|
+
import { AddAssetArgs, ClendVaultsProgram } from "./program";
|
|
4
|
+
import { ClendClient, ISwapper } from "@carrot-protocol/clend-rpc";
|
|
5
|
+
import { Vault, VaultEquity } from "./state";
|
|
6
|
+
export type Wallet = AnchorProvider["wallet"];
|
|
7
|
+
type AccountMeta = web3.AccountMeta;
|
|
8
|
+
export declare class ClendVaultsClient {
|
|
9
|
+
readonly connection: Connection;
|
|
10
|
+
readonly program: ClendVaultsProgram;
|
|
11
|
+
readonly clendClient: ClendClient;
|
|
12
|
+
readonly swapper: ISwapper;
|
|
13
|
+
readonly skipPreflight: boolean;
|
|
14
|
+
constructor(provider: AnchorProvider, skipPreflight?: boolean, swapperOverride?: ISwapper);
|
|
15
|
+
address(): web3.PublicKey;
|
|
16
|
+
getVault(vault: web3.PublicKey): Promise<Vault>;
|
|
17
|
+
getVaultEquity(vault: Vault): Promise<VaultEquity>;
|
|
18
|
+
initVault(sharesMint: web3.PublicKey, managementFeeBps: number): Promise<{
|
|
19
|
+
txSig: string;
|
|
20
|
+
vault: web3.PublicKey;
|
|
21
|
+
}>;
|
|
22
|
+
addAsset(vault: web3.PublicKey, assetMint: web3.PublicKey, assetOracle: web3.PublicKey, addAssetArgs: AddAssetArgs): Promise<string>;
|
|
23
|
+
addClendAccount(vault: web3.PublicKey, clendGroup: web3.PublicKey): Promise<{
|
|
24
|
+
txSig: string;
|
|
25
|
+
clendAccount: web3.PublicKey;
|
|
26
|
+
}>;
|
|
27
|
+
updateVaultManager(vault: web3.PublicKey, newManager: web3.PublicKey): Promise<web3.TransactionInstruction[]>;
|
|
28
|
+
issue(vault: web3.PublicKey, assetMint: web3.PublicKey, amount: BN): Promise<string>;
|
|
29
|
+
prepareIssueIxns(user: web3.PublicKey, vault: web3.PublicKey, assetMint: web3.PublicKey, amount: BN): Promise<web3.TransactionInstruction[]>;
|
|
30
|
+
redeem(vault: web3.PublicKey, assetMint: web3.PublicKey, sharesAmount: BN): Promise<string>;
|
|
31
|
+
prepareRedeemIxns(user: web3.PublicKey, vault: web3.PublicKey, assetMint: web3.PublicKey, amount: BN): Promise<web3.TransactionInstruction[]>;
|
|
32
|
+
clendAccountDeposit(vault: web3.PublicKey, clendAccount: web3.PublicKey, assetMint: web3.PublicKey, amount: BN): Promise<string>;
|
|
33
|
+
clendAccountWithdraw(vault: web3.PublicKey, clendAccount: web3.PublicKey, assetMint: web3.PublicKey, amount: BN): Promise<string>;
|
|
34
|
+
clendAccountRepay(vault: web3.PublicKey, clendAccount: web3.PublicKey, assetMint: web3.PublicKey, amount: BN | number): Promise<string>;
|
|
35
|
+
clendAccountBorrow(vault: web3.PublicKey, clendAccount: web3.PublicKey, assetMint: web3.PublicKey, amount: BN): Promise<string>;
|
|
36
|
+
clendAccountClaimEmissions(vault: web3.PublicKey, clendGroup: web3.PublicKey, clendAccount: web3.PublicKey, bank: web3.PublicKey, assetMint: web3.PublicKey, emissionsMint: web3.PublicKey): Promise<web3.TransactionInstruction[]>;
|
|
37
|
+
clendAccountAdjustLeverage(clendAccount: web3.PublicKey, collateralMint: web3.PublicKey, debtMint: web3.PublicKey, targetLeverage: number, slippageBps: number): Promise<string>;
|
|
38
|
+
prepareRedeemFromClendAccountIxns(user: web3.PublicKey, vault: web3.PublicKey, clendAccount: web3.PublicKey, outputAssetMint: web3.PublicKey, collateralMint: web3.PublicKey, debtMint: web3.PublicKey, totalSharesToRedeem: BN, sharesToRedeemFromClendAccount: BN, slippageBps: number): Promise<{
|
|
39
|
+
ixns: web3.TransactionInstruction[];
|
|
40
|
+
luts: web3.PublicKey[];
|
|
41
|
+
}>;
|
|
42
|
+
getWithdrawLeverageCollateralIxns(vault: web3.PublicKey, vaultManager: web3.PublicKey, user: web3.PublicKey, clendGroup: web3.PublicKey, clendAccount: web3.PublicKey, collateralMint: web3.PublicKey, debtMint: web3.PublicKey, collateralDecimals: number, debtDecimals: number, withdrawAll: boolean, collateralToWithdraw: BN, desiredNetCollateralToReceive: BN, debtToRepay: BN, slippageBps: number, additionalIxnCount: number, swapperOverride?: ISwapper): Promise<{
|
|
43
|
+
ixns: web3.TransactionInstruction[];
|
|
44
|
+
luts: web3.PublicKey[];
|
|
45
|
+
}>;
|
|
46
|
+
getWithdrawLeverageDebtIxns(vault: web3.PublicKey, vaultManager: web3.PublicKey, user: web3.PublicKey, clendGroup: web3.PublicKey, clendAccount: web3.PublicKey, collateralMint: web3.PublicKey, debtMint: web3.PublicKey, collateralDecimals: number, debtDecimals: number, withdrawAll: boolean, debtToRepay: BN, collateralToWithdraw: BN, slippageBps: number, additionalIxnCount: number, swapperOverride?: ISwapper): Promise<{
|
|
47
|
+
ixns: web3.TransactionInstruction[];
|
|
48
|
+
luts: web3.PublicKey[];
|
|
49
|
+
}>;
|
|
50
|
+
swap(vault: web3.PublicKey, inputMint: web3.PublicKey, outputMint: web3.PublicKey, inAmount: BN): Promise<string>;
|
|
51
|
+
distributeFees(vault: web3.PublicKey, sharesDestinationOwner: web3.PublicKey): Promise<string>;
|
|
52
|
+
send(ixns: web3.TransactionInstruction[], additionalSigners?: web3.Signer[]): Promise<string>;
|
|
53
|
+
confirmTx(txSig: string): Promise<void>;
|
|
54
|
+
}
|
|
55
|
+
export declare function buildEquityRemainingAccounts(vaultData: Vault, clendClient: ClendClient): Promise<AccountMeta[]>;
|
|
56
|
+
export {};
|