@atomiqlabs/chain-starknet 1.0.8 → 2.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 (121) hide show
  1. package/dist/index.d.ts +13 -9
  2. package/dist/index.js +13 -9
  3. package/dist/starknet/StarknetChainType.d.ts +6 -2
  4. package/dist/starknet/StarknetInitializer.d.ts +3 -2
  5. package/dist/starknet/StarknetInitializer.js +17 -6
  6. package/dist/starknet/btcrelay/StarknetBtcRelay.d.ts +28 -7
  7. package/dist/starknet/btcrelay/StarknetBtcRelay.js +75 -20
  8. package/dist/starknet/{base → chain}/StarknetAction.d.ts +2 -2
  9. package/dist/starknet/chain/StarknetChainInterface.d.ts +52 -0
  10. package/dist/starknet/chain/StarknetChainInterface.js +91 -0
  11. package/dist/starknet/{base → chain}/StarknetModule.d.ts +3 -3
  12. package/dist/starknet/{base → chain}/modules/StarknetAddresses.d.ts +1 -1
  13. package/dist/starknet/{base → chain}/modules/StarknetAddresses.js +1 -1
  14. package/dist/starknet/{base → chain}/modules/StarknetSignatures.d.ts +2 -2
  15. package/dist/starknet/{base → chain}/modules/StarknetTokens.js +2 -1
  16. package/dist/starknet/{base → chain}/modules/StarknetTransactions.d.ts +7 -1
  17. package/dist/starknet/{base → chain}/modules/StarknetTransactions.js +45 -16
  18. package/dist/starknet/contract/StarknetContractBase.d.ts +5 -5
  19. package/dist/starknet/contract/StarknetContractBase.js +5 -7
  20. package/dist/starknet/contract/StarknetContractModule.d.ts +8 -0
  21. package/dist/starknet/contract/StarknetContractModule.js +11 -0
  22. package/dist/starknet/contract/modules/StarknetContractEvents.d.ts +15 -4
  23. package/dist/starknet/contract/modules/StarknetContractEvents.js +26 -6
  24. package/dist/starknet/events/StarknetChainEvents.d.ts +3 -1
  25. package/dist/starknet/events/StarknetChainEvents.js +9 -9
  26. package/dist/starknet/events/StarknetChainEventsBrowser.d.ts +24 -6
  27. package/dist/starknet/events/StarknetChainEventsBrowser.js +116 -28
  28. package/dist/starknet/provider/RpcProviderWithRetries.d.ts +21 -0
  29. package/dist/starknet/provider/RpcProviderWithRetries.js +32 -0
  30. package/dist/starknet/spv_swap/SpvVaultContractAbi.d.ts +488 -0
  31. package/dist/starknet/spv_swap/SpvVaultContractAbi.js +656 -0
  32. package/dist/starknet/spv_swap/StarknetSpvVaultContract.d.ts +65 -0
  33. package/dist/starknet/spv_swap/StarknetSpvVaultContract.js +372 -0
  34. package/dist/starknet/spv_swap/StarknetSpvVaultData.d.ts +49 -0
  35. package/dist/starknet/spv_swap/StarknetSpvVaultData.js +144 -0
  36. package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.d.ts +24 -0
  37. package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.js +61 -0
  38. package/dist/starknet/swaps/StarknetSwapContract.d.ts +4 -22
  39. package/dist/starknet/swaps/StarknetSwapContract.js +23 -80
  40. package/dist/starknet/swaps/StarknetSwapModule.d.ts +6 -5
  41. package/dist/starknet/swaps/StarknetSwapModule.js +5 -6
  42. package/dist/starknet/swaps/handlers/IHandler.d.ts +2 -2
  43. package/dist/starknet/swaps/handlers/claim/ClaimHandlers.d.ts +1 -1
  44. package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.d.ts +2 -2
  45. package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.d.ts +2 -2
  46. package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.d.ts +2 -2
  47. package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.d.ts +2 -2
  48. package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.d.ts +2 -21
  49. package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +7 -41
  50. package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.d.ts +2 -2
  51. package/dist/starknet/swaps/modules/StarknetLpVault.d.ts +1 -1
  52. package/dist/starknet/swaps/modules/StarknetLpVault.js +9 -9
  53. package/dist/starknet/swaps/modules/StarknetSwapClaim.d.ts +1 -1
  54. package/dist/starknet/swaps/modules/StarknetSwapClaim.js +8 -8
  55. package/dist/starknet/swaps/modules/StarknetSwapInit.d.ts +1 -1
  56. package/dist/starknet/swaps/modules/StarknetSwapInit.js +9 -9
  57. package/dist/starknet/swaps/modules/StarknetSwapRefund.d.ts +1 -3
  58. package/dist/starknet/swaps/modules/StarknetSwapRefund.js +8 -11
  59. package/dist/starknet/wallet/StarknetSigner.js +1 -1
  60. package/dist/utils/Utils.d.ts +2 -2
  61. package/dist/utils/Utils.js +3 -1
  62. package/package.json +2 -2
  63. package/src/index.ts +15 -9
  64. package/src/starknet/StarknetChainType.ts +10 -2
  65. package/src/starknet/StarknetInitializer.ts +23 -7
  66. package/src/starknet/btcrelay/StarknetBtcRelay.ts +104 -30
  67. package/src/starknet/{base → chain}/StarknetAction.ts +3 -3
  68. package/src/starknet/chain/StarknetChainInterface.ts +149 -0
  69. package/src/starknet/{base → chain}/StarknetModule.ts +3 -3
  70. package/src/starknet/{base → chain}/modules/StarknetAddresses.ts +1 -1
  71. package/src/starknet/{base → chain}/modules/StarknetSignatures.ts +2 -2
  72. package/src/starknet/{base → chain}/modules/StarknetTokens.ts +2 -1
  73. package/src/starknet/{base → chain}/modules/StarknetTransactions.ts +43 -18
  74. package/src/starknet/contract/StarknetContractBase.ts +9 -12
  75. package/src/starknet/contract/StarknetContractModule.ts +16 -0
  76. package/src/starknet/contract/modules/StarknetContractEvents.ts +33 -7
  77. package/src/starknet/events/StarknetChainEvents.ts +15 -11
  78. package/src/starknet/events/StarknetChainEventsBrowser.ts +168 -41
  79. package/src/starknet/provider/RpcProviderWithRetries.ts +43 -0
  80. package/src/starknet/spv_swap/SpvVaultContractAbi.ts +656 -0
  81. package/src/starknet/spv_swap/StarknetSpvVaultContract.ts +475 -0
  82. package/src/starknet/spv_swap/StarknetSpvVaultData.ts +194 -0
  83. package/src/starknet/spv_swap/StarknetSpvWithdrawalData.ts +68 -0
  84. package/src/starknet/swaps/StarknetSwapContract.ts +28 -116
  85. package/src/starknet/swaps/StarknetSwapModule.ts +8 -8
  86. package/src/starknet/swaps/handlers/IHandler.ts +2 -2
  87. package/src/starknet/swaps/handlers/claim/ClaimHandlers.ts +1 -1
  88. package/src/starknet/swaps/handlers/claim/HashlockClaimHandler.ts +2 -2
  89. package/src/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.ts +2 -2
  90. package/src/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.ts +2 -2
  91. package/src/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.ts +2 -2
  92. package/src/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +12 -61
  93. package/src/starknet/swaps/handlers/refund/TimelockRefundHandler.ts +2 -2
  94. package/src/starknet/swaps/modules/StarknetLpVault.ts +10 -10
  95. package/src/starknet/swaps/modules/StarknetSwapClaim.ts +9 -9
  96. package/src/starknet/swaps/modules/StarknetSwapInit.ts +10 -10
  97. package/src/starknet/swaps/modules/StarknetSwapRefund.ts +9 -13
  98. package/src/starknet/wallet/StarknetSigner.ts +1 -1
  99. package/src/utils/Utils.ts +4 -3
  100. package/dist/starknet/base/StarknetBase.d.ts +0 -34
  101. package/dist/starknet/base/StarknetBase.js +0 -29
  102. package/src/starknet/base/StarknetBase.ts +0 -56
  103. /package/dist/starknet/{base → chain}/StarknetAction.js +0 -0
  104. /package/dist/starknet/{base → chain}/StarknetModule.js +0 -0
  105. /package/dist/starknet/{base → chain}/modules/ERC20Abi.d.ts +0 -0
  106. /package/dist/starknet/{base → chain}/modules/ERC20Abi.js +0 -0
  107. /package/dist/starknet/{base → chain}/modules/StarknetAccounts.d.ts +0 -0
  108. /package/dist/starknet/{base → chain}/modules/StarknetAccounts.js +0 -0
  109. /package/dist/starknet/{base → chain}/modules/StarknetBlocks.d.ts +0 -0
  110. /package/dist/starknet/{base → chain}/modules/StarknetBlocks.js +0 -0
  111. /package/dist/starknet/{base → chain}/modules/StarknetEvents.d.ts +0 -0
  112. /package/dist/starknet/{base → chain}/modules/StarknetEvents.js +0 -0
  113. /package/dist/starknet/{base → chain}/modules/StarknetFees.d.ts +0 -0
  114. /package/dist/starknet/{base → chain}/modules/StarknetFees.js +0 -0
  115. /package/dist/starknet/{base → chain}/modules/StarknetSignatures.js +0 -0
  116. /package/dist/starknet/{base → chain}/modules/StarknetTokens.d.ts +0 -0
  117. /package/src/starknet/{base → chain}/modules/ERC20Abi.ts +0 -0
  118. /package/src/starknet/{base → chain}/modules/StarknetAccounts.ts +0 -0
  119. /package/src/starknet/{base → chain}/modules/StarknetBlocks.ts +0 -0
  120. /package/src/starknet/{base → chain}/modules/StarknetEvents.ts +0 -0
  121. /package/src/starknet/{base → chain}/modules/StarknetFees.ts +0 -0
