@allbridge/bridge-core-sdk 3.27.0-alpha.2 → 3.27.0-alpha.21

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.
Files changed (115) hide show
  1. package/dist/browser/index.js +3 -3
  2. package/dist/browser/index.js.map +4 -4
  3. package/dist/cjs/index.js +3 -3
  4. package/dist/cjs/index.js.map +4 -4
  5. package/dist/esm/index.js +3 -3
  6. package/dist/esm/index.js.map +4 -4
  7. package/dist/src/chains/chain.enums.d.ts +7 -2
  8. package/dist/src/chains/chain.enums.js +5 -0
  9. package/dist/src/chains/chain.enums.js.map +1 -1
  10. package/dist/src/chains/index.js +6 -0
  11. package/dist/src/chains/index.js.map +1 -1
  12. package/dist/src/client/core-api/api-client.js +1 -0
  13. package/dist/src/client/core-api/api-client.js.map +1 -1
  14. package/dist/src/client/core-api/core-api-mapper.js +32 -0
  15. package/dist/src/client/core-api/core-api-mapper.js.map +1 -1
  16. package/dist/src/client/core-api/core-api.model.d.ts +13 -2
  17. package/dist/src/client/core-api/core-api.model.js.map +1 -1
  18. package/dist/src/configs/mainnet.js +1 -0
  19. package/dist/src/configs/mainnet.js.map +1 -1
  20. package/dist/src/index.d.ts +12 -4
  21. package/dist/src/index.js +11 -11
  22. package/dist/src/index.js.map +1 -1
  23. package/dist/src/models/index.d.ts +12 -4
  24. package/dist/src/models/index.js +4 -0
  25. package/dist/src/models/index.js.map +1 -1
  26. package/dist/src/services/bridge/alg/index.d.ts +1 -0
  27. package/dist/src/services/bridge/alg/index.js +79 -43
  28. package/dist/src/services/bridge/alg/index.js.map +1 -1
  29. package/dist/src/services/bridge/evm/index.d.ts +1 -0
  30. package/dist/src/services/bridge/evm/index.js +103 -33
  31. package/dist/src/services/bridge/evm/index.js.map +1 -1
  32. package/dist/src/services/bridge/index.d.ts +2 -2
  33. package/dist/src/services/bridge/index.js +15 -4
  34. package/dist/src/services/bridge/index.js.map +1 -1
  35. package/dist/src/services/bridge/models/bridge.model.d.ts +12 -4
  36. package/dist/src/services/bridge/models/bridge.model.js.map +1 -1
  37. package/dist/src/services/bridge/raw-bridge-transaction-builder.js +1 -1
  38. package/dist/src/services/bridge/raw-bridge-transaction-builder.js.map +1 -1
  39. package/dist/src/services/bridge/sol/index.d.ts +2 -2
  40. package/dist/src/services/bridge/sol/index.js +19 -11
  41. package/dist/src/services/bridge/sol/index.js.map +1 -1
  42. package/dist/src/services/bridge/sol/jupiter.d.ts +1 -1
  43. package/dist/src/services/bridge/sol/jupiter.js +2 -1
  44. package/dist/src/services/bridge/sol/jupiter.js.map +1 -1
  45. package/dist/src/services/bridge/srb/index.js +36 -28
  46. package/dist/src/services/bridge/srb/index.js.map +1 -1
  47. package/dist/src/services/bridge/stx/index.d.ts +16 -0
  48. package/dist/src/services/bridge/stx/index.js +136 -0
  49. package/dist/src/services/bridge/stx/index.js.map +1 -0
  50. package/dist/src/services/bridge/sui/index.js +166 -138
  51. package/dist/src/services/bridge/sui/index.js.map +1 -1
  52. package/dist/src/services/bridge/trx/index.js +98 -70
  53. package/dist/src/services/bridge/trx/index.js.map +1 -1
  54. package/dist/src/services/bridge/utils.d.ts +3 -1
  55. package/dist/src/services/bridge/utils.js +92 -8
  56. package/dist/src/services/bridge/utils.js.map +1 -1
  57. package/dist/src/services/liquidity-pool/alg/index.js +10 -17
  58. package/dist/src/services/liquidity-pool/alg/index.js.map +1 -1
  59. package/dist/src/services/liquidity-pool/index.js +5 -0
  60. package/dist/src/services/liquidity-pool/index.js.map +1 -1
  61. package/dist/src/services/liquidity-pool/sol/index.js +6 -3
  62. package/dist/src/services/liquidity-pool/sol/index.js.map +1 -1
  63. package/dist/src/services/liquidity-pool/stx/index.d.ts +21 -0
  64. package/dist/src/services/liquidity-pool/stx/index.js +141 -0
  65. package/dist/src/services/liquidity-pool/stx/index.js.map +1 -0
  66. package/dist/src/services/models/abi/PayerWithAbr.d.ts +203 -0
  67. package/dist/src/services/models/abi/PayerWithAbr.js +266 -0
  68. package/dist/src/services/models/abi/PayerWithAbr.js.map +1 -0
  69. package/dist/src/services/models/alg/BridgeClient.d.ts +158 -133
  70. package/dist/src/services/models/alg/BridgeClient.js +182 -130
  71. package/dist/src/services/models/alg/BridgeClient.js.map +1 -1
  72. package/dist/src/services/models/alg/PaddingUtilClient.d.ts +639 -0
  73. package/dist/src/services/models/alg/PaddingUtilClient.js +425 -0
  74. package/dist/src/services/models/alg/PaddingUtilClient.js.map +1 -0
  75. package/dist/src/services/models/alg/PoolClient.d.ts +204 -201
  76. package/dist/src/services/models/alg/PoolClient.js +234 -215
  77. package/dist/src/services/models/alg/PoolClient.js.map +1 -1
  78. package/dist/src/services/models/index.d.ts +16 -3
  79. package/dist/src/services/models/index.js.map +1 -1
  80. package/dist/src/services/models/stx/clarigen-types.d.ts +657 -0
  81. package/dist/src/services/models/stx/clarigen-types.js +2296 -0
  82. package/dist/src/services/models/stx/clarigen-types.js.map +1 -0
  83. package/dist/src/services/token/index.js +7 -2
  84. package/dist/src/services/token/index.js.map +1 -1
  85. package/dist/src/services/token/models/token.model.d.ts +4 -4
  86. package/dist/src/services/token/models/token.model.js.map +1 -1
  87. package/dist/src/services/token/stx/index.d.ts +20 -0
  88. package/dist/src/services/token/stx/index.js +59 -0
  89. package/dist/src/services/token/stx/index.js.map +1 -0
  90. package/dist/src/services/utils/alg/index.d.ts +1 -10
  91. package/dist/src/services/utils/alg/index.js +0 -20
  92. package/dist/src/services/utils/alg/index.js.map +1 -1
  93. package/dist/src/services/utils/sol/compute-budget.d.ts +2 -1
  94. package/dist/src/services/utils/sol/compute-budget.js +36 -18
  95. package/dist/src/services/utils/sol/compute-budget.js.map +1 -1
  96. package/dist/src/services/utils/sol/index.d.ts +2 -0
  97. package/dist/src/services/utils/sol/index.js +12 -0
  98. package/dist/src/services/utils/sol/index.js.map +1 -1
  99. package/dist/src/services/utils/stx/get-token-name.d.ts +2 -0
  100. package/dist/src/services/utils/stx/get-token-name.js +15 -0
  101. package/dist/src/services/utils/stx/get-token-name.js.map +1 -0
  102. package/dist/src/services/utils/stx/post-conditions.d.ts +3 -0
  103. package/dist/src/services/utils/stx/post-conditions.js +27 -0
  104. package/dist/src/services/utils/stx/post-conditions.js.map +1 -0
  105. package/dist/src/services/yield/index.js +4 -0
  106. package/dist/src/services/yield/index.js.map +1 -1
  107. package/dist/src/tokens-info/tokens-info.model.d.ts +21 -0
  108. package/dist/src/tokens-info/tokens-info.model.js.map +1 -1
  109. package/dist/src/utils/utils.d.ts +2 -0
  110. package/dist/src/utils/utils.js +11 -0
  111. package/dist/src/utils/utils.js.map +1 -1
  112. package/dist/src/version.d.ts +1 -1
  113. package/dist/src/version.js +1 -1
  114. package/dist/src/version.js.map +1 -1
  115. package/package.json +6 -2
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StxTokenService = void 0;
4
+ const core_1 = require("@clarigen/core");
5
+ const network_1 = require("@stacks/network");
6
+ const chain_enums_1 = require("../../../chains/chain.enums");
7
+ const exceptions_1 = require("../../../exceptions");
8
+ const clarigen_types_1 = require("../../models/stx/clarigen-types");
9
+ const models_1 = require("../models");
10
+ class StxTokenService extends models_1.ChainTokenService {
11
+ nodeRpcUrl;
12
+ params;
13
+ api;
14
+ chainType = chain_enums_1.ChainType.STX;
15
+ client;
16
+ constructor(nodeRpcUrl, params, api) {
17
+ super();
18
+ this.nodeRpcUrl = nodeRpcUrl;
19
+ this.params = params;
20
+ this.api = api;
21
+ const network = (0, network_1.createNetwork)({
22
+ network: this.params.stxIsTestnet ? "testnet" : "mainnet",
23
+ client: { baseUrl: this.nodeRpcUrl },
24
+ apiKey: this.params.stxHeroApiKey,
25
+ });
26
+ this.client = new core_1.ClarigenClient(network, this.params.stxHeroApiKey);
27
+ }
28
+ async getTokenBalance(params) {
29
+ const token = (0, core_1.contractFactory)(clarigen_types_1.stacksContracts.ftToken, params.token.tokenAddress);
30
+ const response = await this.client.roOk(token.getBalance({ owner: params.account }));
31
+ return response.toString();
32
+ }
33
+ async getNativeTokenBalance(params) {
34
+ const url = `${this.nodeRpcUrl}/extended/v1/address/${params.account}/stx`;
35
+ const res = await fetch(url, {
36
+ headers: this.params.stxHeroApiKey ? { "x-api-key": this.params.stxHeroApiKey } : undefined,
37
+ });
38
+ if (!res.ok) {
39
+ throw new Error(`Failed to fetch account: ${res.status}`);
40
+ }
41
+ const data = (await res.json());
42
+ const balance = data.balance;
43
+ return BigInt(balance).toString();
44
+ }
45
+ getAllowance(_params) {
46
+ throw new exceptions_1.MethodNotSupportedError();
47
+ }
48
+ checkAllowance(_params) {
49
+ throw new exceptions_1.MethodNotSupportedError();
50
+ }
51
+ approve(_params) {
52
+ throw new exceptions_1.MethodNotSupportedError();
53
+ }
54
+ buildRawTransactionApprove(_params) {
55
+ throw new exceptions_1.MethodNotSupportedError();
56
+ }
57
+ }
58
+ exports.StxTokenService = StxTokenService;
59
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/services/token/stx/index.ts"],"names":[],"mappings":";;;AAAA,yCAAiE;AACjE,6CAAgD;AAChD,6DAAwD;AAExD,oDAA8D;AAI9D,oEAA+E;AAC/E,sCAMmB;AAEnB,MAAa,eAAgB,SAAQ,0BAAiB;IAM3C;IACA;IACA;IAPT,SAAS,GAAkB,uBAAS,CAAC,GAAG,CAAC;IAEjC,MAAM,CAAiB;IAE/B,YACS,UAAkB,EAClB,MAA+B,EAC/B,GAAwB;QAE/B,KAAK,EAAE,CAAC;QAJD,eAAU,GAAV,UAAU,CAAQ;QAClB,WAAM,GAAN,MAAM,CAAyB;QAC/B,QAAG,GAAH,GAAG,CAAqB;QAG/B,MAAM,OAAO,GAAG,IAAA,uBAAa,EAAC;YAC5B,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACzD,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;YACpC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa;SAClC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,qBAAc,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,MAA6B;QACjD,MAAM,KAAK,GAAG,IAAA,sBAAe,EAAC,gCAAS,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAE5E,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACrF,OAAO,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,MAAmC;QAC7D,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU,wBAAwB,MAAM,CAAC,OAAO,MAAM,CAAC;QAE3E,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,SAAS;SAC5F,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAwB,CAAC;QACvD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;IACpC,CAAC;IAED,YAAY,CAAC,OAA8B;QACzC,MAAM,IAAI,oCAAuB,EAAE,CAAC;IACtC,CAAC;IAED,cAAc,CAAC,OAAgC;QAC7C,MAAM,IAAI,oCAAuB,EAAE,CAAC;IACtC,CAAC;IAED,OAAO,CAAC,OAAyB;QAC/B,MAAM,IAAI,oCAAuB,EAAE,CAAC;IACtC,CAAC;IAED,0BAA0B,CAAC,OAAyB;QAClD,MAAM,IAAI,oCAAuB,EAAE,CAAC;IACtC,CAAC;CACF;AAvDD,0CAuDC","sourcesContent":["import { ClarigenClient, contractFactory } from \"@clarigen/core\";\nimport { createNetwork } from \"@stacks/network\";\nimport { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { MethodNotSupportedError } from \"../../../exceptions\";\nimport { AllbridgeCoreSdkOptions } from \"../../../index\";\nimport { GetNativeTokenBalanceParams } from \"../../bridge/models\";\nimport { RawTransaction, TransactionResponse } from \"../../models\";\nimport { stacksContracts as contracts } from \"../../models/stx/clarigen-types\";\nimport {\n ApproveParamsDto,\n ChainTokenService,\n CheckAllowanceParamsDto,\n GetAllowanceParamsDto,\n GetTokenBalanceParams,\n} from \"../models\";\n\nexport class StxTokenService extends ChainTokenService {\n chainType: ChainType.STX = ChainType.STX;\n\n private client: ClarigenClient;\n\n constructor(\n public nodeRpcUrl: string,\n public params: AllbridgeCoreSdkOptions,\n public api: AllbridgeCoreClient\n ) {\n super();\n const network = createNetwork({\n network: this.params.stxIsTestnet ? \"testnet\" : \"mainnet\",\n client: { baseUrl: this.nodeRpcUrl },\n apiKey: this.params.stxHeroApiKey,\n });\n this.client = new ClarigenClient(network, this.params.stxHeroApiKey);\n }\n\n async getTokenBalance(params: GetTokenBalanceParams): Promise<string> {\n const token = contractFactory(contracts.ftToken, params.token.tokenAddress);\n\n const response = await this.client.roOk(token.getBalance({ owner: params.account }));\n return response.toString();\n }\n\n async getNativeTokenBalance(params: GetNativeTokenBalanceParams): Promise<string> {\n const url = `${this.nodeRpcUrl}/extended/v1/address/${params.account}/stx`;\n\n const res = await fetch(url, {\n headers: this.params.stxHeroApiKey ? { \"x-api-key\": this.params.stxHeroApiKey } : undefined,\n });\n if (!res.ok) {\n throw new Error(`Failed to fetch account: ${res.status}`);\n }\n const data = (await res.json()) as { balance: string };\n const balance = data.balance;\n return BigInt(balance).toString();\n }\n\n getAllowance(_params: GetAllowanceParamsDto): Promise<string> {\n throw new MethodNotSupportedError();\n }\n\n checkAllowance(_params: CheckAllowanceParamsDto): Promise<boolean> {\n throw new MethodNotSupportedError();\n }\n\n approve(_params: ApproveParamsDto): Promise<TransactionResponse> {\n throw new MethodNotSupportedError();\n }\n\n buildRawTransactionApprove(_params: ApproveParamsDto): Promise<RawTransaction> {\n throw new MethodNotSupportedError();\n }\n}\n"]}
@@ -1,16 +1,7 @@
1
1
  import { AlgorandClient } from "@algorandfoundation/algokit-utils";
