@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
@@ -5,16 +5,15 @@ export { LiquidityPoolService } from "../services/liquidity-pool/index";
5
5
  export { Messenger, TransferStatusResponse, BridgeTransaction, GasBalanceResponse, CheckAddressResponse, AddressStatus, } from "../client/core-api/core-api.model";
6
6
  export { RawBridgeTransactionBuilder } from "../services/bridge/raw-bridge-transaction-builder";
7
7
  export { RawPoolTransactionBuilder } from "../services/liquidity-pool/raw-pool-transaction-builder";
8
- export { PoolInfo, TokenWithChainDetails, TransferTime, TxCostAmount, SuiAddresses, MessengerTransferTime, } from "../tokens-info/tokens-info.model";
9
8
  export { UserBalanceInfo, UserBalanceInfoDTO, LiquidityPoolsParams, LiquidityPoolsParamsWithAmount, ApproveParams as LiquidityPoolsApproveParams, CheckAllowanceParams as LiquidityPoolsCheckAllowanceParams, GetAllowanceParams as LiquidityPoolsGetAllowanceParams, } from "../services/liquidity-pool/models/pool.model";
10
9
  export * from "../services/models/index";
11
10
  export { YieldService } from "../services/yield/index";
12
11
  export { assertYieldIsSupported, isYieldSupported } from "../services/yield/validations";
13
- export { TokenWithChainDetailsYield, CYDToken, YieldGetAllowanceParams, YieldCheckAllowanceParams, YieldBalanceParams, YieldGetEstimatedAmountOnDepositParams, YieldGetWithdrawProportionAmountParams, YieldWithdrawAmount, YieldApproveParams, YieldDepositParams, YieldWithdrawParams, } from "../services/yield//models/yield.model";
12
+ export { TokenWithChainDetailsYield, CYDToken, YieldGetAllowanceParams, YieldCheckAllowanceParams, YieldBalanceParams, YieldGetEstimatedAmountOnDepositParams, YieldGetWithdrawProportionAmountParams, YieldWithdrawAmount, YieldApproveParams, YieldDepositParams, YieldWithdrawParams, } from "../services/yield/models/yield.model";
14
13
  export { RawYieldTransactionBuilder } from "../services/yield/raw-yield-transaction-builder";
15
14
  export { SwapAndBridgeCalculationData, SwapFromVUsdCalcResult, SwapToVUsdCalcResult, } from "../utils/calculation/swap-and-bridge-fee-calc";
16
15
  export { SendAmountDetails, AmountImpact } from "../utils/calculation/swap-and-bridge-details";
17
- export { ChainDetailsMap, ChainDetailsWithTokens } from "../tokens-info";
16
+ export { PoolInfo, TokenCoreFields, TokenWithChainDetails, TransferTime, TxCostAmount, SuiAddresses, MessengerTransferTime, ChainDetailsMap, ChainDetailsWithTokens, } from "../tokens-info";
18
17
  export { Utils } from "../utils";
19
18
  export { SrbUtils, TrustLineParams } from "../utils/srb";
20
19
  export { SolUtils } from "../utils/sol";
@@ -29,7 +28,11 @@ export declare enum FeePaymentMethod {
29
28
  /**
30
29
  * The fee is paid with the stablecoin token.
31
30
  */
32
- WITH_STABLECOIN = "stablecoin"
31
+ WITH_STABLECOIN = "stablecoin",
32
+ /**
33
+ * The fee is paid with the ABR token.
34
+ */
35
+ WITH_ARB = "abr"
33
36
  }
34
37
  export interface AmountsAndGasFeeOptions {
35
38
  /**
@@ -58,6 +61,7 @@ type GasFeeOptionsType = {
58
61
  export interface GasFeeOptions extends GasFeeOptionsType {
59
62
  [FeePaymentMethod.WITH_NATIVE_CURRENCY]: AmountFormatted;
60
63
  [FeePaymentMethod.WITH_STABLECOIN]?: AmountFormatted;
64
+ [FeePaymentMethod.WITH_ARB]?: AmountFormatted;
61
65
  adminFeeShareWithExtras?: string;
62
66
  }
63
67
  /**
@@ -128,6 +132,10 @@ export interface ExtraGasMaxLimitResponse {
128
132
  * Exchange rate
129
133
  */
130
134
  exchangeRate: string;
135
+ /**
136
+ * Exchange rate
137
+ */
138
+ abrExchangeRate?: string;
131
139
  /**
132
140
  * Source native token price
133
141
  */
@@ -36,6 +36,10 @@ var FeePaymentMethod;
36
36
  * The fee is paid with the stablecoin token.
37
37
  */
38
38
  FeePaymentMethod["WITH_STABLECOIN"] = "stablecoin";
39
+ /**
40
+ * The fee is paid with the ABR token.
41
+ */
42
+ FeePaymentMethod["WITH_ARB"] = "abr";
39
43
  })(FeePaymentMethod || (exports.FeePaymentMethod = FeePaymentMethod = {}));
