@atomiqlabs/chain-starknet 4.0.0-dev.12 → 4.0.0-dev.13

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 (146) hide show
  1. package/LICENSE +201 -201
  2. package/dist/index.d.ts +38 -38
  3. package/dist/index.js +54 -54
  4. package/dist/starknet/StarknetChainType.d.ts +13 -13
  5. package/dist/starknet/StarknetChainType.js +2 -2
  6. package/dist/starknet/StarknetInitializer.d.ts +27 -27
  7. package/dist/starknet/StarknetInitializer.js +69 -69
  8. package/dist/starknet/btcrelay/BtcRelayAbi.d.ts +250 -250
  9. package/dist/starknet/btcrelay/BtcRelayAbi.js +341 -341
  10. package/dist/starknet/btcrelay/StarknetBtcRelay.d.ts +186 -186
  11. package/dist/starknet/btcrelay/StarknetBtcRelay.js +379 -379
  12. package/dist/starknet/btcrelay/headers/StarknetBtcHeader.d.ts +31 -31
  13. package/dist/starknet/btcrelay/headers/StarknetBtcHeader.js +74 -74
  14. package/dist/starknet/btcrelay/headers/StarknetBtcStoredHeader.d.ts +51 -51
  15. package/dist/starknet/btcrelay/headers/StarknetBtcStoredHeader.js +113 -113
  16. package/dist/starknet/chain/StarknetAction.d.ts +19 -19
  17. package/dist/starknet/chain/StarknetAction.js +73 -73
  18. package/dist/starknet/chain/StarknetChainInterface.d.ts +52 -52
  19. package/dist/starknet/chain/StarknetChainInterface.js +91 -91
  20. package/dist/starknet/chain/StarknetModule.d.ts +14 -14
  21. package/dist/starknet/chain/StarknetModule.js +13 -13
  22. package/dist/starknet/chain/modules/ERC20Abi.d.ts +755 -755
  23. package/dist/starknet/chain/modules/ERC20Abi.js +1032 -1032
  24. package/dist/starknet/chain/modules/StarknetAccounts.d.ts +6 -6
  25. package/dist/starknet/chain/modules/StarknetAccounts.js +24 -24
  26. package/dist/starknet/chain/modules/StarknetAddresses.d.ts +9 -9
  27. package/dist/starknet/chain/modules/StarknetAddresses.js +26 -26
  28. package/dist/starknet/chain/modules/StarknetBlocks.d.ts +20 -20
  29. package/dist/starknet/chain/modules/StarknetBlocks.js +64 -64
  30. package/dist/starknet/chain/modules/StarknetEvents.d.ts +44 -44
  31. package/dist/starknet/chain/modules/StarknetEvents.js +88 -88
  32. package/dist/starknet/chain/modules/StarknetFees.d.ts +77 -77
  33. package/dist/starknet/chain/modules/StarknetFees.js +114 -114
  34. package/dist/starknet/chain/modules/StarknetSignatures.d.ts +29 -29
  35. package/dist/starknet/chain/modules/StarknetSignatures.js +72 -72
  36. package/dist/starknet/chain/modules/StarknetTokens.d.ts +69 -69
  37. package/dist/starknet/chain/modules/StarknetTokens.js +102 -98
  38. package/dist/starknet/chain/modules/StarknetTransactions.d.ts +93 -93
  39. package/dist/starknet/chain/modules/StarknetTransactions.js +261 -260
  40. package/dist/starknet/contract/StarknetContractBase.d.ts +13 -13
  41. package/dist/starknet/contract/StarknetContractBase.js +20 -16
  42. package/dist/starknet/contract/StarknetContractModule.d.ts +8 -8
  43. package/dist/starknet/contract/StarknetContractModule.js +11 -11
  44. package/dist/starknet/contract/modules/StarknetContractEvents.d.ts +51 -51
  45. package/dist/starknet/contract/modules/StarknetContractEvents.js +97 -97
  46. package/dist/starknet/events/StarknetChainEvents.d.ts +21 -21
  47. package/dist/starknet/events/StarknetChainEvents.js +52 -52
  48. package/dist/starknet/events/StarknetChainEventsBrowser.d.ts +89 -90
  49. package/dist/starknet/events/StarknetChainEventsBrowser.js +296 -294
  50. package/dist/starknet/provider/RpcProviderWithRetries.d.ts +21 -21
  51. package/dist/starknet/provider/RpcProviderWithRetries.js +32 -32
  52. package/dist/starknet/spv_swap/SpvVaultContractAbi.d.ts +488 -488
  53. package/dist/starknet/spv_swap/SpvVaultContractAbi.js +656 -656
  54. package/dist/starknet/spv_swap/StarknetSpvVaultContract.d.ts +66 -66
  55. package/dist/starknet/spv_swap/StarknetSpvVaultContract.js +382 -382
  56. package/dist/starknet/spv_swap/StarknetSpvVaultData.d.ts +49 -49
  57. package/dist/starknet/spv_swap/StarknetSpvVaultData.js +145 -145
  58. package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.d.ts +25 -25
  59. package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.js +72 -72
  60. package/dist/starknet/swaps/EscrowManagerAbi.d.ts +431 -431
  61. package/dist/starknet/swaps/EscrowManagerAbi.js +583 -583
  62. package/dist/starknet/swaps/StarknetSwapContract.d.ts +191 -191
  63. package/dist/starknet/swaps/StarknetSwapContract.js +424 -424
  64. package/dist/starknet/swaps/StarknetSwapData.d.ts +74 -74
  65. package/dist/starknet/swaps/StarknetSwapData.js +325 -325
  66. package/dist/starknet/swaps/StarknetSwapModule.d.ts +10 -10
  67. package/dist/starknet/swaps/StarknetSwapModule.js +11 -11
  68. package/dist/starknet/swaps/handlers/IHandler.d.ts +13 -13
  69. package/dist/starknet/swaps/handlers/IHandler.js +2 -2
  70. package/dist/starknet/swaps/handlers/claim/ClaimHandlers.d.ts +13 -13
  71. package/dist/starknet/swaps/handlers/claim/ClaimHandlers.js +13 -13
  72. package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.d.ts +21 -21
  73. package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.js +44 -44
  74. package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.d.ts +24 -24
  75. package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.js +48 -48
  76. package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.d.ts +25 -25
  77. package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.js +40 -40
  78. package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.d.ts +20 -20
  79. package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.js +30 -30
  80. package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.d.ts +45 -45
  81. package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +52 -52
  82. package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.d.ts +17 -17
  83. package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.js +27 -27
  84. package/dist/starknet/swaps/modules/StarknetLpVault.d.ts +69 -69
  85. package/dist/starknet/swaps/modules/StarknetLpVault.js +122 -122
  86. package/dist/starknet/swaps/modules/StarknetSwapClaim.d.ts +53 -53
  87. package/dist/starknet/swaps/modules/StarknetSwapClaim.js +100 -100
  88. package/dist/starknet/swaps/modules/StarknetSwapInit.d.ts +94 -87
  89. package/dist/starknet/swaps/modules/StarknetSwapInit.js +235 -225
  90. package/dist/starknet/swaps/modules/StarknetSwapRefund.d.ts +62 -62
  91. package/dist/starknet/swaps/modules/StarknetSwapRefund.js +128 -128
  92. package/dist/starknet/wallet/StarknetKeypairWallet.d.ts +7 -7
  93. package/dist/starknet/wallet/StarknetKeypairWallet.js +35 -30
  94. package/dist/starknet/wallet/StarknetSigner.d.ts +12 -12
  95. package/dist/starknet/wallet/StarknetSigner.js +47 -46
  96. package/dist/utils/Utils.d.ts +37 -37
  97. package/dist/utils/Utils.js +260 -261
  98. package/package.json +43 -37
  99. package/src/index.ts +47 -47
  100. package/src/starknet/StarknetChainType.ts +28 -28
  101. package/src/starknet/StarknetInitializer.ts +108 -108
  102. package/src/starknet/btcrelay/BtcRelayAbi.ts +338 -338
  103. package/src/starknet/btcrelay/StarknetBtcRelay.ts +494 -494
  104. package/src/starknet/btcrelay/headers/StarknetBtcHeader.ts +100 -100
  105. package/src/starknet/btcrelay/headers/StarknetBtcStoredHeader.ts +141 -141
  106. package/src/starknet/chain/StarknetAction.ts +85 -85
  107. package/src/starknet/chain/StarknetChainInterface.ts +149 -149
  108. package/src/starknet/chain/StarknetModule.ts +19 -19
  109. package/src/starknet/chain/modules/ERC20Abi.ts +1029 -1029
  110. package/src/starknet/chain/modules/StarknetAccounts.ts +25 -25
  111. package/src/starknet/chain/modules/StarknetAddresses.ts +22 -22
  112. package/src/starknet/chain/modules/StarknetBlocks.ts +75 -74
  113. package/src/starknet/chain/modules/StarknetEvents.ts +104 -104
  114. package/src/starknet/chain/modules/StarknetFees.ts +154 -154
  115. package/src/starknet/chain/modules/StarknetSignatures.ts +91 -91
  116. package/src/starknet/chain/modules/StarknetTokens.ts +120 -116
  117. package/src/starknet/chain/modules/StarknetTransactions.ts +285 -283
  118. package/src/starknet/contract/StarknetContractBase.ts +30 -26
  119. package/src/starknet/contract/StarknetContractModule.ts +16 -16
  120. package/src/starknet/contract/modules/StarknetContractEvents.ts +134 -134
  121. package/src/starknet/events/StarknetChainEvents.ts +67 -67
  122. package/src/starknet/events/StarknetChainEventsBrowser.ts +411 -411
  123. package/src/starknet/provider/RpcProviderWithRetries.ts +43 -43
  124. package/src/starknet/spv_swap/SpvVaultContractAbi.ts +656 -656
  125. package/src/starknet/spv_swap/StarknetSpvVaultContract.ts +483 -483
  126. package/src/starknet/spv_swap/StarknetSpvVaultData.ts +195 -195
  127. package/src/starknet/spv_swap/StarknetSpvWithdrawalData.ts +79 -79
  128. package/src/starknet/swaps/EscrowManagerAbi.ts +582 -582
  129. package/src/starknet/swaps/StarknetSwapContract.ts +647 -647
  130. package/src/starknet/swaps/StarknetSwapData.ts +455 -455
  131. package/src/starknet/swaps/StarknetSwapModule.ts +17 -17
  132. package/src/starknet/swaps/handlers/IHandler.ts +20 -20
  133. package/src/starknet/swaps/handlers/claim/ClaimHandlers.ts +23 -23
  134. package/src/starknet/swaps/handlers/claim/HashlockClaimHandler.ts +53 -53
  135. package/src/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.ts +73 -73
  136. package/src/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.ts +67 -67
  137. package/src/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.ts +50 -50
  138. package/src/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +102 -102
  139. package/src/starknet/swaps/handlers/refund/TimelockRefundHandler.ts +38 -38
  140. package/src/starknet/swaps/modules/StarknetLpVault.ts +147 -147
  141. package/src/starknet/swaps/modules/StarknetSwapClaim.ts +141 -141
  142. package/src/starknet/swaps/modules/StarknetSwapInit.ts +300 -287
  143. package/src/starknet/swaps/modules/StarknetSwapRefund.ts +196 -196
  144. package/src/starknet/wallet/StarknetKeypairWallet.ts +44 -39
  145. package/src/starknet/wallet/StarknetSigner.ts +55 -55
  146. package/src/utils/Utils.ts +251 -252
