@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,87 +1,94 @@
1
- import { StarknetSwapData } from "../StarknetSwapData";
2
- import { StarknetSwapModule } from "../StarknetSwapModule";
3
- import { StarknetSigner } from "../../wallet/StarknetSigner";
4
- import { StarknetTx } from "../../chain/modules/StarknetTransactions";
5
- export type StarknetPreFetchVerification = {
6
- pendingBlockTime?: number;
7
- };
8
- export declare class StarknetSwapInit extends StarknetSwapModule {
9
- private static readonly GasCosts;
10
- /**
11
- * bare Init action based on the data passed in swapData
12
- *
13
- * @param signer
14
- * @param swapData
15
- * @param timeout
16
- * @param signature
17
- * @private
18
- */
19
- private Init;
20
- /**
21
- * Returns auth prefix to be used with a specific swap, payIn=true & payIn=false use different prefixes (these
22
- * actually have no meaning for the smart contract/solana program in the Solana case)
23
- *
24
- * @param swapData
25
- * @private
26
- */
27
- private getAuthPrefix;
28
- preFetchForInitSignatureVerification(): Promise<StarknetPreFetchVerification>;
29
- /**
30
- * Signs swap initialization authorization, using data from preFetchedBlockData if provided & still valid (subject
31
- * to SIGNATURE_PREFETCH_DATA_VALIDITY)
32
- *
33
- * @param signer
34
- * @param swapData
35
- * @param authorizationTimeout
36
- * @public
37
- */
38
- signSwapInitialization(signer: StarknetSigner, swapData: StarknetSwapData, authorizationTimeout: number): Promise<{
39
- prefix: string;
40
- timeout: string;
41
- signature: string;
42
- }>;
43
- /**
44
- * Checks whether the provided signature data is valid, using preFetchedData if provided and still valid
45
- *
46
- * @param sender
47
- * @param swapData
48
- * @param timeout
49
- * @param prefix
50
- * @param signature
51
- * @param preFetchData
52
- * @public
53
- */
54
- isSignatureValid(sender: string, swapData: StarknetSwapData, timeout: string, prefix: string, signature: string, preFetchData?: StarknetPreFetchVerification): Promise<null>;
55
- /**
56
- * Gets expiry of the provided signature data, this is a minimum of slot expiry & swap signature expiry
57
- *
58
- * @param timeout
59
- * @public
60
- */
61
- getSignatureExpiry(timeout: string): Promise<number>;
62
- /**
63
- * Checks whether signature is expired for good, compares the timestamp to the current "pending" block timestamp
64
- *
65
- * @param timeout
66
- * @param preFetchData
67
- * @public
68
- */
69
- isSignatureExpired(timeout: string, preFetchData?: StarknetPreFetchVerification): Promise<boolean>;
70
- /**
71
- * Creates init transaction with a valid signature from an LP
72
- *
73
- * @param sender
74
- * @param swapData swap to initialize
75
- * @param timeout init signature timeout
76
- * @param prefix init signature prefix
77
- * @param signature init signature
78
- * @param skipChecks whether to skip signature validity checks
79
- * @param feeRate fee rate to use for the transaction
80
- */
81
- txsInit(sender: string, swapData: StarknetSwapData, timeout: string, prefix: string, signature: string, skipChecks?: boolean, feeRate?: string): Promise<StarknetTx[]>;
82
- /**
83
- * Get the estimated solana fee of the init transaction, this includes the required deposit for creating swap PDA
84
- * and also deposit for ATAs
85
- */
86
- getInitFee(swapData?: StarknetSwapData, feeRate?: string): Promise<bigint>;
87
- }
1
+ import { StarknetSwapData } from "../StarknetSwapData";
2
+ import { StarknetSwapModule } from "../StarknetSwapModule";
3
+ import { StarknetSigner } from "../../wallet/StarknetSigner";
4
+ import { StarknetTx } from "../../chain/modules/StarknetTransactions";
5
+ export type StarknetPreFetchVerification = {
6
+ pendingBlockTime?: number;
7
+ };
8
+ export declare class StarknetSwapInit extends StarknetSwapModule {
9
+ private static readonly GasCosts;
10
+ /**
11
+ * bare Init action based on the data passed in swapData
12
+ *
13
+ * @param signer
14
+ * @param swapData
15
+ * @param timeout
16
+ * @param signature
17
+ * @private
18
+ */
19
+ private Init;
20
+ /**
21
+ * Returns auth prefix to be used with a specific swap, payIn=true & payIn=false use different prefixes (these
22
+ * actually have no meaning for the smart contract/solana program in the Solana case)
23
+ *
24
+ * @param swapData
25
+ * @private
26
+ */
27
+ private getAuthPrefix;
28
+ preFetchForInitSignatureVerification(): Promise<StarknetPreFetchVerification>;
29
+ /**
30
+ * Signs swap initialization authorization, using data from preFetchedBlockData if provided & still valid (subject
31
+ * to SIGNATURE_PREFETCH_DATA_VALIDITY)
32
+ *
33
+ * @param signer
34
+ * @param swapData
35
+ * @param authorizationTimeout
36
+ * @public
37
+ */
38
+ signSwapInitialization(signer: StarknetSigner, swapData: StarknetSwapData, authorizationTimeout: number): Promise<{
39
+ prefix: string;
40
+ timeout: string;
41
+ signature: string;
42
+ }>;
43
+ /**
44
+ * Checks whether the provided signature data is valid, using preFetchedData if provided and still valid
45
+ *
46
+ * @param sender
47
+ * @param swapData
48
+ * @param timeout
49
+ * @param prefix
50
+ * @param signature
51
+ * @param preFetchData
52
+ * @public
53
+ */
54
+ isSignatureValid(sender: string, swapData: StarknetSwapData, timeout: string, prefix: string, signature: string, preFetchData?: StarknetPreFetchVerification): Promise<null>;
55
+ /**
56
+ * Gets expiry of the provided signature data, this is a minimum of slot expiry & swap signature expiry
57
+ *
58
+ * @param timeout
59
+ * @public
60
+ */
61
+ getSignatureExpiry(timeout: string): Promise<number>;
62
+ /**
63
+ * Checks whether signature is soft expired, compares the timestamp to the current "pre-confirmed" block timestamp
64
+ *
65
+ * @param timeout
66
+ * @param preFetchData
67
+ * @public
68
+ */
69
+ isSignatureSoftExpired(timeout: string, preFetchData?: StarknetPreFetchVerification): Promise<boolean>;
70
+ /**
71
+ * Checks whether signature is expired for good, compares the timestamp to the current "latest" block timestamp
72
+ *
73
+ * @param timeout
74
+ * @public
75
+ */
76
+ isSignatureExpired(timeout: string): Promise<boolean>;
77
+ /**
78
+ * Creates init transaction with a valid signature from an LP
79
+ *
80
+ * @param sender
81
+ * @param swapData swap to initialize
82
+ * @param timeout init signature timeout
83
+ * @param prefix init signature prefix
84
+ * @param signature init signature
85
+ * @param skipChecks whether to skip signature validity checks
86
+ * @param feeRate fee rate to use for the transaction
87
+ */
88
+ txsInit(sender: string, swapData: StarknetSwapData, timeout: string, prefix: string, signature: string, skipChecks?: boolean, feeRate?: string): Promise<StarknetTx[]>;
89
+ /**
90
+ * Get the estimated solana fee of the init transaction, this includes the required deposit for creating swap PDA
91
+ * and also deposit for ATAs
92
+ */
93
+ getInitFee(swapData?: StarknetSwapData, feeRate?: string): Promise<bigint>;
94
+ }
@@ -1,225 +1,235 @@
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 === "" ? [] : (0, Utils_1.bufferToBytes31Span)(buffer_1.Buffer.from(swapData.extraData, "hex")).map(Utils_1.toHex)), swapData.payIn ? StarknetSwapInit.GasCosts.INIT_PAY_IN : StarknetSwapInit.GasCosts.INIT);
40
- }
41
- /**
42
- * Returns auth prefix to be used with a specific swap, payIn=true & payIn=false use different prefixes (these
43
- * actually have no meaning for the smart contract/solana program in the Solana case)
44
- *
45
- * @param swapData
46
- * @private
47
- */
48
- getAuthPrefix(swapData) {
49
- return swapData.isPayIn() ? "claim_initialize" : "initialize";
50
- }
51
- async preFetchForInitSignatureVerification() {
52
- return {
53
- pendingBlockTime: await this.root.Blocks.getBlockTime("pending")
54
- };
55
- }
56
- /**
57
- * Signs swap initialization authorization, using data from preFetchedBlockData if provided & still valid (subject
58
- * to SIGNATURE_PREFETCH_DATA_VALIDITY)
59
- *
60
- * @param signer
61
- * @param swapData
62
- * @param authorizationTimeout
63
- * @public
64
- */
65
- async signSwapInitialization(signer, swapData, authorizationTimeout) {
66
- const authTimeout = Math.floor(Date.now() / 1000) + authorizationTimeout;
67
- const signature = await this.root.Signatures.signTypedMessage(signer, Initialize, "Initialize", {
68
- "Swap hash": "0x" + swapData.getEscrowHash(),
69
- "Offerer": swapData.offerer,
70
- "Claimer": swapData.claimer,
71
- "Token amount": {
72
- token_address: swapData.token,
73
- amount: starknet_1.cairo.uint256(swapData.amount)
74
- },
75
- "Pay in": swapData.isPayIn(),
76
- "Pay out": swapData.isPayOut(),
77
- "Tracking reputation": swapData.reputation,
78
- "Refund handler": swapData.refundHandler,
79
- "Claim handler": swapData.claimHandler,
80
- "Claim data": "0x" + swapData.getClaimHash(),
81
- "Refund data": swapData.refundData.startsWith("0x") ? swapData.refundData : "0x" + swapData.refundData,
82
- "Security deposit": {
83
- token_address: swapData.feeToken,
84
- amount: starknet_1.cairo.uint256(swapData.securityDeposit)
85
- },
86
- "Claimer bounty": {
87
- token_address: swapData.feeToken,
88
- amount: starknet_1.cairo.uint256(swapData.claimerBounty)
89
- },
90
- "Claim action hash": 0n,
91
- "Deadline": (0, Utils_1.toHex)(authTimeout)
92
- });
93
- return {
94
- prefix: this.getAuthPrefix(swapData),
95
- timeout: authTimeout.toString(10),
96
- signature
97
- };
98
- }
99
- /**
100
- * Checks whether the provided signature data is valid, using preFetchedData if provided and still valid
101
- *
102
- * @param sender
103
- * @param swapData
104
- * @param timeout
105
- * @param prefix
106
- * @param signature
107
- * @param preFetchData
108
- * @public
109
- */
110
- async isSignatureValid(sender, swapData, timeout, prefix, signature, preFetchData) {
111
- if (!swapData.isOfferer(sender) && !swapData.isClaimer(sender))
112
- throw new base_1.SignatureVerificationError("TX sender not offerer nor claimer");
113
- const signer = swapData.isOfferer(sender) ? swapData.claimer : swapData.offerer;
114
- if (!swapData.isPayIn() && await this.contract.isExpired(sender.toString(), swapData)) {
115
- throw new base_1.SignatureVerificationError("Swap will expire too soon!");
116
- }
117
- if (prefix !== this.getAuthPrefix(swapData))
118
- throw new base_1.SignatureVerificationError("Invalid prefix");
119
- const currentTimestamp = BigInt(Math.floor(Date.now() / 1000));
120
- const timeoutBN = BigInt(timeout);
121
- const isExpired = (timeoutBN - currentTimestamp) < BigInt(this.contract.authGracePeriod);
122
- if (isExpired)
123
- throw new base_1.SignatureVerificationError("Authorization expired!");
124
- if (await this.isSignatureExpired(timeout, preFetchData))
125
- throw new base_1.SignatureVerificationError("Authorization expired!");
126
- const valid = await this.root.Signatures.isValidSignature(signature, signer, Initialize, "Initialize", {
127
- "Swap hash": "0x" + swapData.getEscrowHash(),
128
- "Offerer": swapData.offerer,
129
- "Claimer": swapData.claimer,
130
- "Token amount": {
131
- token_address: swapData.token,
132
- amount: starknet_1.cairo.uint256(swapData.amount)
133
- },
134
- "Pay in": swapData.isPayIn(),
135
- "Pay out": swapData.isPayOut(),
136
- "Tracking reputation": swapData.reputation,
137
- "Refund handler": swapData.refundHandler,
138
- "Claim handler": swapData.claimHandler,
139
- "Claim data": "0x" + swapData.getClaimHash(),
140
- "Refund data": swapData.refundData.startsWith("0x") ? swapData.refundData : "0x" + swapData.refundData,
141
- "Security deposit": {
142
- token_address: swapData.feeToken,
143
- amount: starknet_1.cairo.uint256(swapData.securityDeposit)
144
- },
145
- "Claimer bounty": {
146
- token_address: swapData.feeToken,
147
- amount: starknet_1.cairo.uint256(swapData.claimerBounty)
148
- },
149
- "Claim action hash": 0n,
150
- "Deadline": (0, Utils_1.toHex)(timeoutBN)
151
- });
152
- if (!valid)
153
- throw new base_1.SignatureVerificationError("Invalid signature!");
154
- return null;
155
- }
156
- /**
157
- * Gets expiry of the provided signature data, this is a minimum of slot expiry & swap signature expiry
158
- *
159
- * @param timeout
160
- * @public
161
- */
162
- async getSignatureExpiry(timeout) {
163
- const now = Date.now();
164
- const timeoutExpiryTime = (parseInt(timeout) - this.contract.authGracePeriod) * 1000;
165
- if (timeoutExpiryTime < now)
166
- return 0;
167
- return timeoutExpiryTime;
168
- }
169
- /**
170
- * Checks whether signature is expired for good, compares the timestamp to the current "pending" block timestamp
171
- *
172
- * @param timeout
173
- * @param preFetchData
174
- * @public
175
- */
176
- async isSignatureExpired(timeout, preFetchData) {
177
- if (preFetchData == null || preFetchData.pendingBlockTime == null) {
178
- preFetchData = await this.preFetchForInitSignatureVerification();
179
- }
180
- return preFetchData.pendingBlockTime > parseInt(timeout);
181
- }
182
- /**
183
- * Creates init transaction with a valid signature from an LP
184
- *
185
- * @param sender
186
- * @param swapData swap to initialize
187
- * @param timeout init signature timeout
188
- * @param prefix init signature prefix
189
- * @param signature init signature
190
- * @param skipChecks whether to skip signature validity checks
191
- * @param feeRate fee rate to use for the transaction
192
- */
193
- async txsInit(sender, swapData, timeout, prefix, signature, skipChecks, feeRate) {
194
- if (!skipChecks) {
195
- const [_, payStatus] = await Promise.all([
196
- swapData.isOfferer(sender) && !swapData.reputation ? Promise.resolve() : (0, Utils_1.tryWithRetries)(() => this.isSignatureValid(sender, swapData, timeout, prefix, signature), this.retryPolicy, (e) => e instanceof base_1.SignatureVerificationError),
197
- (0, Utils_1.tryWithRetries)(() => this.contract.getCommitStatus(sender, swapData), this.retryPolicy)
198
- ]);
199
- if (payStatus.type !== base_1.SwapCommitStateType.NOT_COMMITED)
200
- throw new base_1.SwapDataVerificationError("Invoice already being paid for or paid");
201
- }
202
- feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
203
- const initAction = this.Init(sender, swapData, BigInt(timeout), JSON.parse(signature));
204
- if (swapData.payIn && swapData.isOfferer(sender))
205
- initAction.addAction(this.root.Tokens.Approve(sender, this.swapContract.address, swapData.token, swapData.amount), 0); //Add erc20 approve
206
- if (swapData.getTotalDeposit() !== 0n)
207
- initAction.addAction(this.root.Tokens.Approve(sender, this.swapContract.address, swapData.feeToken, swapData.getTotalDeposit()), 0); //Add deposit erc20 approve
208
- this.logger.debug("txsInitPayIn(): create swap init TX, swap: " + swapData.getClaimHash() +
209
- " feerate: " + feeRate);
210
- return [await initAction.tx(feeRate)];
211
- }
212
- /**
213
- * Get the estimated solana fee of the init transaction, this includes the required deposit for creating swap PDA
214
- * and also deposit for ATAs
215
- */
216
- async getInitFee(swapData, feeRate) {
217
- feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
218
- return StarknetFees_1.StarknetFees.getGasFee(swapData.payIn ? StarknetSwapInit.GasCosts.INIT_PAY_IN : StarknetSwapInit.GasCosts.INIT, feeRate);
219
- }
220
- }
221
- exports.StarknetSwapInit = StarknetSwapInit;
222
- StarknetSwapInit.GasCosts = {
223
- INIT: { l1DataGas: 750, l2Gas: 8000000, l1Gas: 0 },
224
- INIT_PAY_IN: { l1DataGas: 500, l2Gas: 4800000, l1Gas: 0 },
225
- };
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 === "" ? [] : (0, Utils_1.bufferToBytes31Span)(buffer_1.Buffer.from(swapData.extraData, "hex")).map(Utils_1.toHex)), swapData.payIn ? StarknetSwapInit.GasCosts.INIT_PAY_IN : StarknetSwapInit.GasCosts.INIT);
40
+ }
41
+ /**
42
+ * Returns auth prefix to be used with a specific swap, payIn=true & payIn=false use different prefixes (these
43
+ * actually have no meaning for the smart contract/solana program in the Solana case)
44
+ *
45
+ * @param swapData
46
+ * @private
47
+ */
48
+ getAuthPrefix(swapData) {
49
+ return swapData.isPayIn() ? "claim_initialize" : "initialize";
50
+ }
51
+ async preFetchForInitSignatureVerification() {
52
+ return {
53
+ pendingBlockTime: await this.root.Blocks.getBlockTime(starknet_1.BlockTag.PRE_CONFIRMED)
54
+ };
55
+ }
56
+ /**
57
+ * Signs swap initialization authorization, using data from preFetchedBlockData if provided & still valid (subject
58
+ * to SIGNATURE_PREFETCH_DATA_VALIDITY)
59
+ *
60
+ * @param signer
61
+ * @param swapData
62
+ * @param authorizationTimeout
63
+ * @public
64
+ */
65
+ async signSwapInitialization(signer, swapData, authorizationTimeout) {
66
+ const authTimeout = Math.floor(Date.now() / 1000) + authorizationTimeout;
67
+ const signature = await this.root.Signatures.signTypedMessage(signer, Initialize, "Initialize", {
68
+ "Swap hash": "0x" + swapData.getEscrowHash(),
69
+ "Offerer": swapData.offerer,
70
+ "Claimer": swapData.claimer,
71
+ "Token amount": {
72
+ token_address: swapData.token,
73
+ amount: starknet_1.cairo.uint256(swapData.amount)
74
+ },
75
+ "Pay in": swapData.isPayIn(),
76
+ "Pay out": swapData.isPayOut(),
77
+ "Tracking reputation": swapData.reputation,
78
+ "Refund handler": swapData.refundHandler,
79
+ "Claim handler": swapData.claimHandler,
80
+ "Claim data": "0x" + swapData.getClaimHash(),
81
+ "Refund data": swapData.refundData.startsWith("0x") ? swapData.refundData : "0x" + swapData.refundData,
82
+ "Security deposit": {
83
+ token_address: swapData.feeToken,
84
+ amount: starknet_1.cairo.uint256(swapData.securityDeposit)
85
+ },
86
+ "Claimer bounty": {
87
+ token_address: swapData.feeToken,
88
+ amount: starknet_1.cairo.uint256(swapData.claimerBounty)
89
+ },
90
+ "Claim action hash": 0n,
91
+ "Deadline": (0, Utils_1.toHex)(authTimeout)
92
+ });
93
+ return {
94
+ prefix: this.getAuthPrefix(swapData),
95
+ timeout: authTimeout.toString(10),
96
+ signature
97
+ };
98
+ }
99
+ /**
100
+ * Checks whether the provided signature data is valid, using preFetchedData if provided and still valid
101
+ *
102
+ * @param sender
103
+ * @param swapData
104
+ * @param timeout
105
+ * @param prefix
106
+ * @param signature
107
+ * @param preFetchData
108
+ * @public
109
+ */
110
+ async isSignatureValid(sender, swapData, timeout, prefix, signature, preFetchData) {
111
+ if (!swapData.isOfferer(sender) && !swapData.isClaimer(sender))
112
+ throw new base_1.SignatureVerificationError("TX sender not offerer nor claimer");
113
+ const signer = swapData.isOfferer(sender) ? swapData.claimer : swapData.offerer;
114
+ if (!swapData.isPayIn() && await this.contract.isExpired(sender.toString(), swapData)) {
115
+ throw new base_1.SignatureVerificationError("Swap will expire too soon!");
116
+ }
117
+ if (prefix !== this.getAuthPrefix(swapData))
118
+ throw new base_1.SignatureVerificationError("Invalid prefix");
119
+ const currentTimestamp = BigInt(Math.floor(Date.now() / 1000));
120
+ const timeoutBN = BigInt(timeout);
121
+ const isExpired = (timeoutBN - currentTimestamp) < BigInt(this.contract.authGracePeriod);
122
+ if (isExpired)
123
+ throw new base_1.SignatureVerificationError("Authorization expired!");
124
+ if (await this.isSignatureSoftExpired(timeout, preFetchData))
125
+ throw new base_1.SignatureVerificationError("Authorization expired!");
126
+ const valid = await this.root.Signatures.isValidSignature(signature, signer, Initialize, "Initialize", {
127
+ "Swap hash": "0x" + swapData.getEscrowHash(),
128
+ "Offerer": swapData.offerer,
129
+ "Claimer": swapData.claimer,
130
+ "Token amount": {
131
+ token_address: swapData.token,
132
+ amount: starknet_1.cairo.uint256(swapData.amount)
133
+ },
134
+ "Pay in": swapData.isPayIn(),
135
+ "Pay out": swapData.isPayOut(),
136
+ "Tracking reputation": swapData.reputation,
137
+ "Refund handler": swapData.refundHandler,
138
+ "Claim handler": swapData.claimHandler,
139
+ "Claim data": "0x" + swapData.getClaimHash(),
140
+ "Refund data": swapData.refundData.startsWith("0x") ? swapData.refundData : "0x" + swapData.refundData,
141
+ "Security deposit": {
142
+ token_address: swapData.feeToken,
143
+ amount: starknet_1.cairo.uint256(swapData.securityDeposit)
144
+ },
145
+ "Claimer bounty": {
146
+ token_address: swapData.feeToken,
147
+ amount: starknet_1.cairo.uint256(swapData.claimerBounty)
148
+ },
149
+ "Claim action hash": 0n,
150
+ "Deadline": (0, Utils_1.toHex)(timeoutBN)
151
+ });
152
+ if (!valid)
153
+ throw new base_1.SignatureVerificationError("Invalid signature!");
154
+ return null;
155
+ }
156
+ /**
157
+ * Gets expiry of the provided signature data, this is a minimum of slot expiry & swap signature expiry
158
+ *
159
+ * @param timeout
160
+ * @public
161
+ */
162
+ async getSignatureExpiry(timeout) {
163
+ const now = Date.now();
164
+ const timeoutExpiryTime = (parseInt(timeout) - this.contract.authGracePeriod) * 1000;
165
+ if (timeoutExpiryTime < now)
166
+ return 0;
167
+ return timeoutExpiryTime;
168
+ }
169
+ /**
170
+ * Checks whether signature is soft expired, compares the timestamp to the current "pre-confirmed" block timestamp
171
+ *
172
+ * @param timeout
173
+ * @param preFetchData
174
+ * @public
175
+ */
176
+ async isSignatureSoftExpired(timeout, preFetchData) {
177
+ if (preFetchData == null || preFetchData.pendingBlockTime == null) {
178
+ preFetchData = await this.preFetchForInitSignatureVerification();
179
+ }
180
+ return preFetchData.pendingBlockTime > parseInt(timeout);
181
+ }
182
+ /**
183
+ * Checks whether signature is expired for good, compares the timestamp to the current "latest" block timestamp
184
+ *
185
+ * @param timeout
186
+ * @public
187
+ */
188
+ async isSignatureExpired(timeout) {
189
+ const blockTime = await this.root.Blocks.getBlockTime(starknet_1.BlockTag.LATEST);
190
+ return blockTime > parseInt(timeout);
191
+ }
192
+ /**
193
+ * Creates init transaction with a valid signature from an LP
194
+ *
195
+ * @param sender
196
+ * @param swapData swap to initialize
197
+ * @param timeout init signature timeout
198
+ * @param prefix init signature prefix
199
+ * @param signature init signature
200
+ * @param skipChecks whether to skip signature validity checks
201
+ * @param feeRate fee rate to use for the transaction
202
+ */
203
+ async txsInit(sender, swapData, timeout, prefix, signature, skipChecks, feeRate) {
204
+ if (!skipChecks) {
205
+ const [_, payStatus] = await Promise.all([
206
+ swapData.isOfferer(sender) && !swapData.reputation ? Promise.resolve() : (0, Utils_1.tryWithRetries)(() => this.isSignatureValid(sender, swapData, timeout, prefix, signature), this.retryPolicy, (e) => e instanceof base_1.SignatureVerificationError),
207
+ (0, Utils_1.tryWithRetries)(() => this.contract.getCommitStatus(sender, swapData), this.retryPolicy)
208
+ ]);
209
+ if (payStatus.type !== base_1.SwapCommitStateType.NOT_COMMITED)
210
+ throw new base_1.SwapDataVerificationError("Invoice already being paid for or paid");
211
+ }
212
+ feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
213
+ const initAction = this.Init(sender, swapData, BigInt(timeout), JSON.parse(signature));
214
+ if (swapData.payIn && swapData.isOfferer(sender))
215
+ initAction.addAction(this.root.Tokens.Approve(sender, this.swapContract.address, swapData.token, swapData.amount), 0); //Add erc20 approve
216
+ if (swapData.getTotalDeposit() !== 0n)
217
+ initAction.addAction(this.root.Tokens.Approve(sender, this.swapContract.address, swapData.feeToken, swapData.getTotalDeposit()), 0); //Add deposit erc20 approve
218
+ this.logger.debug("txsInitPayIn(): create swap init TX, swap: " + swapData.getClaimHash() +
219
+ " feerate: " + feeRate);
220
+ return [await initAction.tx(feeRate)];
221
+ }
222
+ /**
223
+ * Get the estimated solana fee of the init transaction, this includes the required deposit for creating swap PDA
224
+ * and also deposit for ATAs
225
+ */
226
+ async getInitFee(swapData, feeRate) {
227
+ feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
228
+ return StarknetFees_1.StarknetFees.getGasFee(swapData.payIn ? StarknetSwapInit.GasCosts.INIT_PAY_IN : StarknetSwapInit.GasCosts.INIT, feeRate);
229
+ }
230
+ }
231
+ exports.StarknetSwapInit = StarknetSwapInit;
232
+ StarknetSwapInit.GasCosts = {
233
+ INIT: { l1DataGas: 750, l2Gas: 8000000, l1Gas: 0 },
234
+ INIT_PAY_IN: { l1DataGas: 500, l2Gas: 4800000, l1Gas: 0 },
235
+ };