@@ -0,0 +1,68 @@
1
+ import {SpvWithdrawalTransactionData} from "@atomiqlabs/base";
2
+ import {Buffer} from "buffer";
3
+ import {BigNumberish, cairo} from "starknet";
4
+ import {toBigInt} from "../../utils/Utils";
5
+ import {StarknetSpvVaultContract} from "./StarknetSpvVaultContract";
6
+
7
+
8
+ export class StarknetSpvWithdrawalData extends SpvWithdrawalTransactionData {
9
+
10
+ protected fromOpReturnData(data: Buffer): { recipient: string; rawAmounts: bigint[]; executionHash: string } {
11
+ return StarknetSpvVaultContract.fromOpReturnData(data);
12
+ }
13
+
14
+ isRecipient(address: string): boolean {
15
+ return this.getRecipient().toLowerCase()===address.toLowerCase();
16
+ }
17
+
18
+ getTxHash(): bigint {
19
+ return BigInt("0x"+Buffer.from(this.btcTx.txid, "hex").reverse().toString("hex"));
20
+ }
21
+
22
+ getFrontingAmount(): bigint[] {
23
+ return [this.rawAmounts[0] + this.getExecutionFee()[0], this.rawAmounts[1]];
24
+ }
25
+
26
+ serialize(): any {
27
+ return {
28
+ type: "STARKNET",
29
+ ...super.serialize()
30
+ };
31
+ }
32
+
33
+ serializeToStruct() {
34
+ const callerFee = this.getCallerFee();
35
+ const frontingFee = this.getFrontingFee();
36
+ const executionFee = this.getExecutionFee();
37
+ return {
38
+ recipient: this.recipient,
39
+ amount: cairo.tuple(this.rawAmounts[0], this.rawAmounts[1]),
40
+ caller_fee: cairo.tuple(callerFee[0], callerFee[1]),
41
+ fronting_fee: cairo.tuple(frontingFee[0], frontingFee[1]),
42
+ execution_handler_fee_amount_0: executionFee[0],
43
+ execution_hash: toBigInt(this.executionHash) ?? 0n,
44
+ execution_expiry: BigInt(this.executionExpiry)
45
+ }
46
+ }
47
+
48
+ serializeToFelts(): BigNumberish[] {
49
+ const callerFee = this.getCallerFee();
50
+ const frontingFee = this.getFrontingFee();
51
+ const executionFee = this.getExecutionFee();
52
+ return [
53
+ this.recipient,
54
+ this.rawAmounts[0],
55
+ this.rawAmounts[1],
56
+ callerFee[0],
57
+ callerFee[1],
58
+ frontingFee[0],
59
+ frontingFee[1],
60
+ executionFee[0],
61
+ toBigInt(this.executionHash) ?? 0n,
62
+ BigInt(this.executionExpiry)
63
+ ]
64
+ }
65
+
66
+ }
67
+
68
+ SpvWithdrawalTransactionData.deserializers["STARKNET"] = StarknetSpvWithdrawalData;
@@ -11,16 +11,14 @@ import {
11
11
  import {Buffer} from "buffer";
12
12
  import {EscrowManagerAbi} from "./EscrowManagerAbi";
13
13
  import {StarknetContractBase} from "../contract/StarknetContractBase";
14
- import {StarknetTx} from "../base/modules/StarknetTransactions";
14
+ import {StarknetTx} from "../chain/modules/StarknetTransactions";
15
15
  import {StarknetSigner} from "../wallet/StarknetSigner";
16
- import {BigNumberish, constants, ec, Provider, stark} from "starknet";
17
- import {StarknetRetryPolicy} from "../base/StarknetBase";
18
- import {StarknetFees} from "../base/modules/StarknetFees";
16
+ import {BigNumberish, constants} from "starknet";
17
+ import {StarknetChainInterface} from "../chain/StarknetChainInterface";
19
18
  import {StarknetBtcRelay} from "../btcrelay/StarknetBtcRelay";
20
19
  import {StarknetSwapData} from "./StarknetSwapData";
21
20
  import {bigNumberishToBuffer, toHex} from "../../utils/Utils";
22
21
  import {TimelockRefundHandler} from "./handlers/refund/TimelockRefundHandler";
23
- import {StarknetKeypairWallet} from "../wallet/StarknetKeypairWallet";
24
22
  import {StarknetLpVault} from "./modules/StarknetLpVault";
25
23
  import {StarknetPreFetchVerification, StarknetSwapInit} from "./modules/StarknetSwapInit";
26
24
  import {StarknetSwapRefund} from "./modules/StarknetSwapRefund";
@@ -105,12 +103,9 @@ export class StarknetSwapContract
105
103
  readonly btcRelay: StarknetBtcRelay<any>;
106
104
 
107
105
  constructor(
108
- chainId: constants.StarknetChainId,
109
- provider: Provider,
106
+ chainInterface: StarknetChainInterface,
110
107
  btcRelay: StarknetBtcRelay<any>,
111
- contractAddress: string = swapContractAddreses[chainId],
112
- retryPolicy?: StarknetRetryPolicy,
113
- solanaFeeEstimator: StarknetFees = new StarknetFees(provider),
108
+ contractAddress: string = swapContractAddreses[chainInterface.starknetChainId],
114
109
  handlerAddresses?: {
115
110
  refund?: {
116
111
  timelock?: string
@@ -120,19 +115,19 @@ export class StarknetSwapContract
120
115
  }
121
116
  }
122
117
  ) {
123
- super(chainId, provider, contractAddress, EscrowManagerAbi, retryPolicy, solanaFeeEstimator);
124
- this.Init = new StarknetSwapInit(this);
125
- this.Refund = new StarknetSwapRefund(this);
126
- this.Claim = new StarknetSwapClaim(this);
127
- this.LpVault = new StarknetLpVault(this);
118
+ super(chainInterface, contractAddress, EscrowManagerAbi);
119
+ this.Init = new StarknetSwapInit(chainInterface, this);
120
+ this.Refund = new StarknetSwapRefund(chainInterface, this);
121
+ this.Claim = new StarknetSwapClaim(chainInterface, this);
122
+ this.LpVault = new StarknetLpVault(chainInterface, this);
128
123
 
129
124
  this.btcRelay = btcRelay;
130
125
 
131
126
  handlerAddresses ??= {};
132
127
  handlerAddresses.refund ??= {};
133
- handlerAddresses.refund = {...defaultRefundAddresses[chainId], ...handlerAddresses.refund};
128
+ handlerAddresses.refund = {...defaultRefundAddresses[chainInterface.starknetChainId], ...handlerAddresses.refund};
134
129
  handlerAddresses.claim ??= {};
135
- handlerAddresses.claim = {...defaultClaimAddresses[chainId], ...handlerAddresses.claim};
130
+ handlerAddresses.claim = {...defaultClaimAddresses[chainInterface.starknetChainId], ...handlerAddresses.claim};
136
131
 
137
132
  claimHandlersList.forEach(handlerCtor => {
138
133
  const handler = new handlerCtor(handlerAddresses.claim[handlerCtor.type]);
@@ -178,11 +173,11 @@ export class StarknetSwapContract
178
173
  }
179
174
 
180
175
  getDataSignature(signer: StarknetSigner, data: Buffer): Promise<string> {
181
- return this.Signatures.getDataSignature(signer, data);
176
+ return this.Chain.Signatures.getDataSignature(signer, data);
182
177
  }
183
178
 
184
179
  isValidDataSignature(data: Buffer, signature: string, publicKey: string): Promise<boolean> {
185
- return this.Signatures.isValidDataSignature(data, signature, publicKey);
180
+ return this.Chain.Signatures.isValidDataSignature(data, signature, publicKey);
186
181
  }
187
182
 
188
183
  ////////////////////////////////////////////
@@ -358,7 +353,7 @@ export class StarknetSwapContract
358
353
  payOut: boolean,
359
354
  securityDeposit: bigint,
360
355
  claimerBounty: bigint,
361
- depositToken: string = this.Tokens.getNativeCurrencyAddress()
356
+ depositToken: string = this.Chain.Tokens.getNativeCurrencyAddress()
362
357
  ): Promise<StarknetSwapData> {
363
358
  return Promise.resolve(new StarknetSwapData(
364
359
  offerer,
@@ -383,11 +378,11 @@ export class StarknetSwapContract
383
378
 
384
379
  ////////////////////////////////////////////
385
380
  //// Utils
386
- async getBalance(signer: string, tokenAddress: string, inContract: boolean): Promise<bigint> {
381
+ async getBalance(signer: string, tokenAddress: string, inContract?: boolean): Promise<bigint> {
387
382
  if(inContract) return await this.getIntermediaryBalance(signer, tokenAddress);
388
383
 
389
384
  //TODO: For native token we should discount the cost of deploying an account if it is not deployed yet
390
- return await this.Tokens.getTokenBalance(signer, tokenAddress);
385
+ return await this.Chain.getBalance(signer, tokenAddress);
391
386
  }
392
387
 
393
388
  getIntermediaryData(address: string, token: string): Promise<{
@@ -405,14 +400,6 @@ export class StarknetSwapContract
405
400
  return this.LpVault.getIntermediaryBalance(address, token);
406
401
  }
407
402
 
408
- isValidAddress(address: string): boolean {
409
- return this.Addresses.isValidAddress(address);
410
- }
411
-
412
- getNativeCurrencyAddress(): string {
413
- return this.Tokens.getNativeCurrencyAddress();
414
- }
415
-
416
403
  ////////////////////////////////////////////
417
404
  //// Transaction initializers
418
405
  async txsClaimWithSecret(
@@ -470,10 +457,6 @@ export class StarknetSwapContract
470
457
  return this.LpVault.txsDeposit(signer, token, amount, feeRate);
471
458
  }
472
459
 
473
- txsTransfer(signer: string, token: string, amount: bigint, dstAddress: string, feeRate?: string): Promise<StarknetTx[]> {
474
- return this.Tokens.txsTransfer(signer, token, amount, dstAddress, feeRate);
475
- }
476
-
477
460
  ////////////////////////////////////////////
478
461
  //// Executors
479
462
  async claimWithSecret(
@@ -485,7 +468,7 @@ export class StarknetSwapContract
485
468
  txOptions?: TransactionConfirmationOptions
486
469
  ): Promise<string> {
487
470
  const result = await this.Claim.txsClaimWithSecret(signer.getAddress(), swapData, secret, checkExpiry, txOptions?.feeRate);
488
- const [signature] = await this.Transactions.sendAndConfirm(signer, result, txOptions?.waitForConfirmation, txOptions?.abortSignal);
471
+ const [signature] = await this.Chain.sendAndConfirm(signer, result, txOptions?.waitForConfirmation, txOptions?.abortSignal);
489
472
  return signature;
490
473
  }
491
474
 
@@ -507,7 +490,7 @@ export class StarknetSwapContract
507
490
  if(txs===null) throw new Error("Btc relay not synchronized to required blockheight!");
508
491
 
509
492
  //TODO: This doesn't return proper tx signature
510
- const [signature] = await this.Transactions.sendAndConfirm(signer, txs, txOptions?.waitForConfirmation, txOptions?.abortSignal);
493
+ const [signature] = await this.Chain.sendAndConfirm(signer, txs, txOptions?.waitForConfirmation, txOptions?.abortSignal);
511
494
 
512
495
  return signature;
513
496
  }
@@ -521,7 +504,7 @@ export class StarknetSwapContract
521
504
  ): Promise<string> {
522
505
  let result = await this.txsRefund(signer.getAddress(), swapData, check, initAta, txOptions?.feeRate);
523
506
 
524
- const [signature] = await this.Transactions.sendAndConfirm(signer, result, txOptions?.waitForConfirmation, txOptions?.abortSignal);
507
+ const [signature] = await this.Chain.sendAndConfirm(signer, result, txOptions?.waitForConfirmation, txOptions?.abortSignal);
525
508
 
526
509
  return signature;
527
510
  }
@@ -536,7 +519,7 @@ export class StarknetSwapContract
536
519
  ): Promise<string> {
537
520
  let result = await this.txsRefundWithAuthorization(signer.getAddress(), swapData, signature, check, initAta, txOptions?.feeRate);
538
521
 
539
- const [txSignature] = await this.Transactions.sendAndConfirm(signer, result, txOptions?.waitForConfirmation, txOptions?.abortSignal);
522
+ const [txSignature] = await this.Chain.sendAndConfirm(signer, result, txOptions?.waitForConfirmation, txOptions?.abortSignal);
540
523
 
541
524
  return txSignature;
542
525
  }
@@ -556,7 +539,7 @@ export class StarknetSwapContract
556
539
 
557
540
  let result = await this.txsInit(swapData, signature, skipChecks, txOptions?.feeRate);
558
541
 
559
- const [txSignature] = await this.Transactions.sendAndConfirm(signer, result, txOptions?.waitForConfirmation, txOptions?.abortSignal);
542
+ const [txSignature] = await this.Chain.sendAndConfirm(signer, result, txOptions?.waitForConfirmation, txOptions?.abortSignal);
560
543
 
561
544
  return txSignature;
562
545
  }
@@ -568,7 +551,7 @@ export class StarknetSwapContract
568
551
  txOptions?: TransactionConfirmationOptions
569
552
  ): Promise<string> {
570
553
  const txs = await this.LpVault.txsWithdraw(signer.getAddress(), token, amount, txOptions?.feeRate);
571
- const [txId] = await this.Transactions.sendAndConfirm(signer, txs, txOptions?.waitForConfirmation, txOptions?.abortSignal, false);
554
+ const [txId] = await this.Chain.sendAndConfirm(signer, txs, txOptions?.waitForConfirmation, txOptions?.abortSignal, false);
572
555
  return txId;
573
556
  }
574
557
 
@@ -579,67 +562,26 @@ export class StarknetSwapContract
579
562
  txOptions?: TransactionConfirmationOptions
580
563
  ): Promise<string> {
581
564
  const txs = await this.LpVault.txsDeposit(signer.getAddress(), token, amount, txOptions?.feeRate);
582
- const [txId] = await this.Transactions.sendAndConfirm(signer, txs, txOptions?.waitForConfirmation, txOptions?.abortSignal, false);
583
- return txId;
584
- }
585
-
586
- async transfer(
587
- signer: StarknetSigner,
588
- token: string,
589
- amount: bigint,
590
- dstAddress: string,
591
- txOptions?: TransactionConfirmationOptions
592
- ): Promise<string> {
593
- const txs = await this.Tokens.txsTransfer(signer.getAddress(), token, amount, dstAddress, txOptions?.feeRate);
594
- const [txId] = await this.Transactions.sendAndConfirm(signer, txs, txOptions?.waitForConfirmation, txOptions?.abortSignal, false);
565
+ const [txId] = await this.Chain.sendAndConfirm(signer, txs, txOptions?.waitForConfirmation, txOptions?.abortSignal, false);
595
566
  return txId;
596
567
  }