@@ -1,62 +1,62 @@
1
- import { StarknetSwapModule } from "../StarknetSwapModule";
2
- import { StarknetSwapData } from "../StarknetSwapData";
3
- import { StarknetTx } from "../../chain/modules/StarknetTransactions";
4
- import { StarknetSigner } from "../../wallet/StarknetSigner";
5
- export declare class StarknetSwapRefund extends StarknetSwapModule {
6
- private static readonly GasCosts;
7
- /**
8
- * Action for generic Refund instruction
9
- *
10
- * @param signer
11
- * @param swapData
12
- * @param witness
13
- * @param handlerGas
14
- * @constructor
15
- * @private
16
- */
17
- private Refund;
18
- /**
19
- * Action for cooperative refunding with signature
20
- *
21
- * @param sender
22
- * @param swapData
23
- * @param timeout
24
- * @param signature
25
- * @constructor
26
- * @private
27
- */
28
- private RefundWithSignature;
29
- signSwapRefund(signer: StarknetSigner, swapData: StarknetSwapData, authorizationTimeout: number): Promise<{
30
- prefix: string;
31
- timeout: string;
32
- signature: string;
33
- }>;
34
- isSignatureValid(swapData: StarknetSwapData, timeout: string, prefix: string, signature: string): Promise<null>;
35
- /**
36
- * Creates transactions required for refunding timed out swap
37
- *
38
- * @param signer
39
- * @param swapData swap data to refund
40
- * @param check whether to check if swap is already expired and refundable
41
- * @param feeRate fee rate to be used for the transactions
42
- * @param witnessData
43
- */
44
- txsRefund<T>(signer: string, swapData: StarknetSwapData, check?: boolean, feeRate?: string, witnessData?: T): Promise<StarknetTx[]>;
45
- /**
46
- * Creates transactions required for refunding the swap with authorization signature, also unwraps WSOL to SOL
47
- *
48
- * @param signer
49
- * @param swapData swap data to refund
50
- * @param timeout signature timeout
51
- * @param prefix signature prefix of the counterparty
52
- * @param signature signature of the counterparty
53
- * @param check whether to check if swap is committed before attempting refund
54
- * @param feeRate fee rate to be used for the transactions
55
- */
56
- txsRefundWithAuthorization(signer: string, swapData: StarknetSwapData, timeout: string, prefix: string, signature: string, check?: boolean, feeRate?: string): Promise<StarknetTx[]>;
57
- /**
58
- * Get the estimated solana transaction fee of the refund transaction, in the worst case scenario in case where the
59
- * ATA needs to be initialized again (i.e. adding the ATA rent exempt lamports to the fee)
60
- */
61
- getRefundFee(swapData: StarknetSwapData, feeRate?: string): Promise<bigint>;
62
- }
1
+ import { StarknetSwapModule } from "../StarknetSwapModule";
2
+ import { StarknetSwapData } from "../StarknetSwapData";
3
+ import { StarknetTx } from "../../chain/modules/StarknetTransactions";
4
+ import { StarknetSigner } from "../../wallet/StarknetSigner";
5
+ export declare class StarknetSwapRefund extends StarknetSwapModule {
6
+ private static readonly GasCosts;
7
+ /**
8
+ * Action for generic Refund instruction
9
+ *
10
+ * @param signer
11
+ * @param swapData
12
+ * @param witness
13
+ * @param handlerGas
14
+ * @constructor
15
+ * @private
16
+ */
17
+ private Refund;
18
+ /**
19
+ * Action for cooperative refunding with signature
20
+ *
21
+ * @param sender
22
+ * @param swapData
23
+ * @param timeout
24
+ * @param signature
25
+ * @constructor
26
+ * @private
27
+ */
28
+ private RefundWithSignature;
29
+ signSwapRefund(signer: StarknetSigner, swapData: StarknetSwapData, authorizationTimeout: number): Promise<{
30
+ prefix: string;
31
+ timeout: string;
32
+ signature: string;
33
+ }>;
34
+ isSignatureValid(swapData: StarknetSwapData, timeout: string, prefix: string, signature: string): Promise<null>;
35
+ /**
36
+ * Creates transactions required for refunding timed out swap
37
+ *
38
+ * @param signer
39
+ * @param swapData swap data to refund
40
+ * @param check whether to check if swap is already expired and refundable
41
+ * @param feeRate fee rate to be used for the transactions
42
+ * @param witnessData
43
+ */
44
+ txsRefund<T>(signer: string, swapData: StarknetSwapData, check?: boolean, feeRate?: string, witnessData?: T): Promise<StarknetTx[]>;
45
+ /**
46
+ * Creates transactions required for refunding the swap with authorization signature, also unwraps WSOL to SOL
47
+ *
48
+ * @param signer
49
+ * @param swapData swap data to refund
50
+ * @param timeout signature timeout
51
+ * @param prefix signature prefix of the counterparty
52
+ * @param signature signature of the counterparty
53
+ * @param check whether to check if swap is committed before attempting refund
54
+ * @param feeRate fee rate to be used for the transactions
55
+ */
56
+ txsRefundWithAuthorization(signer: string, swapData: StarknetSwapData, timeout: string, prefix: string, signature: string, check?: boolean, feeRate?: string): Promise<StarknetTx[]>;
57
+ /**
58
+ * Get the estimated solana transaction fee of the refund transaction, in the worst case scenario in case where the
59
+ * ATA needs to be initialized again (i.e. adding the ATA rent exempt lamports to the fee)
60
+ */
61
+ getRefundFee(swapData: StarknetSwapData, feeRate?: string): Promise<bigint>;
62
+ }
@@ -1,128 +1,128 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StarknetSwapRefund = void 0;
4
- const base_1 = require("@atomiqlabs/base");
5
- const Utils_1 = require("../../../utils/Utils");
6
- const StarknetSwapModule_1 = require("../StarknetSwapModule");
7
- const StarknetAction_1 = require("../../chain/StarknetAction");
8
- const StarknetFees_1 = require("../../chain/modules/StarknetFees");
9
- const Refund = [
10
- { name: 'Swap hash', type: 'felt' },
11
- { name: 'Timeout', type: 'timestamp' }
12
- ];
13
- class StarknetSwapRefund extends StarknetSwapModule_1.StarknetSwapModule {
14
- /**
15
- * Action for generic Refund instruction
16
- *
17
- * @param signer
18
- * @param swapData
19
- * @param witness
20
- * @param handlerGas
21
- * @constructor
22
- * @private
23
- */
24
- Refund(signer, swapData, witness, handlerGas) {
25
- return new StarknetAction_1.StarknetAction(signer, this.root, this.swapContract.populateTransaction.refund(swapData.toEscrowStruct(), witness), (0, StarknetFees_1.starknetGasAdd)(swapData.payIn ? StarknetSwapRefund.GasCosts.REFUND_PAY_OUT : StarknetSwapRefund.GasCosts.REFUND, handlerGas));
26
- }
27
- /**
28
- * Action for cooperative refunding with signature
29
- *
30
- * @param sender
31
- * @param swapData
32
- * @param timeout
33
- * @param signature
34
- * @constructor
35
- * @private
36
- */
37
- RefundWithSignature(sender, swapData, timeout, signature) {
38
- return new StarknetAction_1.StarknetAction(sender, this.root, this.swapContract.populateTransaction.cooperative_refund(swapData.toEscrowStruct(), signature, BigInt(timeout)), swapData.payIn ? StarknetSwapRefund.GasCosts.REFUND_PAY_OUT : StarknetSwapRefund.GasCosts.REFUND);
39
- }
40
- async signSwapRefund(signer, swapData, authorizationTimeout) {
41
- const authPrefix = "refund";
42
- const authTimeout = Math.floor(Date.now() / 1000) + authorizationTimeout;
43
- const signature = await this.root.Signatures.signTypedMessage(signer, Refund, "Refund", {
44
- "Swap hash": "0x" + swapData.getEscrowHash(),
45
- "Timeout": (0, Utils_1.toHex)(authTimeout)
46
- });
47
- return {
48
- prefix: authPrefix,
49
- timeout: authTimeout.toString(10),
50
- signature: signature
51
- };
52
- }
53
- async isSignatureValid(swapData, timeout, prefix, signature) {
54
- if (prefix !== "refund")
55
- throw new base_1.SignatureVerificationError("Invalid prefix");
56
- const expiryTimestamp = BigInt(timeout);
57
- const currentTimestamp = BigInt(Math.floor(Date.now() / 1000));
58
- const isExpired = (expiryTimestamp - currentTimestamp) < BigInt(this.contract.authGracePeriod);
59
- if (isExpired)
60
- throw new base_1.SignatureVerificationError("Authorization expired!");
61
- const valid = await this.root.Signatures.isValidSignature(signature, swapData.claimer, Refund, "Refund", {
62
- "Swap hash": "0x" + swapData.getEscrowHash(),
63
- "Timeout": (0, Utils_1.toHex)(expiryTimestamp)
64
- });
65
- if (!valid) {
66
- throw new base_1.SignatureVerificationError("Invalid signature!");
67
- }
68
- return null;
69
- }
70
- /**
71
- * Creates transactions required for refunding timed out swap
72
- *
73
- * @param signer
74
- * @param swapData swap data to refund
75
- * @param check whether to check if swap is already expired and refundable
76
- * @param feeRate fee rate to be used for the transactions
77
- * @param witnessData
78
- */
79
- async txsRefund(signer, swapData, check, feeRate, witnessData) {
80
- const refundHandler = this.contract.refundHandlersByAddress[swapData.refundHandler.toLowerCase()];
81
- if (refundHandler == null)
82
- throw new Error("Invalid refund handler");
83
- if (check && !await (0, Utils_1.tryWithRetries)(() => this.contract.isRequestRefundable(swapData.offerer.toString(), swapData), this.retryPolicy)) {
84
- throw new base_1.SwapDataVerificationError("Not refundable yet!");
85
- }
86
- feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
87
- const { initialTxns, witness } = await refundHandler.getWitness(signer, swapData, witnessData, feeRate);
88
- const action = this.Refund(signer, swapData, witness, refundHandler.getGas(swapData));
89
- await action.addToTxs(initialTxns, feeRate);
90
- this.logger.debug("txsRefund(): creating refund transaction, swap: " + swapData.getClaimHash());
91
- return initialTxns;
92
- }
93
- /**
94
- * Creates transactions required for refunding the swap with authorization signature, also unwraps WSOL to SOL
95
- *
96
- * @param signer
97
- * @param swapData swap data to refund
98
- * @param timeout signature timeout
99
- * @param prefix signature prefix of the counterparty
100
- * @param signature signature of the counterparty
101
- * @param check whether to check if swap is committed before attempting refund
102
- * @param feeRate fee rate to be used for the transactions
103
- */
104
- async txsRefundWithAuthorization(signer, swapData, timeout, prefix, signature, check, feeRate) {
105
- if (check && !await (0, Utils_1.tryWithRetries)(() => this.contract.isCommited(swapData), this.retryPolicy)) {
106
- throw new base_1.SwapDataVerificationError("Not correctly committed");
107
- }
108
- await (0, Utils_1.tryWithRetries)(() => this.isSignatureValid(swapData, timeout, prefix, signature), this.retryPolicy, (e) => e instanceof base_1.SignatureVerificationError);
109
- const action = this.RefundWithSignature(signer, swapData, timeout, JSON.parse(signature));
110
- feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
111
- this.logger.debug("txsRefundWithAuthorization(): creating refund transaction, swap: " + swapData.getClaimHash() +
112
- " auth expiry: " + timeout + " signature: " + signature);
113
- return [await action.tx(feeRate)];
114
- }
115
- /**
116
- * Get the estimated solana transaction fee of the refund transaction, in the worst case scenario in case where the
117
- * ATA needs to be initialized again (i.e. adding the ATA rent exempt lamports to the fee)
118
- */
119
- async getRefundFee(swapData, feeRate) {
120
- feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
121
- return StarknetFees_1.StarknetFees.getGasFee(swapData.payIn ? StarknetSwapRefund.GasCosts.REFUND_PAY_OUT : StarknetSwapRefund.GasCosts.REFUND, feeRate);
122
- }
123
- }
124
- exports.StarknetSwapRefund = StarknetSwapRefund;
125
- StarknetSwapRefund.GasCosts = {
126
- REFUND: { l1DataGas: 750, l2Gas: 4000000, l1Gas: 0 },
127
- REFUND_PAY_OUT: { l1DataGas: 900, l2Gas: 6000000, l1Gas: 0 }
128
- };
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StarknetSwapRefund = void 0;
4
+ const base_1 = require("@atomiqlabs/base");
5
+ const Utils_1 = require("../../../utils/Utils");
6
+ const StarknetSwapModule_1 = require("../StarknetSwapModule");
7
+ const StarknetAction_1 = require("../../chain/StarknetAction");
8
+ const StarknetFees_1 = require("../../chain/modules/StarknetFees");
9
+ const Refund = [
10
+ { name: 'Swap hash', type: 'felt' },
11
+ { name: 'Timeout', type: 'timestamp' }
12
+ ];
13
+ class StarknetSwapRefund extends StarknetSwapModule_1.StarknetSwapModule {
14
+ /**
15
+ * Action for generic Refund instruction
16
+ *
17
+ * @param signer
18
+ * @param swapData
19
+ * @param witness
20
+ * @param handlerGas
21
+ * @constructor
22
+ * @private
23
+ */
24
+ Refund(signer, swapData, witness, handlerGas) {
25
+ return new StarknetAction_1.StarknetAction(signer, this.root, this.swapContract.populateTransaction.refund(swapData.toEscrowStruct(), witness), (0, StarknetFees_1.starknetGasAdd)(swapData.payIn ? StarknetSwapRefund.GasCosts.REFUND_PAY_OUT : StarknetSwapRefund.GasCosts.REFUND, handlerGas));
26
+ }
27
+ /**
28
+ * Action for cooperative refunding with signature
29
+ *
30
+ * @param sender
31
+ * @param swapData
32
+ * @param timeout
33
+ * @param signature
34
+ * @constructor
35
+ * @private
36
+ */
37
+ RefundWithSignature(sender, swapData, timeout, signature) {
38
+ return new StarknetAction_1.StarknetAction(sender, this.root, this.swapContract.populateTransaction.cooperative_refund(swapData.toEscrowStruct(), signature, BigInt(timeout)), swapData.payIn ? StarknetSwapRefund.GasCosts.REFUND_PAY_OUT : StarknetSwapRefund.GasCosts.REFUND);
39
+ }
40
+ async signSwapRefund(signer, swapData, authorizationTimeout) {
41
+ const authPrefix = "refund";
42
+ const authTimeout = Math.floor(Date.now() / 1000) + authorizationTimeout;
43
+ const signature = await this.root.Signatures.signTypedMessage(signer, Refund, "Refund", {
44
+ "Swap hash": "0x" + swapData.getEscrowHash(),
45
+ "Timeout": (0, Utils_1.toHex)(authTimeout)
46
+ });
47
+ return {
48
+ prefix: authPrefix,
49
+ timeout: authTimeout.toString(10),
50
+ signature: signature
51
+ };
52
+ }
53
+ async isSignatureValid(swapData, timeout, prefix, signature) {
54
+ if (prefix !== "refund")
55
+ throw new base_1.SignatureVerificationError("Invalid prefix");
56
+ const expiryTimestamp = BigInt(timeout);
57
+ const currentTimestamp = BigInt(Math.floor(Date.now() / 1000));
58
+ const isExpired = (expiryTimestamp - currentTimestamp) < BigInt(this.contract.authGracePeriod);
59
+ if (isExpired)
60
+ throw new base_1.SignatureVerificationError("Authorization expired!");
61
+ const valid = await this.root.Signatures.isValidSignature(signature, swapData.claimer, Refund, "Refund", {
62
+ "Swap hash": "0x" + swapData.getEscrowHash(),
63
+ "Timeout": (0, Utils_1.toHex)(expiryTimestamp)
64
+ });
65
+ if (!valid) {
66
+ throw new base_1.SignatureVerificationError("Invalid signature!");
67
+ }
68
+ return null;
69
+ }
70
+ /**
71
+ * Creates transactions required for refunding timed out swap
72
+ *
73
+ * @param signer
74
+ * @param swapData swap data to refund
75
+ * @param check whether to check if swap is already expired and refundable
76
+ * @param feeRate fee rate to be used for the transactions
77
+ * @param witnessData
78
+ */
79
+ async txsRefund(signer, swapData, check, feeRate, witnessData) {
80
+ const refundHandler = this.contract.refundHandlersByAddress[swapData.refundHandler.toLowerCase()];
81
+ if (refundHandler == null)
82
+ throw new Error("Invalid refund handler");
83
+ if (check && !await (0, Utils_1.tryWithRetries)(() => this.contract.isRequestRefundable(swapData.offerer.toString(), swapData), this.retryPolicy)) {
84
+ throw new base_1.SwapDataVerificationError("Not refundable yet!");
85
+ }
86
+ feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
87
+ const { initialTxns, witness } = await refundHandler.getWitness(signer, swapData, witnessData, feeRate);
88
+ const action = this.Refund(signer, swapData, witness, refundHandler.getGas(swapData));
89
+ await action.addToTxs(initialTxns, feeRate);
90
+ this.logger.debug("txsRefund(): creating refund transaction, swap: " + swapData.getClaimHash());
91
+ return initialTxns;
92
+ }
93
+ /**
94
+ * Creates transactions required for refunding the swap with authorization signature, also unwraps WSOL to SOL
95
+ *
96
+ * @param signer
97
+ * @param swapData swap data to refund
98
+ * @param timeout signature timeout
99
+ * @param prefix signature prefix of the counterparty
100
+ * @param signature signature of the counterparty
101
+ * @param check whether to check if swap is committed before attempting refund
102
+ * @param feeRate fee rate to be used for the transactions
103
+ */
104
+ async txsRefundWithAuthorization(signer, swapData, timeout, prefix, signature, check, feeRate) {
105
+ if (check && !await (0, Utils_1.tryWithRetries)(() => this.contract.isCommited(swapData), this.retryPolicy)) {
106
+ throw new base_1.SwapDataVerificationError("Not correctly committed");
107
+ }
108
+ await (0, Utils_1.tryWithRetries)(() => this.isSignatureValid(swapData, timeout, prefix, signature), this.retryPolicy, (e) => e instanceof base_1.SignatureVerificationError);
109
+ const action = this.RefundWithSignature(signer, swapData, timeout, JSON.parse(signature));
110
+ feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
111
+ this.logger.debug("txsRefundWithAuthorization(): creating refund transaction, swap: " + swapData.getClaimHash() +
112
+ " auth expiry: " + timeout + " signature: " + signature);
113
+ return [await action.tx(feeRate)];
114
+ }
115
+ /**
116
+ * Get the estimated solana transaction fee of the refund transaction, in the worst case scenario in case where the
117
+ * ATA needs to be initialized again (i.e. adding the ATA rent exempt lamports to the fee)
118
+ */
119
+ async getRefundFee(swapData, feeRate) {
120
+ feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
121
+ return StarknetFees_1.StarknetFees.getGasFee(swapData.payIn ? StarknetSwapRefund.GasCosts.REFUND_PAY_OUT : StarknetSwapRefund.GasCosts.REFUND, feeRate);
122
+ }
123
+ }
124
+ exports.StarknetSwapRefund = StarknetSwapRefund;
125
+ StarknetSwapRefund.GasCosts = {
126
+ REFUND: { l1DataGas: 750, l2Gas: 4000000, l1Gas: 0 },
127
+ REFUND_PAY_OUT: { l1DataGas: 900, l2Gas: 6000000, l1Gas: 0 }
128
+ };
@@ -1,7 +1,7 @@
1
- import { Account, DeployAccountContractPayload, Provider } from "starknet";
2
- export declare class StarknetKeypairWallet extends Account {
3
- readonly publicKey: string;
4
- constructor(provider: Provider, privateKey: string);
5
- getDeploymentData(): DeployAccountContractPayload;
6
- static generateRandomPrivateKey(): string;
7
- }
1
+ import { Account, DeployAccountContractPayload, Provider } from "starknet";
2
+ export declare class StarknetKeypairWallet extends Account {
3
+ readonly publicKey: string;
4
+ constructor(provider: Provider, privateKey: string);
5
+ getDeploymentData(): DeployAccountContractPayload;
6
+ static generateRandomPrivateKey(): string;
7
+ }
@@ -1,30 +1,35 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StarknetKeypairWallet = void 0;
4
- const starknet_1 = require("starknet");
5
- const Utils_1 = require("../../utils/Utils");
6
- const buffer_1 = require("buffer");
7
- const OZaccountClassHash = '0x00261c293c8084cd79086214176b33e5911677cec55104fddc8d25b0b736dcad';
8
- //Openzeppelin Account wallet
9
- class StarknetKeypairWallet extends starknet_1.Account {
10
- constructor(provider, privateKey) {
11
- const publicKey = starknet_1.ec.starkCurve.getStarkKey((0, Utils_1.toHex)(privateKey));
12
- // Calculate future address of the account
13
- const OZaccountConstructorCallData = starknet_1.CallData.compile({ publicKey });
14
- const OZcontractAddress = starknet_1.hash.calculateContractAddressFromHash(publicKey, OZaccountClassHash, OZaccountConstructorCallData, 0);
15
- super(provider, OZcontractAddress, privateKey, "1");
16
- this.publicKey = publicKey;
17
- }
18
- getDeploymentData() {
19
- return {
20
- classHash: OZaccountClassHash,
21
- constructorCalldata: starknet_1.CallData.compile({ publicKey: this.publicKey }),
22
- addressSalt: this.publicKey,
23
- contractAddress: this.address
24
- };
25
- }
26
- static generateRandomPrivateKey() {
27
- return "0x" + buffer_1.Buffer.from(starknet_1.ec.starkCurve.utils.randomPrivateKey()).toString("hex");
28
- }
29
- }
30
- exports.StarknetKeypairWallet = StarknetKeypairWallet;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StarknetKeypairWallet = void 0;
4
+ const starknet_1 = require("starknet");
5
+ const Utils_1 = require("../../utils/Utils");
6
+ const buffer_1 = require("buffer");
7
+ const OZaccountClassHash = '0x00261c293c8084cd79086214176b33e5911677cec55104fddc8d25b0b736dcad';
8
+ //Openzeppelin Account wallet
9
+ class StarknetKeypairWallet extends starknet_1.Account {
10
+ constructor(provider, privateKey) {
11
+ const publicKey = starknet_1.ec.starkCurve.getStarkKey((0, Utils_1.toHex)(privateKey));
12
+ // Calculate future address of the account
13
+ const OZaccountConstructorCallData = starknet_1.CallData.compile({ publicKey });
14
+ const OZcontractAddress = starknet_1.hash.calculateContractAddressFromHash(publicKey, OZaccountClassHash, OZaccountConstructorCallData, 0);
15
+ super({
16
+ provider,
17
+ address: OZcontractAddress,
18
+ signer: privateKey,
19
+ cairoVersion: "1"
20
+ });
21
+ this.publicKey = publicKey;
22
+ }
23
+ getDeploymentData() {
24
+ return {
25
+ classHash: OZaccountClassHash,
26
+ constructorCalldata: starknet_1.CallData.compile({ publicKey: this.publicKey }),
27
+ addressSalt: this.publicKey,
28
+ contractAddress: this.address
29
+ };
30
+ }
31
+ static generateRandomPrivateKey() {
32
+ return "0x" + buffer_1.Buffer.from(starknet_1.ec.starkCurve.utils.randomPrivateKey()).toString("hex");
33
+ }
34
+ }
35
+ exports.StarknetKeypairWallet = StarknetKeypairWallet;
@@ -1,12 +1,12 @@
1
- import { AbstractSigner } from "@atomiqlabs/base";
2
- import { Account, DeployAccountContractPayload } from "starknet";
3
- export declare class StarknetSigner implements AbstractSigner {
4
- account: Account;
5
- isDeployed: boolean;
6
- constructor(account: Account);
7
- getPublicKey(): Promise<string>;
8
- getAddress(): string;
9
- isWalletAccount(): boolean;
10
- getNonce(): Promise<bigint>;
11
- checkAndGetDeployPayload(nonce?: bigint): Promise<DeployAccountContractPayload | null>;
12
- }
1
+ import { AbstractSigner } from "@atomiqlabs/base";
2
+ import { Account, DeployAccountContractPayload } from "starknet";
3
+ export declare class StarknetSigner implements AbstractSigner {
4
+ account: Account;
5
+ isDeployed: boolean;
6
+ constructor(account: Account);
7
+ getPublicKey(): Promise<string>;
8
+ getAddress(): string;
9
+ isWalletAccount(): boolean;
10
+ getNonce(): Promise<bigint>;
11
+ checkAndGetDeployPayload(nonce?: bigint): Promise<DeployAccountContractPayload | null>;
12
+ }
@@ -1,46 +1,47 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StarknetSigner = void 0;
4
- const Utils_1 = require("../../utils/Utils");
5
- class StarknetSigner {
6
- constructor(account) {
7
- this.isDeployed = null;
8
- this.account = account;
9
- }
10
- getPublicKey() {
11
- return this.account.signer.getPubKey();
12
- }
13
- getAddress() {
14
- return (0, Utils_1.toHex)(this.account.address);
15
- }
16
- isWalletAccount() {
17
- return this.account.walletProvider != null;
18
- }
19
- //TODO: Introduce proper nonce management!
20
- async getNonce() {
21
- try {
22
- return BigInt(await this.account.getNonceForAddress(this.getAddress(), "pending"));
23
- }
24
- catch (e) {
25
- if (e.message != null && e.message.includes("20: Contract not found")) {
26
- return BigInt(0);
27
- }
28
- throw e;
29
- }
30
- }
31
- async checkAndGetDeployPayload(nonce) {
32
- if (this.isDeployed)
33
- return null;
34
- const _account = this.account;
35
- if (_account.getDeploymentData != null) {
36
- //Check if deployed
37
- nonce ?? (nonce = BigInt(await this.getNonce()));
38
- this.isDeployed = nonce != BigInt(0);
39
- if (!this.isDeployed) {
40
- return _account.getDeploymentData();
41
- }
42
- }
43
- return null;
44
- }
45
- }
46
- exports.StarknetSigner = StarknetSigner;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StarknetSigner = void 0;
4
+ const starknet_1 = require("starknet");
5
+ const Utils_1 = require("../../utils/Utils");
6
+ class StarknetSigner {
7
+ constructor(account) {
8
+ this.isDeployed = null;
9
+ this.account = account;
10
+ }
11
+ getPublicKey() {
12
+ return this.account.signer.getPubKey();
13
+ }
14
+ getAddress() {
15
+ return (0, Utils_1.toHex)(this.account.address);
16
+ }
17
+ isWalletAccount() {
18
+ return this.account.walletProvider != null;
19
+ }
20
+ //TODO: Introduce proper nonce management!
21
+ async getNonce() {
22
+ try {
23
+ return BigInt(await this.account.getNonceForAddress(this.getAddress(), starknet_1.BlockTag.PRE_CONFIRMED));
24
+ }
25
+ catch (e) {
26
+ if (e.message != null && e.message.includes("20: Contract not found")) {
27
+ return BigInt(0);
28
+ }
29
+ throw e;
30
+ }
31
+ }
32
+ async checkAndGetDeployPayload(nonce) {
33
+ if (this.isDeployed)
34
+ return null;
35
+ const _account = this.account;
36
+ if (_account.getDeploymentData != null) {
37
+ //Check if deployed
38
+ nonce ?? (nonce = BigInt(await this.getNonce()));
39
+ this.isDeployed = nonce != BigInt(0);
40
+ if (!this.isDeployed) {
41
+ return _account.getDeploymentData();
42
+ }
43
+ }
44
+ return null;
45
+ }
46
+ }
47
+ exports.StarknetSigner = StarknetSigner;