@atomiqlabs/chain-starknet 8.0.13 → 8.1.10

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 (119) hide show
  1. package/dist/index.d.ts +18 -18
  2. package/dist/index.js +42 -42
  3. package/dist/starknet/StarknetChainType.d.ts +19 -19
  4. package/dist/starknet/StarknetChainType.js +2 -2
  5. package/dist/starknet/StarknetInitializer.d.ts +66 -63
  6. package/dist/starknet/StarknetInitializer.js +101 -101
  7. package/dist/starknet/btcrelay/BtcRelayAbi.d.ts +250 -250
  8. package/dist/starknet/btcrelay/BtcRelayAbi.js +341 -341
  9. package/dist/starknet/btcrelay/StarknetBtcRelay.d.ts +196 -196
  10. package/dist/starknet/btcrelay/StarknetBtcRelay.js +419 -411
  11. package/dist/starknet/btcrelay/headers/StarknetBtcHeader.d.ts +70 -70
  12. package/dist/starknet/btcrelay/headers/StarknetBtcHeader.js +115 -115
  13. package/dist/starknet/btcrelay/headers/StarknetBtcStoredHeader.d.ts +91 -91
  14. package/dist/starknet/btcrelay/headers/StarknetBtcStoredHeader.js +155 -155
  15. package/dist/starknet/chain/StarknetAction.d.ts +19 -19
  16. package/dist/starknet/chain/StarknetAction.js +74 -74
  17. package/dist/starknet/chain/StarknetChainInterface.d.ts +142 -143
  18. package/dist/starknet/chain/StarknetChainInterface.js +198 -199
  19. package/dist/starknet/chain/StarknetModule.d.ts +8 -8
  20. package/dist/starknet/chain/StarknetModule.js +12 -12
  21. package/dist/starknet/chain/modules/ERC20Abi.d.ts +755 -755
  22. package/dist/starknet/chain/modules/ERC20Abi.js +1032 -1032
  23. package/dist/starknet/chain/modules/StarknetAccounts.d.ts +6 -6
  24. package/dist/starknet/chain/modules/StarknetAccounts.js +26 -26
  25. package/dist/starknet/chain/modules/StarknetAddresses.d.ts +10 -10
  26. package/dist/starknet/chain/modules/StarknetAddresses.js +27 -27
  27. package/dist/starknet/chain/modules/StarknetBlocks.d.ts +27 -27
  28. package/dist/starknet/chain/modules/StarknetBlocks.js +82 -82
  29. package/dist/starknet/chain/modules/StarknetEvents.d.ts +47 -47
  30. package/dist/starknet/chain/modules/StarknetEvents.js +90 -90
  31. package/dist/starknet/chain/modules/StarknetFees.d.ts +118 -104
  32. package/dist/starknet/chain/modules/StarknetFees.js +150 -146
  33. package/dist/starknet/chain/modules/StarknetSignatures.d.ts +29 -29
  34. package/dist/starknet/chain/modules/StarknetSignatures.js +72 -72
  35. package/dist/starknet/chain/modules/StarknetTokens.d.ts +66 -66
  36. package/dist/starknet/chain/modules/StarknetTokens.js +99 -99
  37. package/dist/starknet/chain/modules/StarknetTransactions.d.ts +122 -115
  38. package/dist/starknet/chain/modules/StarknetTransactions.js +633 -612
  39. package/dist/starknet/contract/StarknetContractBase.d.ts +14 -13
  40. package/dist/starknet/contract/StarknetContractBase.js +21 -20
  41. package/dist/starknet/contract/StarknetContractModule.d.ts +8 -8
  42. package/dist/starknet/contract/StarknetContractModule.js +11 -11
  43. package/dist/starknet/contract/modules/StarknetContractEvents.d.ts +56 -57
  44. package/dist/starknet/contract/modules/StarknetContractEvents.js +111 -111
  45. package/dist/starknet/events/StarknetChainEvents.d.ts +21 -21
  46. package/dist/starknet/events/StarknetChainEvents.js +61 -61
  47. package/dist/starknet/events/StarknetChainEventsBrowser.d.ts +178 -190
  48. package/dist/starknet/events/StarknetChainEventsBrowser.js +523 -582
  49. package/dist/starknet/provider/RpcProviderWithRetries.d.ts +49 -53
  50. package/dist/starknet/provider/RpcProviderWithRetries.js +94 -94
  51. package/dist/starknet/provider/WebSocketChannelWithRetries.d.ts +21 -21
  52. package/dist/starknet/provider/WebSocketChannelWithRetries.js +46 -46
  53. package/dist/starknet/spv_swap/SpvVaultContractAbi.d.ts +488 -488
  54. package/dist/starknet/spv_swap/SpvVaultContractAbi.js +656 -656
  55. package/dist/starknet/spv_swap/StarknetSpvVaultContract.d.ts +225 -219
  56. package/dist/starknet/spv_swap/StarknetSpvVaultContract.js +663 -621
  57. package/dist/starknet/spv_swap/StarknetSpvVaultData.d.ts +108 -108
  58. package/dist/starknet/spv_swap/StarknetSpvVaultData.js +190 -190
  59. package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.d.ts +56 -56
  60. package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.js +103 -103
  61. package/dist/starknet/swaps/EscrowManagerAbi.d.ts +431 -431
  62. package/dist/starknet/swaps/EscrowManagerAbi.js +583 -583
  63. package/dist/starknet/swaps/StarknetSwapContract.d.ts +309 -278
  64. package/dist/starknet/swaps/StarknetSwapContract.js +755 -579
  65. package/dist/starknet/swaps/StarknetSwapData.d.ts +234 -234
  66. package/dist/starknet/swaps/StarknetSwapData.js +474 -474
  67. package/dist/starknet/swaps/StarknetSwapModule.d.ts +10 -10
  68. package/dist/starknet/swaps/StarknetSwapModule.js +12 -12
  69. package/dist/starknet/swaps/handlers/IHandler.d.ts +13 -13
  70. package/dist/starknet/swaps/handlers/IHandler.js +2 -2
  71. package/dist/starknet/swaps/handlers/claim/ClaimHandlers.d.ts +13 -13
  72. package/dist/starknet/swaps/handlers/claim/ClaimHandlers.js +13 -13
  73. package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.d.ts +21 -21
  74. package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.js +44 -44
  75. package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.d.ts +24 -24
  76. package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.js +48 -48
  77. package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.d.ts +25 -25
  78. package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.js +40 -40
  79. package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.d.ts +20 -20
  80. package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.js +30 -30
  81. package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.d.ts +42 -45
  82. package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +50 -54
  83. package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.d.ts +17 -17
  84. package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.js +27 -27
  85. package/dist/starknet/swaps/modules/StarknetLpVault.d.ts +67 -67
  86. package/dist/starknet/swaps/modules/StarknetLpVault.js +122 -122
  87. package/dist/starknet/swaps/modules/StarknetSwapClaim.d.ts +52 -52
  88. package/dist/starknet/swaps/modules/StarknetSwapClaim.js +99 -99
  89. package/dist/starknet/swaps/modules/StarknetSwapInit.d.ts +94 -94
  90. package/dist/starknet/swaps/modules/StarknetSwapInit.js +239 -239
  91. package/dist/starknet/swaps/modules/StarknetSwapRefund.d.ts +60 -60
  92. package/dist/starknet/swaps/modules/StarknetSwapRefund.js +126 -126
  93. package/dist/starknet/wallet/StarknetBrowserSigner.d.ts +11 -11
  94. package/dist/starknet/wallet/StarknetBrowserSigner.js +17 -17
  95. package/dist/starknet/wallet/StarknetPersistentSigner.d.ts +76 -76
  96. package/dist/starknet/wallet/StarknetPersistentSigner.js +291 -291
  97. package/dist/starknet/wallet/StarknetSigner.d.ts +72 -72
  98. package/dist/starknet/wallet/StarknetSigner.js +114 -114
  99. package/dist/starknet/wallet/accounts/StarknetKeypairWallet.d.ts +18 -18
  100. package/dist/starknet/wallet/accounts/StarknetKeypairWallet.js +45 -45
  101. package/dist/utils/Utils.d.ts +77 -77
  102. package/dist/utils/Utils.js +304 -303
  103. package/package.json +2 -2
  104. package/src/starknet/StarknetInitializer.ts +6 -3
  105. package/src/starknet/btcrelay/StarknetBtcRelay.ts +19 -6
  106. package/src/starknet/btcrelay/headers/StarknetBtcHeader.ts +7 -7
  107. package/src/starknet/btcrelay/headers/StarknetBtcStoredHeader.ts +6 -6
  108. package/src/starknet/chain/StarknetAction.ts +1 -0
  109. package/src/starknet/chain/StarknetChainInterface.ts +0 -2
  110. package/src/starknet/chain/modules/StarknetFees.ts +15 -2
  111. package/src/starknet/chain/modules/StarknetTransactions.ts +24 -0
  112. package/src/starknet/contract/StarknetContractBase.ts +7 -4
  113. package/src/starknet/contract/StarknetContractModule.ts +1 -1
  114. package/src/starknet/contract/modules/StarknetContractEvents.ts +7 -7
  115. package/src/starknet/events/StarknetChainEventsBrowser.ts +2 -64
  116. package/src/starknet/provider/RpcProviderWithRetries.ts +1 -1
  117. package/src/starknet/spv_swap/StarknetSpvVaultContract.ts +84 -18
  118. package/src/starknet/swaps/StarknetSwapContract.ts +242 -6
  119. package/src/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +0 -4