597
568
 
598
- ////////////////////////////////////////////
599
- //// Transactions
600
- sendAndConfirm(
601
- signer: StarknetSigner,
602
- txs: StarknetTx[],
603
- waitForConfirmation?: boolean,
604
- abortSignal?: AbortSignal,
605
- parallel?: boolean,
606
- onBeforePublish?: (txId: string, rawTx: string) => Promise<void>
607
- ): Promise<string[]> {
608
- return this.Transactions.sendAndConfirm(signer, txs, waitForConfirmation, abortSignal, parallel, onBeforePublish);
609
- }
610
-
611
- serializeTx(tx: StarknetTx): Promise<string> {
612
- return this.Transactions.serializeTx(tx);
613
- }
614
-
615
- deserializeTx(txData: string): Promise<StarknetTx> {
616
- return this.Transactions.deserializeTx(txData);
617
- }
618
-
619
- getTxIdStatus(txId: string): Promise<"not_found" | "pending" | "success" | "reverted"> {
620
- return this.Transactions.getTxIdStatus(txId);
621
- }
622
-
623
- getTxStatus(tx: string): Promise<"not_found" | "pending" | "success" | "reverted"> {
624
- return this.Transactions.getTxStatus(tx);
625
- }
626
-
627
569
  ////////////////////////////////////////////