40
44
  /**
41
45
  * Define the type of amount data<p/>
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/models/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAaA,oEAO2C;AANzC,2GAAA,SAAS,OAAA;AAKT,+GAAA,aAAa,OAAA;AAqBf,2DAAyC;AAEzC,6DAAyF;AAAhF,qHAAA,sBAAsB,OAAA;AAAE,+GAAA,gBAAgB,OAAA;AAyBjD,gDAA8B;AAC9B,qDAA+D;AAAtD,0GAAA,WAAW,OAAA;AAAE,wGAAA,SAAS,OAAA;AAG/B,IAAY,gBAUX;AAVD,WAAY,gBAAgB;IAC1B;;OAEG;IACH,mDAA+B,CAAA;IAE/B;;OAEG;IACH,kDAA8B,CAAA;AAChC,CAAC,EAVW,gBAAgB,gCAAhB,gBAAgB,QAU3B;AAoCD;;;;GAIG;AACH,IAAY,YASX;AATD,WAAY,YAAY;IACtB;;OAEG;IACH,2BAAW,CAAA;IACX;;OAEG;IACH,+BAAe,CAAA;AACjB,CAAC,EATW,YAAY,4BAAZ,YAAY,QASvB","sourcesContent":["export {\n ApproveParams as BridgeApproveParams,\n BaseSendParams,\n CheckAllowanceParams,\n GetAllowanceParams,\n GetTokenBalanceParams,\n SendParams,\n SwapParams,\n GetNativeTokenBalanceParams,\n} from \"../services/bridge/models/bridge.model\";\nexport { BridgeService } from \"../services/bridge/index\";\nexport { CctpParams, CctpDomains } from \"../services/bridge/sol\";\nexport { LiquidityPoolService } from \"../services/liquidity-pool/index\";\nexport {\n Messenger,\n TransferStatusResponse,\n BridgeTransaction,\n GasBalanceResponse,\n CheckAddressResponse,\n AddressStatus,\n} from \"../client/core-api/core-api.model\";\nexport { RawBridgeTransactionBuilder } from \"../services/bridge/raw-bridge-transaction-builder\";\nexport { RawPoolTransactionBuilder } from \"../services/liquidity-pool/raw-pool-transaction-builder\";\nexport {\n PoolInfo,\n TokenWithChainDetails,\n TransferTime,\n TxCostAmount,\n SuiAddresses,\n MessengerTransferTime,\n} from \"../tokens-info/tokens-info.model\";\nexport {\n UserBalanceInfo,\n UserBalanceInfoDTO,\n LiquidityPoolsParams,\n LiquidityPoolsParamsWithAmount,\n ApproveParams as LiquidityPoolsApproveParams,\n CheckAllowanceParams as LiquidityPoolsCheckAllowanceParams,\n GetAllowanceParams as LiquidityPoolsGetAllowanceParams,\n} from \"../services/liquidity-pool/models/pool.model\";\nexport * from \"../services/models/index\";\nexport { YieldService } from \"../services/yield/index\";\nexport { assertYieldIsSupported, isYieldSupported } from \"../services/yield/validations\";\nexport {\n TokenWithChainDetailsYield,\n CYDToken,\n YieldGetAllowanceParams,\n YieldCheckAllowanceParams,\n YieldBalanceParams,\n YieldGetEstimatedAmountOnDepositParams,\n YieldGetWithdrawProportionAmountParams,\n YieldWithdrawAmount,\n YieldApproveParams,\n YieldDepositParams,\n YieldWithdrawParams,\n} from \"../services/yield//models/yield.model\";\nexport { RawYieldTransactionBuilder } from \"../services/yield/raw-yield-transaction-builder\";\nexport {\n SwapAndBridgeCalculationData,\n SwapFromVUsdCalcResult,\n SwapToVUsdCalcResult,\n} from \"../utils/calculation/swap-and-bridge-fee-calc\";\nexport { SendAmountDetails, AmountImpact } from \"../utils/calculation/swap-and-bridge-details\";\nexport { ChainDetailsMap, ChainDetailsWithTokens } from \"../tokens-info\";\nexport { Utils } from \"../utils\";\nexport { SrbUtils, TrustLineParams } from \"../utils/srb\";\nexport { SolUtils } from \"../utils/sol\";\nexport * from \"../exceptions\";\nexport { ChainSymbol, ChainType } from \"../chains/chain.enums\";\nexport { AdditionalBasicChainProperties, BasicChainProperties } from \"../chains/models\";\n\nexport enum FeePaymentMethod {\n /**\n * The fee is paid in the native currency of the source chain.\n */\n WITH_NATIVE_CURRENCY = \"native\",\n\n /**\n * The fee is paid with the stablecoin token.\n */\n WITH_STABLECOIN = \"stablecoin\",\n}\n\nexport interface AmountsAndGasFeeOptions {\n /**\n * The floating point amount of tokens to be sent (not including gas fee).\n */\n amountToSendFloat: string;\n\n /**\n * The floating point amount of tokens to be received.\n */\n amountToBeReceivedFloat: string;\n\n /**\n * Available ways to pay the transfer gas fee and gas fee amount.\n */\n gasFeeOptions: GasFeeOptions;\n}\n\ntype GasFeeOptionsType = {\n [key in FeePaymentMethod]?: AmountFormatted;\n};\n\n/**\n * Describes available options of paying the gas fee and the amount to pay when using the corresponding method.\n *\n * For {@link FeePaymentMethod.WITH_NATIVE_CURRENCY} value contains the amount in the smallest denomination of the source chain currency\n *\n * For {@link FeePaymentMethod.WITH_STABLECOIN} value contains the amount in the smallest denomination of the source token\n */\nexport interface GasFeeOptions extends GasFeeOptionsType {\n [FeePaymentMethod.WITH_NATIVE_CURRENCY]: AmountFormatted;\n [FeePaymentMethod.WITH_STABLECOIN]?: AmountFormatted;\n adminFeeShareWithExtras?: string;\n}\n\n/**\n * Define the type of amount data<p/>\n * Example:<p/>\n * \"1500000\" USDC {@link AmountFormat.INT} = \"1.5\" USDC {@link AmountFormat.FLOAT}, if USDC.decimals = 6\n */\nexport enum AmountFormat {\n /**\n * denominated in the smallest unit of the source token\n */\n INT = \"int\",\n /**\n * denominated in the unit of the source token\n */\n FLOAT = \"float\",\n}\n\n/**\n * Describes the same amount in two variation formats.\n *\n * For {@link AmountFormat.INT} value contains the amount in the smallest denomination\n *\n * For {@link AmountFormat.FLOAT} value contains the amount in tokens denomination\n */\nexport type AmountFormatted = {\n [key in AmountFormat]: string;\n};\n\n/**\n * Describes MAX extra gas value can to be passed when using the corresponding method.\n *\n * For {@link FeePaymentMethod.WITH_NATIVE_CURRENCY} value contains {@link ExtraGasMaxLimit} the amount of the source chain currency\n *\n * For {@link FeePaymentMethod.WITH_STABLECOIN} value contains {@link ExtraGasMaxLimit} the amount of the source token\n */\nexport type ExtraGasMaxLimits = {\n [key in FeePaymentMethod]?: ExtraGasMaxLimit;\n};\n\n/**\n * Describes the same MAX extra gas amount.\n */\nexport type ExtraGasMaxLimit = AmountFormatted;\n\n/**\n * Provide extra gas information\n */\nexport interface ExtraGasMaxLimitResponse {\n /**\n * See {@link ExtraGasMaxLimits}\n */\n extraGasMax: ExtraGasMaxLimits;\n /**\n * Information due to destination chain\n */\n destinationChain: {\n /**\n * gasAmountMax maximum amount you can receive as extra gas on dest chain\n */\n gasAmountMax: ExtraGasMaxLimit;\n /**\n * cost of swap tx on chain\n */\n swap: AmountFormatted;\n /**\n * cost of send tx on chain\n */\n transfer: AmountFormatted;\n };\n /**\n * Exchange rate\n */\n exchangeRate: string;\n /**\n * Source native token price\n */\n sourceNativeTokenPrice: string;\n}\n\n/**\n * Provide pending status information\n */\nexport interface PendingStatusInfoResponse {\n /**\n * Number of pending transactions\n */\n pendingTxs: number;\n /**\n * Total amount of pending transactions\n */\n pendingAmount: AmountFormatted;\n /**\n * The amount of tokens can be received as a result of transfer considering pending transactions\n */\n estimatedAmount: { min: AmountFormatted; max: AmountFormatted };\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/models/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAaA,oEAO2C;AANzC,2GAAA,SAAS,OAAA;AAKT,+GAAA,aAAa,OAAA;AAaf,2DAAyC;AAEzC,6DAAyF;AAAhF,qHAAA,sBAAsB,OAAA;AAAE,+GAAA,gBAAgB,OAAA;AAmCjD,gDAA8B;AAC9B,qDAA+D;AAAtD,0GAAA,WAAW,OAAA;AAAE,wGAAA,SAAS,OAAA;AAG/B,IAAY,gBAeX;AAfD,WAAY,gBAAgB;IAC1B;;OAEG;IACH,mDAA+B,CAAA;IAE/B;;OAEG;IACH,kDAA8B,CAAA;IAE9B;;OAEG;IACH,oCAAgB,CAAA;AAClB,CAAC,EAfW,gBAAgB,gCAAhB,gBAAgB,QAe3B;AAqCD;;;;GAIG;AACH,IAAY,YASX;AATD,WAAY,YAAY;IACtB;;OAEG;IACH,2BAAW,CAAA;IACX;;OAEG;IACH,+BAAe,CAAA;AACjB,CAAC,EATW,YAAY,4BAAZ,YAAY,QASvB","sourcesContent":["export {\n ApproveParams as BridgeApproveParams,\n BaseSendParams,\n CheckAllowanceParams,\n GetAllowanceParams,\n GetTokenBalanceParams,\n SendParams,\n SwapParams,\n GetNativeTokenBalanceParams,\n} from \"../services/bridge/models/bridge.model\";\nexport { BridgeService } from \"../services/bridge/index\";\nexport { CctpParams, CctpDomains } from \"../services/bridge/sol\";\nexport { LiquidityPoolService } from \"../services/liquidity-pool/index\";\nexport {\n Messenger,\n TransferStatusResponse,\n BridgeTransaction,\n GasBalanceResponse,\n CheckAddressResponse,\n AddressStatus,\n} from \"../client/core-api/core-api.model\";\nexport { RawBridgeTransactionBuilder } from \"../services/bridge/raw-bridge-transaction-builder\";\nexport { RawPoolTransactionBuilder } from \"../services/liquidity-pool/raw-pool-transaction-builder\";\nexport {\n UserBalanceInfo,\n UserBalanceInfoDTO,\n LiquidityPoolsParams,\n LiquidityPoolsParamsWithAmount,\n ApproveParams as LiquidityPoolsApproveParams,\n CheckAllowanceParams as LiquidityPoolsCheckAllowanceParams,\n GetAllowanceParams as LiquidityPoolsGetAllowanceParams,\n} from \"../services/liquidity-pool/models/pool.model\";\nexport * from \"../services/models/index\";\nexport { YieldService } from \"../services/yield/index\";\nexport { assertYieldIsSupported, isYieldSupported } from \"../services/yield/validations\";\nexport {\n TokenWithChainDetailsYield,\n CYDToken,\n YieldGetAllowanceParams,\n YieldCheckAllowanceParams,\n YieldBalanceParams,\n YieldGetEstimatedAmountOnDepositParams,\n YieldGetWithdrawProportionAmountParams,\n YieldWithdrawAmount,\n YieldApproveParams,\n YieldDepositParams,\n YieldWithdrawParams,\n} from \"../services/yield/models/yield.model\";\nexport { RawYieldTransactionBuilder } from \"../services/yield/raw-yield-transaction-builder\";\nexport {\n SwapAndBridgeCalculationData,\n SwapFromVUsdCalcResult,\n SwapToVUsdCalcResult,\n} from \"../utils/calculation/swap-and-bridge-fee-calc\";\nexport { SendAmountDetails, AmountImpact } from \"../utils/calculation/swap-and-bridge-details\";\nexport {\n PoolInfo,\n TokenCoreFields,\n TokenWithChainDetails,\n TransferTime,\n TxCostAmount,\n SuiAddresses,\n MessengerTransferTime,\n ChainDetailsMap,\n ChainDetailsWithTokens,\n} from \"../tokens-info\";\nexport { Utils } from \"../utils\";\nexport { SrbUtils, TrustLineParams } from \"../utils/srb\";\nexport { SolUtils } from \"../utils/sol\";\nexport * from \"../exceptions\";\nexport { ChainSymbol, ChainType } from \"../chains/chain.enums\";\nexport { AdditionalBasicChainProperties, BasicChainProperties } from \"../chains/models\";\n\nexport enum FeePaymentMethod {\n /**\n * The fee is paid in the native currency of the source chain.\n */\n WITH_NATIVE_CURRENCY = \"native\",\n\n /**\n * The fee is paid with the stablecoin token.\n */\n WITH_STABLECOIN = \"stablecoin\",\n\n /**\n * The fee is paid with the ABR token.\n */\n WITH_ARB = \"abr\",\n}\n\nexport interface AmountsAndGasFeeOptions {\n /**\n * The floating point amount of tokens to be sent (not including gas fee).\n */\n amountToSendFloat: string;\n\n /**\n * The floating point amount of tokens to be received.\n */\n amountToBeReceivedFloat: string;\n\n /**\n * Available ways to pay the transfer gas fee and gas fee amount.\n */\n gasFeeOptions: GasFeeOptions;\n}\n\ntype GasFeeOptionsType = {\n [key in FeePaymentMethod]?: AmountFormatted;\n};\n\n/**\n * Describes available options of paying the gas fee and the amount to pay when using the corresponding method.\n *\n * For {@link FeePaymentMethod.WITH_NATIVE_CURRENCY} value contains the amount in the smallest denomination of the source chain currency\n *\n * For {@link FeePaymentMethod.WITH_STABLECOIN} value contains the amount in the smallest denomination of the source token\n */\nexport interface GasFeeOptions extends GasFeeOptionsType {\n [FeePaymentMethod.WITH_NATIVE_CURRENCY]: AmountFormatted;\n [FeePaymentMethod.WITH_STABLECOIN]?: AmountFormatted;\n [FeePaymentMethod.WITH_ARB]?: AmountFormatted;\n adminFeeShareWithExtras?: string;\n}\n\n/**\n * Define the type of amount data<p/>\n * Example:<p/>\n * \"1500000\" USDC {@link AmountFormat.INT} = \"1.5\" USDC {@link AmountFormat.FLOAT}, if USDC.decimals = 6\n */\nexport enum AmountFormat {\n /**\n * denominated in the smallest unit of the source token\n */\n INT = \"int\",\n /**\n * denominated in the unit of the source token\n */\n FLOAT = \"float\",\n}\n\n/**\n * Describes the same amount in two variation formats.\n *\n * For {@link AmountFormat.INT} value contains the amount in the smallest denomination\n *\n * For {@link AmountFormat.FLOAT} value contains the amount in tokens denomination\n */\nexport type AmountFormatted = {\n [key in AmountFormat]: string;\n};\n\n/**\n * Describes MAX extra gas value can to be passed when using the corresponding method.\n *\n * For {@link FeePaymentMethod.WITH_NATIVE_CURRENCY} value contains {@link ExtraGasMaxLimit} the amount of the source chain currency\n *\n * For {@link FeePaymentMethod.WITH_STABLECOIN} value contains {@link ExtraGasMaxLimit} the amount of the source token\n */\nexport type ExtraGasMaxLimits = {\n [key in FeePaymentMethod]?: ExtraGasMaxLimit;\n};\n\n/**\n * Describes the same MAX extra gas amount.\n */\nexport type ExtraGasMaxLimit = AmountFormatted;\n\n/**\n * Provide extra gas information\n */\nexport interface ExtraGasMaxLimitResponse {\n /**\n * See {@link ExtraGasMaxLimits}\n */\n extraGasMax: ExtraGasMaxLimits;\n /**\n * Information due to destination chain\n */\n destinationChain: {\n /**\n * gasAmountMax maximum amount you can receive as extra gas on dest chain\n */\n gasAmountMax: ExtraGasMaxLimit;\n /**\n * cost of swap tx on chain\n */\n swap: AmountFormatted;\n /**\n * cost of send tx on chain\n */\n transfer: AmountFormatted;\n };\n /**\n * Exchange rate\n */\n exchangeRate: string;\n /**\n * Exchange rate\n */\n abrExchangeRate?: string;\n /**\n * Source native token price\n */\n sourceNativeTokenPrice: string;\n}\n\n/**\n * Provide pending status information\n */\nexport interface PendingStatusInfoResponse {\n /**\n * Number of pending transactions\n */\n pendingTxs: number;\n /**\n * Total amount of pending transactions\n */\n pendingAmount: AmountFormatted;\n /**\n * The amount of tokens can be received as a result of transfer considering pending transactions\n */\n estimatedAmount: { min: AmountFormatted; max: AmountFormatted };\n}\n"]}
@@ -12,4 +12,5 @@ export declare class AlgBridgeService extends ChainBridgeService {
12
12
  buildRawTransactionSend(params: SendParams): Promise<RawTransaction>;
13
13
  buildRawTransactionSwap(params: SwapParams): Promise<RawTransaction>;
14
14
  private getBridge;
15
+ private getPaddingUtil;
15
16
  }