@@ -1,239 +1,239 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StarknetSwapInit = void 0;
4
- const base_1 = require("@atomiqlabs/base");
5
- const Utils_1 = require("../../../utils/Utils");
6
- const buffer_1 = require("buffer");
7
- const StarknetAction_1 = require("../../chain/StarknetAction");
8
- const StarknetSwapModule_1 = require("../StarknetSwapModule");
9
- const starknet_1 = require("starknet");
10
- const StarknetFees_1 = require("../../chain/modules/StarknetFees");
11
- const Initialize = [
12
- { name: 'Swap hash', type: 'felt' },
13
- { name: 'Offerer', type: 'ContractAddress' },
14
- { name: 'Claimer', type: 'ContractAddress' },
15
- { name: 'Token amount', type: 'TokenAmount' },
16
- { name: 'Pay in', type: 'bool' },
17
- { name: 'Pay out', type: 'bool' },
18
- { name: 'Tracking reputation', type: 'bool' },
19
- { name: 'Claim handler', type: 'ContractAddress' },
20
- { name: 'Claim data', type: 'felt' },
21
- { name: 'Refund handler', type: 'ContractAddress' },
22
- { name: 'Refund data', type: 'felt' },
23
- { name: 'Security deposit', type: 'TokenAmount' },
24
- { name: 'Claimer bounty', type: 'TokenAmount' },
25
- { name: 'Claim action hash', type: 'felt' },
26
- { name: 'Deadline', type: 'timestamp' }
27
- ];
28
- class StarknetSwapInit extends StarknetSwapModule_1.StarknetSwapModule {
29
- /**
30
- * bare Init action based on the data passed in swapData
31
- *
32
- * @param signer
33
- * @param swapData
34
- * @param timeout
35
- * @param signature
36
- * @private
37
- */
38
- Init(signer, swapData, timeout, signature) {
39
- return new StarknetAction_1.StarknetAction(signer, this.root, this.swapContract.populateTransaction.initialize(swapData.toEscrowStruct(), signature ?? [], timeout, swapData.extraData == null || swapData.extraData === ""
40
- ? []
41
- : (0, Utils_1.bufferToBytes31Span)(buffer_1.Buffer.from(swapData.extraData, "hex")).map(val => (0, Utils_1.toHex)(val))), swapData.payIn ? StarknetSwapInit.GasCosts.INIT_PAY_IN : StarknetSwapInit.GasCosts.INIT);
42
- }
43
- /**
44
- * Returns auth prefix to be used with a specific swap, payIn=true & payIn=false use different prefixes (these
45
- * actually have no meaning for the smart contract/solana program in the Solana case)
46
- *
47
- * @param swapData
48
- * @private
49
- */
50
- getAuthPrefix(swapData) {
51
- return swapData.isPayIn() ? "claim_initialize" : "initialize";
52
- }
53
- async preFetchForInitSignatureVerification() {
54
- return {
55
- pendingBlockTime: await this.root.Blocks.getBlockTime(starknet_1.BlockTag.PRE_CONFIRMED)
56
- };
57
- }
58
- /**
59
- * Signs swap initialization authorization, using data from preFetchedBlockData if provided & still valid (subject
60
- * to SIGNATURE_PREFETCH_DATA_VALIDITY)
61
- *
62
- * @param signer
63
- * @param swapData
64
- * @param authorizationTimeout
65
- * @public
66
- */
67
- async signSwapInitialization(signer, swapData, authorizationTimeout) {
68
- const authTimeout = Math.floor(Date.now() / 1000) + authorizationTimeout;
69
- const signature = await this.root.Signatures.signTypedMessage(signer, Initialize, "Initialize", {
70
- "Swap hash": "0x" + swapData.getEscrowHash(),
71
- "Offerer": swapData.offerer,
72
- "Claimer": swapData.claimer,
73
- "Token amount": {
74
- token_address: swapData.token,
75
- amount: starknet_1.cairo.uint256(swapData.amount)
76
- },
77
- "Pay in": swapData.isPayIn(),
78
- "Pay out": swapData.isPayOut(),
79
- "Tracking reputation": swapData.reputation,
80
- "Refund handler": swapData.refundHandler,
81
- "Claim handler": swapData.claimHandler,
82
- "Claim data": "0x" + swapData.getClaimHash(),
83
- "Refund data": swapData.refundData.startsWith("0x") ? swapData.refundData : "0x" + swapData.refundData,
84
- "Security deposit": {
85
- token_address: swapData.feeToken,
86
- amount: starknet_1.cairo.uint256(swapData.securityDeposit)
87
- },
88
- "Claimer bounty": {
89
- token_address: swapData.feeToken,
90
- amount: starknet_1.cairo.uint256(swapData.claimerBounty)
91
- },
92
- "Claim action hash": 0n,
93
- "Deadline": (0, Utils_1.toHex)(authTimeout)
94
- });
95
- return {
96
- prefix: this.getAuthPrefix(swapData),
97
- timeout: authTimeout.toString(10),
98
- signature
99
- };
100
- }
101
- /**
102
- * Checks whether the provided signature data is valid, using preFetchedData if provided and still valid
103
- *
104
- * @param sender
105
- * @param swapData
106
- * @param timeout
107
- * @param prefix
108
- * @param signature
109
- * @param preFetchData
110
- * @public
111
- */
112
- async isSignatureValid(sender, swapData, timeout, prefix, signature, preFetchData) {
113
- if (!swapData.isOfferer(sender) && !swapData.isClaimer(sender))
114
- throw new base_1.SignatureVerificationError("TX sender not offerer nor claimer");
115
- const signer = swapData.isOfferer(sender) ? swapData.claimer : swapData.offerer;
116
- if (!swapData.isPayIn() && await this.contract.isExpired(sender.toString(), swapData)) {
117
- throw new base_1.SignatureVerificationError("Swap will expire too soon!");
118
- }
119
- if (prefix !== this.getAuthPrefix(swapData))
120
- throw new base_1.SignatureVerificationError("Invalid prefix");
121
- const currentTimestamp = BigInt(Math.floor(Date.now() / 1000));
122
- const timeoutBN = BigInt(timeout);
123
- const isExpired = (timeoutBN - currentTimestamp) < BigInt(this.contract.authGracePeriod);
124
- if (isExpired)
125
- throw new base_1.SignatureVerificationError("Authorization expired!");
126
- if (await this.isSignatureSoftExpired(timeout, preFetchData))
127
- throw new base_1.SignatureVerificationError("Authorization expired!");
128
- const valid = await this.root.Signatures.isValidSignature(signature, signer, Initialize, "Initialize", {
129
- "Swap hash": "0x" + swapData.getEscrowHash(),
130
- "Offerer": swapData.offerer,
131
- "Claimer": swapData.claimer,
132
- "Token amount": {
133
- token_address: swapData.token,
134
- amount: starknet_1.cairo.uint256(swapData.amount)
135
- },
136
- "Pay in": swapData.isPayIn(),
137
- "Pay out": swapData.isPayOut(),
138
- "Tracking reputation": swapData.reputation,
139
- "Refund handler": swapData.refundHandler,
140
- "Claim handler": swapData.claimHandler,
141
- "Claim data": "0x" + swapData.getClaimHash(),
142
- "Refund data": swapData.refundData.startsWith("0x") ? swapData.refundData : "0x" + swapData.refundData,
143
- "Security deposit": {
144
- token_address: swapData.feeToken,
145
- amount: starknet_1.cairo.uint256(swapData.securityDeposit)
146
- },
147
- "Claimer bounty": {
148
- token_address: swapData.feeToken,
149
- amount: starknet_1.cairo.uint256(swapData.claimerBounty)
150
- },
151
- "Claim action hash": 0n,
152
- "Deadline": (0, Utils_1.toHex)(timeoutBN)
153
- });
154
- if (!valid)
155
- throw new base_1.SignatureVerificationError("Invalid signature!");
156
- return null;
157
- }
158
- /**
159
- * Gets expiry of the provided signature data, this is a minimum of slot expiry & swap signature expiry
160
- *
161
- * @param timeout
162
- * @public
163
- */
164
- async getSignatureExpiry(timeout) {
165
- const now = Date.now();
166
- const timeoutExpiryTime = (parseInt(timeout) - this.contract.authGracePeriod) * 1000;
167
- if (timeoutExpiryTime < now)
168
- return 0;
169
- return timeoutExpiryTime;
170
- }
171
- /**
172
- * Checks whether signature is soft expired, compares the timestamp to the current "pre-confirmed" block timestamp
173
- *
174
- * @param timeout
175
- * @param preFetchData
176
- * @public
177
- */
178
- async isSignatureSoftExpired(timeout, preFetchData) {
179
- if (preFetchData == null || preFetchData.pendingBlockTime == null) {
180
- preFetchData = await this.preFetchForInitSignatureVerification();
181
- }
182
- return preFetchData.pendingBlockTime > parseInt(timeout);
183
- }
184
- /**
185
- * Checks whether signature is expired for good, compares the timestamp to the current "latest" block timestamp
186
- *
187
- * @param timeout
188
- * @public
189
- */
190
- async isSignatureExpired(timeout) {
191
- const blockTime = await this.root.Blocks.getBlockTime(starknet_1.BlockTag.LATEST);
192
- return blockTime > parseInt(timeout);
193
- }
194
- /**
195
- * Creates init transaction with a valid signature from an LP
196
- *
197
- * @param sender
198
- * @param swapData swap to initialize
199
- * @param timeout init signature timeout
200
- * @param prefix init signature prefix
201
- * @param signature init signature
202
- * @param skipChecks whether to skip signature validity checks
203
- * @param feeRate fee rate to use for the transaction
204
- */
205
- async txsInit(sender, swapData, timeout, prefix, signature, skipChecks, feeRate) {
206
- if (!skipChecks) {
207
- const [_, payStatus] = await Promise.all([
208
- swapData.isOfferer(sender) && !swapData.reputation
209
- ? Promise.resolve()
210
- : this.isSignatureValid(sender, swapData, timeout, prefix, signature),
211
- this.contract.getCommitStatus(sender, swapData)
212
- ]);
213
- if (payStatus.type !== base_1.SwapCommitStateType.NOT_COMMITED)
214
- throw new base_1.SwapDataVerificationError("Invoice already being paid for or paid");
215
- }
216
- feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
217
- const initAction = this.Init(sender, swapData, BigInt(timeout), JSON.parse(signature));
218
- if (swapData.payIn && swapData.isOfferer(sender))
219
- initAction.addAction(this.root.Tokens.Approve(sender, this.swapContract.address, swapData.token, swapData.amount), 0); //Add erc20 approve
220
- if (swapData.getTotalDeposit() !== 0n)
221
- initAction.addAction(this.root.Tokens.Approve(sender, this.swapContract.address, swapData.feeToken, swapData.getTotalDeposit()), 0); //Add deposit erc20 approve
222
- this.logger.debug("txsInitPayIn(): create swap init TX, swap: " + swapData.getClaimHash() +
223
- " feerate: " + feeRate);
224
- return [await initAction.tx(feeRate)];
225
- }
226
- /**
227
- * Get the estimated solana fee of the init transaction, this includes the required deposit for creating swap PDA
228
- * and also deposit for ATAs
229
- */
230
- async getInitFee(swapData, feeRate) {
231
- feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
232
- return StarknetFees_1.StarknetFees.getGasFee(swapData?.payIn ? StarknetSwapInit.GasCosts.INIT_PAY_IN : StarknetSwapInit.GasCosts.INIT, feeRate);
233
- }
234
- }
235
- exports.StarknetSwapInit = StarknetSwapInit;
236
- StarknetSwapInit.GasCosts = {
237
- INIT: { l1DataGas: 750, l2Gas: 8000000, l1Gas: 0 },
238
- INIT_PAY_IN: { l1DataGas: 500, l2Gas: 4800000, l1Gas: 0 },
239
- };
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StarknetSwapInit = void 0;
4
+ const base_1 = require("@atomiqlabs/base");
5
+ const Utils_1 = require("../../../utils/Utils");
6
+ const buffer_1 = require("buffer");
7
+ const StarknetAction_1 = require("../../chain/StarknetAction");
8
+ const StarknetSwapModule_1 = require("../StarknetSwapModule");
9
+ const starknet_1 = require("starknet");
10
+ const StarknetFees_1 = require("../../chain/modules/StarknetFees");
11
+ const Initialize = [
12
+ { name: 'Swap hash', type: 'felt' },
13
+ { name: 'Offerer', type: 'ContractAddress' },
14
+ { name: 'Claimer', type: 'ContractAddress' },
15
+ { name: 'Token amount', type: 'TokenAmount' },
16
+ { name: 'Pay in', type: 'bool' },
17
+ { name: 'Pay out', type: 'bool' },
18
+ { name: 'Tracking reputation', type: 'bool' },
19
+ { name: 'Claim handler', type: 'ContractAddress' },
20
+ { name: 'Claim data', type: 'felt' },
21
+ { name: 'Refund handler', type: 'ContractAddress' },
22
+ { name: 'Refund data', type: 'felt' },
23
+ { name: 'Security deposit', type: 'TokenAmount' },
24
+ { name: 'Claimer bounty', type: 'TokenAmount' },
25
+ { name: 'Claim action hash', type: 'felt' },
26
+ { name: 'Deadline', type: 'timestamp' }
27
+ ];
28
+ class StarknetSwapInit extends StarknetSwapModule_1.StarknetSwapModule {
29
+ /**
30
+ * bare Init action based on the data passed in swapData
31
+ *
32
+ * @param signer
33
+ * @param swapData
34
+ * @param timeout
35
+ * @param signature
36
+ * @private
37
+ */
38
+ Init(signer, swapData, timeout, signature) {
39
+ return new StarknetAction_1.StarknetAction(signer, this.root, this.swapContract.populateTransaction.initialize(swapData.toEscrowStruct(), signature ?? [], timeout, swapData.extraData == null || swapData.extraData === ""
40
+ ? []
41
+ : (0, Utils_1.bufferToBytes31Span)(buffer_1.Buffer.from(swapData.extraData, "hex")).map(val => (0, Utils_1.toHex)(val))), swapData.payIn ? StarknetSwapInit.GasCosts.INIT_PAY_IN : StarknetSwapInit.GasCosts.INIT);
42
+ }
43
+ /**
44
+ * Returns auth prefix to be used with a specific swap, payIn=true & payIn=false use different prefixes (these
45
+ * actually have no meaning for the smart contract/solana program in the Solana case)
46
+ *
47
+ * @param swapData
48
+ * @private
49
+ */
50
+ getAuthPrefix(swapData) {
51
+ return swapData.isPayIn() ? "claim_initialize" : "initialize";
52
+ }
53
+ async preFetchForInitSignatureVerification() {
54
+ return {
55
+ pendingBlockTime: await this.root.Blocks.getBlockTime(starknet_1.BlockTag.PRE_CONFIRMED)
56
+ };
57
+ }
58
+ /**
59
+ * Signs swap initialization authorization, using data from preFetchedBlockData if provided & still valid (subject
60
+ * to SIGNATURE_PREFETCH_DATA_VALIDITY)
61
+ *
62
+ * @param signer
63
+ * @param swapData
64
+ * @param authorizationTimeout
65
+ * @public
66
+ */
67
+ async signSwapInitialization(signer, swapData, authorizationTimeout) {
68
+ const authTimeout = Math.floor(Date.now() / 1000) + authorizationTimeout;
69
+ const signature = await this.root.Signatures.signTypedMessage(signer, Initialize, "Initialize", {
70
+ "Swap hash": "0x" + swapData.getEscrowHash(),
71
+ "Offerer": swapData.offerer,
72
+ "Claimer": swapData.claimer,
73
+ "Token amount": {
74
+ token_address: swapData.token,
75
+ amount: starknet_1.cairo.uint256(swapData.amount)
76
+ },
77
+ "Pay in": swapData.isPayIn(),
78
+ "Pay out": swapData.isPayOut(),
79
+ "Tracking reputation": swapData.reputation,
80
+ "Refund handler": swapData.refundHandler,
81
+ "Claim handler": swapData.claimHandler,
82
+ "Claim data": "0x" + swapData.getClaimHash(),
83
+ "Refund data": swapData.refundData.startsWith("0x") ? swapData.refundData : "0x" + swapData.refundData,
84
+ "Security deposit": {
85
+ token_address: swapData.feeToken,
86
+ amount: starknet_1.cairo.uint256(swapData.securityDeposit)
87
+ },
88
+ "Claimer bounty": {
89
+ token_address: swapData.feeToken,
90
+ amount: starknet_1.cairo.uint256(swapData.claimerBounty)
91
+ },
92
+ "Claim action hash": 0n,
93
+ "Deadline": (0, Utils_1.toHex)(authTimeout)
94
+ });
95
+ return {
96
+ prefix: this.getAuthPrefix(swapData),
97
+ timeout: authTimeout.toString(10),
98
+ signature
99
+ };
100
+ }
101
+ /**
102
+ * Checks whether the provided signature data is valid, using preFetchedData if provided and still valid
103
+ *
104
+ * @param sender
105
+ * @param swapData
106
+ * @param timeout
107
+ * @param prefix
108
+ * @param signature
109
+ * @param preFetchData
110
+ * @public
111
+ */
112
+ async isSignatureValid(sender, swapData, timeout, prefix, signature, preFetchData) {
113
+ if (!swapData.isOfferer(sender) && !swapData.isClaimer(sender))
114
+ throw new base_1.SignatureVerificationError("TX sender not offerer nor claimer");
115
+ const signer = swapData.isOfferer(sender) ? swapData.claimer : swapData.offerer;
116
+ if (!swapData.isPayIn() && await this.contract.isExpired(sender.toString(), swapData)) {
117
+ throw new base_1.SignatureVerificationError("Swap will expire too soon!");
118
+ }
119
+ if (prefix !== this.getAuthPrefix(swapData))
120
+ throw new base_1.SignatureVerificationError("Invalid prefix");
121
+ const currentTimestamp = BigInt(Math.floor(Date.now() / 1000));
122
+ const timeoutBN = BigInt(timeout);
123
+ const isExpired = (timeoutBN - currentTimestamp) < BigInt(this.contract.authGracePeriod);
124
+ if (isExpired)
125
+ throw new base_1.SignatureVerificationError("Authorization expired!");
126
+ if (await this.isSignatureSoftExpired(timeout, preFetchData))
127
+ throw new base_1.SignatureVerificationError("Authorization expired!");
128
+ const valid = await this.root.Signatures.isValidSignature(signature, signer, Initialize, "Initialize", {
129
+ "Swap hash": "0x" + swapData.getEscrowHash(),
130
+ "Offerer": swapData.offerer,
131
+ "Claimer": swapData.claimer,
132
+ "Token amount": {
133
+ token_address: swapData.token,
134
+ amount: starknet_1.cairo.uint256(swapData.amount)
135
+ },
136
+ "Pay in": swapData.isPayIn(),
137
+ "Pay out": swapData.isPayOut(),
138
+ "Tracking reputation": swapData.reputation,
139
+ "Refund handler": swapData.refundHandler,
140
+ "Claim handler": swapData.claimHandler,
141
+ "Claim data": "0x" + swapData.getClaimHash(),
142
+ "Refund data": swapData.refundData.startsWith("0x") ? swapData.refundData : "0x" + swapData.refundData,
143
+ "Security deposit": {
144
+ token_address: swapData.feeToken,
145
+ amount: starknet_1.cairo.uint256(swapData.securityDeposit)
146
+ },
147
+ "Claimer bounty": {
148
+ token_address: swapData.feeToken,
149
+ amount: starknet_1.cairo.uint256(swapData.claimerBounty)
150
+ },
151
+ "Claim action hash": 0n,
152
+ "Deadline": (0, Utils_1.toHex)(timeoutBN)
153
+ });
154
+ if (!valid)
155
+ throw new base_1.SignatureVerificationError("Invalid signature!");
156
+ return null;
157
+ }
158
+ /**
159
+ * Gets expiry of the provided signature data, this is a minimum of slot expiry & swap signature expiry
160
+ *
161
+ * @param timeout
162
+ * @public
163
+ */
164
+ async getSignatureExpiry(timeout) {
165
+ const now = Date.now();
166
+ const timeoutExpiryTime = (parseInt(timeout) - this.contract.authGracePeriod) * 1000;
167
+ if (timeoutExpiryTime < now)
168
+ return 0;
169
+ return timeoutExpiryTime;
170
+ }
171
+ /**
172
+ * Checks whether signature is soft expired, compares the timestamp to the current "pre-confirmed" block timestamp
173
+ *
174
+ * @param timeout
175
+ * @param preFetchData
176
+ * @public
177
+ */
178
+ async isSignatureSoftExpired(timeout, preFetchData) {
179
+ if (preFetchData == null || preFetchData.pendingBlockTime == null) {
180
+ preFetchData = await this.preFetchForInitSignatureVerification();
181
+ }
182
+ return preFetchData.pendingBlockTime > parseInt(timeout);
183
+ }
184
+ /**
185
+ * Checks whether signature is expired for good, compares the timestamp to the current "latest" block timestamp
186
+ *
187
+ * @param timeout
188
+ * @public
189
+ */
190
+ async isSignatureExpired(timeout) {
191
+ const blockTime = await this.root.Blocks.getBlockTime(starknet_1.BlockTag.LATEST);
192
+ return blockTime > parseInt(timeout);
193
+ }
194
+ /**
195
+ * Creates init transaction with a valid signature from an LP
196
+ *
197
+ * @param sender
198
+ * @param swapData swap to initialize
199
+ * @param timeout init signature timeout
200
+ * @param prefix init signature prefix
201
+ * @param signature init signature
202
+ * @param skipChecks whether to skip signature validity checks
203
+ * @param feeRate fee rate to use for the transaction
204
+ */
205
+ async txsInit(sender, swapData, timeout, prefix, signature, skipChecks, feeRate) {
206
+ if (!skipChecks) {
207
+ const [_, payStatus] = await Promise.all([
208
+ swapData.isOfferer(sender) && !swapData.reputation
209
+ ? Promise.resolve()
210
+ : this.isSignatureValid(sender, swapData, timeout, prefix, signature),
211
+ this.contract.getCommitStatus(sender, swapData)
212
+ ]);
213
+ if (payStatus.type !== base_1.SwapCommitStateType.NOT_COMMITED)
214
+ throw new base_1.SwapDataVerificationError("Invoice already being paid for or paid");
215
+ }
216
+ feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
217
+ const initAction = this.Init(sender, swapData, BigInt(timeout), JSON.parse(signature));
218
+ if (swapData.payIn && swapData.isOfferer(sender))
219
+ initAction.addAction(this.root.Tokens.Approve(sender, this.swapContract.address, swapData.token, swapData.amount), 0); //Add erc20 approve
220
+ if (swapData.getTotalDeposit() !== 0n)
221
+ initAction.addAction(this.root.Tokens.Approve(sender, this.swapContract.address, swapData.feeToken, swapData.getTotalDeposit()), 0); //Add deposit erc20 approve
222
+ this.logger.debug("txsInitPayIn(): create swap init TX, swap: " + swapData.getClaimHash() +
223
+ " feerate: " + feeRate);
224
+ return [await initAction.tx(feeRate)];
225
+ }
226
+ /**
227
+ * Get the estimated solana fee of the init transaction, this includes the required deposit for creating swap PDA
228
+ * and also deposit for ATAs
229
+ */
230
+ async getInitFee(swapData, feeRate) {
231
+ feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
232
+ return StarknetFees_1.StarknetFees.getGasFee(swapData?.payIn ? StarknetSwapInit.GasCosts.INIT_PAY_IN : StarknetSwapInit.GasCosts.INIT, feeRate);
233
+ }
234
+ }
235
+ exports.StarknetSwapInit = StarknetSwapInit;
236
+ StarknetSwapInit.GasCosts = {
237
+ INIT: { l1DataGas: 750, l2Gas: 8000000, l1Gas: 0 },
238
+ INIT_PAY_IN: { l1DataGas: 500, l2Gas: 4800000, l1Gas: 0 },
239
+ };
@@ -1,60 +1,60 @@
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
- * @private
15
- */
16
- private Refund;
17
- /**
18
- * Action for cooperative refunding with signature
19
- *
20
- * @param sender
21
- * @param swapData
22
- * @param timeout
23
- * @param signature
24
- * @private
25
- */
26
- private RefundWithSignature;
27
- signSwapRefund(signer: StarknetSigner, swapData: StarknetSwapData, authorizationTimeout: number): Promise<{
28
- prefix: string;
29
- timeout: string;
30
- signature: string;
31
- }>;
32
- isSignatureValid(swapData: StarknetSwapData, timeout: string, prefix: string, signature: string): Promise<null>;
33
- /**
34
- * Creates transactions required for refunding timed out swap
35
- *
36
- * @param signer
37
- * @param swapData swap data to refund
38
- * @param check whether to check if swap is already expired and refundable
39
- * @param feeRate fee rate to be used for the transactions
40
- * @param witnessData
41
- */
42
- txsRefund<T>(signer: string, swapData: StarknetSwapData, check?: boolean, feeRate?: string, witnessData?: T): Promise<StarknetTx[]>;
43
- /**
44
- * Creates transactions required for refunding the swap with authorization signature, also unwraps WSOL to SOL
45
- *
46
- * @param signer
47
- * @param swapData swap data to refund
48
- * @param timeout signature timeout
49
- * @param prefix signature prefix of the counterparty
50
- * @param signature signature of the counterparty
51
- * @param check whether to check if swap is committed before attempting refund
52
- * @param feeRate fee rate to be used for the transactions
53
- */
54
- txsRefundWithAuthorization(signer: string, swapData: StarknetSwapData, timeout: string, prefix: string, signature: string, check?: boolean, feeRate?: string): Promise<StarknetTx[]>;
55
- /**
56
- * Get the estimated solana transaction fee of the refund transaction, in the worst case scenario in case where the
57
- * ATA needs to be initialized again (i.e. adding the ATA rent exempt lamports to the fee)
58
- */
59
- getRefundFee(swapData: StarknetSwapData, feeRate?: string): Promise<bigint>;
60
- }
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
+ * @private
15
+ */
16
+ private Refund;
17
+ /**
18
+ * Action for cooperative refunding with signature
19
+ *
20
+ * @param sender
21
+ * @param swapData
22
+ * @param timeout
23
+ * @param signature
24
+ * @private
25
+ */
26
+ private RefundWithSignature;
27
+ signSwapRefund(signer: StarknetSigner, swapData: StarknetSwapData, authorizationTimeout: number): Promise<{
28
+ prefix: string;
29
+ timeout: string;
30
+ signature: string;
31
+ }>;
32
+ isSignatureValid(swapData: StarknetSwapData, timeout: string, prefix: string, signature: string): Promise<null>;
33
+ /**
34
+ * Creates transactions required for refunding timed out swap
35
+ *
36
+ * @param signer
37
+ * @param swapData swap data to refund
38
+ * @param check whether to check if swap is already expired and refundable
39
+ * @param feeRate fee rate to be used for the transactions
40
+ * @param witnessData
41
+ */
42
+ txsRefund<T>(signer: string, swapData: StarknetSwapData, check?: boolean, feeRate?: string, witnessData?: T): Promise<StarknetTx[]>;
43
+ /**
44
+ * Creates transactions required for refunding the swap with authorization signature, also unwraps WSOL to SOL
45
+ *
46
+ * @param signer
47
+ * @param swapData swap data to refund
48
+ * @param timeout signature timeout
49
+ * @param prefix signature prefix of the counterparty
50
+ * @param signature signature of the counterparty
51
+ * @param check whether to check if swap is committed before attempting refund
52
+ * @param feeRate fee rate to be used for the transactions
53
+ */
54
+ txsRefundWithAuthorization(signer: string, swapData: StarknetSwapData, timeout: string, prefix: string, signature: string, check?: boolean, feeRate?: string): Promise<StarknetTx[]>;
55
+ /**
56
+ * Get the estimated solana transaction fee of the refund transaction, in the worst case scenario in case where the
57
+ * ATA needs to be initialized again (i.e. adding the ATA rent exempt lamports to the fee)
58
+ */
59
+ getRefundFee(swapData: StarknetSwapData, feeRate?: string): Promise<bigint>;
60
+ }