628
570
  //// Fees
629
571
  getInitPayInFeeRate(offerer?: string, claimer?: string, token?: string, paymentHash?: string): Promise<string> {
630
- return this.Fees.getFeeRate();
572
+ return this.Chain.Fees.getFeeRate();
631
573
  }
632
574
 
633
575
  getInitFeeRate(offerer?: string, claimer?: string, token?: string, paymentHash?: string): Promise<string> {
634
- return this.Fees.getFeeRate();
576
+ return this.Chain.Fees.getFeeRate();
635
577
  }
636
578
 
637
579
  getRefundFeeRate(swapData: StarknetSwapData): Promise<string> {
638
- return this.Fees.getFeeRate();
580
+ return this.Chain.Fees.getFeeRate();
639
581
  }
640
582
 
641
583
  getClaimFeeRate(signer: string, swapData: StarknetSwapData): Promise<string> {
642
- return this.Fees.getFeeRate();
584
+ return this.Chain.Fees.getFeeRate();
643
585
  }
644
586
 
645
587
  getClaimFee(signer: string, swapData: StarknetSwapData, feeRate?: string): Promise<bigint> {
@@ -660,34 +602,4 @@ export class StarknetSwapContract
660
602
  return this.Refund.getRefundFee(swapData, feeRate);
661
603
  }