@@ -29,10 +29,12 @@ const algosdk_1 = __importStar(require("algosdk"));
29
29
  const chain_enums_1 = require("../../../chains/chain.enums");
30
30
  const exceptions_1 = require("../../../exceptions");
31
31
  const models_1 = require("../../../models");
32
+ const utils_1 = require("../../../utils/utils");
32
33
  const BridgeClient_1 = require("../../models/alg/BridgeClient");
34
+ const PaddingUtilClient_1 = require("../../models/alg/PaddingUtilClient");
33
35
  const alg_1 = require("../../utils/alg");
34
36
  const models_2 = require("../models");
35
- const utils_1 = require("../utils");
37
+ const utils_2 = require("../utils");
36
38
  class AlgBridgeService extends models_2.ChainBridgeService {
37
39
  algorand;
38
40
  api;
@@ -47,67 +49,94 @@ class AlgBridgeService extends models_2.ChainBridgeService {
47
49
  throw new exceptions_1.MethodNotSupportedError();
48
50
  }
49
51
  async buildRawTransactionSend(params) {
50
- const txSendParams = await (0, utils_1.prepareTxSendParams)(this.chainType, params, this.api);
52
+ const txSendParams = await (0, utils_2.prepareTxSendParams)(this.chainType, params, this.api);
51
53
  if (!params.sourceToken.bridgeId) {
52
54
  throw new exceptions_1.SdkError("ALG sourceToken must contain 'bridgeId'");
53
55
  }
56
+ if (!params.sourceToken.paddingUtilId) {
57
+ throw new exceptions_1.SdkError("ALG sourceToken must contain 'paddingUtilId'");
58
+ }
54
59
  const bridgeId = BigInt(params.sourceToken.bridgeId);
55
60
  const bridge = this.getBridge(bridgeId);
61
+ const paddingUtilId = BigInt(params.sourceToken.paddingUtilId);
62
+ const paddingUtil = this.getPaddingUtil(paddingUtilId);
56
63
  const sender = algosdk_1.Address.fromString(params.fromAccountAddress);
57
64
  const tokenId = BigInt(params.sourceToken.tokenAddress);
58
65
  const destinationChainId = txSendParams.toChainId;
59
66
  const recipient = txSendParams.toAccountAddress;
60
67
  const receiveToken = txSendParams.toTokenAddress;
61
- const nonce = (0, utils_1.getNonce)();
68
+ const nonce = (0, utils_2.getNonce)();
62
69
  const amount = BigInt(txSendParams.amount);
63
70
  let totalFee = BigInt(txSendParams.fee);
64
71
  if (txSendParams.extraGas) {
65
72
  totalFee = totalFee + BigInt(txSendParams.extraGas);
66
73
  }
67
- const isPayWithStable = txSendParams.gasFeePaymentMethod === models_1.FeePaymentMethod.WITH_STABLECOIN;
68
74
  const composer = this.algorand.newGroup();
69
- let feeTokenAmount;
70
- if (isPayWithStable) {
71
- feeTokenAmount = totalFee;
72
- }
73
- else {
74
- composer.addPayment({
75
- sender,
76
- receiver: bridge.appAddress,
77
- amount: amount_1.AlgoAmount.MicroAlgo(totalFee),
78
- });
79
- feeTokenAmount = 0n;
80
- }
81
- composer
82
- .addAssetTransfer({
83
- assetId: tokenId,
75
+ const assetTransferTx = await this.algorand.createTransaction.assetTransfer({
84
76
  amount,
85
- sender,
77
+ assetId: tokenId,
86
78
  receiver: bridge.appAddress,
87
- })
88
- .addAppCallMethodCall(await bridge.params.swapAndBridge({
89
- args: {
90
- tokenId,
91
- recipient,
92
- destinationChainId,
93
- receiveToken,
94
- nonce,
95
- feeTokenAmount,
96
- },
97
79
  sender,
98
- extraFee: (0, alg_1.feeForInner)(isPayWithStable ? 9 : 8),
99
- }));
100
- (0, alg_1.addBudgetNoops)({
101
- composer,
102
- appId: bridgeId,
80
+ });
81
+ switch (txSendParams.gasFeePaymentMethod) {
82
+ case models_1.FeePaymentMethod.WITH_NATIVE_CURRENCY: {
83
+ const paymentTx = await this.algorand.createTransaction.payment({
84
+ amount: amount_1.AlgoAmount.MicroAlgo(totalFee),
85
+ receiver: bridge.appAddress,
86
+ sender,
87
+ });
88
+ composer.addAppCallMethodCall(await bridge.params.swapAndBridge({
89
+ args: {
90
+ paymentRef: paymentTx,
91
+ assetTransferRef: assetTransferTx,
92
+ recipient,
93
+ destinationChainId,
94
+ receiveToken,
95
+ nonce,
96
+ },
97
+ sender,
98
+ extraFee: (0, alg_1.feeForInner)(8),
99
+ }));
100
+ break;
101
+ }
102
+ case models_1.FeePaymentMethod.WITH_STABLECOIN: {
103
+ composer.addAppCallMethodCall(await bridge.params.swapAndBridgeWithStable({
104
+ args: {
105
+ assetTransferRef: assetTransferTx,
106
+ recipient,
107
+ destinationChainId,
108
+ receiveToken,
109
+ nonce,
110
+ feeTokenAmount: totalFee,
111
+ },
112
+ sender,
113
+ extraFee: (0, alg_1.feeForInner)(9),
114
+ }));
115
+ const paddingTx = await this.algorand.createTransaction.appCall({
116
+ appId: paddingUtil.appId,
117
+ sender,
118
+ note: "padding_1",
119
+ });
120
+ composer.addTransaction(paddingTx);
121
+ break;
122
+ }
123
+ case models_1.FeePaymentMethod.WITH_ARB:
124
+ throw new exceptions_1.SdkError("ALG bridge does not support ARB0 payment method");
125
+ default: {
126
+ return (0, utils_1.assertNever)(txSendParams.gasFeePaymentMethod, "Unhandled FeePaymentMethod");
127
+ }
128
+ }
129
+ const paddingTx = await this.algorand.createTransaction.appCall({
130
+ appId: paddingUtil.appId,
103
131
  sender,
104
- count: isPayWithStable ? 3 : 2,
132
+ note: "padding",
105
133
  });
134
+ composer.addTransaction(paddingTx);
106
135
  const { transactions } = await composer.buildTransactions();
107
136
  return (0, alg_1.populateAndEncodeTxs)(transactions, sender, this.algorand.client.algod);
108
137
  }
109
138
  async buildRawTransactionSwap(params) {
110
- const txSwapParams = (0, utils_1.prepareTxSwapParams)(this.chainType, params);
139
+ const txSwapParams = (0, utils_2.prepareTxSwapParams)(this.chainType, params);
111
140
  const sender = algosdk_1.Address.fromString(params.fromAccountAddress);
112
141
  const recipient = params.toAccountAddress;
113
142
  const tokenId = BigInt(params.sourceToken.tokenAddress);
@@ -117,8 +146,13 @@ class AlgBridgeService extends models_2.ChainBridgeService {
117
146
  if (!params.sourceToken.bridgeId) {
118
147
  throw new exceptions_1.SdkError("ALG sourceToken must contain 'bridgeId'");
119
148
  }
149
+ if (!params.sourceToken.paddingUtilId) {
150
+ throw new exceptions_1.SdkError("ALG sourceToken must contain 'paddingUtilId'");
151
+ }
120
152
  const bridgeId = BigInt(params.sourceToken.bridgeId);
121
153
  const bridge = this.getBridge(bridgeId);
154
+ const paddingUtilId = BigInt(params.sourceToken.paddingUtilId);
155
+ const paddingUtil = this.getPaddingUtil(paddingUtilId);
122
156
  const composer = this.algorand.newGroup();
123
157
  if (params.fromAccountAddress === recipient) {
124
158
  const optIn = await (0, alg_1.checkAssetOptIn)(receiveTokenId, recipient, this.algorand);
@@ -126,29 +160,31 @@ class AlgBridgeService extends models_2.ChainBridgeService {
126
160
  composer.addAssetOptIn({ sender: sender, assetId: receiveTokenId });
127
161
  }
128
162
  }
129
- composer.addAssetTransfer({
163
+ const assetTransfer = this.algorand.createTransaction.assetTransfer({
130
164
  assetId: tokenId,
131
165
  amount: amount,
132
166
  sender,
133
167
  receiver: bridge.appAddress,
134
168
  });
135
169
  composer.addAppCallMethodCall(await bridge.params.swap({
136
- args: { tokenId, recipient, receiveTokenId, receiveAmountMin },
170
+ args: { assetTransferRef: assetTransfer, recipient, receiveAsset: receiveTokenId, receiveAmountMin },
137
171
  sender,
138
172
  extraFee: (0, alg_1.feeForInner)(4),
139
173
  }));
140
- (0, alg_1.addBudgetNoops)({
141
- composer,
142
- appId: bridgeId,
174
+ const paddingTx = await this.algorand.createTransaction.appCall({
175
+ appId: paddingUtil.appId,
143
176
  sender,
144
- count: 1,
145
177
  });
178
+ composer.addTransaction(paddingTx);
146
179
  const { transactions } = await composer.buildTransactions();
147
180
  return (0, alg_1.populateAndEncodeTxs)(transactions, sender, this.algorand.client.algod);
148
181
  }
149
182
  getBridge(appId) {
150
183
  return this.algorand.client.getTypedAppClientById(BridgeClient_1.BridgeClient, { appId });
151
184
  }
185
+ getPaddingUtil(appId) {
186
+ return this.algorand.client.getTypedAppClientById(PaddingUtilClient_1.PaddingUtilClient, { appId });
187
+ }
152
188
  }
153
189
  exports.AlgBridgeService = AlgBridgeService;
154
190
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/services/bridge/alg/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { AlgorandClient } from \"@algorandfoundation/algokit-utils\";\nimport { AlgoAmount } from \"@algorandfoundation/algokit-utils/types/amount\";\nimport algosdk, { Address } from \"algosdk\";\nimport { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { MethodNotSupportedError, SdkError } from \"../../../exceptions\";\nimport { FeePaymentMethod } from \"../../../models\";\nimport { RawTransaction, TransactionResponse } from \"../../models\";\nimport { BridgeClient } from \"../../models/alg/BridgeClient\";\nimport { addBudgetNoops, checkAssetOptIn, feeForInner, populateAndEncodeTxs } from \"../../utils/alg\";\nimport { ChainBridgeService, SendParams, SwapParams } from \"../models\";\nimport { getNonce, prepareTxSendParams, prepareTxSwapParams } from \"../utils\";\n\nexport class AlgBridgeService extends ChainBridgeService {\n chainType: ChainType.ALG = ChainType.ALG;\n\n constructor(\n public algorand: AlgorandClient,\n public api: AllbridgeCoreClient\n ) {\n super();\n algorand.setDefaultSigner(\n algosdk.makeBasicAccountTransactionSigner(\n algosdk.mnemonicToSecretKey(\n \"tunnel gym elevator pulse motor evolve release orange culture make sister approve winter chair armor grocery distance festival tiger holiday dish wisdom region absorb secret\"\n )\n )\n );\n }\n\n send(_params: SendParams): Promise<TransactionResponse> {\n throw new MethodNotSupportedError();\n }\n\n async buildRawTransactionSend(params: SendParams): Promise<RawTransaction> {\n const txSendParams = await prepareTxSendParams(this.chainType, params, this.api);\n\n if (!params.sourceToken.bridgeId) {\n throw new SdkError(\"ALG sourceToken must contain 'bridgeId'\");\n }\n const bridgeId = BigInt(params.sourceToken.bridgeId);\n const bridge = this.getBridge(bridgeId);\n const sender = Address.fromString(params.fromAccountAddress);\n const tokenId = BigInt(params.sourceToken.tokenAddress);\n const destinationChainId = txSendParams.toChainId;\n const recipient = txSendParams.toAccountAddress;\n const receiveToken = txSendParams.toTokenAddress;\n const nonce = getNonce();\n const amount = BigInt(txSendParams.amount);\n\n let totalFee = BigInt(txSendParams.fee);\n if (txSendParams.extraGas) {\n totalFee = totalFee + BigInt(txSendParams.extraGas);\n }\n const isPayWithStable = txSendParams.gasFeePaymentMethod === FeePaymentMethod.WITH_STABLECOIN;\n\n const composer = this.algorand.newGroup();\n\n let feeTokenAmount: bigint;\n if (isPayWithStable) {\n feeTokenAmount = totalFee;\n } else {\n composer.addPayment({\n sender,\n receiver: bridge.appAddress,\n amount: AlgoAmount.MicroAlgo(totalFee),\n });\n feeTokenAmount = 0n;\n }\n composer\n .addAssetTransfer({\n assetId: tokenId,\n amount,\n sender,\n receiver: bridge.appAddress,\n })\n .addAppCallMethodCall(\n await bridge.params.swapAndBridge({\n args: {\n tokenId,\n recipient,\n destinationChainId,\n receiveToken,\n nonce,\n feeTokenAmount,\n },\n sender,\n extraFee: feeForInner(isPayWithStable ? 9 : 8),\n })\n );\n addBudgetNoops({\n composer,\n appId: bridgeId,\n sender,\n count: isPayWithStable ? 3 : 2,\n });\n const { transactions } = await composer.buildTransactions();\n return populateAndEncodeTxs(transactions, sender, this.algorand.client.algod);\n }\n\n async buildRawTransactionSwap(params: SwapParams): Promise<RawTransaction> {\n const txSwapParams = prepareTxSwapParams(this.chainType, params);\n\n const sender = Address.fromString(params.fromAccountAddress);\n const recipient = params.toAccountAddress;\n const tokenId = BigInt(params.sourceToken.tokenAddress);\n const receiveTokenId = BigInt(params.destinationToken.tokenAddress);\n const receiveAmountMin = BigInt(txSwapParams.minimumReceiveAmount);\n const amount = BigInt(txSwapParams.amount);\n\n if (!params.sourceToken.bridgeId) {\n throw new SdkError(\"ALG sourceToken must contain 'bridgeId'\");\n }\n const bridgeId = BigInt(params.sourceToken.bridgeId);\n const bridge = this.getBridge(bridgeId);\n\n const composer = this.algorand.newGroup();\n\n if (params.fromAccountAddress === recipient) {\n const optIn = await checkAssetOptIn(receiveTokenId, recipient, this.algorand);\n if (!optIn) {\n composer.addAssetOptIn({ sender: sender, assetId: receiveTokenId });\n }\n }\n\n composer.addAssetTransfer({\n assetId: tokenId,\n amount: amount,\n sender,\n receiver: bridge.appAddress,\n });\n composer.addAppCallMethodCall(\n await bridge.params.swap({\n args: { tokenId, recipient, receiveTokenId, receiveAmountMin },\n sender,\n extraFee: feeForInner(4),\n })\n );\n addBudgetNoops({\n composer,\n appId: bridgeId,\n sender,\n count: 1,\n });\n const { transactions } = await composer.buildTransactions();\n return populateAndEncodeTxs(transactions, sender, this.algorand.client.algod);\n }\n\n private getBridge(appId: bigint): BridgeClient {\n return this.algorand.client.getTypedAppClientById(BridgeClient, { appId });\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/services/bridge/alg/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { AlgorandClient } from \"@algorandfoundation/algokit-utils\";\nimport { AlgoAmount } from \"@algorandfoundation/algokit-utils/types/amount\";\nimport algosdk, { Address } from \"algosdk\";\nimport { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { MethodNotSupportedError, SdkError } from \"../../../exceptions\";\nimport { FeePaymentMethod } from \"../../../models\";\nimport { assertNever } from \"../../../utils/utils\";\nimport { RawTransaction, TransactionResponse } from \"../../models\";\nimport { BridgeClient } from \"../../models/alg/BridgeClient\";\nimport { PaddingUtilClient } from \"../../models/alg/PaddingUtilClient\";\nimport { checkAssetOptIn, feeForInner, populateAndEncodeTxs } from \"../../utils/alg\";\nimport { ChainBridgeService, SendParams, SwapParams } from \"../models\";\nimport { getNonce, prepareTxSendParams, prepareTxSwapParams } from \"../utils\";\n\nexport class AlgBridgeService extends ChainBridgeService {\n chainType: ChainType.ALG = ChainType.ALG;\n\n constructor(\n public algorand: AlgorandClient,\n public api: AllbridgeCoreClient\n ) {\n super();\n algorand.setDefaultSigner(\n algosdk.makeBasicAccountTransactionSigner(\n algosdk.mnemonicToSecretKey(\n \"tunnel gym elevator pulse motor evolve release orange culture make sister approve winter chair armor grocery distance festival tiger holiday dish wisdom region absorb secret\"\n )\n )\n );\n }\n\n send(_params: SendParams): Promise<TransactionResponse> {\n throw new MethodNotSupportedError();\n }\n\n async buildRawTransactionSend(params: SendParams): Promise<RawTransaction> {\n const txSendParams = await prepareTxSendParams(this.chainType, params, this.api);\n\n if (!params.sourceToken.bridgeId) {\n throw new SdkError(\"ALG sourceToken must contain 'bridgeId'\");\n }\n if (!params.sourceToken.paddingUtilId) {\n throw new SdkError(\"ALG sourceToken must contain 'paddingUtilId'\");\n }\n const bridgeId = BigInt(params.sourceToken.bridgeId);\n const bridge = this.getBridge(bridgeId);\n const paddingUtilId = BigInt(params.sourceToken.paddingUtilId);\n const paddingUtil = this.getPaddingUtil(paddingUtilId);\n const sender = Address.fromString(params.fromAccountAddress);\n const tokenId = BigInt(params.sourceToken.tokenAddress);\n const destinationChainId = txSendParams.toChainId;\n const recipient = txSendParams.toAccountAddress;\n const receiveToken = txSendParams.toTokenAddress;\n const nonce = getNonce();\n const amount = BigInt(txSendParams.amount);\n\n let totalFee = BigInt(txSendParams.fee);\n if (txSendParams.extraGas) {\n totalFee = totalFee + BigInt(txSendParams.extraGas);\n }\n\n const composer = this.algorand.newGroup();\n\n const assetTransferTx = await this.algorand.createTransaction.assetTransfer({\n amount,\n assetId: tokenId,\n receiver: bridge.appAddress,\n sender,\n });\n\n switch (txSendParams.gasFeePaymentMethod) {\n case FeePaymentMethod.WITH_NATIVE_CURRENCY: {\n const paymentTx = await this.algorand.createTransaction.payment({\n amount: AlgoAmount.MicroAlgo(totalFee),\n receiver: bridge.appAddress,\n sender,\n });\n composer.addAppCallMethodCall(\n await bridge.params.swapAndBridge({\n args: {\n paymentRef: paymentTx,\n assetTransferRef: assetTransferTx,\n recipient,\n destinationChainId,\n receiveToken,\n nonce,\n },\n sender,\n extraFee: feeForInner(8),\n })\n );\n break;\n }\n case FeePaymentMethod.WITH_STABLECOIN: {\n composer.addAppCallMethodCall(\n await bridge.params.swapAndBridgeWithStable({\n args: {\n assetTransferRef: assetTransferTx,\n recipient,\n destinationChainId,\n receiveToken,\n nonce,\n feeTokenAmount: totalFee,\n },\n sender,\n extraFee: feeForInner(9),\n })\n );\n const paddingTx = await this.algorand.createTransaction.appCall({\n appId: paddingUtil.appId,\n sender,\n note: \"padding_1\",\n });\n composer.addTransaction(paddingTx);\n break;\n }\n case FeePaymentMethod.WITH_ARB:\n throw new SdkError(\"ALG bridge does not support ARB0 payment method\");\n default: {\n return assertNever(txSendParams.gasFeePaymentMethod, \"Unhandled FeePaymentMethod\");\n }\n }\n\n const paddingTx = await this.algorand.createTransaction.appCall({\n appId: paddingUtil.appId,\n sender,\n note: \"padding\",\n });\n composer.addTransaction(paddingTx);\n\n const { transactions } = await composer.buildTransactions();\n return populateAndEncodeTxs(transactions, sender, this.algorand.client.algod);\n }\n\n async buildRawTransactionSwap(params: SwapParams): Promise<RawTransaction> {\n const txSwapParams = prepareTxSwapParams(this.chainType, params);\n\n const sender = Address.fromString(params.fromAccountAddress);\n const recipient = params.toAccountAddress;\n const tokenId = BigInt(params.sourceToken.tokenAddress);\n const receiveTokenId = BigInt(params.destinationToken.tokenAddress);\n const receiveAmountMin = BigInt(txSwapParams.minimumReceiveAmount);\n const amount = BigInt(txSwapParams.amount);\n\n if (!params.sourceToken.bridgeId) {\n throw new SdkError(\"ALG sourceToken must contain 'bridgeId'\");\n }\n if (!params.sourceToken.paddingUtilId) {\n throw new SdkError(\"ALG sourceToken must contain 'paddingUtilId'\");\n }\n const bridgeId = BigInt(params.sourceToken.bridgeId);\n const bridge = this.getBridge(bridgeId);\n const paddingUtilId = BigInt(params.sourceToken.paddingUtilId);\n const paddingUtil = this.getPaddingUtil(paddingUtilId);\n\n const composer = this.algorand.newGroup();\n\n if (params.fromAccountAddress === recipient) {\n const optIn = await checkAssetOptIn(receiveTokenId, recipient, this.algorand);\n if (!optIn) {\n composer.addAssetOptIn({ sender: sender, assetId: receiveTokenId });\n }\n }\n\n const assetTransfer = this.algorand.createTransaction.assetTransfer({\n assetId: tokenId,\n amount: amount,\n sender,\n receiver: bridge.appAddress,\n });\n composer.addAppCallMethodCall(\n await bridge.params.swap({\n args: { assetTransferRef: assetTransfer, recipient, receiveAsset: receiveTokenId, receiveAmountMin },\n sender,\n extraFee: feeForInner(4),\n })\n );\n const paddingTx = await this.algorand.createTransaction.appCall({\n appId: paddingUtil.appId,\n sender,\n });\n composer.addTransaction(paddingTx);\n const { transactions } = await composer.buildTransactions();\n return populateAndEncodeTxs(transactions, sender, this.algorand.client.algod);\n }\n\n private getBridge(appId: bigint): BridgeClient {\n return this.algorand.client.getTypedAppClientById(BridgeClient, { appId });\n }\n\n private getPaddingUtil(appId: bigint): PaddingUtilClient {\n return this.algorand.client.getTypedAppClientById(PaddingUtilClient, { appId });\n }\n}\n"]}
@@ -19,4 +19,5 @@ export declare class EvmBridgeService extends ChainBridgeService {
19
19
  private getBridgeContract;
20
20
  private getCctpBridgeContract;
21
21
  private getOftBridgeContract;
22
+ private getAbrPayerContract;
22
23
  }
@@ -5,13 +5,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.EvmBridgeService = void 0;
7
7
  const big_js_1 = require("big.js");
8
+ const chains_1 = require("../../../chains");
8
9
  const models_1 = require("../../../models");
10
+ const calculation_1 = require("../../../utils/calculation");
11
+ const utils_1 = require("../../../utils/utils");
9
12
  const Bridge_1 = __importDefault(require("../../models/abi/Bridge"));
10
13
  const CctpBridge_1 = __importDefault(require("../../models/abi/CctpBridge"));
11
14
  const OftBridge_1 = __importDefault(require("../../models/abi/OftBridge"));
15
+ const PayerWithAbr_1 = __importDefault(require("../../models/abi/PayerWithAbr"));
12
16
  const get_cctp_sol_token_recipient_address_1 = require("../get-cctp-sol-token-recipient-address");
13
17
  const models_2 = require("../models");
14
- const utils_1 = require("../utils");
18
+ const utils_2 = require("../utils");
15
19
  class EvmBridgeService extends models_2.ChainBridgeService {
16
20
  web3;
17
21
  api;
@@ -28,7 +32,7 @@ class EvmBridgeService extends models_2.ChainBridgeService {
28
32
  return this.sendRawTransaction(rawTransaction);
29
33
  }
30
34
  async buildRawTransactionSwap(params) {
31
- const txSwapParams = (0, utils_1.prepareTxSwapParams)(this.chainType, params);
35
+ const txSwapParams = (0, utils_2.prepareTxSwapParams)(this.chainType, params);
32
36
  return await this.buildRawTransactionSwapFromParams(txSwapParams);
33
37
  }
34
38
  async buildRawTransactionSwapFromParams(params) {
@@ -42,15 +46,27 @@ class EvmBridgeService extends models_2.ChainBridgeService {
42
46
  });
43
47
  }
44
48
  async buildRawTransactionSend(params) {
45
- const txSendParams = await (0, utils_1.prepareTxSendParams)(this.chainType, params, this.api);
46
- const { amount, contractAddress, fromAccountAddress, fromTokenAddress, toChainId, toAccountAddress, toTokenAddress, messenger, fee, gasFeePaymentMethod, extraGas, extraGasDest, } = txSendParams;
47
- const nonce = "0x" + (0, utils_1.getNonce)().toString("hex");
49
+ const txSendParams = await (0, utils_2.prepareTxSendParams)(this.chainType, params, this.api);
50
+ const { amount, contractAddress, fromAccountAddress, fromTokenAddress, toChainId, toAccountAddress, toTokenAddress, messenger, fee, gasFeePaymentMethod, extraGas, extraGasDest, abrExchangeRate, } = txSendParams;
51
+ const nonce = "0x" + (0, utils_2.getNonce)().toString("hex");
48
52
  let sendMethod;
49
53
  let value;
50
54
  let totalFee = fee;
51
55
  if (extraGas) {
52
56
  totalFee = (0, big_js_1.Big)(totalFee).plus(extraGas).toFixed();
53
57
  }
58
+ let totalFeeInAbr;
59
+ if (gasFeePaymentMethod === models_1.FeePaymentMethod.WITH_ARB) {
60
+ if (!abrExchangeRate) {
61
+ throw new models_1.SdkError("Cannot find 'abrExchangeRate' for ARB0 payment method");
62
+ }
63
+ if (!params.sourceToken.abrPayer) {
64
+ throw new models_1.SdkError("Source token must contain 'abrPayer' for ARB0 payment method");
65
+ }
66
+ totalFeeInAbr = totalFee;
67
+ const totalFeeInNativeRaw = (0, big_js_1.Big)(totalFee).div(abrExchangeRate);
68
+ totalFee = (0, calculation_1.convertAmountPrecision)(totalFeeInNativeRaw, params.sourceToken.abrPayer.abrToken.decimals, chains_1.Chains.getChainDecimalsByType(params.sourceToken.chainType)).toFixed();
69
+ }
54
70
  switch (messenger) {
55
71
  case models_1.Messenger.CCTP:
56
72
  case models_1.Messenger.CCTP_V2: {
@@ -69,17 +85,44 @@ class EvmBridgeService extends models_2.ChainBridgeService {
69
85
  case models_1.Messenger.WORMHOLE:
70
86
  {
71
87
  const bridgeContract = this.getBridgeContract(contractAddress);
72
- if (gasFeePaymentMethod === models_1.FeePaymentMethod.WITH_STABLECOIN) {
73
- sendMethod = bridgeContract.methods.swapAndBridge(fromTokenAddress, amount, toAccountAddress, toChainId, toTokenAddress, nonce, messenger, totalFee);
74
- value = "0";
75
- }
76
- else {
77
- sendMethod = bridgeContract.methods.swapAndBridge(fromTokenAddress, amount, toAccountAddress, toChainId, toTokenAddress, nonce, messenger, 0);
78
- value = totalFee;
88
+ switch (gasFeePaymentMethod) {
89
+ case models_1.FeePaymentMethod.WITH_ARB:
90
+ case models_1.FeePaymentMethod.WITH_NATIVE_CURRENCY: {
91
+ sendMethod = bridgeContract.methods.swapAndBridge(fromTokenAddress, amount, toAccountAddress, toChainId, toTokenAddress, nonce, messenger, 0);
92
+ value = totalFee;
93
+ break;
94
+ }
95
+ case models_1.FeePaymentMethod.WITH_STABLECOIN: {
96
+ sendMethod = bridgeContract.methods.swapAndBridge(fromTokenAddress, amount, toAccountAddress, toChainId, toTokenAddress, nonce, messenger, totalFee);
97
+ value = "0";
98
+ break;
99
+ }
100
+ default: {
101
+ return (0, utils_1.assertNever)(gasFeePaymentMethod, "Unhandled FeePaymentMethod");
102
+ }
79
103
  }
80
104
  }
81
105
  break;
82
106
  }
107
+ if (gasFeePaymentMethod === models_1.FeePaymentMethod.WITH_ARB) {
108
+ if (!params.sourceToken.abrPayer) {
109
+ throw new models_1.SdkError("Source token must contain 'abrPayer' for ARB0 payment method");
110
+ }
111
+ const abrPayerAddress = params.sourceToken.abrPayer.payerAddress;
112
+ if (!totalFeeInAbr) {
113
+ throw new models_1.SdkError("Failed to calculate totalFeeInAbr");
114
+ }
115
+ const abrPayerContract = this.getAbrPayerContract(abrPayerAddress);
116
+ const abi = sendMethod.encodeABI();
117
+ const withoutSelector = "0x" + abi.slice(10);
118
+ sendMethod = abrPayerContract.methods.transferTokensAndCallTarget(params.sourceToken.tokenAddress, amount, totalFeeInAbr, messenger, withoutSelector);
119
+ return Promise.resolve({
120
+ from: fromAccountAddress,
121
+ to: abrPayerAddress,
122
+ value: "0",
123
+ data: sendMethod.encodeABI(),
124
+ });
125
+ }
83
126
  return Promise.resolve({
84
127
  from: fromAccountAddress,
85
128
  to: contractAddress,
@@ -94,23 +137,39 @@ class EvmBridgeService extends models_2.ChainBridgeService {
94
137
  let value;
95
138
  if (params.destinationToken.chainType === models_1.ChainType.SOLANA) {
96
139
  const recipient = await (0, get_cctp_sol_token_recipient_address_1.getCctpSolTokenRecipientAddress)(this.chainType, params.toAccountAddress, params.destinationToken.tokenAddress, this.nodeRpcUrlsConfig.getNodeRpcUrl(models_1.ChainSymbol.SOL));
97
- if (gasFeePaymentMethod === models_1.FeePaymentMethod.WITH_STABLECOIN) {
98
- sendMethod = cctpBridgeContract.methods.bridgeWithWalletAddress(amount, recipient, toAccountAddress, toChainId, totalFee);
99
- value = "0";
100
- }
101
- else {
102
- sendMethod = cctpBridgeContract.methods.bridgeWithWalletAddress(amount, recipient, toAccountAddress, toChainId, 0);
103
- value = totalFee;
140
+ switch (gasFeePaymentMethod) {
141
+ case models_1.FeePaymentMethod.WITH_ARB:
142
+ case models_1.FeePaymentMethod.WITH_NATIVE_CURRENCY: {
143
+ sendMethod = cctpBridgeContract.methods.bridgeWithWalletAddress(amount, recipient, toAccountAddress, toChainId, 0);
144
+ value = totalFee;
145
+ break;
146
+ }
147
+ case models_1.FeePaymentMethod.WITH_STABLECOIN: {
148
+ sendMethod = cctpBridgeContract.methods.bridgeWithWalletAddress(amount, recipient, toAccountAddress, toChainId, totalFee);
149
+ value = "0";
150
+ break;
151
+ }
152
+ default: {
153
+ return (0, utils_1.assertNever)(gasFeePaymentMethod, "Unhandled FeePaymentMethod");
154
+ }
104
155
  }
105
156
  }
106
157
  else {
107
- if (gasFeePaymentMethod === models_1.FeePaymentMethod.WITH_STABLECOIN) {
108
- sendMethod = cctpBridgeContract.methods.bridge(amount, toAccountAddress, toChainId, totalFee);
109
- value = "0";
110
- }
111
- else {
112
- sendMethod = cctpBridgeContract.methods.bridge(amount, toAccountAddress, toChainId, 0);
113
- value = totalFee;
158
+ switch (gasFeePaymentMethod) {
159
+ case models_1.FeePaymentMethod.WITH_ARB:
160
+ case models_1.FeePaymentMethod.WITH_NATIVE_CURRENCY: {
161
+ sendMethod = cctpBridgeContract.methods.bridge(amount, toAccountAddress, toChainId, 0);
162
+ value = totalFee;
163
+ break;
164
+ }
165
+ case models_1.FeePaymentMethod.WITH_STABLECOIN: {
166
+ sendMethod = cctpBridgeContract.methods.bridge(amount, toAccountAddress, toChainId, totalFee);
167
+ value = "0";
168
+ break;
169
+ }
170
+ default: {
171
+ return (0, utils_1.assertNever)(gasFeePaymentMethod, "Unhandled FeePaymentMethod");
172
+ }
114
173
  }
115
174
  }
116
175
  return { sendMethod, value };
@@ -120,13 +179,21 @@ class EvmBridgeService extends models_2.ChainBridgeService {
120
179
  const oftBridgeContract = this.getOftBridgeContract(contractAddress);
121
180
  let sendMethod;
122
181
  let value;
123
- if (gasFeePaymentMethod === models_1.FeePaymentMethod.WITH_STABLECOIN) {
124
- sendMethod = oftBridgeContract.methods.bridge(params.sourceToken.tokenAddress, amount, toAccountAddress, toChainId, totalFee, extraGasDest ?? "0", "10");
125
- value = "0";
126
- }
127
- else {
128
- sendMethod = oftBridgeContract.methods.bridge(params.sourceToken.tokenAddress, amount, toAccountAddress, toChainId, 0, extraGasDest ?? "0", "10");
129
- value = totalFee;
182
+ switch (gasFeePaymentMethod) {
183
+ case models_1.FeePaymentMethod.WITH_ARB:
184
+ case models_1.FeePaymentMethod.WITH_NATIVE_CURRENCY: {
185
+ sendMethod = oftBridgeContract.methods.bridge(params.sourceToken.tokenAddress, amount, toAccountAddress, toChainId, 0, extraGasDest ?? "0", "10");
186
+ value = totalFee;
187
+ break;
188
+ }
189
+ case models_1.FeePaymentMethod.WITH_STABLECOIN: {
190
+ sendMethod = oftBridgeContract.methods.bridge(params.sourceToken.tokenAddress, amount, toAccountAddress, toChainId, totalFee, extraGasDest ?? "0", "10");
191
+ value = "0";
192
+ break;
193
+ }
194
+ default: {
195
+ return (0, utils_1.assertNever)(gasFeePaymentMethod, "Unhandled FeePaymentMethod");
196
+ }
130
197
  }
131
198
  return { sendMethod, value };
132
199
  }
@@ -151,6 +218,9 @@ class EvmBridgeService extends models_2.ChainBridgeService {
151
218
  getOftBridgeContract(contractAddress) {
152
219
  return new this.web3.eth.Contract(OftBridge_1.default.abi, contractAddress);
153
220
  }
221
+ getAbrPayerContract(contractAddress) {
222
+ return new this.web3.eth.Contract(PayerWithAbr_1.default.abi, contractAddress);
223
+ }
154
224
  }
155
225
  exports.EvmBridgeService = EvmBridgeService;
156
226
  //# sourceMappingURL=index.js.map