2
2
  import { AlgoAmount } from "@algorandfoundation/algokit-utils/types/amount";
3
- import { TransactionComposer } from "@algorandfoundation/algokit-utils/types/composer";
4
- import algosdk, { Address, Algodv2, Transaction } from "algosdk";
3
+ import { Address, Algodv2, Transaction } from "algosdk";
5
4
  import { RawAlgTransaction } from "../../models";
6
- export declare const mNoop: algosdk.ABIMethod;
7
- export declare function addBudgetNoops(opts: {
8
- composer: TransactionComposer;
9
- appId: bigint;
10
- sender: string | Address;
11
- signer?: any;
12
- count: number;
13
- }): void;
14
5
  export declare function feeForInner(innerCount: number): AlgoAmount;
15
6
  export declare function populateAndEncodeTxs(txs: Transaction[], sender: Address, algod: Algodv2): Promise<RawAlgTransaction>;
16
7
  export declare function encodeTxs(...txs: Transaction[]): RawAlgTransaction;
@@ -23,8 +23,6 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.mNoop = void 0;
27
- exports.addBudgetNoops = addBudgetNoops;
28
26
  exports.feeForInner = feeForInner;
29
27
  exports.populateAndEncodeTxs = populateAndEncodeTxs;
30
28
  exports.encodeTxs = encodeTxs;
@@ -32,24 +30,6 @@ exports.checkAssetOptIn = checkAssetOptIn;
32
30
  exports.checkAppOptIn = checkAppOptIn;
33
31
  const algokit_utils_1 = require("@algorandfoundation/algokit-utils");
34
32
  const algosdk_1 = __importStar(require("algosdk"));
35
- exports.mNoop = new algosdk_1.ABIMethod({
36
- name: "noop",
37
- args: [],
38
- returns: { type: "void" },
39
- });
40
- function addBudgetNoops(opts) {
41
- const { composer, appId, sender, signer, count } = opts;
42
- for (let i = 0; i < count; i++) {
43
- composer.addAppCallMethodCall({
44
- appId,
45
- method: exports.mNoop,
46
- args: [],
47
- sender,
48
- signer,
49
- note: `noop_${i}`,
50
- });
51
- }
52
- }
53
33
  function feeForInner(innerCount) {
54
34
  return (innerCount * 1000).microAlgos(); // 1000 μAlgos per tx
55
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/services/utils/alg/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { AlgorandClient, populateAppCallResources } from \"@algorandfoundation/algokit-utils\";\nimport { AlgoAmount } from \"@algorandfoundation/algokit-utils/types/amount\";\nimport { TransactionComposer } from \"@algorandfoundation/algokit-utils/types/composer\";\nimport algosdk, {\n ABIMethod,\n Address,\n Algodv2,\n AtomicTransactionComposer,\n makeBasicAccountTransactionSigner,\n Transaction,\n} from \"algosdk\";\nimport { RawAlgTransaction } from \"../../models\";\n\nexport const mNoop = new ABIMethod({\n name: \"noop\",\n args: [],\n returns: { type: \"void\" },\n});\n\nexport function addBudgetNoops(opts: {\n composer: TransactionComposer;\n appId: bigint;\n sender: string | Address;\n signer?: any;\n count: number;\n}) {\n const { composer, appId, sender, signer, count } = opts;\n for (let i = 0; i < count; i++) {\n composer.addAppCallMethodCall({\n appId,\n method: mNoop,\n args: [],\n sender,\n signer,\n note: `noop_${i}`,\n });\n }\n}\n\nexport function feeForInner(innerCount: number): AlgoAmount {\n return (innerCount * 1000).microAlgos(); // 1000 μAlgos per tx\n}\n\nexport async function populateAndEncodeTxs(\n txs: Transaction[],\n sender: Address,\n algod: Algodv2\n): Promise<RawAlgTransaction> {\n const atc = new AtomicTransactionComposer();\n const txnSigner = makeBasicAccountTransactionSigner({ addr: sender, sk: new Uint8Array(64) });\n txs.forEach((txn) => {\n atc.addTransaction({ txn, signer: txnSigner });\n });\n const populatedAtc = await populateAppCallResources(atc, algod);\n const populatedTxs = populatedAtc.buildGroup().map((tx) => tx.txn);\n return encodeTxs(...populatedTxs);\n}\n\nexport function encodeTxs(...txs: Transaction[]): RawAlgTransaction {\n const blobs = txs.map((tx) => algosdk.encodeUnsignedTransaction(tx));\n return blobs.map((b) => Buffer.from(b).toString(\"hex\"));\n}\n\nexport async function checkAssetOptIn(\n assetId: string | bigint,\n sender: string,\n algorand: AlgorandClient\n): Promise<boolean> {\n if (typeof assetId === \"string\") {\n assetId = BigInt(assetId);\n }\n const info = await algorand.account.getInformation(sender);\n const assets = info.assets;\n if (assets) {\n const isOptedIn = assets.find(({ assetId: id }) => id === assetId);\n return isOptedIn !== undefined;\n }\n return false;\n}\n\nexport async function checkAppOptIn(\n appId: string | bigint,\n sender: string,\n algorand: AlgorandClient\n): Promise<boolean> {\n if (typeof appId === \"string\") {\n appId = BigInt(appId);\n }\n const info = await algorand.account.getInformation(sender);\n const localStates = info.appsLocalState;\n if (localStates) {\n const isOptedIn = localStates.find(({ id }) => id === appId);\n return isOptedIn !== undefined;\n }\n return false;\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/services/utils/alg/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAWA,kCAEC;AAED,oDAaC;AAED,8BAGC;AAED,0CAeC;AAED,sCAeC;AAnED,qEAA6F;AAE7F,mDAMiB;AAGjB,SAAgB,WAAW,CAAC,UAAkB;IAC5C,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,qBAAqB;AAChE,CAAC;AAEM,KAAK,UAAU,oBAAoB,CACxC,GAAkB,EAClB,MAAe,EACf,KAAc;IAEd,MAAM,GAAG,GAAG,IAAI,mCAAyB,EAAE,CAAC;IAC5C,MAAM,SAAS,GAAG,IAAA,2CAAiC,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9F,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAClB,GAAG,CAAC,cAAc,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,MAAM,IAAA,wCAAwB,EAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAChE,MAAM,YAAY,GAAG,YAAY,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACnE,OAAO,SAAS,CAAC,GAAG,YAAY,CAAC,CAAC;AACpC,CAAC;AAED,SAAgB,SAAS,CAAC,GAAG,GAAkB;IAC7C,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,iBAAO,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC,CAAC;IACrE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1D,CAAC;AAEM,KAAK,UAAU,eAAe,CACnC,OAAwB,EACxB,MAAc,EACd,QAAwB;IAExB,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;QACnE,OAAO,SAAS,KAAK,SAAS,CAAC;IACjC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAEM,KAAK,UAAU,aAAa,CACjC,KAAsB,EACtB,MAAc,EACd,QAAwB;IAExB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC;IACxC,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;QAC7D,OAAO,SAAS,KAAK,SAAS,CAAC;IACjC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["import { AlgorandClient, populateAppCallResources } from \"@algorandfoundation/algokit-utils\";\nimport { AlgoAmount } from \"@algorandfoundation/algokit-utils/types/amount\";\nimport algosdk, {\n Address,\n Algodv2,\n AtomicTransactionComposer,\n makeBasicAccountTransactionSigner,\n Transaction,\n} from \"algosdk\";\nimport { RawAlgTransaction } from \"../../models\";\n\nexport function feeForInner(innerCount: number): AlgoAmount {\n return (innerCount * 1000).microAlgos(); // 1000 μAlgos per tx\n}\n\nexport async function populateAndEncodeTxs(\n txs: Transaction[],\n sender: Address,\n algod: Algodv2\n): Promise<RawAlgTransaction> {\n const atc = new AtomicTransactionComposer();\n const txnSigner = makeBasicAccountTransactionSigner({ addr: sender, sk: new Uint8Array(64) });\n txs.forEach((txn) => {\n atc.addTransaction({ txn, signer: txnSigner });\n });\n const populatedAtc = await populateAppCallResources(atc, algod);\n const populatedTxs = populatedAtc.buildGroup().map((tx) => tx.txn);\n return encodeTxs(...populatedTxs);\n}\n\nexport function encodeTxs(...txs: Transaction[]): RawAlgTransaction {\n const blobs = txs.map((tx) => algosdk.encodeUnsignedTransaction(tx));\n return blobs.map((b) => Buffer.from(b).toString(\"hex\"));\n}\n\nexport async function checkAssetOptIn(\n assetId: string | bigint,\n sender: string,\n algorand: AlgorandClient\n): Promise<boolean> {\n if (typeof assetId === \"string\") {\n assetId = BigInt(assetId);\n }\n const info = await algorand.account.getInformation(sender);\n const assets = info.assets;\n if (assets) {\n const isOptedIn = assets.find(({ assetId: id }) => id === assetId);\n return isOptedIn !== undefined;\n }\n return false;\n}\n\nexport async function checkAppOptIn(\n appId: string | bigint,\n sender: string,\n algorand: AlgorandClient\n): Promise<boolean> {\n if (typeof appId === \"string\") {\n appId = BigInt(appId);\n }\n const info = await algorand.account.getInformation(sender);\n const localStates = info.appsLocalState;\n if (localStates) {\n const isOptedIn = localStates.find(({ id }) => id === appId);\n return isOptedIn !== undefined;\n }\n return false;\n}\n"]}
@@ -1,4 +1,5 @@
1
1
  import { Transaction, VersionedTransaction } from "@solana/web3.js";