662
604
 
663
- ///////////////////////////////////
664
- //// Callbacks & handlers
665
- offBeforeTxReplace(callback: (oldTx: string, oldTxId: string, newTx: string, newTxId: string) => Promise<void>): boolean {
666
- return true;
667
- }
668
-
669
- onBeforeTxReplace(callback: (oldTx: string, oldTxId: string, newTx: string, newTxId: string) => Promise<void>): void {}
670
-
671
- onBeforeTxSigned(callback: (tx: StarknetTx) => Promise<void>): void {
672
- this.Transactions.onBeforeTxSigned(callback);
673
- }
674
-
675
- offBeforeTxSigned(callback: (tx: StarknetTx) => Promise<void>): boolean {
676
- return this.Transactions.offBeforeTxSigned(callback);
677
- }
678
-
679
- isValidToken(tokenIdentifier: string): boolean {
680
- return this.Tokens.isValidToken(tokenIdentifier);
681
- }
682
-
683
- randomAddress(): string {
684
- return stark.randomAddress();
685
- }
686
-
687
- randomSigner(): StarknetSigner {
688
- const privateKey = "0x"+Buffer.from(ec.starkCurve.utils.randomPrivateKey()).toString("hex");
689
- const wallet = new StarknetKeypairWallet(this.provider, privateKey);
690
- return new StarknetSigner(wallet);
691
- }
692
-
693
605
  }
