@byreal-io/byreal-clmm-sdk 0.2.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 +341 -0
- package/dist/esm/client/chain.d.ts +227 -0
- package/dist/esm/client/chain.d.ts.map +1 -0
- package/dist/esm/client/chain.js +1123 -0
- package/dist/esm/client/chain.js.map +1 -0
- package/dist/esm/client/index.d.ts +4 -0
- package/dist/esm/client/index.d.ts.map +1 -0
- package/dist/esm/client/index.js +4 -0
- package/dist/esm/client/index.js.map +1 -0
- package/dist/esm/client/models.d.ts +160 -0
- package/dist/esm/client/models.d.ts.map +1 -0
- package/dist/esm/client/models.js +2 -0
- package/dist/esm/client/models.js.map +1 -0
- package/dist/esm/client/utils.d.ts +103 -0
- package/dist/esm/client/utils.d.ts.map +1 -0
- package/dist/esm/client/utils.js +238 -0
- package/dist/esm/client/utils.js.map +1 -0
- package/dist/esm/constants.d.ts +19 -0
- package/dist/esm/constants.d.ts.map +1 -0
- package/dist/esm/constants.js +27 -0
- package/dist/esm/constants.js.map +1 -0
- package/dist/esm/index.d.ts +5 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +5 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/instructions/baseInstruction.d.ts +74 -0
- package/dist/esm/instructions/baseInstruction.d.ts.map +1 -0
- package/dist/esm/instructions/baseInstruction.js +577 -0
- package/dist/esm/instructions/baseInstruction.js.map +1 -0
- package/dist/esm/instructions/constants.d.ts +29 -0
- package/dist/esm/instructions/constants.d.ts.map +1 -0
- package/dist/esm/instructions/constants.js +32 -0
- package/dist/esm/instructions/constants.js.map +1 -0
- package/dist/esm/instructions/getRawData.d.ts +60 -0
- package/dist/esm/instructions/getRawData.d.ts.map +1 -0
- package/dist/esm/instructions/getRawData.js +105 -0
- package/dist/esm/instructions/getRawData.js.map +1 -0
- package/dist/esm/instructions/index.d.ts +9 -0
- package/dist/esm/instructions/index.d.ts.map +1 -0
- package/dist/esm/instructions/index.js +9 -0
- package/dist/esm/instructions/index.js.map +1 -0
- package/dist/esm/instructions/instruction.d.ts +137 -0
- package/dist/esm/instructions/instruction.d.ts.map +1 -0
- package/dist/esm/instructions/instruction.js +152 -0
- package/dist/esm/instructions/instruction.js.map +1 -0
- package/dist/esm/instructions/layout.d.ts +217 -0
- package/dist/esm/instructions/layout.d.ts.map +1 -0
- package/dist/esm/instructions/layout.js +203 -0
- package/dist/esm/instructions/layout.js.map +1 -0
- package/dist/esm/instructions/libs/marshmallow/bufferLayout.d.ts +107 -0
- package/dist/esm/instructions/libs/marshmallow/bufferLayout.d.ts.map +1 -0
- package/dist/esm/instructions/libs/marshmallow/bufferLayout.js +49 -0
- package/dist/esm/instructions/libs/marshmallow/bufferLayout.js.map +1 -0
- package/dist/esm/instructions/libs/marshmallow/index.d.ts +88 -0
- package/dist/esm/instructions/libs/marshmallow/index.d.ts.map +1 -0
- package/dist/esm/instructions/libs/marshmallow/index.js +256 -0
- package/dist/esm/instructions/libs/marshmallow/index.js.map +1 -0
- package/dist/esm/instructions/models.d.ts +39 -0
- package/dist/esm/instructions/models.d.ts.map +1 -0
- package/dist/esm/instructions/models.js +14 -0
- package/dist/esm/instructions/models.js.map +1 -0
- package/dist/esm/instructions/pda.d.ts +52 -0
- package/dist/esm/instructions/pda.d.ts.map +1 -0
- package/dist/esm/instructions/pda.js +47 -0
- package/dist/esm/instructions/pda.js.map +1 -0
- package/dist/esm/instructions/target/idl/byreal_amm_v3.json +7242 -0
- package/dist/esm/instructions/target/idl/byreal_amm_v3_test.json +7680 -0
- package/dist/esm/instructions/target/types/byreal_amm_v3.d.ts +5329 -0
- package/dist/esm/instructions/target/types/byreal_amm_v3.d.ts.map +1 -0
- package/dist/esm/instructions/target/types/byreal_amm_v3.js +2 -0
- package/dist/esm/instructions/target/types/byreal_amm_v3.js.map +1 -0
- package/dist/esm/instructions/target/types/raydium_amm_v3.d.ts +4149 -0
- package/dist/esm/instructions/target/types/raydium_amm_v3.d.ts.map +1 -0
- package/dist/esm/instructions/target/types/raydium_amm_v3.js +2 -0
- package/dist/esm/instructions/target/types/raydium_amm_v3.js.map +1 -0
- package/dist/esm/instructions/utils/binaryUtils.d.ts +11 -0
- package/dist/esm/instructions/utils/binaryUtils.d.ts.map +1 -0
- package/dist/esm/instructions/utils/binaryUtils.js +77 -0
- package/dist/esm/instructions/utils/binaryUtils.js.map +1 -0
- package/dist/esm/instructions/utils/fetchWalletTokenAccounts.d.ts +42 -0
- package/dist/esm/instructions/utils/fetchWalletTokenAccounts.d.ts.map +1 -0
- package/dist/esm/instructions/utils/fetchWalletTokenAccounts.js +63 -0
- package/dist/esm/instructions/utils/fetchWalletTokenAccounts.js.map +1 -0
- package/dist/esm/instructions/utils/getTickArrayBitmapExtension.d.ts +8 -0
- package/dist/esm/instructions/utils/getTickArrayBitmapExtension.d.ts.map +1 -0
- package/dist/esm/instructions/utils/getTickArrayBitmapExtension.js +22 -0
- package/dist/esm/instructions/utils/getTickArrayBitmapExtension.js.map +1 -0
- package/dist/esm/instructions/utils/getTickArrayInfo.d.ts +16 -0
- package/dist/esm/instructions/utils/getTickArrayInfo.d.ts.map +1 -0
- package/dist/esm/instructions/utils/getTickArrayInfo.js +75 -0
- package/dist/esm/instructions/utils/getTickArrayInfo.js.map +1 -0
- package/dist/esm/instructions/utils/index.d.ts +21 -0
- package/dist/esm/instructions/utils/index.d.ts.map +1 -0
- package/dist/esm/instructions/utils/index.js +21 -0
- package/dist/esm/instructions/utils/index.js.map +1 -0
- package/dist/esm/instructions/utils/liquidityMath.d.ts +30 -0
- package/dist/esm/instructions/utils/liquidityMath.d.ts.map +1 -0
- package/dist/esm/instructions/utils/liquidityMath.js +138 -0
- package/dist/esm/instructions/utils/liquidityMath.js.map +1 -0
- package/dist/esm/instructions/utils/mathUtils.d.ts +11 -0
- package/dist/esm/instructions/utils/mathUtils.d.ts.map +1 -0
- package/dist/esm/instructions/utils/mathUtils.js +36 -0
- package/dist/esm/instructions/utils/mathUtils.js.map +1 -0
- package/dist/esm/instructions/utils/models.d.ts +93 -0
- package/dist/esm/instructions/utils/models.d.ts.map +1 -0
- package/dist/esm/instructions/utils/models.js +13 -0
- package/dist/esm/instructions/utils/models.js.map +1 -0
- package/dist/esm/instructions/utils/poolStateUtils.d.ts +134 -0
- package/dist/esm/instructions/utils/poolStateUtils.d.ts.map +1 -0
- package/dist/esm/instructions/utils/poolStateUtils.js +137 -0
- package/dist/esm/instructions/utils/poolStateUtils.js.map +1 -0
- package/dist/esm/instructions/utils/poolUtils.d.ts +136 -0
- package/dist/esm/instructions/utils/poolUtils.d.ts.map +1 -0
- package/dist/esm/instructions/utils/poolUtils.js +219 -0
- package/dist/esm/instructions/utils/poolUtils.js.map +1 -0
- package/dist/esm/instructions/utils/position.d.ts +36 -0
- package/dist/esm/instructions/utils/position.d.ts.map +1 -0
- package/dist/esm/instructions/utils/position.js +86 -0
- package/dist/esm/instructions/utils/position.js.map +1 -0
- package/dist/esm/instructions/utils/sqrtPriceMath.d.ts +14 -0
- package/dist/esm/instructions/utils/sqrtPriceMath.d.ts.map +1 -0
- package/dist/esm/instructions/utils/sqrtPriceMath.js +168 -0
- package/dist/esm/instructions/utils/sqrtPriceMath.js.map +1 -0
- package/dist/esm/instructions/utils/swapMath.d.ts +48 -0
- package/dist/esm/instructions/utils/swapMath.d.ts.map +1 -0
- package/dist/esm/instructions/utils/swapMath.js +263 -0
- package/dist/esm/instructions/utils/swapMath.js.map +1 -0
- package/dist/esm/instructions/utils/tick.d.ts +106 -0
- package/dist/esm/instructions/utils/tick.d.ts.map +1 -0
- package/dist/esm/instructions/utils/tick.js +390 -0
- package/dist/esm/instructions/utils/tick.js.map +1 -0
- package/dist/esm/instructions/utils/tickArrayUtils.d.ts +50 -0
- package/dist/esm/instructions/utils/tickArrayUtils.d.ts.map +1 -0
- package/dist/esm/instructions/utils/tickArrayUtils.js +157 -0
- package/dist/esm/instructions/utils/tickArrayUtils.js.map +1 -0
- package/dist/esm/instructions/utils/tickMath.d.ts +18 -0
- package/dist/esm/instructions/utils/tickMath.d.ts.map +1 -0
- package/dist/esm/instructions/utils/tickMath.js +34 -0
- package/dist/esm/instructions/utils/tickMath.js.map +1 -0
- package/dist/esm/instructions/utils/tickarrayBitmap.d.ts +38 -0
- package/dist/esm/instructions/utils/tickarrayBitmap.d.ts.map +1 -0
- package/dist/esm/instructions/utils/tickarrayBitmap.js +157 -0
- package/dist/esm/instructions/utils/tickarrayBitmap.js.map +1 -0
- package/dist/esm/instructions/utils/transfer.d.ts +7 -0
- package/dist/esm/instructions/utils/transfer.d.ts.map +1 -0
- package/dist/esm/instructions/utils/transfer.js +78 -0
- package/dist/esm/instructions/utils/transfer.js.map +1 -0
- package/dist/esm/utils/accountInfo.d.ts +27 -0
- package/dist/esm/utils/accountInfo.d.ts.map +1 -0
- package/dist/esm/utils/accountInfo.js +80 -0
- package/dist/esm/utils/accountInfo.js.map +1 -0
- package/dist/esm/utils/checkV0TxSize.d.ts +8 -0
- package/dist/esm/utils/checkV0TxSize.d.ts.map +1 -0
- package/dist/esm/utils/checkV0TxSize.js +18 -0
- package/dist/esm/utils/checkV0TxSize.js.map +1 -0
- package/dist/esm/utils/estimateComputeUnits.d.ts +11 -0
- package/dist/esm/utils/estimateComputeUnits.d.ts.map +1 -0
- package/dist/esm/utils/estimateComputeUnits.js +48 -0
- package/dist/esm/utils/estimateComputeUnits.js.map +1 -0
- package/dist/esm/utils/generatePubKey.d.ts +10 -0
- package/dist/esm/utils/generatePubKey.d.ts.map +1 -0
- package/dist/esm/utils/generatePubKey.js +14 -0
- package/dist/esm/utils/generatePubKey.js.map +1 -0
- package/dist/esm/utils/index.d.ts +9 -0
- package/dist/esm/utils/index.d.ts.map +1 -0
- package/dist/esm/utils/index.js +11 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/token.d.ts +9 -0
- package/dist/esm/utils/token.d.ts.map +1 -0
- package/dist/esm/utils/token.js +16 -0
- package/dist/esm/utils/token.js.map +1 -0
- package/dist/esm/utils/transactionUtils.d.ts +84 -0
- package/dist/esm/utils/transactionUtils.d.ts.map +1 -0
- package/dist/esm/utils/transactionUtils.js +138 -0
- package/dist/esm/utils/transactionUtils.js.map +1 -0
- package/dist/esm/utils/validateAndParsePublicKey.d.ts +15 -0
- package/dist/esm/utils/validateAndParsePublicKey.d.ts.map +1 -0
- package/dist/esm/utils/validateAndParsePublicKey.js +42 -0
- package/dist/esm/utils/validateAndParsePublicKey.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Decimal } from 'decimal.js';
|
|
2
|
+
import { SqrtPriceMath } from './sqrtPriceMath.js';
|
|
3
|
+
export class TickMath {
|
|
4
|
+
// Convert price to tick
|
|
5
|
+
static getTickWithPriceAndTickspacing(price, tickSpacing, mintDecimalsA, mintDecimalsB) {
|
|
6
|
+
const tick = SqrtPriceMath.getTickFromSqrtPriceX64(SqrtPriceMath.priceToSqrtPriceX64(price, mintDecimalsA, mintDecimalsB));
|
|
7
|
+
let result = tick / tickSpacing;
|
|
8
|
+
if (result < 0) {
|
|
9
|
+
result = Math.floor(result);
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
result = Math.ceil(result);
|
|
13
|
+
}
|
|
14
|
+
return result * tickSpacing;
|
|
15
|
+
}
|
|
16
|
+
static getPriceFromTick(params) {
|
|
17
|
+
const { tick, decimalsA, decimalsB, baseIn = true } = params;
|
|
18
|
+
const tickSqrtPriceX64 = SqrtPriceMath.getSqrtPriceX64FromTick(tick);
|
|
19
|
+
const tickPrice = SqrtPriceMath.sqrtPriceX64ToPrice(tickSqrtPriceX64, decimalsA, decimalsB);
|
|
20
|
+
return baseIn ? tickPrice : new Decimal(1).div(tickPrice);
|
|
21
|
+
}
|
|
22
|
+
// Align price to the nearest valid tick and return related data
|
|
23
|
+
static getTickAlignedPriceDetails(price, tickSpacing, mintDecimalsA, mintDecimalsB) {
|
|
24
|
+
const tick = TickMath.getTickWithPriceAndTickspacing(price, tickSpacing, mintDecimalsA, mintDecimalsB);
|
|
25
|
+
const sqrtPriceX64 = SqrtPriceMath.getSqrtPriceX64FromTick(tick);
|
|
26
|
+
const roundedPrice = SqrtPriceMath.sqrtPriceX64ToPrice(sqrtPriceX64, mintDecimalsA, mintDecimalsB);
|
|
27
|
+
return {
|
|
28
|
+
tick,
|
|
29
|
+
sqrtPriceX64,
|
|
30
|
+
price: roundedPrice,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=tickMath.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tickMath.js","sourceRoot":"","sources":["../../../../src/instructions/utils/tickMath.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAOnD,MAAM,OAAO,QAAQ;IACnB,wBAAwB;IACjB,MAAM,CAAC,8BAA8B,CAC1C,KAAc,EACd,WAAmB,EACnB,aAAqB,EACrB,aAAqB;QAErB,MAAM,IAAI,GAAG,aAAa,CAAC,uBAAuB,CAChD,aAAa,CAAC,mBAAmB,CAAC,KAAK,EAAE,aAAa,EAAE,aAAa,CAAC,CACvE,CAAC;QACF,IAAI,MAAM,GAAG,IAAI,GAAG,WAAW,CAAC;QAChC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACf,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,MAAM,GAAG,WAAW,CAAC;IAC9B,CAAC;IAEM,MAAM,CAAC,gBAAgB,CAAC,MAK9B;QACC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;QAC7D,MAAM,gBAAgB,GAAG,aAAa,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACrE,MAAM,SAAS,GAAG,aAAa,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAE5F,OAAO,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC5D,CAAC;IAED,gEAAgE;IACzD,MAAM,CAAC,0BAA0B,CACtC,KAAc,EACd,WAAmB,EACnB,aAAqB,EACrB,aAAqB;QAErB,MAAM,IAAI,GAAG,QAAQ,CAAC,8BAA8B,CAAC,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;QACvG,MAAM,YAAY,GAAG,aAAa,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACjE,MAAM,YAAY,GAAG,aAAa,CAAC,mBAAmB,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;QACnG,OAAO;YACL,IAAI;YACJ,YAAY;YACZ,KAAK,EAAE,YAAY;SACpB,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import BN from 'bn.js';
|
|
2
|
+
import { TickArrayBitmapExtensionType } from './models.js';
|
|
3
|
+
export declare class TickArrayBitmap {
|
|
4
|
+
static maxTickInTickarrayBitmap(tickSpacing: number): number;
|
|
5
|
+
static getBitmapTickBoundary(tickarrayStartIndex: number, tickSpacing: number): {
|
|
6
|
+
minValue: number;
|
|
7
|
+
maxValue: number;
|
|
8
|
+
};
|
|
9
|
+
static nextInitializedTickArrayStartIndex(bitMap: BN, lastTickArrayStartIndex: number, tickSpacing: number, zeroForOne: boolean): {
|
|
10
|
+
isInit: boolean;
|
|
11
|
+
tickIndex: number;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export declare class TickArrayBitmapExtensionUtils {
|
|
15
|
+
static getBitmapOffset(tickIndex: number, tickSpacing: number): number;
|
|
16
|
+
static getBitmap(tickIndex: number, tickSpacing: number, tickArrayBitmapExtension: TickArrayBitmapExtensionType): {
|
|
17
|
+
offset: number;
|
|
18
|
+
tickarrayBitmap: BN[];
|
|
19
|
+
};
|
|
20
|
+
static extensionTickBoundary(tickSpacing: number): {
|
|
21
|
+
positiveTickBoundary: number;
|
|
22
|
+
negativeTickBoundary: number;
|
|
23
|
+
};
|
|
24
|
+
static checkTickArrayIsInit(tickArrayStartIndex: number, tickSpacing: number, tickArrayBitmapExtension: TickArrayBitmapExtensionType): {
|
|
25
|
+
isInitialized: boolean;
|
|
26
|
+
startIndex: number;
|
|
27
|
+
};
|
|
28
|
+
static nextInitializedTickArrayFromOneBitmap(lastTickArrayStartIndex: number, tickSpacing: number, zeroForOne: boolean, tickArrayBitmapExtension: TickArrayBitmapExtensionType): {
|
|
29
|
+
isInit: boolean;
|
|
30
|
+
tickIndex: number;
|
|
31
|
+
};
|
|
32
|
+
static nextInitializedTickArrayInBitmap(tickarrayBitmap: BN[], nextTickArrayStartIndex: number, tickSpacing: number, zeroForOne: boolean): {
|
|
33
|
+
isInit: boolean;
|
|
34
|
+
tickIndex: number;
|
|
35
|
+
};
|
|
36
|
+
static tickArrayOffsetInBitmap(tickArrayStartIndex: number, tickSpacing: number): number;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=tickarrayBitmap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tickarrayBitmap.d.ts","sourceRoot":"","sources":["../../../../src/instructions/utils/tickarrayBitmap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,OAAO,CAAC;AAMvB,OAAO,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAG3D,qBAAa,eAAe;WAEZ,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;WAKrD,qBAAqB,CACjC,mBAAmB,EAAE,MAAM,EAC3B,WAAW,EAAE,MAAM,GAClB;QACD,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB;WAaa,kCAAkC,CAC9C,MAAM,EAAE,EAAE,EACV,uBAAuB,EAAE,MAAM,EAC/B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,OAAO,GAClB;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;CA0C1C;AAED,qBAAa,6BAA6B;WAC1B,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;WAkB/D,SAAS,CACrB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,wBAAwB,EAAE,4BAA4B,GACrD;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,EAAE,EAAE,CAAA;KAAE;WAU9B,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG;QACxD,oBAAoB,EAAE,MAAM,CAAC;QAC7B,oBAAoB,EAAE,MAAM,CAAC;KAC9B;WAca,oBAAoB,CAChC,mBAAmB,EAAE,MAAM,EAC3B,WAAW,EAAE,MAAM,EACnB,wBAAwB,EAAE,4BAA4B,GACrD;QAAE,aAAa,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;WAYnC,qCAAqC,CACjD,uBAAuB,EAAE,MAAM,EAC/B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,OAAO,EACnB,wBAAwB,EAAE,4BAA4B,GACrD;QACD,MAAM,EAAE,OAAO,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;KACnB;WAWa,gCAAgC,CAC5C,eAAe,EAAE,EAAE,EAAE,EACrB,uBAAuB,EAAE,MAAM,EAC/B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,OAAO,GAClB;QACD,MAAM,EAAE,OAAO,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;KACnB;WAyCa,uBAAuB,CAAC,mBAAmB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;CAQhG"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { TICK_ARRAY_BITMAP_SIZE, TICK_ARRAY_SIZE } from '../../constants.js';
|
|
2
|
+
import { MAX_TICK, MIN_TICK } from '../constants.js';
|
|
3
|
+
import { isZero, leadingZeros, leastSignificantBit, mostSignificantBit, trailingZeros } from './binaryUtils.js';
|
|
4
|
+
import { TickUtils, TickQuery } from './tick.js';
|
|
5
|
+
export class TickArrayBitmap {
|
|
6
|
+
// Calculate the maximum tick range that a single bitmap can represent
|
|
7
|
+
static maxTickInTickarrayBitmap(tickSpacing) {
|
|
8
|
+
return tickSpacing * TICK_ARRAY_SIZE * TICK_ARRAY_BITMAP_SIZE;
|
|
9
|
+
}
|
|
10
|
+
// Calculate the bitmap boundaries corresponding to the given tick range
|
|
11
|
+
static getBitmapTickBoundary(tickarrayStartIndex, tickSpacing) {
|
|
12
|
+
const ticksInOneBitmap = this.maxTickInTickarrayBitmap(tickSpacing);
|
|
13
|
+
let m = Math.floor(Math.abs(tickarrayStartIndex) / ticksInOneBitmap);
|
|
14
|
+
if (tickarrayStartIndex < 0 && Math.abs(tickarrayStartIndex) % ticksInOneBitmap != 0)
|
|
15
|
+
m += 1;
|
|
16
|
+
const minValue = ticksInOneBitmap * m;
|
|
17
|
+
return tickarrayStartIndex < 0
|
|
18
|
+
? { minValue: -minValue, maxValue: -minValue + ticksInOneBitmap }
|
|
19
|
+
: { minValue, maxValue: minValue + ticksInOneBitmap };
|
|
20
|
+
}
|
|
21
|
+
// Calculate the start index of the next initialized TickArray
|
|
22
|
+
static nextInitializedTickArrayStartIndex(bitMap, lastTickArrayStartIndex, tickSpacing, zeroForOne) {
|
|
23
|
+
if (!TickQuery.checkIsValidStartIndex(lastTickArrayStartIndex, tickSpacing))
|
|
24
|
+
throw Error('nextInitializedTickArrayStartIndex check error');
|
|
25
|
+
const tickBoundary = this.maxTickInTickarrayBitmap(tickSpacing);
|
|
26
|
+
const nextTickArrayStartIndex = zeroForOne
|
|
27
|
+
? lastTickArrayStartIndex - TickQuery.tickCount(tickSpacing)
|
|
28
|
+
: lastTickArrayStartIndex + TickQuery.tickCount(tickSpacing);
|
|
29
|
+
if (nextTickArrayStartIndex < -tickBoundary || nextTickArrayStartIndex >= tickBoundary) {
|
|
30
|
+
return { isInit: false, tickIndex: lastTickArrayStartIndex };
|
|
31
|
+
}
|
|
32
|
+
const multiplier = tickSpacing * TICK_ARRAY_SIZE;
|
|
33
|
+
let compressed = nextTickArrayStartIndex / multiplier + 512;
|
|
34
|
+
if (nextTickArrayStartIndex < 0 && nextTickArrayStartIndex % multiplier != 0) {
|
|
35
|
+
compressed--;
|
|
36
|
+
}
|
|
37
|
+
const bitPos = Math.abs(compressed);
|
|
38
|
+
if (zeroForOne) {
|
|
39
|
+
const offsetBitMap = bitMap.shln(1024 - bitPos - 1);
|
|
40
|
+
const nextBit = mostSignificantBit(1024, offsetBitMap);
|
|
41
|
+
if (nextBit !== null) {
|
|
42
|
+
const nextArrayStartIndex = (bitPos - nextBit - 512) * multiplier;
|
|
43
|
+
return { isInit: true, tickIndex: nextArrayStartIndex };
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
return { isInit: false, tickIndex: -tickBoundary };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
const offsetBitMap = bitMap.shrn(bitPos);
|
|
51
|
+
const nextBit = leastSignificantBit(1024, offsetBitMap);
|
|
52
|
+
if (nextBit !== null) {
|
|
53
|
+
const nextArrayStartIndex = (bitPos + nextBit - 512) * multiplier;
|
|
54
|
+
return { isInit: true, tickIndex: nextArrayStartIndex };
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
return { isInit: false, tickIndex: tickBoundary - TickQuery.tickCount(tickSpacing) };
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export class TickArrayBitmapExtensionUtils {
|
|
63
|
+
static getBitmapOffset(tickIndex, tickSpacing) {
|
|
64
|
+
if (!TickQuery.checkIsValidStartIndex(tickIndex, tickSpacing)) {
|
|
65
|
+
throw new Error('No enough initialized tickArray');
|
|
66
|
+
}
|
|
67
|
+
const { positiveTickBoundary, negativeTickBoundary } = this.extensionTickBoundary(tickSpacing);
|
|
68
|
+
if (tickIndex >= negativeTickBoundary && tickIndex < positiveTickBoundary) {
|
|
69
|
+
throw Error('checkExtensionBoundary -> InvalidTickArrayBoundary');
|
|
70
|
+
}
|
|
71
|
+
const ticksInOneBitmap = TickArrayBitmap.maxTickInTickarrayBitmap(tickSpacing);
|
|
72
|
+
let offset = Math.floor(Math.abs(tickIndex) / ticksInOneBitmap) - 1;
|
|
73
|
+
if (tickIndex < 0 && Math.abs(tickIndex) % ticksInOneBitmap === 0)
|
|
74
|
+
offset--;
|
|
75
|
+
return offset;
|
|
76
|
+
}
|
|
77
|
+
static getBitmap(tickIndex, tickSpacing, tickArrayBitmapExtension) {
|
|
78
|
+
const offset = this.getBitmapOffset(tickIndex, tickSpacing);
|
|
79
|
+
if (tickIndex < 0) {
|
|
80
|
+
return { offset, tickarrayBitmap: tickArrayBitmapExtension.negativeTickArrayBitmap[offset] };
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
return { offset, tickarrayBitmap: tickArrayBitmapExtension.positiveTickArrayBitmap[offset] };
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Calculate the boundary values of the extended bitmap
|
|
87
|
+
static extensionTickBoundary(tickSpacing) {
|
|
88
|
+
const positiveTickBoundary = TickArrayBitmap.maxTickInTickarrayBitmap(tickSpacing);
|
|
89
|
+
const negativeTickBoundary = -positiveTickBoundary;
|
|
90
|
+
if (MAX_TICK <= positiveTickBoundary)
|
|
91
|
+
throw Error(`extensionTickBoundary check error: ${MAX_TICK}, ${positiveTickBoundary}`);
|
|
92
|
+
if (negativeTickBoundary <= MIN_TICK)
|
|
93
|
+
throw Error(`extensionTickBoundary check error: ${negativeTickBoundary}, ${MIN_TICK}`);
|
|
94
|
+
return { positiveTickBoundary, negativeTickBoundary };
|
|
95
|
+
}
|
|
96
|
+
// Check if a specific TickArray has been initialized
|
|
97
|
+
static checkTickArrayIsInit(tickArrayStartIndex, tickSpacing, tickArrayBitmapExtension) {
|
|
98
|
+
const { tickarrayBitmap } = this.getBitmap(tickArrayStartIndex, tickSpacing, tickArrayBitmapExtension);
|
|
99
|
+
const tickArrayOffsetInBitmap = this.tickArrayOffsetInBitmap(tickArrayStartIndex, tickSpacing);
|
|
100
|
+
return {
|
|
101
|
+
isInitialized: TickUtils.mergeTickArrayBitmap(tickarrayBitmap).testn(tickArrayOffsetInBitmap),
|
|
102
|
+
startIndex: tickArrayStartIndex,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
// Find the start index of the next initialized TickArray from a single bitmap
|
|
106
|
+
static nextInitializedTickArrayFromOneBitmap(lastTickArrayStartIndex, tickSpacing, zeroForOne, tickArrayBitmapExtension) {
|
|
107
|
+
const multiplier = TickQuery.tickCount(tickSpacing);
|
|
108
|
+
const nextTickArrayStartIndex = zeroForOne
|
|
109
|
+
? lastTickArrayStartIndex - multiplier
|
|
110
|
+
: lastTickArrayStartIndex + multiplier;
|
|
111
|
+
const { tickarrayBitmap } = this.getBitmap(nextTickArrayStartIndex, tickSpacing, tickArrayBitmapExtension);
|
|
112
|
+
return this.nextInitializedTickArrayInBitmap(tickarrayBitmap, nextTickArrayStartIndex, tickSpacing, zeroForOne);
|
|
113
|
+
}
|
|
114
|
+
// Find the start index of the next initialized TickArray in the bitmap
|
|
115
|
+
static nextInitializedTickArrayInBitmap(tickarrayBitmap, nextTickArrayStartIndex, tickSpacing, zeroForOne) {
|
|
116
|
+
const { minValue: bitmapMinTickBoundary, maxValue: bitmapMaxTickBoundary } = TickArrayBitmap.getBitmapTickBoundary(nextTickArrayStartIndex, tickSpacing);
|
|
117
|
+
const tickArrayOffsetInBitmap = this.tickArrayOffsetInBitmap(nextTickArrayStartIndex, tickSpacing);
|
|
118
|
+
if (zeroForOne) {
|
|
119
|
+
// tick from upper to lower
|
|
120
|
+
// find from highter bits to lower bits
|
|
121
|
+
const offsetBitMap = TickUtils.mergeTickArrayBitmap(tickarrayBitmap).shln(TICK_ARRAY_BITMAP_SIZE - 1 - tickArrayOffsetInBitmap);
|
|
122
|
+
const nextBit = isZero(512, offsetBitMap) ? null : leadingZeros(512, offsetBitMap);
|
|
123
|
+
if (nextBit !== null) {
|
|
124
|
+
const nextArrayStartIndex = nextTickArrayStartIndex - nextBit * TickQuery.tickCount(tickSpacing);
|
|
125
|
+
return { isInit: true, tickIndex: nextArrayStartIndex };
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
// not found til to the end
|
|
129
|
+
return { isInit: false, tickIndex: bitmapMinTickBoundary };
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
// tick from lower to upper
|
|
134
|
+
// find from lower bits to highter bits
|
|
135
|
+
const offsetBitMap = TickUtils.mergeTickArrayBitmap(tickarrayBitmap).shrn(tickArrayOffsetInBitmap);
|
|
136
|
+
const nextBit = isZero(512, offsetBitMap) ? null : trailingZeros(512, offsetBitMap);
|
|
137
|
+
if (nextBit !== null) {
|
|
138
|
+
const nextArrayStartIndex = nextTickArrayStartIndex + nextBit * TickQuery.tickCount(tickSpacing);
|
|
139
|
+
return { isInit: true, tickIndex: nextArrayStartIndex };
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
// not found til to the end
|
|
143
|
+
return { isInit: false, tickIndex: bitmapMaxTickBoundary - TickQuery.tickCount(tickSpacing) };
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// Calculate the offset position (index) of a TickArray within its belonging bitmap
|
|
148
|
+
static tickArrayOffsetInBitmap(tickArrayStartIndex, tickSpacing) {
|
|
149
|
+
const m = Math.abs(tickArrayStartIndex) % TickArrayBitmap.maxTickInTickarrayBitmap(tickSpacing);
|
|
150
|
+
let tickArrayOffsetInBitmap = Math.floor(m / TickQuery.tickCount(tickSpacing));
|
|
151
|
+
if (tickArrayStartIndex < 0 && m != 0) {
|
|
152
|
+
tickArrayOffsetInBitmap = TICK_ARRAY_BITMAP_SIZE - tickArrayOffsetInBitmap;
|
|
153
|
+
}
|
|
154
|
+
return tickArrayOffsetInBitmap;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=tickarrayBitmap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tickarrayBitmap.js","sourceRoot":"","sources":["../../../../src/instructions/utils/tickarrayBitmap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { EpochInfo } from '@solana/web3.js';
|
|
2
|
+
import BN from 'bn.js';
|
|
3
|
+
import { TransferFeeDataBaseType, IGetTransferAmountFee } from '../models.js';
|
|
4
|
+
export declare function getTransferAmountFee(amount: BN, _feeConfig: TransferFeeDataBaseType | undefined, epochInfo: EpochInfo, addFee: boolean): IGetTransferAmountFee;
|
|
5
|
+
export declare function minExpirationTime(expirationTime1: number | undefined, expirationTime2: number | undefined): number | undefined;
|
|
6
|
+
export declare function BNDivCeil(bn1: BN, bn2: BN): BN;
|
|
7
|
+
//# sourceMappingURL=transfer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfer.d.ts","sourceRoot":"","sources":["../../../../src/instructions/utils/transfer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,MAAM,OAAO,CAAC;AAEvB,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAK9E,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,EAAE,EACV,UAAU,EAAE,uBAAuB,GAAG,SAAS,EAC/C,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,OAAO,GACd,qBAAqB,CA8DvB;AAED,wBAAgB,iBAAiB,CAC/B,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,eAAe,EAAE,MAAM,GAAG,SAAS,GAClC,MAAM,GAAG,SAAS,CAKpB;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,CAQ9C"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import BN from 'bn.js';
|
|
2
|
+
const POINT = 10_000;
|
|
3
|
+
// This function is a specialized utility function for calculating transfer fees and final amounts for Token-2022 token transfers. It handles the transfer fee feature introduced in the Solana Token-2022 program, calculating precise transfer amounts and fees based on the current epoch and fee configuration
|
|
4
|
+
export function getTransferAmountFee(amount, _feeConfig, epochInfo, addFee) {
|
|
5
|
+
if (_feeConfig === undefined) {
|
|
6
|
+
return {
|
|
7
|
+
amount,
|
|
8
|
+
fee: undefined,
|
|
9
|
+
expirationTime: undefined,
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
const feeConfig = {
|
|
13
|
+
..._feeConfig,
|
|
14
|
+
olderTransferFee: {
|
|
15
|
+
epoch: BigInt(_feeConfig.olderTransferFee.epoch),
|
|
16
|
+
maximumFee: BigInt(_feeConfig.olderTransferFee.maximumFee),
|
|
17
|
+
transferFeeBasisPoints: _feeConfig.olderTransferFee.transferFeeBasisPoints,
|
|
18
|
+
},
|
|
19
|
+
newerTransferFee: {
|
|
20
|
+
epoch: BigInt(_feeConfig.newerTransferFee.epoch),
|
|
21
|
+
maximumFee: BigInt(_feeConfig.newerTransferFee.maximumFee),
|
|
22
|
+
transferFeeBasisPoints: _feeConfig.newerTransferFee.transferFeeBasisPoints,
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
const nowFeeConfig = epochInfo.epoch < feeConfig.newerTransferFee.epoch ? feeConfig.olderTransferFee : feeConfig.newerTransferFee;
|
|
26
|
+
const maxFee = new BN(nowFeeConfig.maximumFee.toString());
|
|
27
|
+
const expirationTime = epochInfo.epoch < feeConfig.newerTransferFee.epoch
|
|
28
|
+
? ((Number(feeConfig.newerTransferFee.epoch) * epochInfo.slotsInEpoch - epochInfo.absoluteSlot) * 400) / 1000
|
|
29
|
+
: undefined;
|
|
30
|
+
if (addFee) {
|
|
31
|
+
if (nowFeeConfig.transferFeeBasisPoints === POINT) {
|
|
32
|
+
const nowMaxFee = new BN(nowFeeConfig.maximumFee.toString());
|
|
33
|
+
return {
|
|
34
|
+
amount: amount.add(nowMaxFee),
|
|
35
|
+
fee: nowMaxFee,
|
|
36
|
+
expirationTime,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
const _TAmount = BNDivCeil(amount.mul(new BN(POINT)), new BN(POINT - nowFeeConfig.transferFeeBasisPoints));
|
|
41
|
+
const nowMaxFee = new BN(nowFeeConfig.maximumFee.toString());
|
|
42
|
+
const TAmount = _TAmount.sub(amount).gt(nowMaxFee) ? amount.add(nowMaxFee) : _TAmount;
|
|
43
|
+
const _fee = BNDivCeil(TAmount.mul(new BN(nowFeeConfig.transferFeeBasisPoints)), new BN(POINT));
|
|
44
|
+
const fee = _fee.gt(maxFee) ? maxFee : _fee;
|
|
45
|
+
return {
|
|
46
|
+
amount: TAmount,
|
|
47
|
+
fee,
|
|
48
|
+
expirationTime,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
const _fee = BNDivCeil(amount.mul(new BN(nowFeeConfig.transferFeeBasisPoints)), new BN(POINT));
|
|
54
|
+
const fee = _fee.gt(maxFee) ? maxFee : _fee;
|
|
55
|
+
return {
|
|
56
|
+
amount,
|
|
57
|
+
fee,
|
|
58
|
+
expirationTime,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export function minExpirationTime(expirationTime1, expirationTime2) {
|
|
63
|
+
if (expirationTime1 === undefined)
|
|
64
|
+
return expirationTime2;
|
|
65
|
+
if (expirationTime2 === undefined)
|
|
66
|
+
return expirationTime1;
|
|
67
|
+
return Math.min(expirationTime1, expirationTime2);
|
|
68
|
+
}
|
|
69
|
+
export function BNDivCeil(bn1, bn2) {
|
|
70
|
+
const { div, mod } = bn1.divmod(bn2);
|
|
71
|
+
if (mod.gt(new BN(0))) {
|
|
72
|
+
return div.add(new BN(1));
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
return div;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=transfer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfer.js","sourceRoot":"","sources":["../../../../src/instructions/utils/transfer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Mint, getTransferFeeConfig } from '@solana/spl-token';
|
|
2
|
+
import { AccountInfo, Commitment, Connection, PublicKey } from '@solana/web3.js';
|
|
3
|
+
export interface ReturnTypeFetchMultipleMintInfos {
|
|
4
|
+
[mint: string]: Mint & {
|
|
5
|
+
feeConfig: ReturnType<typeof getTransferFeeConfig> | undefined;
|
|
6
|
+
programId: PublicKey;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export interface GetMultipleAccountsInfoConfig {
|
|
10
|
+
batchRequest?: boolean;
|
|
11
|
+
commitment?: Commitment;
|
|
12
|
+
chunkCount?: number;
|
|
13
|
+
}
|
|
14
|
+
export declare function getMultipleAccountsInfo(connection: Connection, publicKeys: PublicKey[], config?: GetMultipleAccountsInfoConfig): Promise<(AccountInfo<Buffer> | null)[]>;
|
|
15
|
+
export declare function getMultipleAccountsInfoWithCustomFlags<T extends {
|
|
16
|
+
pubkey: PublicKey;
|
|
17
|
+
}>(connection: Connection, publicKeysWithCustomFlag: T[], config?: GetMultipleAccountsInfoConfig): Promise<({
|
|
18
|
+
accountInfo: AccountInfo<Buffer> | null;
|
|
19
|
+
} & T)[]>;
|
|
20
|
+
export declare function fetchMultipleMintInfos({ connection, mints, config, }: {
|
|
21
|
+
connection: Connection;
|
|
22
|
+
mints: PublicKey[];
|
|
23
|
+
config?: {
|
|
24
|
+
batchRequest?: boolean;
|
|
25
|
+
};
|
|
26
|
+
}): Promise<ReturnTypeFetchMultipleMintInfos>;
|
|
27
|
+
//# sourceMappingURL=accountInfo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accountInfo.d.ts","sourceRoot":"","sources":["../../../src/utils/accountInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,IAAI,EAAoB,oBAAoB,EAAc,MAAM,mBAAmB,CAAC;AACxG,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAOjF,MAAM,WAAW,gCAAgC;IAC/C,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG;QAAE,SAAS,EAAE,UAAU,CAAC,OAAO,oBAAoB,CAAC,GAAG,SAAS,CAAC;QAAC,SAAS,EAAE,SAAS,CAAA;KAAE,CAAC;CACjH;AAeD,MAAM,WAAW,6BAA6B;IAC5C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,SAAS,EAAE,EACvB,MAAM,CAAC,EAAE,6BAA6B,GACrC,OAAO,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CA+DzC;AAED,wBAAsB,sCAAsC,CAAC,CAAC,SAAS;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,EAC1F,UAAU,EAAE,UAAU,EACtB,wBAAwB,EAAE,CAAC,EAAE,EAC7B,MAAM,CAAC,EAAE,6BAA6B,GACrC,OAAO,CAAC,CAAC;IAAE,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,CAAA;CAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAQ9D;AAED,wBAAsB,sBAAsB,CAAC,EAC3C,UAAU,EACV,KAAK,EACL,MAAM,GACP,EAAE;IACD,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CACrC,GAAG,OAAO,CAAC,gCAAgC,CAAC,CAwB5C"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { MINT_SIZE, TOKEN_PROGRAM_ID, getTransferFeeConfig, unpackMint } from '@solana/spl-token';
|
|
2
|
+
import { PublicKey } from '@solana/web3.js';
|
|
3
|
+
import { chunk } from 'lodash-es';
|
|
4
|
+
import { WSOLMint } from '../constants.js';
|
|
5
|
+
import { solToWSol } from './validateAndParsePublicKey.js';
|
|
6
|
+
export async function getMultipleAccountsInfo(connection, publicKeys, config) {
|
|
7
|
+
const { batchRequest, commitment = 'confirmed', chunkCount = 100, } = {
|
|
8
|
+
batchRequest: false,
|
|
9
|
+
...config,
|
|
10
|
+
};
|
|
11
|
+
const chunkedKeys = chunk(publicKeys, chunkCount);
|
|
12
|
+
let results = new Array(chunkedKeys.length).fill([]);
|
|
13
|
+
if (batchRequest) {
|
|
14
|
+
const batch = chunkedKeys.map((keys) => {
|
|
15
|
+
const args = connection._buildArgs([keys.map((key) => key.toBase58())], commitment, 'base64');
|
|
16
|
+
return {
|
|
17
|
+
methodName: 'getMultipleAccounts',
|
|
18
|
+
args,
|
|
19
|
+
};
|
|
20
|
+
});
|
|
21
|
+
const _batch = chunk(batch, 10);
|
|
22
|
+
const unsafeResponse = await (await Promise.all(_batch.map(async (i) => await connection._rpcBatchRequest(i)))).flat();
|
|
23
|
+
results = unsafeResponse.map((unsafeRes) => {
|
|
24
|
+
if (unsafeRes.error)
|
|
25
|
+
console.error(`failed to get info for multiple accounts, RPC_ERROR, ${unsafeRes.error.message}`);
|
|
26
|
+
return unsafeRes.result.value.map((accountInfo) => {
|
|
27
|
+
if (accountInfo) {
|
|
28
|
+
const { data, executable, lamports, owner, rentEpoch } = accountInfo;
|
|
29
|
+
if (data.length !== 2 && data[1] !== 'base64') {
|
|
30
|
+
console.error(`info must be base64 encoded, RPC_ERROR`);
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
data: Buffer.from(data[0], 'base64'),
|
|
34
|
+
executable,
|
|
35
|
+
lamports,
|
|
36
|
+
owner: new PublicKey(owner),
|
|
37
|
+
rentEpoch,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
try {
|
|
46
|
+
results = (await Promise.all(chunkedKeys.map((keys) => connection.getMultipleAccountsInfo(keys, commitment))));
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
if (error instanceof Error) {
|
|
50
|
+
console.error(`failed to get info for multiple accounts, RPC_ERROR, ${error.message}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return results.flat();
|
|
55
|
+
}
|
|
56
|
+
export async function getMultipleAccountsInfoWithCustomFlags(connection, publicKeysWithCustomFlag, config) {
|
|
57
|
+
const multipleAccountsInfo = await getMultipleAccountsInfo(connection, publicKeysWithCustomFlag.map((o) => o.pubkey), config);
|
|
58
|
+
return publicKeysWithCustomFlag.map((o, idx) => ({ ...o, accountInfo: multipleAccountsInfo[idx] }));
|
|
59
|
+
}
|
|
60
|
+
export async function fetchMultipleMintInfos({ connection, mints, config, }) {
|
|
61
|
+
if (mints.length === 0)
|
|
62
|
+
return {};
|
|
63
|
+
const mintInfos = await getMultipleAccountsInfoWithCustomFlags(connection, mints.map((i) => ({ pubkey: solToWSol(i) })), config);
|
|
64
|
+
const mintK = {};
|
|
65
|
+
for (const i of mintInfos) {
|
|
66
|
+
if (!i.accountInfo || i.accountInfo.data.length < MINT_SIZE) {
|
|
67
|
+
console.log('invalid mint account', i.pubkey.toBase58());
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
const t = unpackMint(i.pubkey, i.accountInfo, i.accountInfo?.owner);
|
|
71
|
+
mintK[i.pubkey.toString()] = {
|
|
72
|
+
...t,
|
|
73
|
+
programId: i.accountInfo?.owner || TOKEN_PROGRAM_ID,
|
|
74
|
+
feeConfig: getTransferFeeConfig(t) ?? undefined,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
mintK[PublicKey.default.toBase58()] = mintK[WSOLMint.toBase58()];
|
|
78
|
+
return mintK;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=accountInfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accountInfo.js","sourceRoot":"","sources":["../../../src/utils/accountInfo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { PublicKey, TransactionInstruction } from '@solana/web3.js';
|
|
2
|
+
export declare const MAX_BASE64_SIZE = 1644;
|
|
3
|
+
export declare function checkV0TxSize({ instructions, payer, recentBlockhash, }: {
|
|
4
|
+
instructions: TransactionInstruction[];
|
|
5
|
+
payer: PublicKey;
|
|
6
|
+
recentBlockhash?: string;
|
|
7
|
+
}): boolean;
|
|
8
|
+
//# sourceMappingURL=checkV0TxSize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkV0TxSize.d.ts","sourceRoot":"","sources":["../../../src/utils/checkV0TxSize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,SAAS,EAAE,sBAAsB,EAA4C,MAAM,iBAAiB,CAAC;AAEvH,eAAO,MAAM,eAAe,OAAO,CAAC;AAEpC,wBAAgB,aAAa,CAAC,EAC5B,YAAY,EACZ,KAAK,EACL,eAAyD,GAC1D,EAAE;IACD,YAAY,EAAE,sBAAsB,EAAE,CAAC;IACvC,KAAK,EAAE,SAAS,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,OAAO,CAcV"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Keypair, TransactionMessage, VersionedTransaction } from '@solana/web3.js';
|
|
2
|
+
export const MAX_BASE64_SIZE = 1644;
|
|
3
|
+
export function checkV0TxSize({ instructions, payer, recentBlockhash = Keypair.generate().publicKey.toString(), }) {
|
|
4
|
+
const transactionMessage = new TransactionMessage({
|
|
5
|
+
payerKey: payer,
|
|
6
|
+
recentBlockhash,
|
|
7
|
+
instructions,
|
|
8
|
+
});
|
|
9
|
+
const messageV0 = transactionMessage.compileToV0Message();
|
|
10
|
+
try {
|
|
11
|
+
const buildLength = Buffer.from(new VersionedTransaction(messageV0).serialize()).toString('base64').length;
|
|
12
|
+
return buildLength < MAX_BASE64_SIZE;
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=checkV0TxSize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkV0TxSize.js","sourceRoot":"","sources":["../../../src/utils/checkV0TxSize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAqC,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvH,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AAEpC,MAAM,UAAU,aAAa,CAAC,EAC5B,YAAY,EACZ,KAAK,EACL,eAAe,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,GAK1D;IACC,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,CAAC;QAChD,QAAQ,EAAE,KAAK;QACf,eAAe;QACf,YAAY;KACb,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,kBAAkB,CAAC,kBAAkB,EAAE,CAAC;IAC1D,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;QAC3G,OAAO,WAAW,GAAG,eAAe,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Connection, PublicKey, TransactionInstruction } from '@solana/web3.js';
|
|
2
|
+
/**
|
|
3
|
+
* Estimate compute units required for a transaction
|
|
4
|
+
* @param connection - Solana connection instance
|
|
5
|
+
* @param instructions - Instructions to estimate
|
|
6
|
+
* @param payerPublicKey - Payer public key
|
|
7
|
+
* @param _blockhash - Optional blockhash
|
|
8
|
+
* @returns Estimated compute unit count
|
|
9
|
+
*/
|
|
10
|
+
export declare function estimateComputeUnits(connection: Connection, instructions: TransactionInstruction[], payerPublicKey: PublicKey, _blockhash?: string): Promise<number>;
|
|
11
|
+
//# sourceMappingURL=estimateComputeUnits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"estimateComputeUnits.d.ts","sourceRoot":"","sources":["../../../src/utils/estimateComputeUnits.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EACV,SAAS,EACT,sBAAsB,EAGvB,MAAM,iBAAiB,CAAC;AAEzB;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,sBAAsB,EAAE,EACtC,cAAc,EAAE,SAAS,EACzB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAiDjB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ComputeBudgetProgram, TransactionMessage, VersionedTransaction, } from '@solana/web3.js';
|
|
2
|
+
/**
|
|
3
|
+
* Estimate compute units required for a transaction
|
|
4
|
+
* @param connection - Solana connection instance
|
|
5
|
+
* @param instructions - Instructions to estimate
|
|
6
|
+
* @param payerPublicKey - Payer public key
|
|
7
|
+
* @param _blockhash - Optional blockhash
|
|
8
|
+
* @returns Estimated compute unit count
|
|
9
|
+
*/
|
|
10
|
+
export async function estimateComputeUnits(connection, instructions, payerPublicKey, _blockhash) {
|
|
11
|
+
try {
|
|
12
|
+
const blockhash = _blockhash || (await connection.getLatestBlockhash()).blockhash;
|
|
13
|
+
const filteredInstructions = instructions.filter((ix) => {
|
|
14
|
+
if (!ix.programId.equals(ComputeBudgetProgram.programId)) {
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
const instructionType = ix.data[0];
|
|
18
|
+
return instructionType !== 2; // Keep if not setComputeUnitLimit
|
|
19
|
+
});
|
|
20
|
+
const simulationInstructions = [
|
|
21
|
+
ComputeBudgetProgram.setComputeUnitLimit({ units: 1_400_000 }), // Max CU limit
|
|
22
|
+
...filteredInstructions,
|
|
23
|
+
];
|
|
24
|
+
const messageV0 = new TransactionMessage({
|
|
25
|
+
payerKey: payerPublicKey,
|
|
26
|
+
recentBlockhash: blockhash,
|
|
27
|
+
instructions: simulationInstructions,
|
|
28
|
+
}).compileToV0Message();
|
|
29
|
+
const simulationTx = new VersionedTransaction(messageV0);
|
|
30
|
+
// Simulate transaction execution with max CU limit
|
|
31
|
+
const simulation = await connection.simulateTransaction(simulationTx);
|
|
32
|
+
if (simulation.value.logs && simulation.value.unitsConsumed) {
|
|
33
|
+
const consumedUnits = simulation.value.unitsConsumed;
|
|
34
|
+
// Calculate final CU limit with safety margin
|
|
35
|
+
const estimatedUnits = Math.min(Math.max(consumedUnits + 100_000, // 100k buffer for safety
|
|
36
|
+
Math.ceil(consumedUnits * 1.3) // 30% buffer
|
|
37
|
+
), 1_400_000 // Solana transaction max CU limit
|
|
38
|
+
);
|
|
39
|
+
return Math.max(estimatedUnits, 100_000); // Ensure at least 100k CU
|
|
40
|
+
}
|
|
41
|
+
return 400_000;
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
console.warn('Estimate compute units failed, using default value:', error);
|
|
45
|
+
return 400_000;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=estimateComputeUnits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"estimateComputeUnits.js","sourceRoot":"","sources":["../../../src/utils/estimateComputeUnits.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EAIpB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AAEzB;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,UAAsB,EACtB,YAAsC,EACtC,cAAyB,EACzB,UAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,UAAU,IAAI,CAAC,MAAM,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC;QAElF,MAAM,oBAAoB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE;YACtD,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,oBAAoB,CAAC,SAAS,CAAC,EAAE,CAAC;gBACzD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,eAAe,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnC,OAAO,eAAe,KAAK,CAAC,CAAC,CAAC,kCAAkC;QAClE,CAAC,CAAC,CAAC;QAEH,MAAM,sBAAsB,GAAG;YAC7B,oBAAoB,CAAC,mBAAmB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,eAAe;YAC/E,GAAG,oBAAoB;SACxB,CAAC;QAEF,MAAM,SAAS,GAAG,IAAI,kBAAkB,CAAC;YACvC,QAAQ,EAAE,cAAc;YACxB,eAAe,EAAE,SAAS;YAC1B,YAAY,EAAE,sBAAsB;SACrC,CAAC,CAAC,kBAAkB,EAAE,CAAC;QAExB,MAAM,YAAY,GAAG,IAAI,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAEzD,mDAAmD;QACnD,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;QAEtE,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,UAAU,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;YAC5D,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC;YAErD,8CAA8C;YAC9C,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAC7B,IAAI,CAAC,GAAG,CACN,aAAa,GAAG,OAAO,EAAE,yBAAyB;YAClD,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC,aAAa;aAC7C,EACD,SAAS,CAAC,kCAAkC;aAC7C,CAAC;YAEF,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,0BAA0B;QACtE,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,qDAAqD,EAAE,KAAK,CAAC,CAAC;QAC3E,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { PublicKey } from '@solana/web3.js';
|
|
2
|
+
export declare function generatePubKey({ fromPublicKey, programId, assignSeed, }: {
|
|
3
|
+
fromPublicKey: PublicKey;
|
|
4
|
+
programId: PublicKey;
|
|
5
|
+
assignSeed?: string;
|
|
6
|
+
}): {
|
|
7
|
+
publicKey: PublicKey;
|
|
8
|
+
seed: string;
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=generatePubKey.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generatePubKey.d.ts","sourceRoot":"","sources":["../../../src/utils/generatePubKey.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAErD,wBAAgB,cAAc,CAAC,EAC7B,aAAa,EACb,SAA4B,EAC5B,UAAU,GACX,EAAE;IACD,aAAa,EAAE,SAAS,CAAC;IACzB,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG;IAAE,SAAS,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAIzC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { sha256 } from '@noble/hashes/sha256';
|
|
2
|
+
import { TOKEN_PROGRAM_ID } from '@solana/spl-token';
|
|
3
|
+
import { Keypair, PublicKey } from '@solana/web3.js';
|
|
4
|
+
export function generatePubKey({ fromPublicKey, programId = TOKEN_PROGRAM_ID, assignSeed, }) {
|
|
5
|
+
const seed = assignSeed ? btoa(assignSeed).slice(0, 32) : Keypair.generate().publicKey.toBase58().slice(0, 32);
|
|
6
|
+
const publicKey = createWithSeed(fromPublicKey, seed, programId);
|
|
7
|
+
return { publicKey, seed };
|
|
8
|
+
}
|
|
9
|
+
function createWithSeed(fromPublicKey, seed, programId) {
|
|
10
|
+
const buffer = Buffer.concat([fromPublicKey.toBuffer(), Buffer.from(seed), programId.toBuffer()]);
|
|
11
|
+
const publicKeyBytes = sha256(buffer);
|
|
12
|
+
return new PublicKey(publicKeyBytes);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=generatePubKey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generatePubKey.js","sourceRoot":"","sources":["../../../src/utils/generatePubKey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,UAAU,cAAc,CAAC,EAC7B,aAAa,EACb,SAAS,GAAG,gBAAgB,EAC5B,UAAU,GAKX;IACC,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/G,MAAM,SAAS,GAAG,cAAc,CAAC,aAAa,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IACjE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,cAAc,CAAC,aAAwB,EAAE,IAAY,EAAE,SAAoB;IAClF,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAClG,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACtC,OAAO,IAAI,SAAS,CAAC,cAAc,CAAC,CAAC;AACvC,CAAC"}
|