@atomiqlabs/chain-starknet 1.0.0-beta.0

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 (136) hide show
  1. package/LICENSE +201 -0
  2. package/dist/get_serialized_block.d.ts +1 -0
  3. package/dist/get_serialized_block.js +28 -0
  4. package/dist/index.d.ts +34 -0
  5. package/dist/index.js +50 -0
  6. package/dist/starknet/StarknetChainType.d.ts +9 -0
  7. package/dist/starknet/StarknetChainType.js +2 -0
  8. package/dist/starknet/StarknetInitializer.d.ts +18 -0
  9. package/dist/starknet/StarknetInitializer.js +49 -0
  10. package/dist/starknet/base/StarknetAction.d.ts +27 -0
  11. package/dist/starknet/base/StarknetAction.js +73 -0
  12. package/dist/starknet/base/StarknetBase.d.ts +34 -0
  13. package/dist/starknet/base/StarknetBase.js +29 -0
  14. package/dist/starknet/base/StarknetModule.d.ts +14 -0
  15. package/dist/starknet/base/StarknetModule.js +13 -0
  16. package/dist/starknet/base/modules/ERC20Abi.d.ts +755 -0
  17. package/dist/starknet/base/modules/ERC20Abi.js +1032 -0
  18. package/dist/starknet/base/modules/StarknetAccounts.d.ts +6 -0
  19. package/dist/starknet/base/modules/StarknetAccounts.js +24 -0
  20. package/dist/starknet/base/modules/StarknetAddresses.d.ts +9 -0
  21. package/dist/starknet/base/modules/StarknetAddresses.js +26 -0
  22. package/dist/starknet/base/modules/StarknetBlocks.d.ts +19 -0
  23. package/dist/starknet/base/modules/StarknetBlocks.js +49 -0
  24. package/dist/starknet/base/modules/StarknetEvents.d.ts +44 -0
  25. package/dist/starknet/base/modules/StarknetEvents.js +88 -0
  26. package/dist/starknet/base/modules/StarknetFees.d.ts +55 -0
  27. package/dist/starknet/base/modules/StarknetFees.js +102 -0
  28. package/dist/starknet/base/modules/StarknetSignatures.d.ts +30 -0
  29. package/dist/starknet/base/modules/StarknetSignatures.js +71 -0
  30. package/dist/starknet/base/modules/StarknetTokens.d.ts +67 -0
  31. package/dist/starknet/base/modules/StarknetTokens.js +97 -0
  32. package/dist/starknet/base/modules/StarknetTransactions.d.ts +87 -0
  33. package/dist/starknet/base/modules/StarknetTransactions.js +226 -0
  34. package/dist/starknet/btcrelay/BtcRelayAbi.d.ts +250 -0
  35. package/dist/starknet/btcrelay/BtcRelayAbi.js +341 -0
  36. package/dist/starknet/btcrelay/StarknetBtcRelay.d.ts +166 -0
  37. package/dist/starknet/btcrelay/StarknetBtcRelay.js +323 -0
  38. package/dist/starknet/btcrelay/headers/StarknetBtcHeader.d.ts +32 -0
  39. package/dist/starknet/btcrelay/headers/StarknetBtcHeader.js +74 -0
  40. package/dist/starknet/btcrelay/headers/StarknetBtcStoredHeader.d.ts +52 -0
  41. package/dist/starknet/btcrelay/headers/StarknetBtcStoredHeader.js +113 -0
  42. package/dist/starknet/contract/StarknetContractBase.d.ts +13 -0
  43. package/dist/starknet/contract/StarknetContractBase.js +18 -0
  44. package/dist/starknet/contract/modules/StarknetContractEvents.d.ts +40 -0
  45. package/dist/starknet/contract/modules/StarknetContractEvents.js +77 -0
  46. package/dist/starknet/events/StarknetChainEvents.d.ts +19 -0
  47. package/dist/starknet/events/StarknetChainEvents.js +51 -0
  48. package/dist/starknet/events/StarknetChainEventsBrowser.d.ts +73 -0
  49. package/dist/starknet/events/StarknetChainEventsBrowser.js +210 -0
  50. package/dist/starknet/swaps/EscrowManagerAbi.d.ts +445 -0
  51. package/dist/starknet/swaps/EscrowManagerAbi.js +601 -0
  52. package/dist/starknet/swaps/StarknetSwapContract.d.ts +215 -0
  53. package/dist/starknet/swaps/StarknetSwapContract.js +452 -0
  54. package/dist/starknet/swaps/StarknetSwapData.d.ts +74 -0
  55. package/dist/starknet/swaps/StarknetSwapData.js +316 -0
  56. package/dist/starknet/swaps/StarknetSwapModule.d.ts +9 -0
  57. package/dist/starknet/swaps/StarknetSwapModule.js +12 -0
  58. package/dist/starknet/swaps/handlers/IHandler.d.ts +13 -0
  59. package/dist/starknet/swaps/handlers/IHandler.js +2 -0
  60. package/dist/starknet/swaps/handlers/claim/ClaimHandlers.d.ts +13 -0
  61. package/dist/starknet/swaps/handlers/claim/ClaimHandlers.js +13 -0
  62. package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.d.ts +22 -0
  63. package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.js +44 -0
  64. package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.d.ts +25 -0
  65. package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.js +48 -0
  66. package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.d.ts +26 -0
  67. package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.js +40 -0
  68. package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.d.ts +20 -0
  69. package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.js +29 -0
  70. package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.d.ts +64 -0
  71. package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +86 -0
  72. package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.d.ts +17 -0
  73. package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.js +27 -0
  74. package/dist/starknet/swaps/modules/StarknetLpVault.d.ts +69 -0
  75. package/dist/starknet/swaps/modules/StarknetLpVault.js +122 -0
  76. package/dist/starknet/swaps/modules/StarknetSwapClaim.d.ts +53 -0
  77. package/dist/starknet/swaps/modules/StarknetSwapClaim.js +100 -0
  78. package/dist/starknet/swaps/modules/StarknetSwapInit.d.ts +84 -0
  79. package/dist/starknet/swaps/modules/StarknetSwapInit.js +164 -0
  80. package/dist/starknet/swaps/modules/StarknetSwapRefund.d.ts +64 -0
  81. package/dist/starknet/swaps/modules/StarknetSwapRefund.js +131 -0
  82. package/dist/starknet/swaps/modules/SwapClaim.d.ts +54 -0
  83. package/dist/starknet/swaps/modules/SwapClaim.js +115 -0
  84. package/dist/starknet/swaps/modules/SwapInit.d.ts +79 -0
  85. package/dist/starknet/swaps/modules/SwapInit.js +174 -0
  86. package/dist/starknet/swaps/modules/SwapRefund.d.ts +63 -0
  87. package/dist/starknet/swaps/modules/SwapRefund.js +149 -0
  88. package/dist/starknet/wallet/StarknetKeypairWallet.d.ts +6 -0
  89. package/dist/starknet/wallet/StarknetKeypairWallet.js +26 -0
  90. package/dist/starknet/wallet/StarknetSigner.d.ts +12 -0
  91. package/dist/starknet/wallet/StarknetSigner.js +46 -0
  92. package/dist/utils/Utils.d.ts +38 -0
  93. package/dist/utils/Utils.js +255 -0
  94. package/package.json +39 -0
  95. package/src/index.ts +41 -0
  96. package/src/starknet/StarknetChainType.ts +20 -0
  97. package/src/starknet/StarknetInitializer.ts +75 -0
  98. package/src/starknet/base/StarknetAction.ts +90 -0
  99. package/src/starknet/base/StarknetBase.ts +56 -0
  100. package/src/starknet/base/StarknetModule.ts +20 -0
  101. package/src/starknet/base/modules/ERC20Abi.ts +1029 -0
  102. package/src/starknet/base/modules/StarknetAccounts.ts +26 -0
  103. package/src/starknet/base/modules/StarknetAddresses.ts +23 -0
  104. package/src/starknet/base/modules/StarknetBlocks.ts +59 -0
  105. package/src/starknet/base/modules/StarknetEvents.ts +105 -0
  106. package/src/starknet/base/modules/StarknetFees.ts +136 -0
  107. package/src/starknet/base/modules/StarknetSignatures.ts +91 -0
  108. package/src/starknet/base/modules/StarknetTokens.ts +116 -0
  109. package/src/starknet/base/modules/StarknetTransactions.ts +254 -0
  110. package/src/starknet/btcrelay/BtcRelayAbi.ts +338 -0
  111. package/src/starknet/btcrelay/StarknetBtcRelay.ts +415 -0
  112. package/src/starknet/btcrelay/headers/StarknetBtcHeader.ts +101 -0
  113. package/src/starknet/btcrelay/headers/StarknetBtcStoredHeader.ts +142 -0
  114. package/src/starknet/contract/StarknetContractBase.ts +29 -0
  115. package/src/starknet/contract/modules/StarknetContractEvents.ts +108 -0
  116. package/src/starknet/events/StarknetChainEvents.ts +63 -0
  117. package/src/starknet/events/StarknetChainEventsBrowser.ts +289 -0
  118. package/src/starknet/swaps/EscrowManagerAbi.ts +600 -0
  119. package/src/starknet/swaps/StarknetSwapContract.ts +694 -0
  120. package/src/starknet/swaps/StarknetSwapData.ts +441 -0
  121. package/src/starknet/swaps/StarknetSwapModule.ts +17 -0
  122. package/src/starknet/swaps/handlers/IHandler.ts +20 -0
  123. package/src/starknet/swaps/handlers/claim/ClaimHandlers.ts +23 -0
  124. package/src/starknet/swaps/handlers/claim/HashlockClaimHandler.ts +54 -0
  125. package/src/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.ts +73 -0
  126. package/src/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.ts +67 -0
  127. package/src/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.ts +49 -0
  128. package/src/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +151 -0
  129. package/src/starknet/swaps/handlers/refund/TimelockRefundHandler.ts +39 -0
  130. package/src/starknet/swaps/modules/StarknetLpVault.ts +148 -0
  131. package/src/starknet/swaps/modules/StarknetSwapClaim.ts +142 -0
  132. package/src/starknet/swaps/modules/StarknetSwapInit.ts +226 -0
  133. package/src/starknet/swaps/modules/StarknetSwapRefund.ts +202 -0
  134. package/src/starknet/wallet/StarknetKeypairWallet.ts +34 -0
  135. package/src/starknet/wallet/StarknetSigner.ts +55 -0
  136. package/src/utils/Utils.ts +247 -0