2
- import { TxFeeParams } from "../../models";
2
+ import { SolanaTxFee, SolanaTxFeeParams, TxFeeParams } from "../../models";
3
3
  export declare function addUnitLimitAndUnitPriceToTx(transaction: Transaction, txFeeParams: TxFeeParams | undefined, solanaRpcUrl: string): Promise<void>;
4
4
  export declare function addUnitLimitAndUnitPriceToVersionedTx(transaction: VersionedTransaction, txFeeParams: TxFeeParams | undefined, solanaRpcUrl: string): Promise<void>;
5
+ export declare function normalizeSolanaTxFee(solana?: SolanaTxFee | SolanaTxFeeParams): SolanaTxFeeParams | undefined;
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.addUnitLimitAndUnitPriceToTx = addUnitLimitAndUnitPriceToTx;
4
4
  exports.addUnitLimitAndUnitPriceToVersionedTx = addUnitLimitAndUnitPriceToVersionedTx;
5
+ exports.normalizeSolanaTxFee = normalizeSolanaTxFee;
5
6
  const web3_js_1 = require("@solana/web3.js");
6
7
  const big_js_1 = require("big.js");
7
8
  const exceptions_1 = require("../../../exceptions");
@@ -30,25 +31,42 @@ async function addUnitLimitAndUnitPriceToVersionedTx(transaction, txFeeParams, s
30
31
  transaction.message = message.compileToV0Message(addressLookupTableAccounts);
31
32
  }
