@atomiqlabs/chain-starknet 3.0.0-dev.8 → 4.0.0-dev.3

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