@@ -1,17 +1,17 @@
1
- import {StarknetModule} from "../base/StarknetModule";
2
1
  import {StarknetSwapContract} from "./StarknetSwapContract";
3
2
  import {TypedContractV2} from "starknet";
4
3
  import {EscrowManagerAbi} from "./EscrowManagerAbi";
4
+ import {StarknetChainInterface} from "../chain/StarknetChainInterface";
5
+ import {StarknetContractModule} from "../contract/StarknetContractModule";
5
6
 
6
- export class StarknetSwapModule extends StarknetModule {
7
+ export class StarknetSwapModule extends StarknetContractModule<typeof EscrowManagerAbi> {
7
8
 
8
- readonly root: StarknetSwapContract;
9
- readonly contract: TypedContractV2<typeof EscrowManagerAbi>;
9
+ readonly contract: StarknetSwapContract;
10
+ readonly swapContract: TypedContractV2<typeof EscrowManagerAbi>;
10
11
 
11
- constructor(root: StarknetSwapContract) {
12
- super(root);
13
- this.root = root;
14
- this.contract = root.contract;
12
+ constructor(chainInterface: StarknetChainInterface, contract: StarknetSwapContract) {
13
+ super(chainInterface, contract);
14
+ this.swapContract = contract.contract;
15
15
  }
16
16
 
17
17
  }
@@ -1,7 +1,7 @@
1
1
  import {StarknetSwapData} from "../StarknetSwapData";
2
2
  import {BigNumberish} from "starknet";
3
- import {StarknetGas} from "../../base/StarknetAction";
4
- import {StarknetTx} from "../../base/modules/StarknetTransactions";
3
+ import {StarknetGas} from "../../chain/StarknetAction";
4
+ import {StarknetTx} from "../../chain/modules/StarknetTransactions";
5
5
 
6
6
 
7
7
  export interface IHandler<TCommitmentData, TWitnessData> {
@@ -1,6 +1,6 @@
1
1
  import {HashlockClaimHandler} from "./HashlockClaimHandler";
2
2
  import {ChainSwapType} from "@atomiqlabs/base";
3
- import {StarknetGas} from "../../../base/StarknetAction";
3
+ import {StarknetGas} from "../../../chain/StarknetAction";
4
4
  import {IHandler} from "../IHandler";
5
5
  import {BitcoinTxIdClaimHandler} from "./btc/BitcoinTxIdClaimHandler";
6
6
  import {BitcoinOutputClaimHandler} from "./btc/BitcoinOutputClaimHandler";
@@ -2,10 +2,10 @@ import {StarknetSwapData} from "../../StarknetSwapData";
2
2
  import {bufferToU32Array, toHex, u32ArrayToBuffer} from "../../../../utils/Utils";
3
3
  import {BigNumberish, hash} from "starknet";
4
4
  import {ChainSwapType} from "@atomiqlabs/base";
5
- import {StarknetGas} from "../../../base/StarknetAction";
5
+ import {StarknetGas} from "../../../chain/StarknetAction";
6
6
  import {Buffer} from "buffer";
7
7
  import {sha256} from "@noble/hashes/sha2";
8
- import {StarknetTx} from "../../../base/modules/StarknetTransactions";
8
+ import {StarknetTx} from "../../../chain/modules/StarknetTransactions";
9
9
  import {IClaimHandler} from "./ClaimHandlers";
10
10
 
11
11
  export class HashlockClaimHandler implements IClaimHandler<Buffer, string> {
@@ -1,8 +1,8 @@
1
1
  import {StarknetSwapData} from "../../../StarknetSwapData";
2
- import {StarknetGas} from "../../../../base/StarknetAction";
2
+ import {StarknetGas} from "../../../../chain/StarknetAction";
3
3
  import {ChainSwapType} from "@atomiqlabs/base";
4
4
  import {BigNumberish, hash} from "starknet";
5
- import {StarknetTx} from "../../../../base/modules/StarknetTransactions";
5
+ import {StarknetTx} from "../../../../chain/modules/StarknetTransactions";
6
6
  import {bufferToByteArray, getLogger, poseidonHashRange, toBigInt} from "../../../../../utils/Utils";
7
7
  import {BitcoinCommitmentData, IBitcoinClaimHandler} from "./IBitcoinClaimHandler";
8
8
  import {BitcoinOutputWitnessData} from "./BitcoinOutputClaimHandler";
@@ -1,8 +1,8 @@
1
1
  import {StarknetSwapData} from "../../../StarknetSwapData";
2
- import {StarknetGas} from "../../../../base/StarknetAction";
2
+ import {StarknetGas} from "../../../../chain/StarknetAction";
3
3
  import {ChainSwapType} from "@atomiqlabs/base";
4
4
  import {BigNumberish, hash} from "starknet";
5
- import {StarknetTx} from "../../../../base/modules/StarknetTransactions";
5
+ import {StarknetTx} from "../../../../chain/modules/StarknetTransactions";
6
6
  import {bufferToByteArray, getLogger, poseidonHashRange, toBigInt} from "../../../../../utils/Utils";
7
7
  import {BitcoinCommitmentData, BitcoinWitnessData, IBitcoinClaimHandler} from "./IBitcoinClaimHandler";
8
8
  import {Transaction} from "@scure/btc-signer";
@@ -1,8 +1,8 @@
1
1
  import {StarknetSwapData} from "../../../StarknetSwapData";
2
- import {StarknetGas} from "../../../../base/StarknetAction";
2
+ import {StarknetGas} from "../../../../chain/StarknetAction";
3
3
  import {ChainSwapType} from "@atomiqlabs/base";
4
4
  import {BigNumberish} from "starknet";
5
- import {StarknetTx} from "../../../../base/modules/StarknetTransactions";
5
+ import {StarknetTx} from "../../../../chain/modules/StarknetTransactions";
6
6
  import {bufferToU32Array, getLogger} from "../../../../../utils/Utils";
7
7
  import {BitcoinCommitmentData, BitcoinWitnessData, IBitcoinClaimHandler} from "./IBitcoinClaimHandler";
8
8
  import {Buffer} from "buffer";
@@ -1,12 +1,12 @@
1
1
  import {IClaimHandler} from "../ClaimHandlers";
2
2
  import {StarknetSwapData} from "../../../StarknetSwapData";
3
- import {StarknetGas} from "../../../../base/StarknetAction";
3
+ import {StarknetGas} from "../../../../chain/StarknetAction";
4
4
  import {ChainSwapType, RelaySynchronizer} from "@atomiqlabs/base";
5
5
  import {BigNumberish, hash} from "starknet";
6
6
  import {StarknetBtcStoredHeader} from "../../../../btcrelay/headers/StarknetBtcStoredHeader";
7
- import {StarknetTx} from "../../../../base/modules/StarknetTransactions";
7
+ import {StarknetTx} from "../../../../chain/modules/StarknetTransactions";
8
8
  import {StarknetBtcRelay} from "../../../../btcrelay/StarknetBtcRelay";
9
- import {bufferToU32Array, getLogger, toHex, tryWithRetries, u32ArrayToBuffer} from "../../../../../utils/Utils";
9
+ import {bufferToU32Array, getLogger, u32ArrayToBuffer} from "../../../../../utils/Utils";
10
10
 
11
11
  export type BitcoinCommitmentData = {
12
12
  btcRelay: StarknetBtcRelay<any>,
@@ -31,58 +31,6 @@ export abstract class IBitcoinClaimHandler<C, W extends BitcoinWitnessData> impl
31
31
  this.address = address;
32
32
  }
33
33
 
34
- /**
35
- * Gets committed header, identified by blockhash & blockheight, determines required BTC relay blockheight based on
36
- * requiredConfirmations
37
- * If synchronizer is passed & blockhash is not found, it produces transactions to sync up the btc relay to the
38
- * current chain tip & adds them to the txs array
39
- *
40
- * @param signer
41
- * @param btcRelay
42
- * @param txBlockheight transaction blockheight
43
- * @param requiredConfirmations required confirmation for the swap to be claimable with that TX
44
- * @param blockhash blockhash of the block which includes the transaction
45
- * @param txs solana transaction array, in case we need to synchronize the btc relay ourselves the synchronization
46
- * txns are added here
47
- * @param synchronizer optional synchronizer to use to synchronize the btc relay in case it is not yet synchronized
48
- * to the required blockheight
49
- * @param feeRate Fee rate to use for synchronization transactions
50
- * @private
51
- */
52
- protected async getCommitedHeaderAndSynchronize(
53
- signer: string,
54
- btcRelay: StarknetBtcRelay<any>,
55
- txBlockheight: number,
56
- requiredConfirmations: number,
57
- blockhash: string,
58
- txs: StarknetTx[],
59
- synchronizer?: RelaySynchronizer<StarknetBtcStoredHeader, StarknetTx, any>,
60
- feeRate?: string
61
- ): Promise<StarknetBtcStoredHeader> {
62
- const requiredBlockheight = txBlockheight+requiredConfirmations-1;
63
-
64
- const result = await tryWithRetries(
65
- () => btcRelay.retrieveLogAndBlockheight({
66
- blockhash: blockhash
67
- }, requiredBlockheight)
68
- );
69
-
70
- if(result!=null) return result.header;
71
-
72
- //Need to synchronize
73
- if(synchronizer==null) return null;
74
-
75
- //TODO: We don't have to synchronize to tip, only to our required blockheight
76
- const resp = await synchronizer.syncToLatestTxs(signer.toString(), feeRate);
77
- logger.debug("getCommitedHeaderAndSynchronize(): BTC Relay not synchronized to required blockheight, "+
78
- "synchronizing ourselves in "+resp.txs.length+" txs");
79
- logger.debug("getCommitedHeaderAndSynchronize(): BTC Relay computed header map: ",resp.computedHeaderMap);
80
- resp.txs.forEach(tx => txs.push(tx));
81
-
82
- //Retrieve computed header
83
- return resp.computedHeaderMap[txBlockheight];
84
- }
85
-
86
34
  public static readonly address = "";
87
35
  public static readonly type: ChainSwapType = ChainSwapType.CHAIN_TXID;
88
36
  public static readonly gas: StarknetGas = {l1: 20000};
@@ -121,12 +69,15 @@ export abstract class IBitcoinClaimHandler<C, W extends BitcoinWitnessData> impl
121
69
  logger.debug("getWitness(): merkle proof computed: ", merkleProof);
122
70
 
123
71
  const txs: StarknetTx[] = [];
124
- if(commitedHeader==null) commitedHeader = await this.getCommitedHeaderAndSynchronize(
125
- signer, btcRelay, tx.height, requiredConfirmations,
126
- tx.blockhash, txs, synchronizer, feeRate
127
- );
128
-
129
- if(commitedHeader==null) throw new Error("Cannot fetch committed header!");
72
+ if(commitedHeader==null) {
73
+ const headers = await StarknetBtcRelay.getCommitedHeadersAndSynchronize(
74
+ signer, btcRelay,
75
+ [{blockheight: tx.height, requiredConfirmations, blockhash: tx.blockhash}],
76
+ txs, synchronizer, feeRate
77
+ );
78
+ if(headers==null) throw new Error("Cannot fetch committed header!");
79
+ commitedHeader = headers[tx.blockhash];
80
+ }
130
81
 
131
82
  serializedData.push(...commitedHeader.serialize());
132
83
  serializedData.push(merkleProof.merkle.length, ...merkleProof.merkle.map(bufferToU32Array).flat());
@@ -1,9 +1,9 @@
1
- import {StarknetTx} from "../../../base/modules/StarknetTransactions";
1
+ import {StarknetTx} from "../../../chain/modules/StarknetTransactions";
2
2
  import {StarknetSwapData} from "../../StarknetSwapData";
3
3
  import {bigNumberishToBuffer, toBigInt} from "../../../../utils/Utils";
4
4
  import {BigNumberish} from "starknet";
5
5
  import {IHandler} from "../IHandler";
6
- import {StarknetGas} from "../../../base/StarknetAction";
6
+ import {StarknetGas} from "../../../chain/StarknetAction";
7
7
 
8
8
  export class TimelockRefundHandler implements IHandler<bigint, never> {
9
9
 
@@ -1,9 +1,9 @@
1
1
  import {toBigInt} from "../../../utils/Utils";
2
2
  import { IntermediaryReputationType } from "@atomiqlabs/base";
3
3
  import {StarknetSwapModule} from "../StarknetSwapModule";
4
- import {StarknetAction} from "../../base/StarknetAction";
4
+ import {StarknetAction} from "../../chain/StarknetAction";
5
5
  import {cairo} from "starknet";
6
- import {StarknetTx} from "../../base/modules/StarknetTransactions";
6
+ import {StarknetTx} from "../../chain/modules/StarknetTransactions";
7
7
 
8
8
  export class StarknetLpVault extends StarknetSwapModule {
9
9
 
@@ -23,7 +23,7 @@ export class StarknetLpVault extends StarknetSwapModule {
23
23
  */
24
24
  private Withdraw(signer: string, token: string, amount: bigint): StarknetAction {
25
25
  return new StarknetAction(signer, this.root,
26
- this.contract.populateTransaction.withdraw(token, cairo.uint256(amount), signer),
26
+ this.swapContract.populateTransaction.withdraw(token, cairo.uint256(amount), signer),
27
27
  StarknetLpVault.GasCosts.WITHDRAW
28
28
  );
29
29
  }
@@ -39,7 +39,7 @@ export class StarknetLpVault extends StarknetSwapModule {
39
39
  */
40
40
  private Deposit(signer: string, token: string, amount: bigint): StarknetAction {
41
41
  return new StarknetAction(signer, this.root,
42
- this.contract.populateTransaction.deposit(token, cairo.uint256(amount)),
42
+ this.swapContract.populateTransaction.deposit(token, cairo.uint256(amount)),
43
43
  StarknetLpVault.GasCosts.WITHDRAW
44
44
  );
45
45
  }
@@ -69,14 +69,14 @@ export class StarknetLpVault extends StarknetSwapModule {
69
69
  * @param token
70
70
  */
71
71
  public async getIntermediaryReputation(address: string, token: string): Promise<IntermediaryReputationType> {
72
- const filter = Object.keys(this.root.claimHandlersByAddress).map(claimHandler => cairo.tuple(address, token, claimHandler));
73
- const rawReputation = await this.provider.callContract(this.contract.populateTransaction.get_reputation(filter));
72
+ const filter = Object.keys(this.contract.claimHandlersByAddress).map(claimHandler => cairo.tuple(address, token, claimHandler));
73
+ const rawReputation = await this.provider.callContract(this.swapContract.populateTransaction.get_reputation(filter));
74
74
  const length = toBigInt(rawReputation.shift());
75
75
  if(Number(length)!==filter.length) throw new Error("getIntermediaryReputation(): Invalid response length");
76
76
 
77
77
  const result: any = {};
78
- Object.keys(this.root.claimHandlersByAddress).forEach((address) => {
79
- const handler = this.root.claimHandlersByAddress[address];
78
+ Object.keys(this.contract.claimHandlersByAddress).forEach((address) => {
79
+ const handler = this.contract.claimHandlersByAddress[address];
80
80
  result[handler.getType()] = {
81
81
  successVolume: toBigInt({low: rawReputation.shift(), high: rawReputation.shift()}),
82
82
  successCount: toBigInt(rawReputation.shift()),
@@ -96,7 +96,7 @@ export class StarknetLpVault extends StarknetSwapModule {
96
96
  * @param token
97
97
  */
98
98
  public async getIntermediaryBalance(address: string, token: string): Promise<bigint> {
99
- const balance = toBigInt((await this.contract.get_balance([cairo.tuple(address, token)]))[0]);
99
+ const balance = toBigInt((await this.swapContract.get_balance([cairo.tuple(address, token)]))[0]);
100
100
 
101
101
  this.logger.debug("getIntermediaryBalance(): token LP balance fetched, token: "+token.toString()+
102
102
  " address: "+address+" amount: "+(balance==null ? "null" : balance.toString()));
@@ -134,7 +134,7 @@ export class StarknetLpVault extends StarknetSwapModule {
134
134
  */
135
135
  public async txsDeposit(signer: string, token: string, amount: bigint, feeRate?: string): Promise<StarknetTx[]> {
136
136
  //Approve first
137
- const action = await this.root.Tokens.Approve(signer, this.contract.address, token, amount);
137
+ const action = await this.root.Tokens.Approve(signer, this.swapContract.address, token, amount);
138
138
  action.add(this.Deposit(signer, token, amount));
139
139
 
140
140
  feeRate ??= await this.root.Fees.getFeeRate();