32
33
  async function addUnitLimitAndUnitPriceToInstructions(instructions, simUnitsConsumed, txFeeParams, connection) {
33
- if (simUnitsConsumed > 0) {
34
- const units = updateUnitLimit(simUnitsConsumed, instructions);
35
- if (txFeeParams?.solana) {
36
- const solanaTxFee = txFeeParams.solana;
37
- if (solanaTxFee === models_1.SolanaAutoTxFee) {
38
- await updateUnitPrice(instructions, connection);
39
- }
40
- else if ("pricePerUnitInMicroLamports" in solanaTxFee) {
41
- await updateUnitPrice(instructions, connection, solanaTxFee.pricePerUnitInMicroLamports);
42
- }
43
- else {
44
- const pricePerUnitInMicroLamports = (0, big_js_1.Big)(solanaTxFee.extraFeeInLamports)
45
- .div(units)
46
- .mul((0, calculation_1.toPowBase10)(6))
47
- .toFixed(0);
48
- await updateUnitPrice(instructions, connection, pricePerUnitInMicroLamports);
49
- }
50
- }
34
+ if (simUnitsConsumed <= 0)
35
+ return;
36
+ const units = updateUnitLimit(simUnitsConsumed, instructions);
37
+ const solanaFeeParams = normalizeSolanaTxFee(txFeeParams?.solana);
38
+ const solanaFee = solanaFeeParams?.fee;
39
+ // If fee is not provided, treat it as auto fee calculation.
40
+ if (!solanaFee || solanaFee === models_1.SolanaAutoTxFee) {
41
+ await updateUnitPrice(instructions, connection);
42
+ return;
51
43
  }
44
+ if ("pricePerUnitInMicroLamports" in solanaFee) {
45
+ await updateUnitPrice(instructions, connection, solanaFee.pricePerUnitInMicroLamports);
46
+ return;
47
+ }
48
+ // Extra fee in lamports -> convert to microLamports per compute unit
49
+ const pricePerUnitInMicroLamports = (0, big_js_1.Big)(solanaFee.extraFeeInLamports).div(units).mul((0, calculation_1.toPowBase10)(6)).toFixed(0);
50
+ await updateUnitPrice(instructions, connection, pricePerUnitInMicroLamports);
51
+ }
52
+ function normalizeSolanaTxFee(solana) {
53
+ if (!solana)
54
+ return undefined;
55
+ // Legacy format (non-object)
56
+ if (typeof solana !== "object") {
57
+ return { fee: solana };
58
+ }
59
+ // Legacy format (object)
60
+ if ("pricePerUnitInMicroLamports" in solana || "extraFeeInLamports" in solana) {
61
+ return { fee: solana };
62
+ }
63
+ // New format
64
+ if ("fee" in solana || "feePayer" in solana) {
65
+ return solana;
66
+ }
67
+ // This should never happen with current typings.
68
+ // If it does — someone passed an invalid object at runtime.
69
+ throw new exceptions_1.SdkError(`Invalid Solana tx fee params: ${JSON.stringify(solana)}`);
52
70
  }
53
71
  function updateUnitLimit(simUnitsConsumed, instructions) {
54
72
  const computeUnitLimitIndex = instructions.findIndex((instruction) => instruction.programId.equals(web3_js_1.ComputeBudgetProgram.programId) &&
@@ -1 +1 @@
1
- {"version":3,"file":"compute-budget.js","sourceRoot":"","sources":["../../../../../src/services/utils/sol/compute-budget.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ComputeBudgetInstruction,\n ComputeBudgetProgram,\n Connection,\n Transaction,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport { Big } from \"big.js\";\nimport { TxTooLargeError } from \"../../../exceptions\";\nimport { toPowBase10 } from \"../../../utils/calculation\";\nimport { fetchAddressLookupTableAccountsFromTx } from \"../../../utils/sol/utils\";\nimport { SolanaAutoTxFee, TxFeeParams } from \"../../models\";\n\nexport async function addUnitLimitAndUnitPriceToTx(\n transaction: Transaction,\n txFeeParams: TxFeeParams | undefined,\n solanaRpcUrl: string\n) {\n const connection = new Connection(solanaRpcUrl, \"confirmed\");\n /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */\n const simUnitsConsumed = (await connection.simulateTransaction(transaction)).value.unitsConsumed!;\n await addUnitLimitAndUnitPriceToInstructions(transaction.instructions, simUnitsConsumed, txFeeParams, connection);\n}\n\nexport async function addUnitLimitAndUnitPriceToVersionedTx(\n transaction: VersionedTransaction,\n txFeeParams: TxFeeParams | undefined,\n solanaRpcUrl: string\n) {\n const connection = new Connection(solanaRpcUrl, \"confirmed\");\n const addressLookupTableAccounts = await fetchAddressLookupTableAccountsFromTx(transaction, connection);\n const message = TransactionMessage.decompile(transaction.message, {\n addressLookupTableAccounts: addressLookupTableAccounts,\n });\n\n if (transaction.serialize().length > 1232) {\n throw new TxTooLargeError();\n }\n\n // const simUnitsConsumed = (await connection.simulateTransaction(transaction, { replaceRecentBlockhash: true })).value\n // .unitsConsumed!;\n const simUnitsConsumed = 769230; // 1000000/1.3\n\n await addUnitLimitAndUnitPriceToInstructions(message.instructions, simUnitsConsumed, txFeeParams, connection);\n\n transaction.message = message.compileToV0Message(addressLookupTableAccounts);\n}\n\nasync function addUnitLimitAndUnitPriceToInstructions(\n instructions: TransactionInstruction[],\n simUnitsConsumed: number,\n txFeeParams: TxFeeParams | undefined,\n connection: Connection\n) {\n if (simUnitsConsumed > 0) {\n const units = updateUnitLimit(simUnitsConsumed, instructions);\n if (txFeeParams?.solana) {\n const solanaTxFee = txFeeParams.solana;\n if (solanaTxFee === SolanaAutoTxFee) {\n await updateUnitPrice(instructions, connection);\n } else if (\"pricePerUnitInMicroLamports\" in solanaTxFee) {\n await updateUnitPrice(instructions, connection, solanaTxFee.pricePerUnitInMicroLamports);\n } else {\n const pricePerUnitInMicroLamports = Big(solanaTxFee.extraFeeInLamports)\n .div(units)\n .mul(toPowBase10(6))\n .toFixed(0);\n await updateUnitPrice(instructions, connection, pricePerUnitInMicroLamports);\n }\n }\n }\n}\n\nfunction updateUnitLimit(simUnitsConsumed: number, instructions: TransactionInstruction[]): string {\n const computeUnitLimitIndex = instructions.findIndex(\n (instruction) =>\n instruction.programId.equals(ComputeBudgetProgram.programId) &&\n ComputeBudgetInstruction.decodeInstructionType(instruction) === \"SetComputeUnitLimit\"\n );\n const units = Number((simUnitsConsumed * 1.3).toFixed(0));\n const computeUnitLimitInstruction = ComputeBudgetProgram.setComputeUnitLimit({\n units: units,\n });\n if (computeUnitLimitIndex >= 0) {\n instructions[computeUnitLimitIndex] = computeUnitLimitInstruction;\n } else {\n instructions.push(computeUnitLimitInstruction);\n }\n return units.toString();\n}\n\nasync function updateUnitPrice(\n instructions: TransactionInstruction[],\n connection: Connection,\n pricePerUnitInMicroLamports?: string\n): Promise<string> {\n const computeUnitPriceIndex = instructions.findIndex(\n (instruction) =>\n instruction.programId.equals(ComputeBudgetProgram.programId) &&\n ComputeBudgetInstruction.decodeInstructionType(instruction) === \"SetComputeUnitPrice\"\n );\n const unitPrice = pricePerUnitInMicroLamports\n ? BigInt(pricePerUnitInMicroLamports)\n : BigInt(await getAveragePrioritizationFee(connection));\n const computeUnitPriceInstruction = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: unitPrice,\n });\n if (computeUnitPriceIndex >= 0) {\n instructions[computeUnitPriceIndex] = computeUnitPriceInstruction;\n } else {\n instructions.push(computeUnitPriceInstruction);\n }\n return unitPrice.toString();\n}\n\nasync function getAveragePrioritizationFee(connection: Connection) {\n const prioritizationFees = await connection.getRecentPrioritizationFees();\n let sum = 0;\n for (const prioritizationFee of prioritizationFees) {\n sum += prioritizationFee.prioritizationFee;\n }\n return (sum / prioritizationFees.length).toFixed(0);\n}\n"]}
1
+ {"version":3,"file":"compute-budget.js","sourceRoot":"","sources":["../../../../../src/services/utils/sol/compute-budget.ts"],"names":[],"mappings":";;AAeA,oEASC;AAED,sFAsBC;AAgCD,oDAqBC;AArGD,6CAQyB;AACzB,mCAA6B;AAC7B,oDAAgE;AAChE,4DAAyD;AACzD,oDAAiF;AACjF,yCAA4F;AAErF,KAAK,UAAU,4BAA4B,CAChD,WAAwB,EACxB,WAAoC,EACpC,YAAoB;IAEpB,MAAM,UAAU,GAAG,IAAI,oBAAU,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAC7D,uEAAuE;IACvE,MAAM,gBAAgB,GAAG,CAAC,MAAM,UAAU,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,aAAc,CAAC;IAClG,MAAM,sCAAsC,CAAC,WAAW,CAAC,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;AACpH,CAAC;AAEM,KAAK,UAAU,qCAAqC,CACzD,WAAiC,EACjC,WAAoC,EACpC,YAAoB;IAEpB,MAAM,UAAU,GAAG,IAAI,oBAAU,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAC7D,MAAM,0BAA0B,GAAG,MAAM,IAAA,6CAAqC,EAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACxG,MAAM,OAAO,GAAG,4BAAkB,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE;QAChE,0BAA0B,EAAE,0BAA0B;KACvD,CAAC,CAAC;IAEH,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;QAC1C,MAAM,IAAI,4BAAe,EAAE,CAAC;IAC9B,CAAC;IAED,uHAAuH;IACvH,qBAAqB;IACrB,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,cAAc;IAE/C,MAAM,sCAAsC,CAAC,OAAO,CAAC,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;IAE9G,WAAW,CAAC,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC,0BAA0B,CAAC,CAAC;AAC/E,CAAC;AAED,KAAK,UAAU,sCAAsC,CACnD,YAAsC,EACtC,gBAAwB,EACxB,WAAoC,EACpC,UAAsB;IAEtB,IAAI,gBAAgB,IAAI,CAAC;QAAE,OAAO;IAElC,MAAM,KAAK,GAAG,eAAe,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;IAE9D,MAAM,eAAe,GAAG,oBAAoB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAClE,MAAM,SAAS,GAAG,eAAe,EAAE,GAAG,CAAC;IAEvC,4DAA4D;IAC5D,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,wBAAe,EAAE,CAAC;QAChD,MAAM,eAAe,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IAED,IAAI,6BAA6B,IAAI,SAAS,EAAE,CAAC;QAC/C,MAAM,eAAe,CAAC,YAAY,EAAE,UAAU,EAAE,SAAS,CAAC,2BAA2B,CAAC,CAAC;QACvF,OAAO;IACT,CAAC;IAED,qEAAqE;IACrE,MAAM,2BAA2B,GAAG,IAAA,YAAG,EAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAA,yBAAW,EAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAEhH,MAAM,eAAe,CAAC,YAAY,EAAE,UAAU,EAAE,2BAA2B,CAAC,CAAC;AAC/E,CAAC;AAED,SAAgB,oBAAoB,CAAC,MAAwC;IAC3E,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAE9B,6BAA6B;IAC7B,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IACzB,CAAC;IAED,yBAAyB;IACzB,IAAI,6BAA6B,IAAI,MAAM,IAAI,oBAAoB,IAAI,MAAM,EAAE,CAAC;QAC9E,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IACzB,CAAC;IAED,aAAa;IACb,IAAI,KAAK,IAAI,MAAM,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;QAC5C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,iDAAiD;IACjD,4DAA4D;IAC5D,MAAM,IAAI,qBAAQ,CAAC,iCAAiC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,eAAe,CAAC,gBAAwB,EAAE,YAAsC;IACvF,MAAM,qBAAqB,GAAG,YAAY,CAAC,SAAS,CAClD,CAAC,WAAW,EAAE,EAAE,CACd,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,8BAAoB,CAAC,SAAS,CAAC;QAC5D,kCAAwB,CAAC,qBAAqB,CAAC,WAAW,CAAC,KAAK,qBAAqB,CACxF,CAAC;IACF,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,gBAAgB,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,2BAA2B,GAAG,8BAAoB,CAAC,mBAAmB,CAAC;QAC3E,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;IACH,IAAI,qBAAqB,IAAI,CAAC,EAAE,CAAC;QAC/B,YAAY,CAAC,qBAAqB,CAAC,GAAG,2BAA2B,CAAC;IACpE,CAAC;SAAM,CAAC;QACN,YAAY,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC1B,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,YAAsC,EACtC,UAAsB,EACtB,2BAAoC;IAEpC,MAAM,qBAAqB,GAAG,YAAY,CAAC,SAAS,CAClD,CAAC,WAAW,EAAE,EAAE,CACd,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,8BAAoB,CAAC,SAAS,CAAC;QAC5D,kCAAwB,CAAC,qBAAqB,CAAC,WAAW,CAAC,KAAK,qBAAqB,CACxF,CAAC;IACF,MAAM,SAAS,GAAG,2BAA2B;QAC3C,CAAC,CAAC,MAAM,CAAC,2BAA2B,CAAC;QACrC,CAAC,CAAC,MAAM,CAAC,MAAM,2BAA2B,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1D,MAAM,2BAA2B,GAAG,8BAAoB,CAAC,mBAAmB,CAAC;QAC3E,aAAa,EAAE,SAAS;KACzB,CAAC,CAAC;IACH,IAAI,qBAAqB,IAAI,CAAC,EAAE,CAAC;QAC/B,YAAY,CAAC,qBAAqB,CAAC,GAAG,2BAA2B,CAAC;IACpE,CAAC;SAAM,CAAC;QACN,YAAY,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC9B,CAAC;AAED,KAAK,UAAU,2BAA2B,CAAC,UAAsB;IAC/D,MAAM,kBAAkB,GAAG,MAAM,UAAU,CAAC,2BAA2B,EAAE,CAAC;IAC1E,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,MAAM,iBAAiB,IAAI,kBAAkB,EAAE,CAAC;QACnD,GAAG,IAAI,iBAAiB,CAAC,iBAAiB,CAAC;IAC7C,CAAC;IACD,OAAO,CAAC,GAAG,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC","sourcesContent":["import {\n ComputeBudgetInstruction,\n ComputeBudgetProgram,\n Connection,\n Transaction,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport { Big } from \"big.js\";\nimport { SdkError, TxTooLargeError } from \"../../../exceptions\";\nimport { toPowBase10 } from \"../../../utils/calculation\";\nimport { fetchAddressLookupTableAccountsFromTx } from \"../../../utils/sol/utils\";\nimport { SolanaAutoTxFee, SolanaTxFee, SolanaTxFeeParams, TxFeeParams } from \"../../models\";\n\nexport async function addUnitLimitAndUnitPriceToTx(\n transaction: Transaction,\n txFeeParams: TxFeeParams | undefined,\n solanaRpcUrl: string\n) {\n const connection = new Connection(solanaRpcUrl, \"confirmed\");\n /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */\n const simUnitsConsumed = (await connection.simulateTransaction(transaction)).value.unitsConsumed!;\n await addUnitLimitAndUnitPriceToInstructions(transaction.instructions, simUnitsConsumed, txFeeParams, connection);\n}\n\nexport async function addUnitLimitAndUnitPriceToVersionedTx(\n transaction: VersionedTransaction,\n txFeeParams: TxFeeParams | undefined,\n solanaRpcUrl: string\n) {\n const connection = new Connection(solanaRpcUrl, \"confirmed\");\n const addressLookupTableAccounts = await fetchAddressLookupTableAccountsFromTx(transaction, connection);\n const message = TransactionMessage.decompile(transaction.message, {\n addressLookupTableAccounts: addressLookupTableAccounts,\n });\n\n if (transaction.serialize().length > 1232) {\n throw new TxTooLargeError();\n }\n\n // const simUnitsConsumed = (await connection.simulateTransaction(transaction, { replaceRecentBlockhash: true })).value\n // .unitsConsumed!;\n const simUnitsConsumed = 769230; // 1000000/1.3\n\n await addUnitLimitAndUnitPriceToInstructions(message.instructions, simUnitsConsumed, txFeeParams, connection);\n\n transaction.message = message.compileToV0Message(addressLookupTableAccounts);\n}\n\nasync function addUnitLimitAndUnitPriceToInstructions(\n instructions: TransactionInstruction[],\n simUnitsConsumed: number,\n txFeeParams: TxFeeParams | undefined,\n connection: Connection\n) {\n if (simUnitsConsumed <= 0) return;\n\n const units = updateUnitLimit(simUnitsConsumed, instructions);\n\n const solanaFeeParams = normalizeSolanaTxFee(txFeeParams?.solana);\n const solanaFee = solanaFeeParams?.fee;\n\n // If fee is not provided, treat it as auto fee calculation.\n if (!solanaFee || solanaFee === SolanaAutoTxFee) {\n await updateUnitPrice(instructions, connection);\n return;\n }\n\n if (\"pricePerUnitInMicroLamports\" in solanaFee) {\n await updateUnitPrice(instructions, connection, solanaFee.pricePerUnitInMicroLamports);\n return;\n }\n\n // Extra fee in lamports -> convert to microLamports per compute unit\n const pricePerUnitInMicroLamports = Big(solanaFee.extraFeeInLamports).div(units).mul(toPowBase10(6)).toFixed(0);\n\n await updateUnitPrice(instructions, connection, pricePerUnitInMicroLamports);\n}\n\nexport function normalizeSolanaTxFee(solana?: SolanaTxFee | SolanaTxFeeParams): SolanaTxFeeParams | undefined {\n if (!solana) return undefined;\n\n // Legacy format (non-object)\n if (typeof solana !== \"object\") {\n return { fee: solana };\n }\n\n // Legacy format (object)\n if (\"pricePerUnitInMicroLamports\" in solana || \"extraFeeInLamports\" in solana) {\n return { fee: solana };\n }\n\n // New format\n if (\"fee\" in solana || \"feePayer\" in solana) {\n return solana;\n }\n\n // This should never happen with current typings.\n // If it does — someone passed an invalid object at runtime.\n throw new SdkError(`Invalid Solana tx fee params: ${JSON.stringify(solana)}`);\n}\n\nfunction updateUnitLimit(simUnitsConsumed: number, instructions: TransactionInstruction[]): string {\n const computeUnitLimitIndex = instructions.findIndex(\n (instruction) =>\n instruction.programId.equals(ComputeBudgetProgram.programId) &&\n ComputeBudgetInstruction.decodeInstructionType(instruction) === \"SetComputeUnitLimit\"\n );\n const units = Number((simUnitsConsumed * 1.3).toFixed(0));\n const computeUnitLimitInstruction = ComputeBudgetProgram.setComputeUnitLimit({\n units: units,\n });\n if (computeUnitLimitIndex >= 0) {\n instructions[computeUnitLimitIndex] = computeUnitLimitInstruction;\n } else {\n instructions.push(computeUnitLimitInstruction);\n }\n return units.toString();\n}\n\nasync function updateUnitPrice(\n instructions: TransactionInstruction[],\n connection: Connection,\n pricePerUnitInMicroLamports?: string\n): Promise<string> {\n const computeUnitPriceIndex = instructions.findIndex(\n (instruction) =>\n instruction.programId.equals(ComputeBudgetProgram.programId) &&\n ComputeBudgetInstruction.decodeInstructionType(instruction) === \"SetComputeUnitPrice\"\n );\n const unitPrice = pricePerUnitInMicroLamports\n ? BigInt(pricePerUnitInMicroLamports)\n : BigInt(await getAveragePrioritizationFee(connection));\n const computeUnitPriceInstruction = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: unitPrice,\n });\n if (computeUnitPriceIndex >= 0) {\n instructions[computeUnitPriceIndex] = computeUnitPriceInstruction;\n } else {\n instructions.push(computeUnitPriceInstruction);\n }\n return unitPrice.toString();\n}\n\nasync function getAveragePrioritizationFee(connection: Connection) {\n const prioritizationFees = await connection.getRecentPrioritizationFees();\n let sum = 0;\n for (const prioritizationFee of prioritizationFees) {\n sum += prioritizationFee.prioritizationFee;\n }\n return (sum / prioritizationFees.length).toFixed(0);\n}\n"]}
@@ -1,7 +1,9 @@
1
1
  import { Program, Provider } from "@project-serum/anchor";
2
2
  import { PublicKey } from "@solana/web3.js";
3
+ import { TxFeeParams } from "../../models";
3
4
  import { TokenAccountData } from "../../models/sol";
4
5
  import { Bridge as BridgeType } from "../../models/sol/types/bridge";
6
+ export declare function getFeePayer(userAccount: PublicKey, txFeeParams?: TxFeeParams): PublicKey;
5
7
  export declare function getTokenAccountData(account: PublicKey, provider: Provider): Promise<TokenAccountData>;
6
8
  export declare function getVUsdAmount(amount: string, bridge: Program<BridgeType>, poolAccount: PublicKey): Promise<string>;
7
9
  export declare function getMessage(args: {
@@ -3,15 +3,27 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getFeePayer = getFeePayer;
6
7
  exports.getTokenAccountData = getTokenAccountData;
7
8
  exports.getVUsdAmount = getVUsdAmount;
8
9
  exports.getMessage = getMessage;
9
10
  const anchor_1 = require("@project-serum/anchor");
11
+ const web3_js_1 = require("@solana/web3.js");
10
12
  /* eslint-disable-next-line import/no-named-as-default */
11
13
  const big_js_1 = __importDefault(require("big.js"));
12
14
  const web3_1 = require("web3");
13
15
  const exceptions_1 = require("../../../exceptions");
14
16
  const calculation_1 = require("../../../utils/calculation");
17
+ const compute_budget_1 = require("./compute-budget");
18
+ function getFeePayer(userAccount, txFeeParams) {
19
+ if (txFeeParams?.solana) {
20
+ const solanaFeeParams = (0, compute_budget_1.normalizeSolanaTxFee)(txFeeParams.solana);
21
+ if (solanaFeeParams?.feePayer) {
22
+ return new web3_js_1.PublicKey(solanaFeeParams.feePayer);
23
+ }
24
+ }
25
+ return userAccount;
26
+ }
15
27
  async function getTokenAccountData(account, provider) {
16
28
  return await anchor_1.Spl.token(provider).account.token.fetch(account);
17
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/services/utils/sol/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { Program, Provider, Spl } from \"@project-serum/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\n/* eslint-disable-next-line import/no-named-as-default */\nimport Big from \"big.js\";\nimport { Web3 } from \"web3\";\nimport { InvalidTxError, SdkError } from \"../../../exceptions\";\nimport { PoolInfo } from \"../../../tokens-info\";\nimport { swapToVUsd } from \"../../../utils/calculation\";\nimport { TokenAccountData } from \"../../models/sol\";\nimport { Bridge as BridgeType } from \"../../models/sol/types/bridge\";\n\nexport async function getTokenAccountData(account: PublicKey, provider: Provider): Promise<TokenAccountData> {\n return await Spl.token(provider).account.token.fetch(account);\n}\n\nexport async function getVUsdAmount(\n amount: string,\n bridge: Program<BridgeType>,\n poolAccount: PublicKey\n): Promise<string> {\n const poolAccountInfo = await bridge.account.pool.fetch(poolAccount);\n const decimals = poolAccountInfo.decimals;\n const feeShare = Big(poolAccountInfo.feeShareBp.toString()).div(10000).toFixed();\n const poolInfo: Omit<PoolInfo, \"p\" | \"imbalance\"> = {\n aValue: poolAccountInfo.a.toString(),\n dValue: poolAccountInfo.d.toString(),\n totalLpAmount: poolAccountInfo.totalLpAmount.toString(),\n tokenBalance: poolAccountInfo.tokenBalance.toString(),\n vUsdBalance: poolAccountInfo.vUsdBalance.toString(),\n accRewardPerShareP: poolAccountInfo.accRewardPerShareP.toString(),\n };\n return swapToVUsd(amount, { decimals, feeShare }, poolInfo);\n}\n\nexport function getMessage(args: {\n amount: string;\n recipient: Buffer;\n sourceChainId: number;\n destinationChainId: number;\n receiveToken: Buffer;\n nonce: Buffer;\n chainBridge: Buffer;\n}): Buffer {\n const amount = args.amount;\n const recipient = \"0x\" + args.recipient.toString(\"hex\");\n const sourceChainId = args.sourceChainId;\n const destinationsChainId = args.destinationChainId;\n const receiveToken = \"0x\" + args.receiveToken.toString(\"hex\");\n const nonce = \"0x\" + args.nonce.toString(\"hex\");\n const messenger = 1;\n const chainBridge = \"0x\" + args.chainBridge.toString(\"hex\");\n\n const message = Web3.utils.encodePacked(\n { t: \"uint256\", v: amount },\n { t: \"bytes32\", v: recipient },\n { t: \"uint256\", v: sourceChainId },\n { t: \"bytes32\", v: receiveToken },\n { t: \"uint256\", v: nonce },\n { t: \"uint8\", v: messenger }\n );\n\n if (!message) {\n throw new SdkError(\"message cannot be undefined\");\n }\n const hash = Web3.utils.keccak256(Buffer.from(message.replace(\"0x\", \"\"), \"hex\") as any);\n\n const hashBuffer = Buffer.from(hash.replace(\"0x\", \"\"), \"hex\");\n hashBuffer[0] = sourceChainId;\n hashBuffer[1] = destinationsChainId;\n\n const messageWithSigner = Web3.utils.encodePacked(\n { t: \"bytes32\", v: \"0x\" + hashBuffer.toString(\"hex\") },\n { t: \"bytes32\", v: chainBridge }\n );\n\n if (!messageWithSigner) {\n throw new InvalidTxError(\"messageWithSigner cannot be undefined\");\n }\n\n const hashWithSigner = Web3.utils.keccak256(Buffer.from(messageWithSigner.replace(\"0x\", \"\"), \"hex\") as any);\n\n const hashWithSignerBuffer = Buffer.from(hashWithSigner.replace(\"0x\", \"\"), \"hex\");\n\n hashWithSignerBuffer[0] = hashBuffer[0];\n hashWithSignerBuffer[1] = hashBuffer[1];\n return hashWithSignerBuffer;\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/services/utils/sol/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { Program, Provider, Spl } from \"@project-serum/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\n/* eslint-disable-next-line import/no-named-as-default */\nimport Big from \"big.js\";\nimport { Web3 } from \"web3\";\nimport { InvalidTxError, SdkError } from \"../../../exceptions\";\nimport { PoolInfo } from \"../../../tokens-info\";\nimport { swapToVUsd } from \"../../../utils/calculation\";\nimport { TxFeeParams } from \"../../models\";\nimport { TokenAccountData } from \"../../models/sol\";\nimport { Bridge as BridgeType } from \"../../models/sol/types/bridge\";\nimport { normalizeSolanaTxFee } from \"./compute-budget\";\n\nexport function getFeePayer(userAccount: PublicKey, txFeeParams?: TxFeeParams): PublicKey {\n if (txFeeParams?.solana) {\n const solanaFeeParams = normalizeSolanaTxFee(txFeeParams.solana);\n if (solanaFeeParams?.feePayer) {\n return new PublicKey(solanaFeeParams.feePayer);\n }\n }\n return userAccount;\n}\n\nexport async function getTokenAccountData(account: PublicKey, provider: Provider): Promise<TokenAccountData> {\n return await Spl.token(provider).account.token.fetch(account);\n}\n\nexport async function getVUsdAmount(\n amount: string,\n bridge: Program<BridgeType>,\n poolAccount: PublicKey\n): Promise<string> {\n const poolAccountInfo = await bridge.account.pool.fetch(poolAccount);\n const decimals = poolAccountInfo.decimals;\n const feeShare = Big(poolAccountInfo.feeShareBp.toString()).div(10000).toFixed();\n const poolInfo: Omit<PoolInfo, \"p\" | \"imbalance\"> = {\n aValue: poolAccountInfo.a.toString(),\n dValue: poolAccountInfo.d.toString(),\n totalLpAmount: poolAccountInfo.totalLpAmount.toString(),\n tokenBalance: poolAccountInfo.tokenBalance.toString(),\n vUsdBalance: poolAccountInfo.vUsdBalance.toString(),\n accRewardPerShareP: poolAccountInfo.accRewardPerShareP.toString(),\n };\n return swapToVUsd(amount, { decimals, feeShare }, poolInfo);\n}\n\nexport function getMessage(args: {\n amount: string;\n recipient: Buffer;\n sourceChainId: number;\n destinationChainId: number;\n receiveToken: Buffer;\n nonce: Buffer;\n chainBridge: Buffer;\n}): Buffer {\n const amount = args.amount;\n const recipient = \"0x\" + args.recipient.toString(\"hex\");\n const sourceChainId = args.sourceChainId;\n const destinationsChainId = args.destinationChainId;\n const receiveToken = \"0x\" + args.receiveToken.toString(\"hex\");\n const nonce = \"0x\" + args.nonce.toString(\"hex\");\n const messenger = 1;\n const chainBridge = \"0x\" + args.chainBridge.toString(\"hex\");\n\n const message = Web3.utils.encodePacked(\n { t: \"uint256\", v: amount },\n { t: \"bytes32\", v: recipient },\n { t: \"uint256\", v: sourceChainId },\n { t: \"bytes32\", v: receiveToken },\n { t: \"uint256\", v: nonce },\n { t: \"uint8\", v: messenger }\n );\n\n if (!message) {\n throw new SdkError(\"message cannot be undefined\");\n }\n const hash = Web3.utils.keccak256(Buffer.from(message.replace(\"0x\", \"\"), \"hex\") as any);\n\n const hashBuffer = Buffer.from(hash.replace(\"0x\", \"\"), \"hex\");\n hashBuffer[0] = sourceChainId;\n hashBuffer[1] = destinationsChainId;\n\n const messageWithSigner = Web3.utils.encodePacked(\n { t: \"bytes32\", v: \"0x\" + hashBuffer.toString(\"hex\") },\n { t: \"bytes32\", v: chainBridge }\n );\n\n if (!messageWithSigner) {\n throw new InvalidTxError(\"messageWithSigner cannot be undefined\");\n }\n\n const hashWithSigner = Web3.utils.keccak256(Buffer.from(messageWithSigner.replace(\"0x\", \"\"), \"hex\") as any);\n\n const hashWithSignerBuffer = Buffer.from(hashWithSigner.replace(\"0x\", \"\"), \"hex\");\n\n hashWithSignerBuffer[0] = hashBuffer[0];\n hashWithSignerBuffer[1] = hashBuffer[1];\n return hashWithSignerBuffer;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import { TokenWithChainDetails } from "../../../tokens-info";
2
+ export declare function getTokenName(token: TokenWithChainDetails): string;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTokenName = getTokenName;
4
+ const exceptions_1 = require("../../../exceptions");
5
+ function getTokenName(token) {
6
+ if (!token.originTokenAddress) {
7
+ throw new exceptions_1.SdkError("STX token must contain 'originTokenAddress'");
8
+ }
9
+ const [_address, name] = token.originTokenAddress.split("::");
10
+ if (!name) {
11
+ throw new exceptions_1.SdkError("STX token must contain 'originTokenAddress' ends with '::<tokenName>'");
12
+ }
13
+ return name;
14
+ }
15
+ //# sourceMappingURL=get-token-name.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-token-name.js","sourceRoot":"","sources":["../../../../../src/services/utils/stx/get-token-name.ts"],"names":[],"mappings":";;AAGA,oCASC;AAZD,oDAA+C;AAG/C,SAAgB,YAAY,CAAC,KAA4B;IACvD,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC;QAC9B,MAAM,IAAI,qBAAQ,CAAC,6CAA6C,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9D,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,qBAAQ,CAAC,uEAAuE,CAAC,CAAC;IAC9F,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import { SdkError } from \"../../../exceptions\";\nimport { TokenWithChainDetails } from \"../../../tokens-info\";\n\nexport function getTokenName(token: TokenWithChainDetails): string {\n if (!token.originTokenAddress) {\n throw new SdkError(\"STX token must contain 'originTokenAddress'\");\n }\n const [_address, name] = token.originTokenAddress.split(\"::\");\n if (!name) {\n throw new SdkError(\"STX token must contain 'originTokenAddress' ends with '::<tokenName>'\");\n }\n return name;\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import { FungibleComparator, FungiblePostCondition, StxPostCondition } from "@stacks/transactions";
2
+ export declare function getFungiblePostCondition(amount: string | bigint | number, condition: `${FungibleComparator}`, accountAddress: string, tokenAddress: string, tokenName: string): FungiblePostCondition;
3
+ export declare function getStxPostCondition(amount: string | bigint | number, condition: `${FungibleComparator}`, accountAddress: string): StxPostCondition;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getFungiblePostCondition = getFungiblePostCondition;
4
+ exports.getStxPostCondition = getStxPostCondition;
5
+ const transactions_1 = require("@stacks/transactions");
6
+ function getFungiblePostCondition(amount, condition, accountAddress, tokenAddress, tokenName) {
7
+ const [assetAddress, assetContractName] = (0, transactions_1.parseContractId)(tokenAddress);
8
+ if (!assetAddress || !assetContractName) {
9
+ throw new Error(`Unable to parse stx token ${tokenAddress}`);
10
+ }
11
+ return {
12
+ type: "ft-postcondition",
13
+ address: accountAddress,
14
+ condition,
15
+ asset: `${assetAddress}.${assetContractName}::${tokenName}`,
16
+ amount,
17
+ };
18
+ }
19
+ function getStxPostCondition(amount, condition, accountAddress) {
20
+ return {
21
+ type: "stx-postcondition",
22
+ address: accountAddress,
23
+ condition,
24
+ amount,
25
+ };
26
+ }
27
+ //# sourceMappingURL=post-conditions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-conditions.js","sourceRoot":"","sources":["../../../../../src/services/utils/stx/post-conditions.ts"],"names":[],"mappings":";;AAQA,4DAkBC;AAED,kDAWC;AAvCD,uDAM8B;AAE9B,SAAgB,wBAAwB,CACtC,MAAgC,EAChC,SAAkC,EAClC,cAAsB,EACtB,YAAoB,EACpB,SAAiB;IAEjB,MAAM,CAAC,YAAY,EAAE,iBAAiB,CAAC,GAAG,IAAA,8BAAe,EAAC,YAAgC,CAAC,CAAC;IAC5F,IAAI,CAAC,YAAY,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,6BAA6B,YAAY,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO;QACL,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,cAAc;QACvB,SAAS;QACT,KAAK,EAAE,GAAG,YAAY,IAAI,iBAAiB,KAAK,SAAS,EAAE;QAC3D,MAAM;KACP,CAAC;AACJ,CAAC;AAED,SAAgB,mBAAmB,CACjC,MAAgC,EAChC,SAAkC,EAClC,cAAsB;IAEtB,OAAO;QACL,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,cAAc;QACvB,SAAS;QACT,MAAM;KACP,CAAC;AACJ,CAAC","sourcesContent":["import {\n ContractIdString,\n FungibleComparator,\n FungiblePostCondition,\n parseContractId,\n StxPostCondition,\n} from \"@stacks/transactions\";\n\nexport function getFungiblePostCondition(\n amount: string | bigint | number,\n condition: `${FungibleComparator}`,\n accountAddress: string,\n tokenAddress: string,\n tokenName: string\n): FungiblePostCondition {\n const [assetAddress, assetContractName] = parseContractId(tokenAddress as ContractIdString);\n if (!assetAddress || !assetContractName) {\n throw new Error(`Unable to parse stx token ${tokenAddress}`);\n }\n return {\n type: \"ft-postcondition\",\n address: accountAddress,\n condition,\n asset: `${assetAddress}.${assetContractName}::${tokenName}`,\n amount,\n };\n}\n\nexport function getStxPostCondition(\n amount: string | bigint | number,\n condition: `${FungibleComparator}`,\n accountAddress: string\n): StxPostCondition {\n return {\n type: \"stx-postcondition\",\n address: accountAddress,\n condition,\n amount,\n };\n}\n"]}
@@ -41,6 +41,7 @@ class DefaultYieldService {
41
41
  apr30d: "",
42
42
  apr7d: "",
43
43
  bridgeId: chainData.bridgeId,
44
+ paddingUtilId: chainData.paddingUtilId,
44
45
  bridgeAddress: chainData.bridgeAddress,
45
46
  chainId: chainData.chainId,
46
47
  chainName: chainData.name,
@@ -132,6 +133,9 @@ function getChainYieldService(chainSymbol, api, nodeRpcUrlsConfig, ownerAddress,
132
133
  case index_1.ChainType.ALG: {
133
134
  throw new exceptions_1.MethodNotSupportedError();
134
135
  }
136
+ case index_1.ChainType.STX: {
137
+ throw new exceptions_1.MethodNotSupportedError();
138
+ }
135
139
  }
136
140
  }
137
141
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/services/yield/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { TronWeb } from \"tronweb\";\nimport { FMT_BYTES, FMT_NUMBER, Web3 } from \"web3\";\nimport { Chains } from \"../../chains\";\nimport { AllbridgeCoreClient } from \"../../client/core-api/core-client-base\";\nimport { AllbridgeCoreClientFiltered } from \"../../client/core-api/core-client-filtered\";\nimport { MethodNotSupportedError } from \"../../exceptions\";\nimport { AllbridgeCoreSdkOptions, ChainType, EssentialWeb3, TokenWithChainDetails } from \"../../index\";\nimport { convertIntAmountToFloat } from \"../../utils/calculation\";\nimport { SYSTEM_PRECISION } from \"../../utils/calculation/constants\";\nimport { validateAmountDecimals, validateAmountGtZero } from \"../../utils/utils\";\nimport { NodeRpcUrlsConfig } from \"../index\";\nimport { Provider } from \"../models\";\nimport { TokenService } from \"../token\";\nimport { EvmYieldService } from \"./evm\";\nimport {\n ChainYieldService,\n CYDToken,\n TokenWithChainDetailsYield,\n YieldBalanceParams,\n YieldCheckAllowanceParams,\n YieldGetAllowanceParams,\n YieldGetEstimatedAmountOnDepositParams,\n YieldGetWithdrawProportionAmountParams,\n YieldWithdrawAmount,\n} from \"./models\";\nimport { DefaultRawYieldTransactionBuilder, RawYieldTransactionBuilder } from \"./raw-yield-transaction-builder\";\nimport { TronYieldService } from \"./trx\";\nimport { isYieldSupported } from \"./validations\";\n\nexport interface YieldService {\n rawTxBuilder: RawYieldTransactionBuilder;\n\n /**\n * Returns a list of supported {@link CYDToken}.\n */\n getCYDTokens(): Promise<CYDToken[]>;\n\n /**\n * Get amount of tokens approved for Yield\n * @param provider - will be used to access the network\n * @param params See {@link YieldGetAllowanceParams}\n * @returns the amount of approved tokens\n */\n getAllowance(params: YieldGetAllowanceParams, provider?: Provider): Promise<string>;\n\n /**\n * Check if the amount of approved tokens is enough\n * @param params See {@link YieldCheckAllowanceParams}\n * @param provider - will be used to access the network\n * @returns true if the amount of approved tokens is enough to make a transfer\n */\n checkAllowance(params: YieldCheckAllowanceParams, provider?: Provider): Promise<boolean>;\n\n /**\n * Get token balance\n * @param params\n * @param provider\n * @returns Token balance\n */\n balanceOf(params: YieldBalanceParams, provider?: Provider): Promise<string>;\n\n /**\n * Calculates the amount of CYD tokens that will be deposited\n * @param params - will be used to access the network\n * @param provider - will be used to access the network\n * @returns amount\n */\n getEstimatedAmountOnDeposit(params: YieldGetEstimatedAmountOnDepositParams, provider?: Provider): Promise<string>;\n\n /**\n * Calculates the amounts of tokens ({@link YieldWithdrawAmount}) will be withdrawn\n * @param params\n * @param provider - will be used to access the network\n * @returns amounts\n */\n getWithdrawAmounts(\n params: YieldGetWithdrawProportionAmountParams,\n provider?: Provider\n ): Promise<YieldWithdrawAmount[]>;\n}\n\nexport class DefaultYieldService implements YieldService {\n public rawTxBuilder: RawYieldTransactionBuilder;\n\n constructor(\n private api: AllbridgeCoreClientFiltered,\n private nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n private params: AllbridgeCoreSdkOptions,\n private tokenService: TokenService\n ) {\n this.rawTxBuilder = new DefaultRawYieldTransactionBuilder(api, nodeRpcUrlsConfig, params, tokenService);\n }\n\n async getCYDTokens(): Promise<CYDToken[]> {\n const result: CYDToken[] = [];\n const chainMap = await this.api.getChainDetailsMap(\"pool\");\n\n Object.values(chainMap).forEach((chainData) => {\n if (chainData.yieldAddress) {\n const cydToken = chainData.tokens.find((t) => t.tokenAddress === chainData.yieldAddress);\n const tokens: TokenWithChainDetailsYield[] = chainData.tokens.filter(isYieldSupported);\n if (tokens.length > 0) {\n const cydDefined: TokenWithChainDetails = cydToken ?? {\n allbridgeChainId: chainData.allbridgeChainId,\n apr: \"\",\n apr30d: \"\",\n apr7d: \"\",\n bridgeId: chainData.bridgeId,\n bridgeAddress: chainData.bridgeAddress,\n chainId: chainData.chainId,\n chainName: chainData.name,\n chainSymbol: chainData.chainSymbol,\n chainType: chainData.chainType,\n confirmations: chainData.confirmations,\n decimals: 3,\n feeShare: \"\",\n lpRate: \"\",\n name: \"Core Yield\",\n poolAddress: \"\",\n symbol: \"CYD\",\n tokenAddress: chainData.yieldAddress,\n transferTime: {},\n txCostAmount: { maxAmount: \"0\", swap: \"0\", transfer: \"0\" },\n yieldAddress: chainData.yieldAddress,\n };\n result.push({\n ...cydDefined,\n yieldAddress: chainData.yieldAddress,\n tokens: tokens,\n });\n }\n }\n });\n\n return result;\n }\n\n async getAllowance(params: YieldGetAllowanceParams, provider?: Provider): Promise<string> {\n return await this.tokenService.getAllowance({ ...params, spender: params.token.yieldAddress }, provider);\n }\n\n async checkAllowance(params: YieldCheckAllowanceParams, provider?: Provider): Promise<boolean> {\n return this.tokenService.checkAllowance({ ...params, spender: params.token.yieldAddress }, provider);\n }\n\n async balanceOf(params: YieldBalanceParams, provider?: Provider): Promise<string> {\n return getChainYieldService(\n params.token.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n params.owner,\n provider\n ).balanceOf(params);\n }\n\n async getEstimatedAmountOnDeposit(\n params: YieldGetEstimatedAmountOnDepositParams,\n provider?: Provider\n ): Promise<string> {\n validateAmountGtZero(params.amount);\n validateAmountDecimals(\"amount\", params.amount, params.token.decimals);\n return getChainYieldService(\n params.token.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n params.token.yieldAddress,\n provider\n ).getEstimatedAmountOnDeposit(params);\n }\n\n async getWithdrawAmounts(\n params: YieldGetWithdrawProportionAmountParams,\n provider?: Provider\n ): Promise<YieldWithdrawAmount[]> {\n validateAmountGtZero(params.amount);\n validateAmountDecimals(\"amount\", params.amount, SYSTEM_PRECISION);\n const proportionAmounts = await getChainYieldService(\n params.cydToken.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n params.owner,\n provider\n ).getWithdrawProportionAmount(params);\n return params.cydToken.tokens\n .filter((token) => proportionAmounts[token.yieldId] !== undefined)\n .map((token) => ({\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n amount: convertIntAmountToFloat(proportionAmounts[token.yieldId]!, token.decimals).toFixed(),\n token: token,\n }));\n }\n}\n\nexport function getChainYieldService(\n chainSymbol: string,\n api: AllbridgeCoreClient,\n nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n ownerAddress: string,\n provider?: Provider\n): ChainYieldService {\n switch (Chains.getChainProperty(chainSymbol).chainType) {\n case ChainType.EVM: {\n if (provider) {\n return new EvmYieldService(provider as EssentialWeb3, api);\n } else {\n const nodeRpcUrl = nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n const web3 = new Web3(nodeRpcUrl);\n web3.defaultReturnFormat = { number: FMT_NUMBER.STR, bytes: FMT_BYTES.HEX };\n return new EvmYieldService(web3, api);\n }\n }\n case ChainType.TRX: {\n if (provider) {\n return new TronYieldService(provider as TronWeb, api);\n } else {\n const nodeRpcUrl = nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n const tronWeb = new TronWeb({ fullHost: nodeRpcUrl });\n tronWeb.setAddress(ownerAddress);\n return new TronYieldService(tronWeb, api);\n }\n }\n case ChainType.SOLANA: {\n throw new MethodNotSupportedError();\n }\n case ChainType.SRB: {\n throw new MethodNotSupportedError();\n }\n case ChainType.SUI: {\n throw new MethodNotSupportedError();\n }\n case ChainType.ALG: {\n throw new MethodNotSupportedError();\n }\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/services/yield/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { TronWeb } from \"tronweb\";\nimport { FMT_BYTES, FMT_NUMBER, Web3 } from \"web3\";\nimport { Chains } from \"../../chains\";\nimport { AllbridgeCoreClient } from \"../../client/core-api/core-client-base\";\nimport { AllbridgeCoreClientFiltered } from \"../../client/core-api/core-client-filtered\";\nimport { MethodNotSupportedError } from \"../../exceptions\";\nimport { AllbridgeCoreSdkOptions, ChainType, EssentialWeb3, TokenWithChainDetails } from \"../../index\";\nimport { convertIntAmountToFloat } from \"../../utils/calculation\";\nimport { SYSTEM_PRECISION } from \"../../utils/calculation/constants\";\nimport { validateAmountDecimals, validateAmountGtZero } from \"../../utils/utils\";\nimport { NodeRpcUrlsConfig } from \"../index\";\nimport { Provider } from \"../models\";\nimport { TokenService } from \"../token\";\nimport { EvmYieldService } from \"./evm\";\nimport {\n ChainYieldService,\n CYDToken,\n TokenWithChainDetailsYield,\n YieldBalanceParams,\n YieldCheckAllowanceParams,\n YieldGetAllowanceParams,\n YieldGetEstimatedAmountOnDepositParams,\n YieldGetWithdrawProportionAmountParams,\n YieldWithdrawAmount,\n} from \"./models\";\nimport { DefaultRawYieldTransactionBuilder, RawYieldTransactionBuilder } from \"./raw-yield-transaction-builder\";\nimport { TronYieldService } from \"./trx\";\nimport { isYieldSupported } from \"./validations\";\n\nexport interface YieldService {\n rawTxBuilder: RawYieldTransactionBuilder;\n\n /**\n * Returns a list of supported {@link CYDToken}.\n */\n getCYDTokens(): Promise<CYDToken[]>;\n\n /**\n * Get amount of tokens approved for Yield\n * @param provider - will be used to access the network\n * @param params See {@link YieldGetAllowanceParams}\n * @returns the amount of approved tokens\n */\n getAllowance(params: YieldGetAllowanceParams, provider?: Provider): Promise<string>;\n\n /**\n * Check if the amount of approved tokens is enough\n * @param params See {@link YieldCheckAllowanceParams}\n * @param provider - will be used to access the network\n * @returns true if the amount of approved tokens is enough to make a transfer\n */\n checkAllowance(params: YieldCheckAllowanceParams, provider?: Provider): Promise<boolean>;\n\n /**\n * Get token balance\n * @param params\n * @param provider\n * @returns Token balance\n */\n balanceOf(params: YieldBalanceParams, provider?: Provider): Promise<string>;\n\n /**\n * Calculates the amount of CYD tokens that will be deposited\n * @param params - will be used to access the network\n * @param provider - will be used to access the network\n * @returns amount\n */\n getEstimatedAmountOnDeposit(params: YieldGetEstimatedAmountOnDepositParams, provider?: Provider): Promise<string>;\n\n /**\n * Calculates the amounts of tokens ({@link YieldWithdrawAmount}) will be withdrawn\n * @param params\n * @param provider - will be used to access the network\n * @returns amounts\n */\n getWithdrawAmounts(\n params: YieldGetWithdrawProportionAmountParams,\n provider?: Provider\n ): Promise<YieldWithdrawAmount[]>;\n}\n\nexport class DefaultYieldService implements YieldService {\n public rawTxBuilder: RawYieldTransactionBuilder;\n\n constructor(\n private api: AllbridgeCoreClientFiltered,\n private nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n private params: AllbridgeCoreSdkOptions,\n private tokenService: TokenService\n ) {\n this.rawTxBuilder = new DefaultRawYieldTransactionBuilder(api, nodeRpcUrlsConfig, params, tokenService);\n }\n\n async getCYDTokens(): Promise<CYDToken[]> {\n const result: CYDToken[] = [];\n const chainMap = await this.api.getChainDetailsMap(\"pool\");\n\n Object.values(chainMap).forEach((chainData) => {\n if (chainData.yieldAddress) {\n const cydToken = chainData.tokens.find((t) => t.tokenAddress === chainData.yieldAddress);\n const tokens: TokenWithChainDetailsYield[] = chainData.tokens.filter(isYieldSupported);\n if (tokens.length > 0) {\n const cydDefined: TokenWithChainDetails = cydToken ?? {\n allbridgeChainId: chainData.allbridgeChainId,\n apr: \"\",\n apr30d: \"\",\n apr7d: \"\",\n bridgeId: chainData.bridgeId,\n paddingUtilId: chainData.paddingUtilId,\n bridgeAddress: chainData.bridgeAddress,\n chainId: chainData.chainId,\n chainName: chainData.name,\n chainSymbol: chainData.chainSymbol,\n chainType: chainData.chainType,\n confirmations: chainData.confirmations,\n decimals: 3,\n feeShare: \"\",\n lpRate: \"\",\n name: \"Core Yield\",\n poolAddress: \"\",\n symbol: \"CYD\",\n tokenAddress: chainData.yieldAddress,\n transferTime: {},\n txCostAmount: { maxAmount: \"0\", swap: \"0\", transfer: \"0\" },\n yieldAddress: chainData.yieldAddress,\n };\n result.push({\n ...cydDefined,\n yieldAddress: chainData.yieldAddress,\n tokens: tokens,\n });\n }\n }\n });\n\n return result;\n }\n\n async getAllowance(params: YieldGetAllowanceParams, provider?: Provider): Promise<string> {\n return await this.tokenService.getAllowance({ ...params, spender: params.token.yieldAddress }, provider);\n }\n\n async checkAllowance(params: YieldCheckAllowanceParams, provider?: Provider): Promise<boolean> {\n return this.tokenService.checkAllowance({ ...params, spender: params.token.yieldAddress }, provider);\n }\n\n async balanceOf(params: YieldBalanceParams, provider?: Provider): Promise<string> {\n return getChainYieldService(\n params.token.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n params.owner,\n provider\n ).balanceOf(params);\n }\n\n async getEstimatedAmountOnDeposit(\n params: YieldGetEstimatedAmountOnDepositParams,\n provider?: Provider\n ): Promise<string> {\n validateAmountGtZero(params.amount);\n validateAmountDecimals(\"amount\", params.amount, params.token.decimals);\n return getChainYieldService(\n params.token.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n params.token.yieldAddress,\n provider\n ).getEstimatedAmountOnDeposit(params);\n }\n\n async getWithdrawAmounts(\n params: YieldGetWithdrawProportionAmountParams,\n provider?: Provider\n ): Promise<YieldWithdrawAmount[]> {\n validateAmountGtZero(params.amount);\n validateAmountDecimals(\"amount\", params.amount, SYSTEM_PRECISION);\n const proportionAmounts = await getChainYieldService(\n params.cydToken.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n params.owner,\n provider\n ).getWithdrawProportionAmount(params);\n return params.cydToken.tokens\n .filter((token) => proportionAmounts[token.yieldId] !== undefined)\n .map((token) => ({\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n amount: convertIntAmountToFloat(proportionAmounts[token.yieldId]!, token.decimals).toFixed(),\n token: token,\n }));\n }\n}\n\nexport function getChainYieldService(\n chainSymbol: string,\n api: AllbridgeCoreClient,\n nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n ownerAddress: string,\n provider?: Provider\n): ChainYieldService {\n switch (Chains.getChainProperty(chainSymbol).chainType) {\n case ChainType.EVM: {\n if (provider) {\n return new EvmYieldService(provider as EssentialWeb3, api);\n } else {\n const nodeRpcUrl = nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n const web3 = new Web3(nodeRpcUrl);\n web3.defaultReturnFormat = { number: FMT_NUMBER.STR, bytes: FMT_BYTES.HEX };\n return new EvmYieldService(web3, api);\n }\n }\n case ChainType.TRX: {\n if (provider) {\n return new TronYieldService(provider as TronWeb, api);\n } else {\n const nodeRpcUrl = nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n const tronWeb = new TronWeb({ fullHost: nodeRpcUrl });\n tronWeb.setAddress(ownerAddress);\n return new TronYieldService(tronWeb, api);\n }\n }\n case ChainType.SOLANA: {\n throw new MethodNotSupportedError();\n }\n case ChainType.SRB: {\n throw new MethodNotSupportedError();\n }\n case ChainType.SUI: {\n throw new MethodNotSupportedError();\n }\n case ChainType.ALG: {\n throw new MethodNotSupportedError();\n }\n case ChainType.STX: {\n throw new MethodNotSupportedError();\n }\n }\n}\n"]}
@@ -9,6 +9,17 @@ import { Messenger } from "../client/core-api/core-api.model";
9
9
  */
10
10
  export type ChainDetailsMap = Record<string, ChainDetailsWithTokens>;
11
11
  export type ChainDetailsMapWithFlags = Record<string, ChainDetailsWithTokensWithFlags>;
12
+ export interface AbrPayerChainInfo {
13
+ /**
14
+ * ABR proxy for paying fees with ABR
15
+ */
16
+ payerAddress: string;
17
+ abrToken: TokenCoreFields;
18
+ /**
19
+ * Availability to pay by abr
20
+ */
21
+ payerAvailability: AbrPayerAvailability;
22
+ }
12
23
  /**
13
24
  * Contains some blockchain details
14
25
  */
@@ -21,6 +32,10 @@ export interface ChainDetails extends BasicChainProperties {
21
32
  * Algo Bridge appId
22
33
  */
23
34
  bridgeId?: string;
35
+ /**
36
+ * Algo Padding appId
37
+ */
38
+ paddingUtilId?: string;
24
39
  /**
25
40
  * Bridge contract address
26
41
  */
@@ -34,6 +49,10 @@ export interface ChainDetails extends BasicChainProperties {
34
49
  * Yield contract address
35
50
  */
36
51
  yieldAddress?: string;
52
+ /**
53
+ * ABR payer chain info
54
+ */
55
+ abrPayer?: AbrPayerChainInfo;
37
56
  /**
38
57
  * Average transfer time to other blockchains
39
58
  */
@@ -187,6 +206,7 @@ export interface TokenWithChainDetails extends Token, Omit<ChainDetails, "name">
187
206
  */
188
207
  chainName: string;
189
208
  }
209
+ export type TokenCoreFields = Pick<TokenWithChainDetails, "tokenAddress" | "chainSymbol" | "decimals" | "originTokenAddress">;
190
210
  export interface TokenWithChainDetailsWithFlags extends TokenWithChainDetails {
191
211
  flags: {
192
212
  swap: boolean;
@@ -230,6 +250,7 @@ export interface PoolInfo {
230
250
  */
231
251
  imbalance: string;
232
252
  }
253
+ export type AbrPayerAvailability = Partial<Record<Messenger, boolean>>;
233
254
  /**
234
255
  * Type representing transfer times for various blockchain chains.
235
256
  *
@@ -1 +1 @@
1
- {"version":3,"file":"tokens-info.model.js","sourceRoot":"","sources":["../../../src/tokens-info/tokens-info.model.ts"],"names":[],"mappings":"","sourcesContent":["import { BasicChainProperties } from \"../chains/models\";\nimport { Messenger } from \"../client/core-api/core-api.model\";\n\n/**\n * Type representing a map of blockchain chain symbols to their corresponding details, including token information.\n *\n * @typedef {Record<string, ChainDetailsWithTokens>} ChainDetailsMap\n * @property {string} chainSymbol - The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n * @property {ChainDetailsWithTokens} chainDetails - The detailed information of the specified chain, including token information.\n */\nexport type ChainDetailsMap = Record<string, ChainDetailsWithTokens>;\n\nexport type ChainDetailsMapWithFlags = Record<string, ChainDetailsWithTokensWithFlags>;\n\n/**\n * Contains some blockchain details\n */\nexport interface ChainDetails extends BasicChainProperties {\n /**\n * Allbridge's Id\n */\n allbridgeChainId: number;\n /**\n * Algo Bridge appId\n */\n bridgeId?: string;\n /**\n * Bridge contract address\n */\n bridgeAddress: string;\n /**\n * OFT Bridge contract address\n * Optional. Defined if the chain supports OFT\n */\n oftBridgeAddress?: string;\n /**\n * Yield contract address\n */\n yieldAddress?: string;\n /**\n * Average transfer time to other blockchains\n */\n transferTime: TransferTime;\n /**\n * Transfers costs\n */\n txCostAmount: TxCostAmount;\n /**\n * Number of confirmations required\n */\n confirmations: number;\n /**\n * Sui addresses\n * Optional. Defined for SUI\n */\n suiAddresses?: SuiAddresses;\n}\n\n/**\n * Contains tokens list\n */\nexport interface ChainDetailsWithTokens extends ChainDetails {\n /**\n * Tokens\n */\n tokens: TokenWithChainDetails[];\n}\n\n/**\n * Contains tokens list\n */\nexport interface ChainDetailsWithTokensWithFlags extends ChainDetails {\n /**\n * Tokens\n */\n tokens: TokenWithChainDetailsWithFlags[];\n}\n\n/**\n * Contains token information\n */\nexport interface Token {\n /**\n * Token symbol\n */\n symbol: string;\n /**\n * Token name\n */\n name: string;\n /**\n * Token decimals\n */\n decimals: number;\n /**\n * Token pool address\n */\n poolAddress: string;\n /**\n * Token address\n */\n tokenAddress: string;\n /**\n * Token origin address\n */\n originTokenAddress?: string;\n /**\n * Token CCTP address</br>\n * Optional. Defined if CCTP supported by token\n */\n cctpAddress?: string;\n /**\n * Token CCTP V2 address</br>\n * Optional. Defined if CCTP supported by token\n */\n cctpFeeShare?: string;\n /**\n * Token CCTP address</br>\n * Optional. Defined if CCTP supported by token\n */\n cctpV2Address?: string;\n /**\n * Token CCTP V2 address</br>\n * Optional. Defined if CCTP supported by token\n */\n cctpV2FeeShare?: string;\n /**\n * Internal identifier for the same token across different chains.\n *\n * Used to link representations of a token deployed on multiple networks (e.g., Ethereum, BSC).\n * Tokens with the same `oftId` are considered to be equivalent.\n *\n * Optional. Defined if OFT supported by token\n */\n oftId?: string;\n /**\n * Token fee share\n */\n feeShare: string;\n /**\n * @Deprecated use {@link apr7d}</br>\n * Token APR\n */\n apr: string;\n /**\n * Token APR based on last 7 days\n */\n apr7d: string;\n /**\n * Token APR based on last 30 days\n */\n apr30d: string;\n /**\n * Token LP rate\n */\n lpRate: string;\n\n yieldId?: number;\n /**\n * Sui addresses\n * Optional. Defined for SUI\n */\n suiAddresses?: SuiAddresses;\n}\n\nexport interface SuiAddresses {\n bridgeAddress: string;\n bridgeAddressOrigin?: string;\n bridgeObjectAddress: string;\n\n allbridgeMessengerAddress: string;\n allbridgeMessengerAddressOrigin?: string;\n allbridgeMessengerObjectAddress: string;\n\n gasOracleAddress: string;\n gasOracleAddressOrigin?: string;\n gasOracleObjectAddress: string;\n\n utilsAddress: string;\n\n wormholeMessengerAddress: string;\n wormholeMessengerAddressOrigin?: string;\n wormholeMessengerObjectAddress: string;\n wormholeStateObjectAddress: string;\n\n cctpAddress: string;\n cctpAddressOrigin?: string;\n cctpObjectAddress: string;\n\n cctpDenyListObjectAddress: string;\n cctpMessageTransmitterStateObjectAddress: string;\n cctpTokenMessengerMinterStateObjectAddress: string;\n cctpTreasuryObjectAddress: string;\n}\n\n/**\n * General Token Interface\n */\nexport interface TokenWithChainDetails extends Token, Omit<ChainDetails, \"name\"> {\n /**\n * Blockchain network name\n */\n chainName: string;\n}\n\nexport interface TokenWithChainDetailsWithFlags extends TokenWithChainDetails {\n flags: { swap: boolean; pool: boolean };\n}\n\n/**\n * General Pool Interface\n */\nexport interface PoolInfo {\n /**\n * Pool A value\n */\n aValue: string;\n /**\n * Pool D value\n */\n dValue: string;\n /**\n * Pool token balance\n */\n tokenBalance: string;\n /**\n * Pool virtual USD balance\n */\n vUsdBalance: string;\n /**\n * Pool total liquidity amount\n */\n totalLpAmount: string;\n /**\n * Current accumulated reward per share shifted by P bits\n */\n accRewardPerShareP: string;\n /**\n * P value, needed for accRewardPerShareP\n */\n p: number;\n /**\n * Pool imbalance\n */\n imbalance: string;\n}\n\n/**\n * Type representing transfer times for various blockchain chains.\n *\n * @typedef {Record<string, MessengerTransferTime>} TransferTime\n * @property {string} chainSymbol - The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n * @property {MessengerTransferTime} transferTime - The average transfer time details for the specified chain.\n */\nexport type TransferTime = Record<string, MessengerTransferTime>;\n\n/**\n * Contains Avg transaction time withing different messenger protocols\n */\nexport type MessengerTransferTime = {\n [messenger in Messenger]?: number;\n};\n\nexport interface PoolKeyObject {\n chainSymbol: string;\n poolAddress: string;\n}\n\n/**\n * Contains transfer costs\n */\nexport interface TxCostAmount {\n /**\n * The maximum gas amount that can be received as extra gas for one transfer\n */\n maxAmount: string;\n /**\n * Swap cost\n */\n swap: string;\n /**\n * Transfer cost\n */\n transfer: string;\n}\n\nexport type PoolInfoMap = Record<string, PoolInfo>;\n"]}
1
+ {"version":3,"file":"tokens-info.model.js","sourceRoot":"","sources":["../../../src/tokens-info/tokens-info.model.ts"],"names":[],"mappings":"","sourcesContent":["import { BasicChainProperties } from \"../chains/models\";\nimport { Messenger } from \"../client/core-api/core-api.model\";\n\n/**\n * Type representing a map of blockchain chain symbols to their corresponding details, including token information.\n *\n * @typedef {Record<string, ChainDetailsWithTokens>} ChainDetailsMap\n * @property {string} chainSymbol - The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n * @property {ChainDetailsWithTokens} chainDetails - The detailed information of the specified chain, including token information.\n */\nexport type ChainDetailsMap = Record<string, ChainDetailsWithTokens>;\n\nexport type ChainDetailsMapWithFlags = Record<string, ChainDetailsWithTokensWithFlags>;\n\nexport interface AbrPayerChainInfo {\n /**\n * ABR proxy for paying fees with ABR\n */\n payerAddress: string;\n abrToken: TokenCoreFields;\n /**\n * Availability to pay by abr\n */\n payerAvailability: AbrPayerAvailability;\n}\n\n/**\n * Contains some blockchain details\n */\nexport interface ChainDetails extends BasicChainProperties {\n /**\n * Allbridge's Id\n */\n allbridgeChainId: number;\n /**\n * Algo Bridge appId\n */\n bridgeId?: string;\n /**\n * Algo Padding appId\n */\n paddingUtilId?: string;\n /**\n * Bridge contract address\n */\n bridgeAddress: string;\n /**\n * OFT Bridge contract address\n * Optional. Defined if the chain supports OFT\n */\n oftBridgeAddress?: string;\n /**\n * Yield contract address\n */\n yieldAddress?: string;\n /**\n * ABR payer chain info\n */\n abrPayer?: AbrPayerChainInfo;\n /**\n * Average transfer time to other blockchains\n */\n transferTime: TransferTime;\n /**\n * Transfers costs\n */\n txCostAmount: TxCostAmount;\n /**\n * Number of confirmations required\n */\n confirmations: number;\n /**\n * Sui addresses\n * Optional. Defined for SUI\n */\n suiAddresses?: SuiAddresses;\n}\n\n/**\n * Contains tokens list\n */\nexport interface ChainDetailsWithTokens extends ChainDetails {\n /**\n * Tokens\n */\n tokens: TokenWithChainDetails[];\n}\n\n/**\n * Contains tokens list\n */\nexport interface ChainDetailsWithTokensWithFlags extends ChainDetails {\n /**\n * Tokens\n */\n tokens: TokenWithChainDetailsWithFlags[];\n}\n\n/**\n * Contains token information\n */\nexport interface Token {\n /**\n * Token symbol\n */\n symbol: string;\n /**\n * Token name\n */\n name: string;\n /**\n * Token decimals\n */\n decimals: number;\n /**\n * Token pool address\n */\n poolAddress: string;\n /**\n * Token address\n */\n tokenAddress: string;\n /**\n * Token origin address\n */\n originTokenAddress?: string;\n /**\n * Token CCTP address</br>\n * Optional. Defined if CCTP supported by token\n */\n cctpAddress?: string;\n /**\n * Token CCTP V2 address</br>\n * Optional. Defined if CCTP supported by token\n */\n cctpFeeShare?: string;\n /**\n * Token CCTP address</br>\n * Optional. Defined if CCTP supported by token\n */\n cctpV2Address?: string;\n /**\n * Token CCTP V2 address</br>\n * Optional. Defined if CCTP supported by token\n */\n cctpV2FeeShare?: string;\n /**\n * Internal identifier for the same token across different chains.\n *\n * Used to link representations of a token deployed on multiple networks (e.g., Ethereum, BSC).\n * Tokens with the same `oftId` are considered to be equivalent.\n *\n * Optional. Defined if OFT supported by token\n */\n oftId?: string;\n /**\n * Token fee share\n */\n feeShare: string;\n /**\n * @Deprecated use {@link apr7d}</br>\n * Token APR\n */\n apr: string;\n /**\n * Token APR based on last 7 days\n */\n apr7d: string;\n /**\n * Token APR based on last 30 days\n */\n apr30d: string;\n /**\n * Token LP rate\n */\n lpRate: string;\n\n yieldId?: number;\n /**\n * Sui addresses\n * Optional. Defined for SUI\n */\n suiAddresses?: SuiAddresses;\n}\n\nexport interface SuiAddresses {\n bridgeAddress: string;\n bridgeAddressOrigin?: string;\n bridgeObjectAddress: string;\n\n allbridgeMessengerAddress: string;\n allbridgeMessengerAddressOrigin?: string;\n allbridgeMessengerObjectAddress: string;\n\n gasOracleAddress: string;\n gasOracleAddressOrigin?: string;\n gasOracleObjectAddress: string;\n\n utilsAddress: string;\n\n wormholeMessengerAddress: string;\n wormholeMessengerAddressOrigin?: string;\n wormholeMessengerObjectAddress: string;\n wormholeStateObjectAddress: string;\n\n cctpAddress: string;\n cctpAddressOrigin?: string;\n cctpObjectAddress: string;\n\n cctpDenyListObjectAddress: string;\n cctpMessageTransmitterStateObjectAddress: string;\n cctpTokenMessengerMinterStateObjectAddress: string;\n cctpTreasuryObjectAddress: string;\n}\n\n/**\n * General Token Interface\n */\nexport interface TokenWithChainDetails extends Token, Omit<ChainDetails, \"name\"> {\n /**\n * Blockchain network name\n */\n chainName: string;\n}\n\nexport type TokenCoreFields = Pick<\n TokenWithChainDetails,\n \"tokenAddress\" | \"chainSymbol\" | \"decimals\" | \"originTokenAddress\"\n>;\n\nexport interface TokenWithChainDetailsWithFlags extends TokenWithChainDetails {\n flags: { swap: boolean; pool: boolean };\n}\n\n/**\n * General Pool Interface\n */\nexport interface PoolInfo {\n /**\n * Pool A value\n */\n aValue: string;\n /**\n * Pool D value\n */\n dValue: string;\n /**\n * Pool token balance\n */\n tokenBalance: string;\n /**\n * Pool virtual USD balance\n */\n vUsdBalance: string;\n /**\n * Pool total liquidity amount\n */\n totalLpAmount: string;\n /**\n * Current accumulated reward per share shifted by P bits\n */\n accRewardPerShareP: string;\n /**\n * P value, needed for accRewardPerShareP\n */\n p: number;\n /**\n * Pool imbalance\n */\n imbalance: string;\n}\n\nexport type AbrPayerAvailability = Partial<Record<Messenger, boolean>>;\n\n/**\n * Type representing transfer times for various blockchain chains.\n *\n * @typedef {Record<string, MessengerTransferTime>} TransferTime\n * @property {string} chainSymbol - The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n * @property {MessengerTransferTime} transferTime - The average transfer time details for the specified chain.\n */\nexport type TransferTime = Record<string, MessengerTransferTime>;\n\n/**\n * Contains Avg transaction time withing different messenger protocols\n */\nexport type MessengerTransferTime = {\n [messenger in Messenger]?: number;\n};\n\nexport interface PoolKeyObject {\n chainSymbol: string;\n poolAddress: string;\n}\n\n/**\n * Contains transfer costs\n */\nexport interface TxCostAmount {\n /**\n * The maximum gas amount that can be received as extra gas for one transfer\n */\n maxAmount: string;\n /**\n * Swap cost\n */\n swap: string;\n /**\n * Transfer cost\n */\n transfer: string;\n}\n\nexport type PoolInfoMap = Record<string, PoolInfo>;\n"]}
@@ -1,8 +1,10 @@
1
1
  import { Big, BigSource } from "big.js";
2
2
  import { AllbridgeCoreClientPoolsExt } from "../client/core-api/core-client-pool-info-caching";
3
3
  import { PoolInfo, TokenWithChainDetails } from "../tokens-info";
4
+ export declare function assertNever(x: never, message?: string): never;
4
5
  export declare function getPoolInfoByToken(api: AllbridgeCoreClientPoolsExt, sourceChainToken: TokenWithChainDetails): Promise<PoolInfo>;
5
6
  export declare function validateAmountGtZero(amount: BigSource): void;
7
+ export declare function validateAmountGteZero(amount: BigSource): void;
6
8
  export declare function validateAmountDecimals(argName: string, amountFloat: number | string | Big, decimalRequired: number): void;
7
9
  export declare function promiseWithTimeout<T>(promise: Promise<T>, msg: string, timeoutMs: number): Promise<T>;
8
10
  export declare function promiseWithTimeoutAndRetries<T>(toTry: () => Promise<T>, msg: string, maxRetries: number, timeoutMs: number): Promise<T>;