@cubee_ee/sdk 0.1.0
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/LICENSE +21 -0
- package/README.md +110 -0
- package/dist/clients/AdminClient.d.ts +61 -0
- package/dist/clients/AdminClient.d.ts.map +1 -0
- package/dist/clients/AdminClient.js +196 -0
- package/dist/clients/AdminClient.js.map +1 -0
- package/dist/clients/CubeBackendClient.d.ts +67 -0
- package/dist/clients/CubeBackendClient.d.ts.map +1 -0
- package/dist/clients/CubeBackendClient.js +126 -0
- package/dist/clients/CubeBackendClient.js.map +1 -0
- package/dist/clients/CubicPoolClient.d.ts +73 -0
- package/dist/clients/CubicPoolClient.d.ts.map +1 -0
- package/dist/clients/CubicPoolClient.js +425 -0
- package/dist/clients/CubicPoolClient.js.map +1 -0
- package/dist/clients/PoolFactoryClient.d.ts +45 -0
- package/dist/clients/PoolFactoryClient.d.ts.map +1 -0
- package/dist/clients/PoolFactoryClient.js +83 -0
- package/dist/clients/PoolFactoryClient.js.map +1 -0
- package/dist/clients/RpcClient.d.ts +28 -0
- package/dist/clients/RpcClient.d.ts.map +1 -0
- package/dist/clients/RpcClient.js +58 -0
- package/dist/clients/RpcClient.js.map +1 -0
- package/dist/clients/SingleTokenDepositClient.d.ts +45 -0
- package/dist/clients/SingleTokenDepositClient.d.ts.map +1 -0
- package/dist/clients/SingleTokenDepositClient.js +63 -0
- package/dist/clients/SingleTokenDepositClient.js.map +1 -0
- package/dist/clients/index.d.ts +8 -0
- package/dist/clients/index.d.ts.map +1 -0
- package/dist/clients/index.js +24 -0
- package/dist/clients/index.js.map +1 -0
- package/dist/clients/tx-builders.d.ts +32 -0
- package/dist/clients/tx-builders.d.ts.map +1 -0
- package/dist/clients/tx-builders.js +398 -0
- package/dist/clients/tx-builders.js.map +1 -0
- package/dist/config/index.d.ts +60 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +59 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/networks.d.ts +10 -0
- package/dist/config/networks.d.ts.map +1 -0
- package/dist/config/networks.js +31 -0
- package/dist/config/networks.js.map +1 -0
- package/dist/config/tokens.d.ts +19 -0
- package/dist/config/tokens.d.ts.map +1 -0
- package/dist/config/tokens.js +43 -0
- package/dist/config/tokens.js.map +1 -0
- package/dist/idl/cubic_pool.json +2497 -0
- package/dist/idl/index.d.ts +975 -0
- package/dist/idl/index.d.ts.map +1 -0
- package/dist/idl/index.js +18 -0
- package/dist/idl/index.js.map +1 -0
- package/dist/idl/protocol_admin.json +1816 -0
- package/dist/idl/single_token_liquidity.json +745 -0
- package/dist/index.d.ts +48 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +136 -0
- package/dist/index.js.map +1 -0
- package/dist/math/cubicMath.d.ts +40 -0
- package/dist/math/cubicMath.d.ts.map +1 -0
- package/dist/math/cubicMath.js +75 -0
- package/dist/math/cubicMath.js.map +1 -0
- package/dist/math/fixedPoint.d.ts +14 -0
- package/dist/math/fixedPoint.d.ts.map +1 -0
- package/dist/math/fixedPoint.js +46 -0
- package/dist/math/fixedPoint.js.map +1 -0
- package/dist/math/index.d.ts +7 -0
- package/dist/math/index.d.ts.map +1 -0
- package/dist/math/index.js +23 -0
- package/dist/math/index.js.map +1 -0
- package/dist/math/logExp.d.ts +15 -0
- package/dist/math/logExp.d.ts.map +1 -0
- package/dist/math/logExp.js +91 -0
- package/dist/math/logExp.js.map +1 -0
- package/dist/math/singleToken.d.ts +53 -0
- package/dist/math/singleToken.d.ts.map +1 -0
- package/dist/math/singleToken.js +185 -0
- package/dist/math/singleToken.js.map +1 -0
- package/dist/math/slippage.d.ts +24 -0
- package/dist/math/slippage.d.ts.map +1 -0
- package/dist/math/slippage.js +54 -0
- package/dist/math/slippage.js.map +1 -0
- package/dist/math/weightedMath.d.ts +18 -0
- package/dist/math/weightedMath.d.ts.map +1 -0
- package/dist/math/weightedMath.js +45 -0
- package/dist/math/weightedMath.js.map +1 -0
- package/dist/parsers/borsh.d.ts +24 -0
- package/dist/parsers/borsh.d.ts.map +1 -0
- package/dist/parsers/borsh.js +80 -0
- package/dist/parsers/borsh.js.map +1 -0
- package/dist/parsers/events.d.ts +3 -0
- package/dist/parsers/events.d.ts.map +1 -0
- package/dist/parsers/events.js +172 -0
- package/dist/parsers/events.js.map +1 -0
- package/dist/parsers/index.d.ts +5 -0
- package/dist/parsers/index.d.ts.map +1 -0
- package/dist/parsers/index.js +21 -0
- package/dist/parsers/index.js.map +1 -0
- package/dist/parsers/mintAccount.d.ts +22 -0
- package/dist/parsers/mintAccount.d.ts.map +1 -0
- package/dist/parsers/mintAccount.js +22 -0
- package/dist/parsers/mintAccount.js.map +1 -0
- package/dist/parsers/poolAccount.d.ts +32 -0
- package/dist/parsers/poolAccount.d.ts.map +1 -0
- package/dist/parsers/poolAccount.js +88 -0
- package/dist/parsers/poolAccount.js.map +1 -0
- package/dist/types/events.d.ts +82 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/events.js +3 -0
- package/dist/types/events.js.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +21 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/pool.d.ts +66 -0
- package/dist/types/pool.d.ts.map +1 -0
- package/dist/types/pool.js +3 -0
- package/dist/types/pool.js.map +1 -0
- package/dist/types/result.d.ts +23 -0
- package/dist/types/result.d.ts.map +1 -0
- package/dist/types/result.js +11 -0
- package/dist/types/result.js.map +1 -0
- package/dist/types/tx.d.ts +80 -0
- package/dist/types/tx.d.ts.map +1 -0
- package/dist/types/tx.js +3 -0
- package/dist/types/tx.js.map +1 -0
- package/dist/utils/errors.d.ts +8 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +83 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +20 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/pda.d.ts +8 -0
- package/dist/utils/pda.d.ts.map +1 -0
- package/dist/utils/pda.js +27 -0
- package/dist/utils/pda.js.map +1 -0
- package/dist/utils/retry.d.ts +22 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +62 -0
- package/dist/utils/retry.js.map +1 -0
- package/package.json +54 -0
- package/src/clients/AdminClient.ts +254 -0
- package/src/clients/CubeBackendClient.ts +193 -0
- package/src/clients/CubicPoolClient.ts +492 -0
- package/src/clients/PoolFactoryClient.ts +102 -0
- package/src/clients/RpcClient.ts +78 -0
- package/src/clients/SingleTokenDepositClient.ts +91 -0
- package/src/clients/index.ts +7 -0
- package/src/clients/tx-builders.ts +538 -0
- package/src/config/index.ts +82 -0
- package/src/config/networks.ts +49 -0
- package/src/config/tokens.ts +52 -0
- package/src/idl/cubic_pool.json +2497 -0
- package/src/idl/index.ts +13 -0
- package/src/idl/protocol_admin.json +1816 -0
- package/src/idl/single_token_liquidity.json +745 -0
- package/src/index.ts +154 -0
- package/src/math/cubicMath.ts +89 -0
- package/src/math/fixedPoint.ts +39 -0
- package/src/math/index.ts +6 -0
- package/src/math/logExp.ts +82 -0
- package/src/math/singleToken.ts +250 -0
- package/src/math/slippage.ts +49 -0
- package/src/math/weightedMath.ts +48 -0
- package/src/parsers/borsh.ts +80 -0
- package/src/parsers/events.ts +172 -0
- package/src/parsers/index.ts +4 -0
- package/src/parsers/mintAccount.ts +37 -0
- package/src/parsers/poolAccount.ts +113 -0
- package/src/types/events.ts +100 -0
- package/src/types/index.ts +4 -0
- package/src/types/pool.ts +64 -0
- package/src/types/result.ts +45 -0
- package/src/types/tx.ts +87 -0
- package/src/utils/errors.ts +78 -0
- package/src/utils/index.ts +3 -0
- package/src/utils/pda.ts +58 -0
- package/src/utils/retry.ts +85 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { PublicKey, Commitment } from "@solana/web3.js";
|
|
2
|
+
import BN from "bn.js";
|
|
3
|
+
import { CubeConfig } from "../config";
|
|
4
|
+
import { PoolInfo } from "../types/pool";
|
|
5
|
+
import { SdkResult } from "../types/result";
|
|
6
|
+
import { SwapQuote, SingleTokenDepositQuote } from "../types/tx";
|
|
7
|
+
import { CubicPoolEvent } from "../types/events";
|
|
8
|
+
import { RpcClient } from "./RpcClient";
|
|
9
|
+
import { AddLiquidityParams, BuiltTx, RemoveLiquidityParams, SingleTokenDepositParams, SwapParams } from "../types/tx";
|
|
10
|
+
import { SingleTokenDepositClient } from "./SingleTokenDepositClient";
|
|
11
|
+
export interface CubicPoolClientParams {
|
|
12
|
+
config: CubeConfig;
|
|
13
|
+
poolAddress: PublicKey;
|
|
14
|
+
rpc: RpcClient | {
|
|
15
|
+
endpoint: string;
|
|
16
|
+
apiKey?: string;
|
|
17
|
+
commitment?: Commitment;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Per-pool client. Fetch the state with `sync()`, then call any of the
|
|
22
|
+
* quote / buildTx methods off the cached snapshot.
|
|
23
|
+
*/
|
|
24
|
+
export declare class CubicPoolClient {
|
|
25
|
+
readonly config: CubeConfig;
|
|
26
|
+
readonly poolAddress: PublicKey;
|
|
27
|
+
readonly rpc: RpcClient;
|
|
28
|
+
private cache;
|
|
29
|
+
constructor(params: CubicPoolClientParams);
|
|
30
|
+
/** Last-fetched pool state. `undefined` before first `sync()`. */
|
|
31
|
+
getCached(): PoolInfo | undefined;
|
|
32
|
+
/**
|
|
33
|
+
* Fetch and decode the pool account + BPT mint + per-token mint decimals.
|
|
34
|
+
* Safe to call repeatedly; subsequent calls replace the cache.
|
|
35
|
+
*/
|
|
36
|
+
sync(): Promise<SdkResult<PoolInfo>>;
|
|
37
|
+
/** Derived helper PDA for this pool (used by single-token-deposit). */
|
|
38
|
+
helperPda(): PublicKey;
|
|
39
|
+
/**
|
|
40
|
+
* Quote a swap. Requires the cache to be populated (call `sync()` first).
|
|
41
|
+
* Returns exact on-chain math result + spot bound + price impact +
|
|
42
|
+
* slippage-derived minAmountOut.
|
|
43
|
+
*/
|
|
44
|
+
quoteSwap(tokenInIndex: number, tokenOutIndex: number, amountIn: BN, slippageHundredthsBps?: number): SdkResult<SwapQuote>;
|
|
45
|
+
/**
|
|
46
|
+
* Quote a single-token deposit: split amountIn by W-based shares, quote
|
|
47
|
+
* each swap leg, estimate resulting BPT.
|
|
48
|
+
*/
|
|
49
|
+
quoteSingleTokenDeposit(tokenInIndex: number, amountIn: BN, slippageHundredthsBps?: number): SdkResult<SingleTokenDepositQuote>;
|
|
50
|
+
/** Proportional-withdraw quote for a given BPT amount. */
|
|
51
|
+
quoteRemove(bptIn: BN): SdkResult<{
|
|
52
|
+
tokenOuts: BN[];
|
|
53
|
+
}>;
|
|
54
|
+
/** Build a swap transaction. Requires `sync()` first. */
|
|
55
|
+
buildSwapTx(params: SwapParams): SdkResult<BuiltTx>;
|
|
56
|
+
/** Build a proportional add-liquidity transaction. Requires `sync()` first. */
|
|
57
|
+
buildAddLiquidityTx(params: AddLiquidityParams): SdkResult<BuiltTx>;
|
|
58
|
+
/** Build a proportional remove-liquidity transaction. Requires `sync()` first. */
|
|
59
|
+
buildRemoveLiquidityTx(params: RemoveLiquidityParams): SdkResult<BuiltTx>;
|
|
60
|
+
/**
|
|
61
|
+
* Build a single-token deposit transaction (swaps + add_liquidity via the
|
|
62
|
+
* helper program + BPT forward to user). Requires `sync()` first.
|
|
63
|
+
*/
|
|
64
|
+
buildSingleTokenDepositTx(params: SingleTokenDepositParams): SdkResult<BuiltTx>;
|
|
65
|
+
/** Proxy into the dedicated SingleTokenDepositClient for consumers who
|
|
66
|
+
* want the quote/build methods exposed on a focused object. */
|
|
67
|
+
get singleTokenDeposit(): SingleTokenDepositClient;
|
|
68
|
+
private _std?;
|
|
69
|
+
/** Parse logs from a confirmed transaction into typed events. */
|
|
70
|
+
parseEventsFromLogs(logs: string[]): CubicPoolEvent[];
|
|
71
|
+
private requireCache;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=CubicPoolClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CubicPoolClient.d.ts","sourceRoot":"","sources":["../../src/clients/CubicPoolClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,MAAM,OAAO,CAAC;AACvB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAiB,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,SAAS,EAAW,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAoBxC,OAAO,EACL,kBAAkB,EAClB,OAAO,EACP,qBAAqB,EACrB,wBAAwB,EACxB,UAAU,EACX,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,UAAU,CAAC;IACnB,WAAW,EAAE,SAAS,CAAC;IACvB,GAAG,EACC,SAAS,GACT;QACE,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,UAAU,CAAC;KACzB,CAAC;CACP;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC;IAChC,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IAExB,OAAO,CAAC,KAAK,CAAuB;gBAExB,MAAM,EAAE,qBAAqB;IAazC,kEAAkE;IAClE,SAAS,IAAI,QAAQ,GAAG,SAAS;IAIjC;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAiF1C,uEAAuE;IACvE,SAAS,IAAI,SAAS;IAMtB;;;;OAIG;IACH,SAAS,CACP,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,EAAE,EACZ,qBAAqB,CAAC,EAAE,MAAM,GAC7B,SAAS,CAAC,SAAS,CAAC;IAoEvB;;;OAGG;IACH,uBAAuB,CACrB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,EAAE,EACZ,qBAAqB,CAAC,EAAE,MAAM,GAC7B,SAAS,CAAC,uBAAuB,CAAC;IAiHrC,0DAA0D;IAC1D,WAAW,CAAC,KAAK,EAAE,EAAE,GAAG,SAAS,CAAC;QAAE,SAAS,EAAE,EAAE,EAAE,CAAA;KAAE,CAAC;IA4BtD,yDAAyD;IACzD,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC;IAkBnD,+EAA+E;IAC/E,mBAAmB,CAAC,MAAM,EAAE,kBAAkB,GAAG,SAAS,CAAC,OAAO,CAAC;IAanE,kFAAkF;IAClF,sBAAsB,CAAC,MAAM,EAAE,qBAAqB,GAAG,SAAS,CAAC,OAAO,CAAC;IAgBzE;;;OAGG;IACH,yBAAyB,CAAC,MAAM,EAAE,wBAAwB,GAAG,SAAS,CAAC,OAAO,CAAC;IAW/E;oEACgE;IAChE,IAAI,kBAAkB,IAAI,wBAAwB,CASjD;IACD,OAAO,CAAC,IAAI,CAAC,CAA2B;IAIxC,iEAAiE;IACjE,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE;IAMrD,OAAO,CAAC,YAAY;CAMrB"}
|
|
@@ -0,0 +1,425 @@
|
|
|
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.CubicPoolClient = void 0;
|
|
7
|
+
const bn_js_1 = __importDefault(require("bn.js"));
|
|
8
|
+
const result_1 = require("../types/result");
|
|
9
|
+
const RpcClient_1 = require("./RpcClient");
|
|
10
|
+
const poolAccount_1 = require("../parsers/poolAccount");
|
|
11
|
+
const mintAccount_1 = require("../parsers/mintAccount");
|
|
12
|
+
const events_1 = require("../parsers/events");
|
|
13
|
+
const pda_1 = require("../utils/pda");
|
|
14
|
+
const tokens_1 = require("../config/tokens");
|
|
15
|
+
const cubicMath_1 = require("../math/cubicMath");
|
|
16
|
+
const slippage_1 = require("../math/slippage");
|
|
17
|
+
const singleToken_1 = require("../math/singleToken");
|
|
18
|
+
const tx_builders_1 = require("./tx-builders");
|
|
19
|
+
const SingleTokenDepositClient_1 = require("./SingleTokenDepositClient");
|
|
20
|
+
/**
|
|
21
|
+
* Per-pool client. Fetch the state with `sync()`, then call any of the
|
|
22
|
+
* quote / buildTx methods off the cached snapshot.
|
|
23
|
+
*/
|
|
24
|
+
class CubicPoolClient {
|
|
25
|
+
constructor(params) {
|
|
26
|
+
this.config = params.config;
|
|
27
|
+
this.poolAddress = params.poolAddress;
|
|
28
|
+
this.rpc =
|
|
29
|
+
params.rpc instanceof RpcClient_1.RpcClient
|
|
30
|
+
? params.rpc
|
|
31
|
+
: new RpcClient_1.RpcClient({
|
|
32
|
+
endpoint: params.rpc.endpoint,
|
|
33
|
+
apiKey: params.rpc.apiKey,
|
|
34
|
+
commitment: params.rpc.commitment ?? params.config.defaults.rpcCommitment,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/** Last-fetched pool state. `undefined` before first `sync()`. */
|
|
38
|
+
getCached() {
|
|
39
|
+
return this.cache;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Fetch and decode the pool account + BPT mint + per-token mint decimals.
|
|
43
|
+
* Safe to call repeatedly; subsequent calls replace the cache.
|
|
44
|
+
*/
|
|
45
|
+
async sync() {
|
|
46
|
+
const poolInfo = await this.rpc.getAccountInfo(this.poolAddress);
|
|
47
|
+
if (!poolInfo.ok)
|
|
48
|
+
return poolInfo;
|
|
49
|
+
if (poolInfo.data === null) {
|
|
50
|
+
return (0, result_1.err)("account_not_found", `Pool ${this.poolAddress.toBase58()} does not exist on-chain`);
|
|
51
|
+
}
|
|
52
|
+
let raw;
|
|
53
|
+
try {
|
|
54
|
+
raw = (0, poolAccount_1.decodePoolAccount)(poolInfo.data.data);
|
|
55
|
+
}
|
|
56
|
+
catch (e) {
|
|
57
|
+
return (0, result_1.err)("parse_failure", "Could not decode pool account", e);
|
|
58
|
+
}
|
|
59
|
+
const n = raw.tokenCount;
|
|
60
|
+
const mintAddrs = raw.tokenMints.slice(0, n);
|
|
61
|
+
const [bptMint, _bptBump] = (0, pda_1.deriveBptMint)(this.config.programs.cubicPool, this.poolAddress);
|
|
62
|
+
const mintInfos = await this.rpc.getMultipleAccountsInfo([bptMint, ...mintAddrs]);
|
|
63
|
+
if (!mintInfos.ok)
|
|
64
|
+
return mintInfos;
|
|
65
|
+
const [bptMintData, ...tokenMintDatas] = mintInfos.data;
|
|
66
|
+
if (!bptMintData) {
|
|
67
|
+
return (0, result_1.err)("account_not_found", "BPT mint account missing");
|
|
68
|
+
}
|
|
69
|
+
let bptMintAcc;
|
|
70
|
+
try {
|
|
71
|
+
bptMintAcc = (0, mintAccount_1.decodeMintAccount)(bptMintData);
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
return (0, result_1.err)("parse_failure", "Could not decode BPT mint", e);
|
|
75
|
+
}
|
|
76
|
+
const tokens = [];
|
|
77
|
+
for (let i = 0; i < n; i++) {
|
|
78
|
+
const mintRaw = tokenMintDatas[i];
|
|
79
|
+
if (!mintRaw) {
|
|
80
|
+
return (0, result_1.err)("account_not_found", `Mint account missing for token index ${i}`);
|
|
81
|
+
}
|
|
82
|
+
let mintAcc;
|
|
83
|
+
try {
|
|
84
|
+
mintAcc = (0, mintAccount_1.decodeMintAccount)(mintRaw);
|
|
85
|
+
}
|
|
86
|
+
catch (e) {
|
|
87
|
+
return (0, result_1.err)("parse_failure", `Could not decode mint ${mintAddrs[i].toBase58()}`, e);
|
|
88
|
+
}
|
|
89
|
+
const actualBalance = raw.actualBalances[i];
|
|
90
|
+
const virtualBalance = raw.virtualBalances[i];
|
|
91
|
+
const concentration = virtualBalance.isZero() ? 0 : actualBalance.mul(new bn_js_1.default(1000000)).div(virtualBalance).toNumber() / 1000000;
|
|
92
|
+
tokens.push({
|
|
93
|
+
index: i,
|
|
94
|
+
mint: raw.tokenMints[i],
|
|
95
|
+
tokenProgram: raw.tokenPrograms[i],
|
|
96
|
+
decimals: mintAcc.decimals,
|
|
97
|
+
weightBps: raw.normalizedWeights[i].toNumber(),
|
|
98
|
+
virtualBalance,
|
|
99
|
+
actualBalance,
|
|
100
|
+
protocolFeesOwed: raw.protocolFeesOwed[i],
|
|
101
|
+
vault: (0, pda_1.deriveAta)(this.poolAddress, raw.tokenMints[i], raw.tokenPrograms[i]),
|
|
102
|
+
metadata: this.config.tokens?.[raw.tokenMints[i].toBase58()] ??
|
|
103
|
+
(0, tokens_1.resolveKnownToken)(raw.tokenMints[i].toBase58()),
|
|
104
|
+
concentration,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
const info = {
|
|
108
|
+
address: this.poolAddress,
|
|
109
|
+
config: raw.config,
|
|
110
|
+
bump: raw.bump,
|
|
111
|
+
poolId: raw.poolId,
|
|
112
|
+
tokenCount: n,
|
|
113
|
+
tokens,
|
|
114
|
+
bptMint,
|
|
115
|
+
bptTotalSupply: bptMintAcc.supply,
|
|
116
|
+
swapFeeRate: raw.swapFeeRate,
|
|
117
|
+
protocolFeeRate: raw.protocolFeeRate,
|
|
118
|
+
poolEnabled: raw.poolEnabled,
|
|
119
|
+
swapsEnabled: raw.swapsEnabled,
|
|
120
|
+
createdAt: raw.createdAt.toNumber(),
|
|
121
|
+
syncedAt: Date.now(),
|
|
122
|
+
};
|
|
123
|
+
this.cache = info;
|
|
124
|
+
return (0, result_1.ok)(info);
|
|
125
|
+
}
|
|
126
|
+
/** Derived helper PDA for this pool (used by single-token-deposit). */
|
|
127
|
+
helperPda() {
|
|
128
|
+
return (0, pda_1.deriveHelperPda)(this.config.programs.singleTokenLiquidity, this.poolAddress)[0];
|
|
129
|
+
}
|
|
130
|
+
// ---------- Quote helpers (pure, require sync()) ----------
|
|
131
|
+
/**
|
|
132
|
+
* Quote a swap. Requires the cache to be populated (call `sync()` first).
|
|
133
|
+
* Returns exact on-chain math result + spot bound + price impact +
|
|
134
|
+
* slippage-derived minAmountOut.
|
|
135
|
+
*/
|
|
136
|
+
quoteSwap(tokenInIndex, tokenOutIndex, amountIn, slippageHundredthsBps) {
|
|
137
|
+
const pool = this.requireCache();
|
|
138
|
+
if (!pool.ok)
|
|
139
|
+
return pool;
|
|
140
|
+
const { tokens, swapFeeRate, protocolFeeRate } = pool.data;
|
|
141
|
+
if (tokenInIndex < 0 ||
|
|
142
|
+
tokenInIndex >= tokens.length ||
|
|
143
|
+
tokenOutIndex < 0 ||
|
|
144
|
+
tokenOutIndex >= tokens.length ||
|
|
145
|
+
tokenInIndex === tokenOutIndex) {
|
|
146
|
+
return (0, result_1.err)("invalid_input", "Invalid tokenInIndex / tokenOutIndex");
|
|
147
|
+
}
|
|
148
|
+
const inTok = tokens[tokenInIndex];
|
|
149
|
+
const outTok = tokens[tokenOutIndex];
|
|
150
|
+
const slip = slippageHundredthsBps ?? this.config.defaults.slippageHundredthsBps;
|
|
151
|
+
try {
|
|
152
|
+
const amountBI = BigInt(amountIn.toString());
|
|
153
|
+
const amountAfterFee = (0, slippage_1.applySwapFee)(amountBI, swapFeeRate);
|
|
154
|
+
const feeAmount = amountBI - amountAfterFee;
|
|
155
|
+
const protocolFeeAmount = (feeAmount * BigInt(protocolFeeRate)) / BigInt(10000);
|
|
156
|
+
// Mirror cubic-pool's swap.rs: raw virtual balances drive the math,
|
|
157
|
+
// lp_actual_out caps the output amount. Using lp_virtual here would
|
|
158
|
+
// diverge from the on-chain quote on pools with pending protocol fees.
|
|
159
|
+
const virtIn = BigInt(inTok.virtualBalance.toString());
|
|
160
|
+
const virtOut = BigInt(outTok.virtualBalance.toString());
|
|
161
|
+
const actualOut = BigInt(outTok.actualBalance.toString());
|
|
162
|
+
const pfoOut = BigInt(outTok.protocolFeesOwed.toString());
|
|
163
|
+
const lpActualOut = actualOut > pfoOut ? actualOut - pfoOut : 0n;
|
|
164
|
+
const amountOut = (0, cubicMath_1.calcOutGivenIn)({
|
|
165
|
+
virtualBalanceIn: virtIn,
|
|
166
|
+
weightInBps: BigInt(inTok.weightBps),
|
|
167
|
+
virtualBalanceOut: virtOut,
|
|
168
|
+
weightOutBps: BigInt(outTok.weightBps),
|
|
169
|
+
amountIn: amountAfterFee,
|
|
170
|
+
actualBalanceOut: lpActualOut,
|
|
171
|
+
});
|
|
172
|
+
const spotOut = (0, cubicMath_1.calcSpotOut)({
|
|
173
|
+
virtualBalanceIn: virtIn,
|
|
174
|
+
weightInBps: BigInt(inTok.weightBps),
|
|
175
|
+
virtualBalanceOut: virtOut,
|
|
176
|
+
weightOutBps: BigInt(outTok.weightBps),
|
|
177
|
+
amountIn: amountAfterFee,
|
|
178
|
+
});
|
|
179
|
+
const minAmountOut = (0, slippage_1.applySlippage)(amountOut, slip);
|
|
180
|
+
const impact = (0, slippage_1.priceImpactHbps)(spotOut, amountOut);
|
|
181
|
+
return (0, result_1.ok)({
|
|
182
|
+
tokenInIndex,
|
|
183
|
+
tokenOutIndex,
|
|
184
|
+
amountIn,
|
|
185
|
+
amountOut: new bn_js_1.default(amountOut.toString()),
|
|
186
|
+
spotOut: new bn_js_1.default(spotOut.toString()),
|
|
187
|
+
priceImpactHbps: impact,
|
|
188
|
+
feeAmount: new bn_js_1.default(feeAmount.toString()),
|
|
189
|
+
protocolFeeAmount: new bn_js_1.default(protocolFeeAmount.toString()),
|
|
190
|
+
minAmountOut: new bn_js_1.default(minAmountOut.toString()),
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
catch (e) {
|
|
194
|
+
return (0, result_1.err)("math_overflow", "Swap quote math overflow", e);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Quote a single-token deposit: split amountIn by W-based shares, quote
|
|
199
|
+
* each swap leg, estimate resulting BPT.
|
|
200
|
+
*/
|
|
201
|
+
quoteSingleTokenDeposit(tokenInIndex, amountIn, slippageHundredthsBps) {
|
|
202
|
+
const poolRes = this.requireCache();
|
|
203
|
+
if (!poolRes.ok)
|
|
204
|
+
return poolRes;
|
|
205
|
+
const pool = poolRes.data;
|
|
206
|
+
if (tokenInIndex < 0 || tokenInIndex >= pool.tokens.length) {
|
|
207
|
+
return (0, result_1.err)("invalid_input", "Invalid tokenInIndex");
|
|
208
|
+
}
|
|
209
|
+
const inTok = pool.tokens[tokenInIndex];
|
|
210
|
+
if (inTok.actualBalance.isZero()) {
|
|
211
|
+
return (0, result_1.err)("invalid_input", "Input token is sidelined (actualBalance=0); pick a live token");
|
|
212
|
+
}
|
|
213
|
+
const slip = slippageHundredthsBps ?? this.config.defaults.slippageHundredthsBps;
|
|
214
|
+
try {
|
|
215
|
+
const actualBalances = pool.tokens.map((t) => BigInt(t.actualBalance.toString()));
|
|
216
|
+
const virtualBalances = pool.tokens.map((t) => BigInt(t.virtualBalance.toString()));
|
|
217
|
+
const protocolFeesOwed = pool.tokens.map((t) => BigInt(t.protocolFeesOwed.toString()));
|
|
218
|
+
const weightsBps = pool.tokens.map((t) => t.weightBps);
|
|
219
|
+
const amountInBI = BigInt(amountIn.toString());
|
|
220
|
+
// Mirror the helper contract: weight by LP-accessible balances
|
|
221
|
+
// (actual - protocolFeesOwed). This avoids the heavy 2-token optimizer
|
|
222
|
+
// which used to live here but exceeded the program's BPF CU budget.
|
|
223
|
+
const lpAccessibleBalances = actualBalances.map((actual, i) => actual > protocolFeesOwed[i] ? actual - protocolFeesOwed[i] : 0n);
|
|
224
|
+
const alloc = (0, singleToken_1.computeAllocations)({
|
|
225
|
+
actualBalances: lpAccessibleBalances,
|
|
226
|
+
virtualBalances,
|
|
227
|
+
weightsBps,
|
|
228
|
+
amountIn: amountInBI,
|
|
229
|
+
tokenInIndex,
|
|
230
|
+
});
|
|
231
|
+
const expectedOuts = [];
|
|
232
|
+
const minOuts = [];
|
|
233
|
+
const sidelined = [];
|
|
234
|
+
const simActual = [...actualBalances];
|
|
235
|
+
const simVirtual = [...virtualBalances];
|
|
236
|
+
const simProtocolFees = [...protocolFeesOwed];
|
|
237
|
+
const depositAmounts = pool.tokens.map(() => 0n);
|
|
238
|
+
let remainingInput = amountInBI;
|
|
239
|
+
for (let i = 0; i < pool.tokens.length; i++) {
|
|
240
|
+
if (actualBalances[i] === 0n) {
|
|
241
|
+
sidelined.push(i);
|
|
242
|
+
expectedOuts.push(new bn_js_1.default(0));
|
|
243
|
+
minOuts.push(new bn_js_1.default(0));
|
|
244
|
+
continue;
|
|
245
|
+
}
|
|
246
|
+
if (i === tokenInIndex || alloc.allocations[i] === 0n) {
|
|
247
|
+
expectedOuts.push(new bn_js_1.default(0));
|
|
248
|
+
minOuts.push(new bn_js_1.default(0));
|
|
249
|
+
continue;
|
|
250
|
+
}
|
|
251
|
+
const swapAmount = alloc.allocations[i];
|
|
252
|
+
remainingInput -= swapAmount;
|
|
253
|
+
const amountAfterFee = (0, slippage_1.applySwapFee)(swapAmount, pool.swapFeeRate);
|
|
254
|
+
const feeAmount = swapAmount - amountAfterFee;
|
|
255
|
+
const protocolFeeAmount = (feeAmount * BigInt(pool.protocolFeeRate)) / 10000n;
|
|
256
|
+
// Match cubic-pool/swap.rs exactly: it uses RAW virtual balances and
|
|
257
|
+
// takes lp_actual_out only as the output cap. Earlier the SDK used
|
|
258
|
+
// LP-virtuals here (and the helper did too), causing slippage drift
|
|
259
|
+
// on pools with pending protocol fees.
|
|
260
|
+
const lpActualOut = simActual[i] > simProtocolFees[i] ? simActual[i] - simProtocolFees[i] : 0n;
|
|
261
|
+
const out = (0, cubicMath_1.calcOutGivenIn)({
|
|
262
|
+
virtualBalanceIn: simVirtual[tokenInIndex],
|
|
263
|
+
weightInBps: BigInt(weightsBps[tokenInIndex]),
|
|
264
|
+
virtualBalanceOut: simVirtual[i],
|
|
265
|
+
weightOutBps: BigInt(weightsBps[i]),
|
|
266
|
+
amountIn: amountAfterFee,
|
|
267
|
+
actualBalanceOut: lpActualOut,
|
|
268
|
+
});
|
|
269
|
+
const min = (0, slippage_1.applySlippage)(out > 0n ? out - 1n : 0n, slip);
|
|
270
|
+
expectedOuts.push(new bn_js_1.default(out.toString()));
|
|
271
|
+
minOuts.push(new bn_js_1.default(min.toString()));
|
|
272
|
+
simActual[tokenInIndex] += swapAmount;
|
|
273
|
+
simVirtual[tokenInIndex] += amountAfterFee;
|
|
274
|
+
simProtocolFees[tokenInIndex] += protocolFeeAmount;
|
|
275
|
+
simActual[i] -= out;
|
|
276
|
+
simVirtual[i] -= out;
|
|
277
|
+
depositAmounts[i] = out;
|
|
278
|
+
}
|
|
279
|
+
depositAmounts[tokenInIndex] = remainingInput;
|
|
280
|
+
const capped = (0, singleToken_1.capDepositAmountsToLpRatio)({
|
|
281
|
+
helperBalances: depositAmounts,
|
|
282
|
+
actualBalances: simActual,
|
|
283
|
+
protocolFeesOwed: simProtocolFees,
|
|
284
|
+
});
|
|
285
|
+
const estBpt = (0, cubicMath_1.calcBptOutGivenExactTokensIn)(capped.lpBalancesForAdd, capped.depositAmounts, BigInt(pool.bptTotalSupply.toString()));
|
|
286
|
+
return (0, result_1.ok)({
|
|
287
|
+
tokenInIndex,
|
|
288
|
+
amountIn,
|
|
289
|
+
allocations: alloc.allocations.map((b) => new bn_js_1.default(b.toString())),
|
|
290
|
+
expectedOuts,
|
|
291
|
+
minOuts,
|
|
292
|
+
depositedAmounts: capped.depositAmounts.map((b) => new bn_js_1.default(b.toString())),
|
|
293
|
+
refundAmounts: capped.refundAmounts.map((b) => new bn_js_1.default(b.toString())),
|
|
294
|
+
estimatedBpt: new bn_js_1.default(estBpt.toString()),
|
|
295
|
+
sidelinedTokenIndices: sidelined,
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
catch (e) {
|
|
299
|
+
return (0, result_1.err)("math_overflow", "Single-token deposit quote failed", e);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
/** Proportional-withdraw quote for a given BPT amount. */
|
|
303
|
+
quoteRemove(bptIn) {
|
|
304
|
+
const poolRes = this.requireCache();
|
|
305
|
+
if (!poolRes.ok)
|
|
306
|
+
return poolRes;
|
|
307
|
+
const pool = poolRes.data;
|
|
308
|
+
if (pool.bptTotalSupply.isZero()) {
|
|
309
|
+
return (0, result_1.err)("invalid_input", "Pool has zero BPT supply");
|
|
310
|
+
}
|
|
311
|
+
try {
|
|
312
|
+
// Match cubic-pool/remove_liquidity.rs exactly: it computes
|
|
313
|
+
// token_amounts as `actual_balances[i] * bpt_amount / bpt_supply`
|
|
314
|
+
// against the raw stored actual (no protocol-fee subtraction). Use
|
|
315
|
+
// the same input here so the SDK quote equals what the contract
|
|
316
|
+
// actually transfers.
|
|
317
|
+
const bals = pool.tokens.map((t) => BigInt(t.actualBalance.toString()));
|
|
318
|
+
const outs = (0, cubicMath_1.calcTokensOutGivenBptIn)(bals, BigInt(bptIn.toString()), BigInt(pool.bptTotalSupply.toString()));
|
|
319
|
+
return (0, result_1.ok)({ tokenOuts: outs.map((o) => new bn_js_1.default(o.toString())) });
|
|
320
|
+
}
|
|
321
|
+
catch (e) {
|
|
322
|
+
return (0, result_1.err)("math_overflow", "Remove quote failed", e);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
// ---------- Transaction builders ----------
|
|
326
|
+
//
|
|
327
|
+
// For external SDK users, deposit/swap/remove are one-call operations via
|
|
328
|
+
// the CubicPoolClient. The `singleTokenDeposit` field is a proxy into the
|
|
329
|
+
// dedicated SingleTokenDepositClient as the user expects: importing this
|
|
330
|
+
// class is enough, no need to know the helper program exists.
|
|
331
|
+
/** Build a swap transaction. Requires `sync()` first. */
|
|
332
|
+
buildSwapTx(params) {
|
|
333
|
+
const poolRes = this.requireCache();
|
|
334
|
+
if (!poolRes.ok)
|
|
335
|
+
return poolRes;
|
|
336
|
+
const slip = params.slippageHundredthsBps ?? this.config.defaults.slippageHundredthsBps;
|
|
337
|
+
const minOut = params.minAmountOut
|
|
338
|
+
? params.minAmountOut
|
|
339
|
+
: (() => {
|
|
340
|
+
const q = this.quoteSwap(params.tokenInIndex, params.tokenOutIndex, params.amountIn, slip);
|
|
341
|
+
return q.ok ? q.data.minAmountOut : new bn_js_1.default(0);
|
|
342
|
+
})();
|
|
343
|
+
try {
|
|
344
|
+
const tx = (0, tx_builders_1.buildSwapTx)(this.config, poolRes.data, { ...params, minAmountOut: minOut });
|
|
345
|
+
return (0, result_1.ok)(tx);
|
|
346
|
+
}
|
|
347
|
+
catch (e) {
|
|
348
|
+
return (0, result_1.err)("tx_build_failed", "Failed to build swap tx", e);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
/** Build a proportional add-liquidity transaction. Requires `sync()` first. */
|
|
352
|
+
buildAddLiquidityTx(params) {
|
|
353
|
+
const poolRes = this.requireCache();
|
|
354
|
+
if (!poolRes.ok)
|
|
355
|
+
return poolRes;
|
|
356
|
+
if (params.tokenAmounts.length !== poolRes.data.tokenCount) {
|
|
357
|
+
return (0, result_1.err)("invalid_input", "tokenAmounts length must equal pool.tokenCount");
|
|
358
|
+
}
|
|
359
|
+
try {
|
|
360
|
+
return (0, result_1.ok)((0, tx_builders_1.buildAddLiquidityTx)(this.config, poolRes.data, params));
|
|
361
|
+
}
|
|
362
|
+
catch (e) {
|
|
363
|
+
return (0, result_1.err)("tx_build_failed", "Failed to build add_liquidity tx", e);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
/** Build a proportional remove-liquidity transaction. Requires `sync()` first. */
|
|
367
|
+
buildRemoveLiquidityTx(params) {
|
|
368
|
+
const poolRes = this.requireCache();
|
|
369
|
+
if (!poolRes.ok)
|
|
370
|
+
return poolRes;
|
|
371
|
+
if (params.minimumTokenAmounts &&
|
|
372
|
+
params.minimumTokenAmounts.length !== poolRes.data.tokenCount) {
|
|
373
|
+
return (0, result_1.err)("invalid_input", "minimumTokenAmounts length must equal pool.tokenCount");
|
|
374
|
+
}
|
|
375
|
+
try {
|
|
376
|
+
return (0, result_1.ok)((0, tx_builders_1.buildRemoveLiquidityTx)(this.config, poolRes.data, params));
|
|
377
|
+
}
|
|
378
|
+
catch (e) {
|
|
379
|
+
return (0, result_1.err)("tx_build_failed", "Failed to build remove_liquidity tx", e);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Build a single-token deposit transaction (swaps + add_liquidity via the
|
|
384
|
+
* helper program + BPT forward to user). Requires `sync()` first.
|
|
385
|
+
*/
|
|
386
|
+
buildSingleTokenDepositTx(params) {
|
|
387
|
+
const poolRes = this.requireCache();
|
|
388
|
+
if (!poolRes.ok)
|
|
389
|
+
return poolRes;
|
|
390
|
+
if (params.amountIn.lten(0))
|
|
391
|
+
return (0, result_1.err)("invalid_input", "amountIn must be > 0");
|
|
392
|
+
try {
|
|
393
|
+
return (0, result_1.ok)((0, tx_builders_1.buildSingleTokenDepositTx)(this.config, poolRes.data, params));
|
|
394
|
+
}
|
|
395
|
+
catch (e) {
|
|
396
|
+
return (0, result_1.err)("tx_build_failed", "Failed to build single-token deposit tx", e);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
/** Proxy into the dedicated SingleTokenDepositClient for consumers who
|
|
400
|
+
* want the quote/build methods exposed on a focused object. */
|
|
401
|
+
get singleTokenDeposit() {
|
|
402
|
+
if (!this._std) {
|
|
403
|
+
this._std = new SingleTokenDepositClient_1.SingleTokenDepositClient({
|
|
404
|
+
config: this.config,
|
|
405
|
+
poolAddress: this.poolAddress,
|
|
406
|
+
poolClient: this,
|
|
407
|
+
});
|
|
408
|
+
}
|
|
409
|
+
return this._std;
|
|
410
|
+
}
|
|
411
|
+
// ---------- Event helpers ----------
|
|
412
|
+
/** Parse logs from a confirmed transaction into typed events. */
|
|
413
|
+
parseEventsFromLogs(logs) {
|
|
414
|
+
return (0, events_1.parseCubicPoolEvents)(logs);
|
|
415
|
+
}
|
|
416
|
+
// ---------- Internals ----------
|
|
417
|
+
requireCache() {
|
|
418
|
+
if (!this.cache) {
|
|
419
|
+
return (0, result_1.err)("invalid_input", "Call `sync()` first to populate pool state");
|
|
420
|
+
}
|
|
421
|
+
return (0, result_1.ok)(this.cache);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
exports.CubicPoolClient = CubicPoolClient;
|
|
425
|
+
//# sourceMappingURL=CubicPoolClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CubicPoolClient.js","sourceRoot":"","sources":["../../src/clients/CubicPoolClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Keypair, PublicKey, TransactionInstruction } from "@solana/web3.js";
|
|
2
|
+
import { CubeConfig } from "../config";
|
|
3
|
+
import { SdkResult } from "../types/result";
|
|
4
|
+
import { BuiltTx, DeployPoolParams } from "../types/tx";
|
|
5
|
+
export interface PoolFactoryClientParams {
|
|
6
|
+
config: CubeConfig;
|
|
7
|
+
}
|
|
8
|
+
export interface InitializeConfigParams {
|
|
9
|
+
payer: PublicKey;
|
|
10
|
+
defaultProtocolFeeRate: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Builds transactions for protocol governance / pool deployment. Consumed
|
|
14
|
+
* by the deploy-pool UI flow and by the backend's admin tools.
|
|
15
|
+
*/
|
|
16
|
+
export declare class PoolFactoryClient {
|
|
17
|
+
readonly config: CubeConfig;
|
|
18
|
+
constructor(params: PoolFactoryClientParams);
|
|
19
|
+
/**
|
|
20
|
+
* Deploy a new pool atop an existing `CubicPoolConfig`. Caller is
|
|
21
|
+
* responsible for funding `params.payer` with enough SOL to cover rent
|
|
22
|
+
* for the pool account and the BPT mint PDA.
|
|
23
|
+
*
|
|
24
|
+
* Returns the `pool` and `bptMint` pubkeys it WILL create (derived PDAs)
|
|
25
|
+
* plus the signable tx.
|
|
26
|
+
*/
|
|
27
|
+
buildDeployPoolTx(params: DeployPoolParams): SdkResult<BuiltTx & {
|
|
28
|
+
pool: PublicKey;
|
|
29
|
+
bptMint: PublicKey;
|
|
30
|
+
}>;
|
|
31
|
+
/**
|
|
32
|
+
* Initialize a new CubicPoolConfig. The `config` signer must be freshly
|
|
33
|
+
* generated and paired with its keypair when signing the outer tx.
|
|
34
|
+
* Returns the tx + the config keypair the caller should sign with.
|
|
35
|
+
*/
|
|
36
|
+
buildInitializeConfigTx(params: InitializeConfigParams): SdkResult<BuiltTx & {
|
|
37
|
+
configKeypair: Keypair;
|
|
38
|
+
}>;
|
|
39
|
+
/**
|
|
40
|
+
* Low-level: return the raw `initialize_cubic_pool` ix without a CU
|
|
41
|
+
* budget or wrapping. Useful for combining with other ixs in the same tx.
|
|
42
|
+
*/
|
|
43
|
+
initializeCubicPoolIx(params: DeployPoolParams): TransactionInstruction;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=PoolFactoryClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PoolFactoryClient.d.ts","sourceRoot":"","sources":["../../src/clients/PoolFactoryClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEnG,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,SAAS,EAAW,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAQxD,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,SAAS,CAAC;IACjB,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;gBAEhB,MAAM,EAAE,uBAAuB;IAI3C;;;;;;;OAOG;IACH,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,GAAG,SAAS,CAAC,OAAO,GAAG;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,OAAO,EAAE,SAAS,CAAA;KAAE,CAAC;IA6BzG;;;;OAIG;IACH,uBAAuB,CAAC,MAAM,EAAE,sBAAsB,GAAG,SAAS,CAChE,OAAO,GAAG;QAAE,aAAa,EAAE,OAAO,CAAA;KAAE,CACrC;IAkBD;;;OAGG;IACH,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,GAAG,sBAAsB;CAGxE"}
|