@@ -0,0 +1,215 @@
1
+ /// <reference types="node" />
2
+ import { ChainSwapType, IntermediaryReputationType, RelaySynchronizer, SignatureData, SwapCommitStatus, SwapContract, TransactionConfirmationOptions } from "@atomiqlabs/base";
3
+ import { Buffer } from "buffer";
4
+ import { EscrowManagerAbi } from "./EscrowManagerAbi";
5
+ import { StarknetContractBase } from "../contract/StarknetContractBase";
6
+ import { StarknetTx } from "../base/modules/StarknetTransactions";
7
+ import { StarknetSigner } from "../wallet/StarknetSigner";
8
+ import { constants, Provider } from "starknet";
9
+ import { StarknetRetryPolicy } from "../base/StarknetBase";
10
+ import { StarknetFees } from "../base/modules/StarknetFees";
11
+ import { StarknetBtcRelay } from "../btcrelay/StarknetBtcRelay";
12
+ import { StarknetSwapData } from "./StarknetSwapData";
13
+ import { StarknetLpVault } from "./modules/StarknetLpVault";
14
+ import { StarknetPreFetchVerification, StarknetSwapInit } from "./modules/StarknetSwapInit";
15
+ import { StarknetSwapRefund } from "./modules/StarknetSwapRefund";
16
+ import { IClaimHandler } from "./handlers/claim/ClaimHandlers";
17
+ import { StarknetSwapClaim } from "./modules/StarknetSwapClaim";
18
+ import { IHandler } from "./handlers/IHandler";
19
+ import { StarknetBtcStoredHeader } from "../btcrelay/headers/StarknetBtcStoredHeader";
20
+ export declare class StarknetSwapContract extends StarknetContractBase<typeof EscrowManagerAbi> implements SwapContract<StarknetSwapData, StarknetTx, never, StarknetPreFetchVerification, StarknetSigner, "STARKNET"> {
21
+ readonly chainId: "STARKNET";
22
+ readonly claimWithSecretTimeout: number;
23
+ readonly claimWithTxDataTimeout: number;
24
+ readonly refundTimeout: number;
25
+ readonly claimGracePeriod: number;
26
+ readonly refundGracePeriod: number;
27
+ readonly authGracePeriod: number;
28
+ readonly Init: StarknetSwapInit;
29
+ readonly Refund: StarknetSwapRefund;
30
+ readonly Claim: StarknetSwapClaim;
31
+ readonly LpVault: StarknetLpVault;
32
+ readonly claimHandlersByAddress: {
33
+ [address: string]: IClaimHandler<any, any>;
34
+ };
35
+ readonly claimHandlersBySwapType: {
36
+ [type in ChainSwapType]?: IClaimHandler<any, any>;
37
+ };
38
+ readonly refundHandlersByAddress: {
39
+ [address: string]: IHandler<any, any>;
40
+ };
41
+ readonly timelockRefundHandler: IHandler<any, any>;
42
+ readonly btcRelay: StarknetBtcRelay<any>;
43
+ constructor(chainId: constants.StarknetChainId, provider: Provider, btcRelay: StarknetBtcRelay<any>, contractAddress?: string, retryPolicy?: StarknetRetryPolicy, solanaFeeEstimator?: StarknetFees, handlerAddresses?: {
44
+ refund?: {
45
+ timelock?: string;
46
+ };
47
+ claim?: {
48
+ [type in ChainSwapType]?: string;
49
+ };
50
+ });
51
+ start(): Promise<void>;
52
+ preFetchForInitSignatureVerification(): Promise<StarknetPreFetchVerification>;
53
+ getInitSignature(signer: StarknetSigner, swapData: StarknetSwapData, authorizationTimeout: number, preFetchedBlockData?: never, feeRate?: string): Promise<SignatureData>;
54
+ isValidInitAuthorization(swapData: StarknetSwapData, { timeout, prefix, signature }: {
55
+ timeout: any;
56
+ prefix: any;
57
+ signature: any;
58
+ }, feeRate?: string, preFetchedData?: StarknetPreFetchVerification): Promise<Buffer>;
59
+ getInitAuthorizationExpiry(swapData: StarknetSwapData, { timeout, prefix, signature }: {
60
+ timeout: any;
61
+ prefix: any;
62
+ signature: any;
63
+ }, preFetchedData?: StarknetPreFetchVerification): Promise<number>;
64
+ isInitAuthorizationExpired(swapData: StarknetSwapData, { timeout, prefix, signature }: {
65
+ timeout: any;
66
+ prefix: any;
67
+ signature: any;
68
+ }): Promise<boolean>;
69
+ getRefundSignature(signer: StarknetSigner, swapData: StarknetSwapData, authorizationTimeout: number): Promise<SignatureData>;
70
+ isValidRefundAuthorization(swapData: StarknetSwapData, { timeout, prefix, signature }: {
71
+ timeout: any;
72
+ prefix: any;
73
+ signature: any;
74
+ }): Promise<Buffer>;
75
+ getDataSignature(signer: StarknetSigner, data: Buffer): Promise<string>;
76
+ isValidDataSignature(data: Buffer, signature: string, publicKey: string): Promise<boolean>;
77
+ /**
78
+ * Checks whether the claim is claimable by us, that means not expired, we are claimer & the swap is commited
79
+ *
80
+ * @param signer
81
+ * @param data
82
+ */
83
+ isClaimable(signer: string, data: StarknetSwapData): Promise<boolean>;
84
+ /**
85
+ * Checks whether a swap is commited, i.e. the swap still exists on-chain and was not claimed nor refunded
86
+ *
87
+ * @param swapData
88
+ */
89
+ isCommited(swapData: StarknetSwapData): Promise<boolean>;
90
+ /**
91
+ * Checks whether the swap is expired, takes into consideration possible on-chain time skew, therefore for claimer
92
+ * the swap expires a bit sooner than it should've & for the offerer it expires a bit later
93
+ *
94
+ * @param signer
95
+ * @param data
96
+ */
97
+ isExpired(signer: string, data: StarknetSwapData): Promise<boolean>;
98
+ /**
99
+ * Checks if the swap is refundable by us, checks if we are offerer, if the swap is already expired & if the swap
100
+ * is still commited
101
+ *
102
+ * @param signer
103
+ * @param data
104
+ */
105
+ isRequestRefundable(signer: string, data: StarknetSwapData): Promise<boolean>;
106
+ getHashForTxId(txId: string, confirmations: number): Buffer;
107
+ /**
108
+ * Get the swap payment hash to be used for an on-chain swap, uses poseidon hash of the value
109
+ *
110
+ * @param outputScript output script required to claim the swap
111
+ * @param amount sats sent required to claim the swap
112
+ * @param confirmations
113
+ * @param nonce swap nonce uniquely identifying the transaction to prevent replay attacks
114
+ */
115
+ getHashForOnchain(outputScript: Buffer, amount: bigint, confirmations: number, nonce?: bigint): Buffer;
116
+ /**
117
+ * Get the swap payment hash to be used for a lightning htlc swap, uses poseidon hash of the sha256 hash of the preimage
118
+ *
119
+ * @param paymentHash payment hash of the HTLC
120
+ */
121
+ getHashForHtlc(paymentHash: Buffer): Buffer;
122
+ getExtraData(outputScript: Buffer, amount: bigint, confirmations: number, nonce?: bigint): Buffer;
123
+ /**
124
+ * Gets the status of the specific swap, this also checks if we are offerer/claimer & checks for expiry (to see
125
+ * if swap is refundable)
126
+ *
127
+ * @param signer
128
+ * @param data
129
+ */
130
+ getCommitStatus(signer: string, data: StarknetSwapData): Promise<SwapCommitStatus>;
131
+ /**
132
+ * Checks the status of the specific payment hash
133
+ *
134
+ * @param paymentHash
135
+ */
136
+ getPaymentHashStatus(paymentHash: string): Promise<SwapCommitStatus>;
137
+ /**
138
+ * Returns the data committed for a specific payment hash, or null if no data is currently commited for
139
+ * the specific swap
140
+ *
141
+ * @param paymentHashHex
142
+ */
143
+ getCommitedData(paymentHashHex: string): Promise<StarknetSwapData>;
144
+ createSwapData(type: ChainSwapType, offerer: string, claimer: string, token: string, amount: bigint, paymentHash: string, sequence: bigint, expiry: bigint, payIn: boolean, payOut: boolean, securityDeposit: bigint, claimerBounty: bigint, depositToken?: string): Promise<StarknetSwapData>;
145
+ getBalance(signer: string, tokenAddress: string, inContract: boolean): Promise<bigint>;
146
+ getIntermediaryData(address: string, token: string): Promise<{
147
+ balance: bigint;
148
+ reputation: IntermediaryReputationType;
149
+ }>;
150
+ getIntermediaryReputation(address: string, token: string): Promise<IntermediaryReputationType>;
151
+ getIntermediaryBalance(address: string, token: string): Promise<bigint>;
152
+ isValidAddress(address: string): boolean;
153
+ getNativeCurrencyAddress(): string;
154
+ txsClaimWithSecret(signer: string | StarknetSigner, swapData: StarknetSwapData, secret: string, checkExpiry?: boolean, initAta?: boolean, feeRate?: string, skipAtaCheck?: boolean): Promise<StarknetTx[]>;
155
+ txsClaimWithTxData(signer: string | StarknetSigner, swapData: StarknetSwapData, tx: {
156
+ blockhash: string;
157
+ confirmations: number;
158
+ txid: string;
159
+ hex: string;
160
+ height: number;
161
+ }, requiredConfirmations: number, vout: number, commitedHeader?: StarknetBtcStoredHeader, synchronizer?: RelaySynchronizer<StarknetBtcStoredHeader, StarknetTx, any>, initAta?: boolean, feeRate?: string): Promise<StarknetTx[] | null>;
162
+ txsRefund(signer: string, swapData: StarknetSwapData, check?: boolean, initAta?: boolean, feeRate?: string): Promise<StarknetTx[]>;
163
+ txsRefundWithAuthorization(signer: string, swapData: StarknetSwapData, { timeout, prefix, signature }: {
164
+ timeout: any;
165
+ prefix: any;
166
+ signature: any;
167
+ }, check?: boolean, initAta?: boolean, feeRate?: string): Promise<StarknetTx[]>;
168
+ txsInit(swapData: StarknetSwapData, { timeout, prefix, signature }: {
169
+ timeout: any;
170
+ prefix: any;
171
+ signature: any;
172
+ }, skipChecks?: boolean, feeRate?: string): Promise<StarknetTx[]>;
173
+ txsWithdraw(signer: string, token: string, amount: bigint, feeRate?: string): Promise<StarknetTx[]>;
174
+ txsDeposit(signer: string, token: string, amount: bigint, feeRate?: string): Promise<StarknetTx[]>;
175
+ txsTransfer(signer: string, token: string, amount: bigint, dstAddress: string, feeRate?: string): Promise<StarknetTx[]>;
176
+ claimWithSecret(signer: StarknetSigner, swapData: StarknetSwapData, secret: string, checkExpiry?: boolean, initAta?: boolean, txOptions?: TransactionConfirmationOptions): Promise<string>;
177
+ claimWithTxData(signer: StarknetSigner, swapData: StarknetSwapData, tx: {
178
+ blockhash: string;
179
+ confirmations: number;
180
+ txid: string;
181
+ hex: string;
182
+ height: number;
183
+ }, requiredConfirmations: number, vout: number, commitedHeader?: StarknetBtcStoredHeader, synchronizer?: RelaySynchronizer<StarknetBtcStoredHeader, StarknetTx, any>, initAta?: boolean, txOptions?: TransactionConfirmationOptions): Promise<string>;
184
+ refund(signer: StarknetSigner, swapData: StarknetSwapData, check?: boolean, initAta?: boolean, txOptions?: TransactionConfirmationOptions): Promise<string>;
185
+ refundWithAuthorization(signer: StarknetSigner, swapData: StarknetSwapData, signature: SignatureData, check?: boolean, initAta?: boolean, txOptions?: TransactionConfirmationOptions): Promise<string>;
186
+ init(signer: StarknetSigner, swapData: StarknetSwapData, signature: SignatureData, skipChecks?: boolean, txOptions?: TransactionConfirmationOptions): Promise<string>;
187
+ withdraw(signer: StarknetSigner, token: string, amount: bigint, txOptions?: TransactionConfirmationOptions): Promise<string>;
188
+ deposit(signer: StarknetSigner, token: string, amount: bigint, txOptions?: TransactionConfirmationOptions): Promise<string>;
189
+ transfer(signer: StarknetSigner, token: string, amount: bigint, dstAddress: string, txOptions?: TransactionConfirmationOptions): Promise<string>;
190
+ sendAndConfirm(signer: StarknetSigner, txs: StarknetTx[], waitForConfirmation?: boolean, abortSignal?: AbortSignal, parallel?: boolean, onBeforePublish?: (txId: string, rawTx: string) => Promise<void>): Promise<string[]>;
191
+ serializeTx(tx: StarknetTx): Promise<string>;
192
+ deserializeTx(txData: string): Promise<StarknetTx>;
193
+ getTxIdStatus(txId: string): Promise<"not_found" | "pending" | "success" | "reverted">;
194
+ getTxStatus(tx: string): Promise<"not_found" | "pending" | "success" | "reverted">;
195
+ getInitPayInFeeRate(offerer?: string, claimer?: string, token?: string, paymentHash?: string): Promise<string>;
196
+ getInitFeeRate(offerer?: string, claimer?: string, token?: string, paymentHash?: string): Promise<string>;
197
+ getRefundFeeRate(swapData: StarknetSwapData): Promise<string>;
198
+ getClaimFeeRate(signer: string, swapData: StarknetSwapData): Promise<string>;
199
+ getClaimFee(signer: string, swapData: StarknetSwapData, feeRate?: string): Promise<bigint>;
200
+ /**
201
+ * Get the estimated solana fee of the commit transaction
202
+ */
203
+ getCommitFee(swapData: StarknetSwapData, feeRate?: string): Promise<bigint>;
204
+ /**
205
+ * Get the estimated solana transaction fee of the refund transaction
206
+ */
207
+ getRefundFee(swapData: StarknetSwapData, feeRate?: string): Promise<bigint>;
208
+ offBeforeTxReplace(callback: (oldTx: string, oldTxId: string, newTx: string, newTxId: string) => Promise<void>): boolean;
209
+ onBeforeTxReplace(callback: (oldTx: string, oldTxId: string, newTx: string, newTxId: string) => Promise<void>): void;
210
+ onBeforeTxSigned(callback: (tx: StarknetTx) => Promise<void>): void;
211
+ offBeforeTxSigned(callback: (tx: StarknetTx) => Promise<void>): boolean;
212
+ isValidToken(tokenIdentifier: string): boolean;
213
+ randomAddress(): string;
214
+ randomSigner(): StarknetSigner;
215
+ }
@@ -0,0 +1,452 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StarknetSwapContract = void 0;
4
+ const base_1 = require("@atomiqlabs/base");
5
+ const buffer_1 = require("buffer");
6
+ const EscrowManagerAbi_1 = require("./EscrowManagerAbi");
7
+ const StarknetContractBase_1 = require("../contract/StarknetContractBase");
8
+ const StarknetSigner_1 = require("../wallet/StarknetSigner");
9
+ const starknet_1 = require("starknet");
10
+ const StarknetFees_1 = require("../base/modules/StarknetFees");
11
+ const StarknetSwapData_1 = require("./StarknetSwapData");
12
+ const Utils_1 = require("../../utils/Utils");
13
+ const TimelockRefundHandler_1 = require("./handlers/refund/TimelockRefundHandler");
14
+ const StarknetKeypairWallet_1 = require("../wallet/StarknetKeypairWallet");
15
+ const StarknetLpVault_1 = require("./modules/StarknetLpVault");
16
+ const StarknetSwapInit_1 = require("./modules/StarknetSwapInit");
17
+ const StarknetSwapRefund_1 = require("./modules/StarknetSwapRefund");
18
+ const ClaimHandlers_1 = require("./handlers/claim/ClaimHandlers");
19
+ const StarknetSwapClaim_1 = require("./modules/StarknetSwapClaim");
20
+ const createHash = require("create-hash");
21
+ const ESCROW_STATE_COMMITTED = 1;
22
+ const ESCROW_STATE_CLAIMED = 2;
23
+ const ESCROW_STATE_REFUNDED = 3;
24
+ const swapContractAddreses = {
25
+ [starknet_1.constants.StarknetChainId.SN_SEPOLIA]: "0x035e9a06faa09ee78d7c8f4722687e4f3c8d8094860cc5092704b26a50f8a43f",
26
+ [starknet_1.constants.StarknetChainId.SN_MAIN]: "0x00b30f3bf0702d2570036c786a4b329816f99eecf36368cf74da0c0dfd67634d"
27
+ };
28
+ const defaultClaimAddresses = {
29
+ [starknet_1.constants.StarknetChainId.SN_SEPOLIA]: {
30
+ [base_1.ChainSwapType.HTLC]: "0x04a57ea54d4637c352aad1bbee046868926a11702216a0aaf7eeec1568be2d7b",
31
+ [base_1.ChainSwapType.CHAIN_TXID]: "0x04c7cde88359e14b6f6f779f8b9d8310cee37e91a6f143f855ae29fab33c396e",
32
+ [base_1.ChainSwapType.CHAIN]: "0x051bef6f5fd12e2832a7d38653bdfc8eb84ba7eb7a4aada5b87ef38a9999cf17",
33
+ [base_1.ChainSwapType.CHAIN_NONCED]: "0x050e50eacd16da414f2c3a7c3570fd5e248974c6fe757d41acbf72d2836fa0a1"
34
+ },
35
+ [starknet_1.constants.StarknetChainId.SN_MAIN]: {
36
+ [base_1.ChainSwapType.HTLC]: "0x0421c59a5442ccc430288c71ae606f2ca94dda7c8cd7c101f0865fa264853989",
37
+ [base_1.ChainSwapType.CHAIN_TXID]: "0x03aad3b184fa6484e3f8dde6a45a2c2512460a3fb4893112694b68645b50ce2e",
38
+ [base_1.ChainSwapType.CHAIN]: "0x012a938e57af955a4c96c49900731f572670bf1b7e120f99a7fe7d1f5d75cb8a",
39
+ [base_1.ChainSwapType.CHAIN_NONCED]: "0x04a0cad6b9d9ed790ce3eb95bddc22663168f0d50d24adaf7495b344609874a7"
40
+ }
41
+ };
42
+ const defaultRefundAddresses = {
43
+ [starknet_1.constants.StarknetChainId.SN_SEPOLIA]: {
44
+ timelock: "0x0726415752e78da4549e09da7824ae20b45539ca1fca71c93b349887cc0cac0d"
45
+ },
46
+ [starknet_1.constants.StarknetChainId.SN_MAIN]: {
47
+ timelock: "0x014ceb49916bb9228d8179db0c480147fab2dab71e17cfd7eca9c214eeb427e2"
48
+ }
49
+ };
50
+ class StarknetSwapContract extends StarknetContractBase_1.StarknetContractBase {
51
+ constructor(chainId, provider, btcRelay, contractAddress = swapContractAddreses[chainId], retryPolicy, solanaFeeEstimator = new StarknetFees_1.StarknetFees(provider), handlerAddresses) {
52
+ super(chainId, provider, contractAddress, EscrowManagerAbi_1.EscrowManagerAbi, retryPolicy, solanaFeeEstimator);
53
+ ////////////////////////
54
+ //// Constants
55
+ this.chainId = "STARKNET";
56
+ ////////////////////////
57
+ //// Timeouts
58
+ this.claimWithSecretTimeout = 180;
59
+ this.claimWithTxDataTimeout = 180;
60
+ this.refundTimeout = 180;
61
+ this.claimGracePeriod = 10 * 60;
62
+ this.refundGracePeriod = 10 * 60;
63
+ this.authGracePeriod = 30;
64
+ ////////////////////////
65
+ //// Handlers
66
+ this.claimHandlersByAddress = {};
67
+ this.claimHandlersBySwapType = {};
68
+ this.refundHandlersByAddress = {};
69
+ this.Init = new StarknetSwapInit_1.StarknetSwapInit(this);
70
+ this.Refund = new StarknetSwapRefund_1.StarknetSwapRefund(this);
71
+ this.Claim = new StarknetSwapClaim_1.StarknetSwapClaim(this);
72
+ this.LpVault = new StarknetLpVault_1.StarknetLpVault(this);
73
+ this.btcRelay = btcRelay;
74
+ handlerAddresses ?? (handlerAddresses = {});
75
+ handlerAddresses.refund ?? (handlerAddresses.refund = {});
76
+ handlerAddresses.refund = { ...defaultRefundAddresses[chainId], ...handlerAddresses.refund };
77
+ handlerAddresses.claim ?? (handlerAddresses.claim = {});
78
+ handlerAddresses.claim = { ...defaultClaimAddresses[chainId], ...handlerAddresses.claim };
79
+ ClaimHandlers_1.claimHandlersList.forEach(handlerCtor => {
80
+ const handler = new handlerCtor(handlerAddresses.claim[handlerCtor.type]);
81
+ this.claimHandlersByAddress[handler.address] = handler;
82
+ this.claimHandlersBySwapType[handlerCtor.type] = handler;
83
+ });
84
+ this.timelockRefundHandler = new TimelockRefundHandler_1.TimelockRefundHandler(handlerAddresses.refund.timelock);
85
+ this.refundHandlersByAddress[this.timelockRefundHandler.address] = this.timelockRefundHandler;
86
+ }
87
+ async start() {
88
+ }
89
+ ////////////////////////////////////////////
90
+ //// Signatures
91
+ preFetchForInitSignatureVerification() {
92
+ return this.Init.preFetchForInitSignatureVerification();
93
+ }
94
+ getInitSignature(signer, swapData, authorizationTimeout, preFetchedBlockData, feeRate) {
95
+ return this.Init.signSwapInitialization(signer, swapData, authorizationTimeout);
96
+ }
97
+ isValidInitAuthorization(swapData, { timeout, prefix, signature }, feeRate, preFetchedData) {
98
+ return this.Init.isSignatureValid(swapData, timeout, prefix, signature, preFetchedData);
99
+ }
100
+ getInitAuthorizationExpiry(swapData, { timeout, prefix, signature }, preFetchedData) {
101
+ return this.Init.getSignatureExpiry(timeout);
102
+ }
103
+ isInitAuthorizationExpired(swapData, { timeout, prefix, signature }) {
104
+ return this.Init.isSignatureExpired(timeout);
105
+ }
106
+ getRefundSignature(signer, swapData, authorizationTimeout) {
107
+ return this.Refund.signSwapRefund(signer, swapData, authorizationTimeout);
108
+ }
109
+ isValidRefundAuthorization(swapData, { timeout, prefix, signature }) {
110
+ return this.Refund.isSignatureValid(swapData, timeout, prefix, signature);
111
+ }
112
+ getDataSignature(signer, data) {
113
+ return this.Signatures.getDataSignature(signer, data);
114
+ }
115
+ isValidDataSignature(data, signature, publicKey) {
116
+ return this.Signatures.isValidDataSignature(data, signature, publicKey);
117
+ }
118
+ ////////////////////////////////////////////
119
+ //// Swap data utils
120
+ /**
121
+ * Checks whether the claim is claimable by us, that means not expired, we are claimer & the swap is commited
122
+ *
123
+ * @param signer
124
+ * @param data
125
+ */
126
+ async isClaimable(signer, data) {
127
+ if (!data.isClaimer(signer))
128
+ return false;
129
+ if (await this.isExpired(signer, data))
130
+ return false;
131
+ return await this.isCommited(data);
132
+ }
133
+ /**
134
+ * Checks whether a swap is commited, i.e. the swap still exists on-chain and was not claimed nor refunded
135
+ *
136
+ * @param swapData
137
+ */
138
+ async isCommited(swapData) {
139
+ const data = await this.contract.get_hash_state("0x" + swapData.getEscrowHash());
140
+ return Number(data.state) === ESCROW_STATE_COMMITTED;
141
+ }
142
+ /**
143
+ * Checks whether the swap is expired, takes into consideration possible on-chain time skew, therefore for claimer
144
+ * the swap expires a bit sooner than it should've & for the offerer it expires a bit later
145
+ *
146
+ * @param signer
147
+ * @param data
148
+ */
149
+ isExpired(signer, data) {
150
+ let currentTimestamp = BigInt(Math.floor(Date.now() / 1000));
151
+ if (data.isClaimer(signer))
152
+ currentTimestamp = currentTimestamp - BigInt(this.refundGracePeriod);
153
+ if (data.isOfferer(signer))
154
+ currentTimestamp = currentTimestamp + BigInt(this.claimGracePeriod);
155
+ return Promise.resolve(data.getExpiry() < currentTimestamp);
156
+ }
157
+ /**
158
+ * Checks if the swap is refundable by us, checks if we are offerer, if the swap is already expired & if the swap
159
+ * is still commited
160
+ *
161
+ * @param signer
162
+ * @param data
163
+ */
164
+ async isRequestRefundable(signer, data) {
165
+ //Swap can only be refunded by the offerer
166
+ if (!data.isOfferer(signer))
167
+ return false;
168
+ if (!(await this.isExpired(signer, data)))
169
+ return false;
170
+ return await this.isCommited(data);
171
+ }
172
+ getHashForTxId(txId, confirmations) {
173
+ return (0, Utils_1.bigNumberishToBuffer)(this.claimHandlersBySwapType[base_1.ChainSwapType.CHAIN_TXID].getCommitment({
174
+ txId,
175
+ confirmations,
176
+ btcRelay: this.btcRelay
177
+ }), 32);
178
+ }
179
+ /**
180
+ * Get the swap payment hash to be used for an on-chain swap, uses poseidon hash of the value
181
+ *
182
+ * @param outputScript output script required to claim the swap
183
+ * @param amount sats sent required to claim the swap
184
+ * @param confirmations
185
+ * @param nonce swap nonce uniquely identifying the transaction to prevent replay attacks
186
+ */
187
+ getHashForOnchain(outputScript, amount, confirmations, nonce) {
188
+ let result;
189
+ if (nonce == null || nonce === 0n) {
190
+ result = this.claimHandlersBySwapType[base_1.ChainSwapType.CHAIN].getCommitment({
191
+ output: outputScript,
192
+ amount,
193
+ confirmations,
194
+ btcRelay: this.btcRelay
195
+ });
196
+ }
197
+ else {
198
+ result = this.claimHandlersBySwapType[base_1.ChainSwapType.CHAIN_NONCED].getCommitment({
199
+ output: outputScript,
200
+ amount,
201
+ nonce,
202
+ confirmations,
203
+ btcRelay: this.btcRelay
204
+ });
205
+ }
206
+ return (0, Utils_1.bigNumberishToBuffer)(result, 32);
207
+ }
208
+ /**
209
+ * Get the swap payment hash to be used for a lightning htlc swap, uses poseidon hash of the sha256 hash of the preimage
210
+ *
211
+ * @param paymentHash payment hash of the HTLC
212
+ */
213
+ getHashForHtlc(paymentHash) {
214
+ return (0, Utils_1.bigNumberishToBuffer)(this.claimHandlersBySwapType[base_1.ChainSwapType.HTLC].getCommitment(paymentHash), 32);
215
+ }
216
+ getExtraData(outputScript, amount, confirmations, nonce) {
217
+ if (nonce == null)
218
+ nonce = 0n;
219
+ const txoHash = createHash("sha256").update(buffer_1.Buffer.concat([
220
+ base_1.BigIntBufferUtils.toBuffer(amount, "le", 8),
221
+ outputScript
222
+ ])).digest();
223
+ return buffer_1.Buffer.concat([
224
+ txoHash,
225
+ base_1.BigIntBufferUtils.toBuffer(nonce, "be", 8),
226
+ base_1.BigIntBufferUtils.toBuffer(BigInt(confirmations), "be", 2)
227
+ ]);
228
+ }
229
+ ////////////////////////////////////////////
230
+ //// Swap data getters
231
+ /**
232
+ * Gets the status of the specific swap, this also checks if we are offerer/claimer & checks for expiry (to see
233
+ * if swap is refundable)
234
+ *
235
+ * @param signer
236
+ * @param data
237
+ */
238
+ async getCommitStatus(signer, data) {
239
+ const escrowHash = data.getEscrowHash();
240
+ const stateData = await this.contract.get_hash_state("0x" + escrowHash);
241
+ const state = Number(stateData.state);
242
+ switch (state) {
243
+ case ESCROW_STATE_COMMITTED:
244
+ if (data.isOfferer(signer) && await this.isExpired(signer, data))
245
+ return base_1.SwapCommitStatus.REFUNDABLE;
246
+ return base_1.SwapCommitStatus.COMMITED;
247
+ case ESCROW_STATE_CLAIMED:
248
+ return base_1.SwapCommitStatus.PAID;
249
+ default:
250
+ if (await this.isExpired(signer, data))
251
+ return base_1.SwapCommitStatus.EXPIRED;
252
+ return base_1.SwapCommitStatus.NOT_COMMITED;
253
+ }
254
+ }
255
+ /**
256
+ * Checks the status of the specific payment hash
257
+ *
258
+ * @param paymentHash
259
+ */
260
+ async getPaymentHashStatus(paymentHash) {
261
+ //TODO: Noop
262
+ return base_1.SwapCommitStatus.NOT_COMMITED;
263
+ }
264
+ /**
265
+ * Returns the data committed for a specific payment hash, or null if no data is currently commited for
266
+ * the specific swap
267
+ *
268
+ * @param paymentHashHex
269
+ */
270
+ async getCommitedData(paymentHashHex) {
271
+ //TODO: Noop
272
+ return null;
273
+ }
274
+ ////////////////////////////////////////////
275
+ //// Swap data initializer
276
+ createSwapData(type, offerer, claimer, token, amount, paymentHash, sequence, expiry, payIn, payOut, securityDeposit, claimerBounty, depositToken = this.Tokens.getNativeCurrencyAddress()) {
277
+ return Promise.resolve(new StarknetSwapData_1.StarknetSwapData(offerer, claimer, token, this.timelockRefundHandler.address, this.claimHandlersBySwapType?.[type]?.address, payOut, payIn, payIn, //For now track reputation for all payIn swaps
278
+ sequence, "0x" + paymentHash, (0, Utils_1.toHex)(expiry), amount, depositToken, securityDeposit, claimerBounty, type, null, []));
279
+ }
280
+ ////////////////////////////////////////////
281
+ //// Utils
282
+ async getBalance(signer, tokenAddress, inContract) {
283
+ if (inContract)
284
+ return await this.getIntermediaryBalance(signer, tokenAddress);
285
+ //TODO: For native token we should discount the cost of deploying an account if it is not deployed yet
286
+ return await this.Tokens.getTokenBalance(signer, tokenAddress);
287
+ }
288
+ getIntermediaryData(address, token) {
289
+ return this.LpVault.getIntermediaryData(address, token);
290
+ }
291
+ getIntermediaryReputation(address, token) {
292
+ return this.LpVault.getIntermediaryReputation(address, token);
293
+ }
294
+ getIntermediaryBalance(address, token) {
295
+ return this.LpVault.getIntermediaryBalance(address, token);
296
+ }
297
+ isValidAddress(address) {
298
+ return this.Addresses.isValidAddress(address);
299
+ }
300
+ getNativeCurrencyAddress() {
301
+ return this.Tokens.getNativeCurrencyAddress();
302
+ }
303
+ ////////////////////////////////////////////
304
+ //// Transaction initializers
305
+ async txsClaimWithSecret(signer, swapData, secret, checkExpiry, initAta, feeRate, skipAtaCheck) {
306
+ return this.Claim.txsClaimWithSecret(typeof (signer) === "string" ? signer : signer.getAddress(), swapData, secret, checkExpiry, feeRate);
307
+ }
308
+ async txsClaimWithTxData(signer, swapData, tx, requiredConfirmations, vout, commitedHeader, synchronizer, initAta, feeRate) {
309
+ return this.Claim.txsClaimWithTxData(typeof (signer) === "string" ? signer : signer.getAddress(), swapData, tx, requiredConfirmations, vout, commitedHeader, synchronizer, feeRate);
310
+ }
311
+ txsRefund(signer, swapData, check, initAta, feeRate) {
312
+ return this.Refund.txsRefund(signer, swapData, check, feeRate);
313
+ }
314
+ txsRefundWithAuthorization(signer, swapData, { timeout, prefix, signature }, check, initAta, feeRate) {
315
+ return this.Refund.txsRefundWithAuthorization(signer, swapData, timeout, prefix, signature, check, feeRate);
316
+ }
317
+ txsInit(swapData, { timeout, prefix, signature }, skipChecks, feeRate) {
318
+ return this.Init.txsInit(swapData, timeout, prefix, signature, skipChecks, feeRate);
319
+ }
320
+ txsWithdraw(signer, token, amount, feeRate) {
321
+ return this.LpVault.txsWithdraw(signer, token, amount, feeRate);
322
+ }
323
+ txsDeposit(signer, token, amount, feeRate) {
324
+ return this.LpVault.txsDeposit(signer, token, amount, feeRate);
325
+ }
326
+ txsTransfer(signer, token, amount, dstAddress, feeRate) {
327
+ return this.Tokens.txsTransfer(signer, token, amount, dstAddress, feeRate);
328
+ }
329
+ ////////////////////////////////////////////
330
+ //// Executors
331
+ async claimWithSecret(signer, swapData, secret, checkExpiry, initAta, txOptions) {
332
+ const result = await this.Claim.txsClaimWithSecret(signer.getAddress(), swapData, secret, checkExpiry, txOptions?.feeRate);
333
+ const [signature] = await this.Transactions.sendAndConfirm(signer, result, txOptions?.waitForConfirmation, txOptions?.abortSignal);
334
+ return signature;
335
+ }
336
+ async claimWithTxData(signer, swapData, tx, requiredConfirmations, vout, commitedHeader, synchronizer, initAta, txOptions) {
337
+ const txs = await this.Claim.txsClaimWithTxData(signer.getAddress(), swapData, tx, requiredConfirmations, vout, commitedHeader, synchronizer, txOptions?.feeRate);
338
+ if (txs === null)
339
+ throw new Error("Btc relay not synchronized to required blockheight!");
340
+ //TODO: This doesn't return proper tx signature
341
+ const [signature] = await this.Transactions.sendAndConfirm(signer, txs, txOptions?.waitForConfirmation, txOptions?.abortSignal);
342
+ return signature;
343
+ }
344
+ async refund(signer, swapData, check, initAta, txOptions) {
345
+ let result = await this.txsRefund(signer.getAddress(), swapData, check, initAta, txOptions?.feeRate);
346
+ const [signature] = await this.Transactions.sendAndConfirm(signer, result, txOptions?.waitForConfirmation, txOptions?.abortSignal);
347
+ return signature;
348
+ }
349
+ async refundWithAuthorization(signer, swapData, signature, check, initAta, txOptions) {
350
+ let result = await this.txsRefundWithAuthorization(signer.getAddress(), swapData, signature, check, initAta, txOptions?.feeRate);
351
+ const [txSignature] = await this.Transactions.sendAndConfirm(signer, result, txOptions?.waitForConfirmation, txOptions?.abortSignal);
352
+ return txSignature;
353
+ }
354
+ async init(signer, swapData, signature, skipChecks, txOptions) {
355
+ if (swapData.isPayIn()) {
356
+ if (!swapData.isOfferer(signer.getAddress()))
357
+ throw new Error("Invalid signer provided!");
358
+ }
359
+ else {
360
+ if (!swapData.isClaimer(signer.getAddress()))
361
+ throw new Error("Invalid signer provided!");
362
+ }
363
+ let result = await this.txsInit(swapData, signature, skipChecks, txOptions?.feeRate);
364
+ const [txSignature] = await this.Transactions.sendAndConfirm(signer, result, txOptions?.waitForConfirmation, txOptions?.abortSignal);
365
+ return txSignature;
366
+ }
367
+ async withdraw(signer, token, amount, txOptions) {
368
+ const txs = await this.LpVault.txsWithdraw(signer.getAddress(), token, amount, txOptions?.feeRate);
369
+ const [txId] = await this.Transactions.sendAndConfirm(signer, txs, txOptions?.waitForConfirmation, txOptions?.abortSignal, false);
370
+ return txId;
371
+ }
372
+ async deposit(signer, token, amount, txOptions) {
373
+ const txs = await this.LpVault.txsDeposit(signer.getAddress(), token, amount, txOptions?.feeRate);
374
+ const [txId] = await this.Transactions.sendAndConfirm(signer, txs, txOptions?.waitForConfirmation, txOptions?.abortSignal, false);
375
+ return txId;
376
+ }
377
+ async transfer(signer, token, amount, dstAddress, txOptions) {
378
+ const txs = await this.Tokens.txsTransfer(signer.getAddress(), token, amount, dstAddress, txOptions?.feeRate);
379
+ const [txId] = await this.Transactions.sendAndConfirm(signer, txs, txOptions?.waitForConfirmation, txOptions?.abortSignal, false);
380
+ return txId;
381
+ }
382
+ ////////////////////////////////////////////
383
+ //// Transactions
384
+ sendAndConfirm(signer, txs, waitForConfirmation, abortSignal, parallel, onBeforePublish) {
385
+ return this.Transactions.sendAndConfirm(signer, txs, waitForConfirmation, abortSignal, parallel, onBeforePublish);
386
+ }
387
+ serializeTx(tx) {
388
+ return this.Transactions.serializeTx(tx);
389
+ }
390
+ deserializeTx(txData) {
391
+ return this.Transactions.deserializeTx(txData);
392
+ }
393
+ getTxIdStatus(txId) {
394
+ return this.Transactions.getTxIdStatus(txId);
395
+ }
396
+ getTxStatus(tx) {
397
+ return this.Transactions.getTxStatus(tx);
398
+ }
399
+ ////////////////////////////////////////////
400
+ //// Fees
401
+ getInitPayInFeeRate(offerer, claimer, token, paymentHash) {
402
+ return this.Fees.getFeeRate();
403
+ }
404
+ getInitFeeRate(offerer, claimer, token, paymentHash) {
405
+ return this.Fees.getFeeRate();
406
+ }
407
+ getRefundFeeRate(swapData) {
408
+ return this.Fees.getFeeRate();
409
+ }
410
+ getClaimFeeRate(signer, swapData) {
411
+ return this.Fees.getFeeRate();
412
+ }
413
+ getClaimFee(signer, swapData, feeRate) {
414
+ return this.Claim.getClaimFee(swapData, feeRate);
415
+ }
416
+ /**
417
+ * Get the estimated solana fee of the commit transaction
418
+ */
419
+ getCommitFee(swapData, feeRate) {
420
+ return this.Init.getInitFee(swapData, feeRate);
421
+ }
422
+ /**
423
+ * Get the estimated solana transaction fee of the refund transaction
424
+ */
425
+ getRefundFee(swapData, feeRate) {
426
+ return this.Refund.getRefundFee(swapData, feeRate);
427
+ }
428
+ ///////////////////////////////////
429
+ //// Callbacks & handlers
430
+ offBeforeTxReplace(callback) {
431
+ return true;
432
+ }
433
+ onBeforeTxReplace(callback) { }
434
+ onBeforeTxSigned(callback) {
435
+ this.Transactions.onBeforeTxSigned(callback);
436
+ }
437
+ offBeforeTxSigned(callback) {
438
+ return this.Transactions.offBeforeTxSigned(callback);
439
+ }
440
+ isValidToken(tokenIdentifier) {
441
+ return this.Tokens.isValidToken(tokenIdentifier);
442
+ }
443
+ randomAddress() {
444
+ return starknet_1.stark.randomAddress();
445
+ }
446
+ randomSigner() {
447
+ const privateKey = "0x" + buffer_1.Buffer.from(starknet_1.ec.starkCurve.utils.randomPrivateKey()).toString("hex");
448
+ const wallet = new StarknetKeypairWallet_1.StarknetKeypairWallet(this.provider, privateKey);
449
+ return new StarknetSigner_1.StarknetSigner(wallet);
450
+ }
451
+ }
452
+ exports.StarknetSwapContract = StarknetSwapContract;