@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
package/dist/index.d.ts CHANGED
@@ -1,12 +1,12 @@
1
- export * from "./starknet/base/StarknetAction";
2
- export * from "./starknet/base/StarknetBase";
3
- export * from "./starknet/base/StarknetModule";
4
- export * from "./starknet/base/modules/StarknetFees";
5
- export * from "./starknet/base/modules/StarknetEvents";
6
- export * from "./starknet/base/modules/StarknetTokens";
7
- export * from "./starknet/base/modules/StarknetAddresses";
8
- export * from "./starknet/base/modules/StarknetTransactions";
9
- export * from "./starknet/base/modules/StarknetSignatures";
1
+ export * from "./starknet/chain/StarknetAction";
2
+ export * from "./starknet/chain/StarknetChainInterface";
3
+ export * from "./starknet/chain/StarknetModule";
4
+ export * from "./starknet/chain/modules/StarknetFees";
5
+ export * from "./starknet/chain/modules/StarknetEvents";
6
+ export * from "./starknet/chain/modules/StarknetTokens";
7
+ export * from "./starknet/chain/modules/StarknetAddresses";
8
+ export * from "./starknet/chain/modules/StarknetTransactions";
9
+ export * from "./starknet/chain/modules/StarknetSignatures";
10
10
  export * from "./starknet/btcrelay/headers/StarknetBtcStoredHeader";
11
11
  export * from "./starknet/btcrelay/headers/StarknetBtcHeader";
12
12
  export * from "./starknet/btcrelay/StarknetBtcRelay";
@@ -32,3 +32,7 @@ export * from "./starknet/wallet/StarknetSigner";
32
32
  export * from "./starknet/wallet/StarknetKeypairWallet";
33
33
  export * from "./starknet/StarknetChainType";
34
34
  export * from "./starknet/StarknetInitializer";
35
+ export * from "./starknet/spv_swap/StarknetSpvVaultContract";
36
+ export * from "./starknet/spv_swap/StarknetSpvVaultData";
37
+ export * from "./starknet/spv_swap/StarknetSpvWithdrawalData";
38
+ export * from "./starknet/provider/RpcProviderWithRetries";
package/dist/index.js CHANGED
@@ -14,15 +14,15 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./starknet/base/StarknetAction"), exports);
18
- __exportStar(require("./starknet/base/StarknetBase"), exports);
19
- __exportStar(require("./starknet/base/StarknetModule"), exports);
20
- __exportStar(require("./starknet/base/modules/StarknetFees"), exports);
21
- __exportStar(require("./starknet/base/modules/StarknetEvents"), exports);
22
- __exportStar(require("./starknet/base/modules/StarknetTokens"), exports);
23
- __exportStar(require("./starknet/base/modules/StarknetAddresses"), exports);
24
- __exportStar(require("./starknet/base/modules/StarknetTransactions"), exports);
25
- __exportStar(require("./starknet/base/modules/StarknetSignatures"), exports);
17
+ __exportStar(require("./starknet/chain/StarknetAction"), exports);
18
+ __exportStar(require("./starknet/chain/StarknetChainInterface"), exports);
19
+ __exportStar(require("./starknet/chain/StarknetModule"), exports);
20
+ __exportStar(require("./starknet/chain/modules/StarknetFees"), exports);
21
+ __exportStar(require("./starknet/chain/modules/StarknetEvents"), exports);
22
+ __exportStar(require("./starknet/chain/modules/StarknetTokens"), exports);
23
+ __exportStar(require("./starknet/chain/modules/StarknetAddresses"), exports);
24
+ __exportStar(require("./starknet/chain/modules/StarknetTransactions"), exports);
25
+ __exportStar(require("./starknet/chain/modules/StarknetSignatures"), exports);
26
26
  __exportStar(require("./starknet/btcrelay/headers/StarknetBtcStoredHeader"), exports);
27
27
  __exportStar(require("./starknet/btcrelay/headers/StarknetBtcHeader"), exports);
28
28
  __exportStar(require("./starknet/btcrelay/StarknetBtcRelay"), exports);
@@ -48,3 +48,7 @@ __exportStar(require("./starknet/wallet/StarknetSigner"), exports);
48
48
  __exportStar(require("./starknet/wallet/StarknetKeypairWallet"), exports);
49
49
  __exportStar(require("./starknet/StarknetChainType"), exports);
50
50
  __exportStar(require("./starknet/StarknetInitializer"), exports);
51
+ __exportStar(require("./starknet/spv_swap/StarknetSpvVaultContract"), exports);
52
+ __exportStar(require("./starknet/spv_swap/StarknetSpvVaultData"), exports);
53
+ __exportStar(require("./starknet/spv_swap/StarknetSpvWithdrawalData"), exports);
54
+ __exportStar(require("./starknet/provider/RpcProviderWithRetries"), exports);
@@ -1,9 +1,13 @@
1
1
  import { ChainType } from "@atomiqlabs/base";
2
- import { StarknetTx } from "./base/modules/StarknetTransactions";
2
+ import { StarknetTx } from "./chain/modules/StarknetTransactions";
3
3
  import { StarknetSigner } from "./wallet/StarknetSigner";
4
4
  import { StarknetSwapData } from "./swaps/StarknetSwapData";
5
5
  import { StarknetSwapContract } from "./swaps/StarknetSwapContract";
6
6
  import { StarknetChainEventsBrowser } from "./events/StarknetChainEventsBrowser";
7
7
  import { StarknetBtcRelay } from "./btcrelay/StarknetBtcRelay";
8
8
  import { StarknetPreFetchVerification } from "./swaps/modules/StarknetSwapInit";
9
- export type StarknetChainType = ChainType<"STARKNET", never, StarknetPreFetchVerification, StarknetTx, StarknetSigner, StarknetSwapData, StarknetSwapContract, StarknetChainEventsBrowser, StarknetBtcRelay<any>>;
9
+ import { StarknetChainInterface } from "./chain/StarknetChainInterface";
10
+ import { StarknetSpvVaultData } from "./spv_swap/StarknetSpvVaultData";
11
+ import { StarknetSpvWithdrawalData } from "./spv_swap/StarknetSpvWithdrawalData";
12
+ import { StarknetSpvVaultContract } from "./spv_swap/StarknetSpvVaultContract";
13
+ export type StarknetChainType = ChainType<"STARKNET", never, StarknetPreFetchVerification, StarknetTx, StarknetSigner, StarknetSwapData, StarknetSwapContract, StarknetChainInterface, StarknetChainEventsBrowser, StarknetBtcRelay<any>, StarknetSpvVaultData, StarknetSpvWithdrawalData, StarknetSpvVaultContract>;
@@ -1,6 +1,6 @@
1
1
  import { constants, Provider } from "starknet";
2
- import { StarknetFees } from "./base/modules/StarknetFees";
3
- import { StarknetRetryPolicy } from "./base/StarknetBase";
2
+ import { StarknetFees } from "./chain/modules/StarknetFees";
3
+ import { StarknetRetryPolicy } from "./chain/StarknetChainInterface";
4
4
  import { BaseTokenType, BitcoinNetwork, BitcoinRpc, ChainData, ChainInitializer } from "@atomiqlabs/base";
5
5
  import { StarknetChainType } from "./StarknetChainType";
6
6
  export type StarknetAssetsType = BaseTokenType<"ETH" | "STRK" | "WBTC">;
@@ -11,6 +11,7 @@ export type StarknetOptions = {
11
11
  chainId?: constants.StarknetChainId;
12
12
  swapContract?: string;
13
13
  btcRelayContract?: string;
14
+ spvVaultContract?: string;
14
15
  fees?: StarknetFees;
15
16
  };
16
17
  export declare function initializeStarknet(options: StarknetOptions, bitcoinRpc: BitcoinRpc<any>, network: BitcoinNetwork): ChainData<StarknetChainType>;
@@ -2,12 +2,17 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.StarknetInitializer = exports.initializeStarknet = exports.StarknetAssets = void 0;
4
4
  const starknet_1 = require("starknet");
5
- const StarknetFees_1 = require("./base/modules/StarknetFees");
5
+ const StarknetFees_1 = require("./chain/modules/StarknetFees");
6
+ const StarknetChainInterface_1 = require("./chain/StarknetChainInterface");
6
7
  const StarknetBtcRelay_1 = require("./btcrelay/StarknetBtcRelay");
7
8
  const StarknetSwapContract_1 = require("./swaps/StarknetSwapContract");
8
9
  const StarknetChainEventsBrowser_1 = require("./events/StarknetChainEventsBrowser");
9
10
  const base_1 = require("@atomiqlabs/base");
10
11
  const StarknetSwapData_1 = require("./swaps/StarknetSwapData");
12
+ const StarknetSpvVaultContract_1 = require("./spv_swap/StarknetSpvVaultContract");
13
+ const StarknetSpvVaultData_1 = require("./spv_swap/StarknetSpvVaultData");
14
+ const StarknetSpvWithdrawalData_1 = require("./spv_swap/StarknetSpvWithdrawalData");
15
+ const RpcProviderWithRetries_1 = require("./provider/RpcProviderWithRetries");
11
16
  exports.StarknetAssets = {
12
17
  ETH: {
13
18
  address: "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7",
@@ -26,20 +31,26 @@ exports.StarknetAssets = {
26
31
  };
27
32
  function initializeStarknet(options, bitcoinRpc, network) {
28
33
  const provider = typeof (options.rpcUrl) === "string" ?
29
- new starknet_1.RpcProvider({ nodeUrl: options.rpcUrl }) :
34
+ new RpcProviderWithRetries_1.RpcProviderWithRetries({ nodeUrl: options.rpcUrl }) :
30
35
  options.rpcUrl;
31
36
  const Fees = options.fees ?? new StarknetFees_1.StarknetFees(provider, "ETH");
32
37
  const chainId = options.chainId ??
33
38
  (network === base_1.BitcoinNetwork.MAINNET ? starknet_1.constants.StarknetChainId.SN_MAIN : starknet_1.constants.StarknetChainId.SN_SEPOLIA);
34
- const btcRelay = new StarknetBtcRelay_1.StarknetBtcRelay(chainId, provider, bitcoinRpc, options.btcRelayContract, options.retryPolicy, Fees);
35
- const swapContract = new StarknetSwapContract_1.StarknetSwapContract(chainId, provider, btcRelay, options.swapContract, options.retryPolicy, Fees);
36
- const chainEvents = new StarknetChainEventsBrowser_1.StarknetChainEventsBrowser(swapContract);
39
+ const chainInterface = new StarknetChainInterface_1.StarknetChainInterface(chainId, provider, options.retryPolicy, Fees);
40
+ const btcRelay = new StarknetBtcRelay_1.StarknetBtcRelay(chainInterface, bitcoinRpc, options.btcRelayContract);
41
+ const swapContract = new StarknetSwapContract_1.StarknetSwapContract(chainInterface, btcRelay, options.swapContract);
42
+ const spvVaultContract = new StarknetSpvVaultContract_1.StarknetSpvVaultContract(chainInterface, btcRelay, bitcoinRpc, options.spvVaultContract);
43
+ const chainEvents = new StarknetChainEventsBrowser_1.StarknetChainEventsBrowser(chainInterface, swapContract, spvVaultContract);
37
44
  return {
38
45
  chainId: "STARKNET",
39
46
  btcRelay,
47
+ chainInterface,
40
48
  swapContract,
41
49
  chainEvents,
42
- swapDataConstructor: StarknetSwapData_1.StarknetSwapData
50
+ swapDataConstructor: StarknetSwapData_1.StarknetSwapData,
51
+ spvVaultContract,
52
+ spvVaultDataConstructor: StarknetSpvVaultData_1.StarknetSpvVaultData,
53
+ spvVaultWithdrawalDataConstructor: StarknetSpvWithdrawalData_1.StarknetSpvWithdrawalData
43
54
  };
44
55
  }
45
56
  exports.initializeStarknet = initializeStarknet;
@@ -1,15 +1,13 @@
1
1
  import { Buffer } from "buffer";
2
2
  import { StarknetBtcHeader } from "./headers/StarknetBtcHeader";
3
- import { BitcoinRpc, BtcBlock, BtcRelay } from "@atomiqlabs/base";
3
+ import { BitcoinRpc, BtcBlock, BtcRelay, RelaySynchronizer } from "@atomiqlabs/base";
4
4
  import { StarknetContractBase } from "../contract/StarknetContractBase";
5
5
  import { StarknetBtcStoredHeader } from "./headers/StarknetBtcStoredHeader";
6
- import { StarknetTx } from "../base/modules/StarknetTransactions";
6
+ import { StarknetTx } from "../chain/modules/StarknetTransactions";
7
7
  import { StarknetSigner } from "../wallet/StarknetSigner";
8
8
  import { BtcRelayAbi } from "./BtcRelayAbi";
9
- import { constants, Provider } from "starknet";
10
- import { StarknetFees } from "../base/modules/StarknetFees";
11
- import { StarknetRetryPolicy } from "../base/StarknetBase";
12
- import { StarknetAction } from "../base/StarknetAction";
9
+ import { StarknetChainInterface } from "../chain/StarknetChainInterface";
10
+ import { StarknetAction } from "../chain/StarknetAction";
13
11
  export declare class StarknetBtcRelay<B extends BtcBlock> extends StarknetContractBase<typeof BtcRelayAbi> implements BtcRelay<StarknetBtcStoredHeader, StarknetTx, B, StarknetSigner> {
14
12
  SaveMainHeaders(signer: string, mainHeaders: StarknetBtcHeader[], storedHeader: StarknetBtcStoredHeader): StarknetAction;
15
13
  SaveShortForkHeaders(signer: string, forkHeaders: StarknetBtcHeader[], storedHeader: StarknetBtcStoredHeader): StarknetAction;
@@ -18,7 +16,7 @@ export declare class StarknetBtcRelay<B extends BtcBlock> extends StarknetContra
18
16
  readonly maxHeadersPerTx: number;
19
17
  readonly maxForkHeadersPerTx: number;
20
18
  readonly maxShortForkHeadersPerTx: number;
21
- constructor(chainId: constants.StarknetChainId, provider: Provider, bitcoinRpc: BitcoinRpc<B>, contractAddress?: string, retryPolicy?: StarknetRetryPolicy, solanaFeeEstimator?: StarknetFees);
19
+ constructor(chainInterface: StarknetChainInterface, bitcoinRpc: BitcoinRpc<B>, contractAddress?: string);
22
20
  /**
23
21
  * Computes subsequent commited headers as they will appear on the blockchain when transactions
24
22
  * are submitted & confirmed
@@ -162,4 +160,27 @@ export declare class StarknetBtcRelay<B extends BtcBlock> extends StarknetContra
162
160
  */
163
161
  getForkFeeRate(signer: string, forkId: number): Promise<string>;
164
162
  saveInitialHeader(signer: string, header: B, epochStart: number, pastBlocksTimestamps: number[], feeRate?: string): Promise<StarknetTx>;
163
+ /**
164
+ * Gets committed header, identified by blockhash & blockheight, determines required BTC relay blockheight based on
165
+ * requiredConfirmations
166
+ * If synchronizer is passed & blockhash is not found, it produces transactions to sync up the btc relay to the
167
+ * current chain tip & adds them to the txs array
168
+ *
169
+ * @param signer
170
+ * @param btcRelay
171
+ * @param btcTxs
172
+ * @param txs solana transaction array, in case we need to synchronize the btc relay ourselves the synchronization
173
+ * txns are added here
174
+ * @param synchronizer optional synchronizer to use to synchronize the btc relay in case it is not yet synchronized
175
+ * to the required blockheight
176
+ * @param feeRate Fee rate to use for synchronization transactions
177
+ * @private
178
+ */
179
+ static getCommitedHeadersAndSynchronize(signer: string, btcRelay: StarknetBtcRelay<any>, btcTxs: {
180
+ blockheight: number;
181
+ requiredConfirmations: number;
182
+ blockhash: string;
183
+ }[], txs: StarknetTx[], synchronizer?: RelaySynchronizer<StarknetBtcStoredHeader, StarknetTx, any>, feeRate?: string): Promise<{
184
+ [blockhash: string]: StarknetBtcStoredHeader;
185
+ }>;
165
186
  }
@@ -9,8 +9,8 @@ const StarknetContractBase_1 = require("../contract/StarknetContractBase");
9
9
  const StarknetBtcStoredHeader_1 = require("./headers/StarknetBtcStoredHeader");
10
10
  const BtcRelayAbi_1 = require("./BtcRelayAbi");
11
11
  const starknet_1 = require("starknet");
12
- const StarknetFees_1 = require("../base/modules/StarknetFees");
13
- const StarknetAction_1 = require("../base/StarknetAction");
12
+ const StarknetFees_1 = require("../chain/modules/StarknetFees");
13
+ const StarknetAction_1 = require("../chain/StarknetAction");
14
14
  function serializeBlockHeader(e) {
15
15
  return new StarknetBtcHeader_1.StarknetBtcHeader({
16
16
  reversed_version: (0, Utils_1.u32ReverseEndianness)(e.getVersion()),
@@ -22,8 +22,8 @@ function serializeBlockHeader(e) {
22
22
  hash: buffer_1.Buffer.from(e.getHash(), "hex").reverse()
23
23
  });
24
24
  }
25
- const GAS_PER_BLOCKHEADER = 750;
26
- const GAS_PER_BLOCKHEADER_FORK = 750;
25
+ const GAS_PER_BLOCKHEADER = 850;
26
+ const GAS_PER_BLOCKHEADER_FORK = 1000;
27
27
  const btcRelayAddreses = {
28
28
  [starknet_1.constants.StarknetChainId.SN_SEPOLIA]: "0x068601c79da2231d21e015ccfd59c243861156fa523a12c9f987ec28eb8dbc8c",
29
29
  [starknet_1.constants.StarknetChainId.SN_MAIN]: "0x057b14a4231b82f1e525ff35a722d893ca3dd2bde0baa6cee97937c5be861dbc"
@@ -36,30 +36,31 @@ function serializeCalldata(headers, storedHeader, span) {
36
36
  span.push(...storedHeader.serialize());
37
37
  return span;
38
38
  }
39
+ const logger = (0, Utils_1.getLogger)("StarknetBtcRelay: ");
39
40
  class StarknetBtcRelay extends StarknetContractBase_1.StarknetContractBase {
40
41
  SaveMainHeaders(signer, mainHeaders, storedHeader) {
41
- return new StarknetAction_1.StarknetAction(signer, this, {
42
+ return new StarknetAction_1.StarknetAction(signer, this.Chain, {
42
43
  contractAddress: this.contract.address,
43
44
  entrypoint: "submit_main_blockheaders",
44
45
  calldata: serializeCalldata(mainHeaders, storedHeader, [])
45
46
  }, { l1: GAS_PER_BLOCKHEADER * mainHeaders.length, l2: 0 });
46
47
  }
47
48
  SaveShortForkHeaders(signer, forkHeaders, storedHeader) {
48
- return new StarknetAction_1.StarknetAction(signer, this, {
49
+ return new StarknetAction_1.StarknetAction(signer, this.Chain, {
49
50
  contractAddress: this.contract.address,
50
51
  entrypoint: "submit_short_fork_blockheaders",
51
52
  calldata: serializeCalldata(forkHeaders, storedHeader, [])
52
53
  }, { l1: GAS_PER_BLOCKHEADER * forkHeaders.length, l2: 0 });
53
54
  }
54
55
  SaveLongForkHeaders(signer, forkId, forkHeaders, storedHeader, totalForkHeaders = 100) {
55
- return new StarknetAction_1.StarknetAction(signer, this, {
56
+ return new StarknetAction_1.StarknetAction(signer, this.Chain, {
56
57
  contractAddress: this.contract.address,
57
58
  entrypoint: "submit_fork_blockheaders",
58
59
  calldata: serializeCalldata(forkHeaders, storedHeader, [(0, Utils_1.toHex)(forkId)])
59
60
  }, { l1: (GAS_PER_BLOCKHEADER * forkHeaders.length) + (GAS_PER_BLOCKHEADER_FORK * totalForkHeaders), l2: 0 });
60
61
  }
61
- constructor(chainId, provider, bitcoinRpc, contractAddress = btcRelayAddreses[chainId], retryPolicy, solanaFeeEstimator = new StarknetFees_1.StarknetFees(provider)) {
62
- super(chainId, provider, contractAddress, BtcRelayAbi_1.BtcRelayAbi, retryPolicy, solanaFeeEstimator);
62
+ constructor(chainInterface, bitcoinRpc, contractAddress = btcRelayAddreses[chainInterface.starknetChainId]) {
63
+ super(chainInterface, contractAddress, BtcRelayAbi_1.BtcRelayAbi);
63
64
  this.maxHeadersPerTx = 100;
64
65
  this.maxForkHeadersPerTx = 100;
65
66
  this.maxShortForkHeadersPerTx = 100;
@@ -171,7 +172,7 @@ class StarknetBtcRelay extends StarknetContractBase_1.StarknetContractBase {
171
172
  const chainCommitment = await this.contract.get_commit_hash(storedBlockHeader.block_height);
172
173
  if (BigInt(chainCommitment) !== BigInt(commitHash))
173
174
  return null;
174
- this.logger.debug("retrieveLogAndBlockheight(): block found," +
175
+ logger.debug("retrieveLogAndBlockheight(): block found," +
175
176
  " commit hash: " + (0, Utils_1.toHex)(commitHash) + " blockhash: " + blockData.blockhash + " current btc relay height: " + blockHeight);
176
177
  return { header: storedBlockHeader, height: blockHeight };
177
178
  }
@@ -190,7 +191,7 @@ class StarknetBtcRelay extends StarknetContractBase_1.StarknetContractBase {
190
191
  const chainCommitment = await this.contract.get_commit_hash(storedBlockHeader.block_height);
191
192
  if (BigInt(chainCommitment) !== BigInt(commitHash))
192
193
  return null;
193
- this.logger.debug("retrieveLogByCommitHash(): block found," +
194
+ logger.debug("retrieveLogByCommitHash(): block found," +
194
195
  " commit hash: " + commitmentHashStr + " blockhash: " + blockData.blockhash + " height: " + storedBlockHeader.block_height);
195
196
  return storedBlockHeader;
196
197
  }
@@ -217,7 +218,7 @@ class StarknetBtcRelay extends StarknetContractBase_1.StarknetContractBase {
217
218
  };
218
219
  });
219
220
  if (data != null)
220
- this.logger.debug("retrieveLatestKnownBlockLog(): block found," +
221
+ logger.debug("retrieveLatestKnownBlockLog(): block found," +
221
222
  " commit hash: " + (0, Utils_1.toHex)(data.commitHash) + " blockhash: " + data.resultBitcoinHeader.getHash() +
222
223
  " height: " + data.resultStoredHeader.getBlockheight());
223
224
  return data;
@@ -231,7 +232,7 @@ class StarknetBtcRelay extends StarknetContractBase_1.StarknetContractBase {
231
232
  * @param feeRate
232
233
  */
233
234
  saveMainHeaders(signer, mainHeaders, storedHeader, feeRate) {
234
- this.logger.debug("saveMainHeaders(): submitting main blockheaders, count: " + mainHeaders.length);
235
+ logger.debug("saveMainHeaders(): submitting main blockheaders, count: " + mainHeaders.length);
235
236
  return this._saveHeaders(signer, mainHeaders, storedHeader, null, 0, feeRate);
236
237
  }
237
238
  /**
@@ -245,7 +246,7 @@ class StarknetBtcRelay extends StarknetContractBase_1.StarknetContractBase {
245
246
  */
246
247
  async saveNewForkHeaders(signer, forkHeaders, storedHeader, tipWork, feeRate) {
247
248
  let forkId = Math.floor(Math.random() * 0xFFFFFFFFFFFF);
248
- this.logger.debug("saveNewForkHeaders(): submitting new fork & blockheaders," +
249
+ logger.debug("saveNewForkHeaders(): submitting new fork & blockheaders," +
249
250
  " count: " + forkHeaders.length + " forkId: 0x" + forkId.toString(16));
250
251
  return await this._saveHeaders(signer, forkHeaders, storedHeader, tipWork, forkId, feeRate);
251
252
  }
@@ -260,7 +261,7 @@ class StarknetBtcRelay extends StarknetContractBase_1.StarknetContractBase {
260
261
  * @param feeRate
261
262
  */
262
263
  saveForkHeaders(signer, forkHeaders, storedHeader, forkId, tipWork, feeRate) {
263
- this.logger.debug("saveForkHeaders(): submitting blockheaders to existing fork," +
264
+ logger.debug("saveForkHeaders(): submitting blockheaders to existing fork," +
264
265
  " count: " + forkHeaders.length + " forkId: 0x" + forkId.toString(16));
265
266
  return this._saveHeaders(signer, forkHeaders, storedHeader, tipWork, forkId, feeRate);
266
267
  }
@@ -274,7 +275,7 @@ class StarknetBtcRelay extends StarknetContractBase_1.StarknetContractBase {
274
275
  * @param feeRate
275
276
  */
276
277
  saveShortForkHeaders(signer, forkHeaders, storedHeader, tipWork, feeRate) {
277
- this.logger.debug("saveShortForkHeaders(): submitting short fork blockheaders," +
278
+ logger.debug("saveShortForkHeaders(): submitting short fork blockheaders," +
278
279
  " count: " + forkHeaders.length);
279
280
  return this._saveHeaders(signer, forkHeaders, storedHeader, tipWork, -1, feeRate);
280
281
  }
@@ -291,7 +292,7 @@ class StarknetBtcRelay extends StarknetContractBase_1.StarknetContractBase {
291
292
  if (blockheightDelta <= 0)
292
293
  return 0n;
293
294
  const synchronizationFee = BigInt(blockheightDelta) * await this.getFeePerBlock(feeRate);
294
- this.logger.debug("estimateSynchronizeFee(): required blockheight: " + requiredBlockheight +
295
+ logger.debug("estimateSynchronizeFee(): required blockheight: " + requiredBlockheight +
295
296
  " blockheight delta: " + blockheightDelta + " fee: " + synchronizationFee.toString(10));
296
297
  return synchronizationFee;
297
298
  }
@@ -301,23 +302,77 @@ class StarknetBtcRelay extends StarknetContractBase_1.StarknetContractBase {
301
302
  * @param feeRate
302
303
  */
303
304
  async getFeePerBlock(feeRate) {
304
- feeRate ?? (feeRate = await this.Fees.getFeeRate());
305
+ feeRate ?? (feeRate = await this.Chain.Fees.getFeeRate());
305
306
  return StarknetFees_1.StarknetFees.getGasFee(GAS_PER_BLOCKHEADER, feeRate);
306
307
  }
307
308
  /**
308
309
  * Gets fee rate required for submitting blockheaders to the main chain
309
310
  */
310
311
  getMainFeeRate(signer) {
311
- return this.Fees.getFeeRate();
312
+ return this.Chain.Fees.getFeeRate();
312
313
  }
313
314
  /**
314
315
  * Gets fee rate required for submitting blockheaders to the specific fork
315
316
  */
316
317
  getForkFeeRate(signer, forkId) {
317
- return this.Fees.getFeeRate();
318
+ return this.Chain.Fees.getFeeRate();
318
319
  }
319
320
  saveInitialHeader(signer, header, epochStart, pastBlocksTimestamps, feeRate) {
320
321
  throw new Error("Not supported, starknet contract is initialized with constructor!");
321
322
  }
323
+ /**
324
+ * Gets committed header, identified by blockhash & blockheight, determines required BTC relay blockheight based on
325
+ * requiredConfirmations
326
+ * If synchronizer is passed & blockhash is not found, it produces transactions to sync up the btc relay to the
327
+ * current chain tip & adds them to the txs array
328
+ *
329
+ * @param signer
330
+ * @param btcRelay
331
+ * @param btcTxs
332
+ * @param txs solana transaction array, in case we need to synchronize the btc relay ourselves the synchronization
333
+ * txns are added here
334
+ * @param synchronizer optional synchronizer to use to synchronize the btc relay in case it is not yet synchronized
335
+ * to the required blockheight
336
+ * @param feeRate Fee rate to use for synchronization transactions
337
+ * @private
338
+ */
339
+ static async getCommitedHeadersAndSynchronize(signer, btcRelay, btcTxs, txs, synchronizer, feeRate) {
340
+ const leavesTxs = [];
341
+ const blockheaders = {};
342
+ for (let btcTx of btcTxs) {
343
+ const requiredBlockheight = btcTx.blockheight + btcTx.requiredConfirmations - 1;
344
+ const result = await (0, Utils_1.tryWithRetries)(() => btcRelay.retrieveLogAndBlockheight({
345
+ blockhash: btcTx.blockhash
346
+ }, requiredBlockheight));
347
+ if (result != null) {
348
+ blockheaders[result.header.getBlockHash().toString("hex")] = result.header;
349
+ }
350
+ else {
351
+ leavesTxs.push(btcTx);
352
+ }
353
+ }
354
+ if (leavesTxs.length === 0)
355
+ return blockheaders;
356
+ //Need to synchronize
357
+ if (synchronizer == null)
358
+ return null;
359
+ //TODO: We don't have to synchronize to tip, only to our required blockheight
360
+ const resp = await synchronizer.syncToLatestTxs(signer.toString(), feeRate);
361
+ logger.debug("getCommitedHeaderAndSynchronize(): BTC Relay not synchronized to required blockheight, " +
362
+ "synchronizing ourselves in " + resp.txs.length + " txs");
363
+ logger.debug("getCommitedHeaderAndSynchronize(): BTC Relay computed header map: ", resp.computedHeaderMap);
364
+ txs.push(...resp.txs);
365
+ for (let key in resp.computedHeaderMap) {
366
+ const header = resp.computedHeaderMap[key];
367
+ blockheaders[header.getBlockHash().toString("hex")] = header;
368
+ }
369
+ //Check that blockhashes of all the rest txs are included
370
+ for (let btcTx of leavesTxs) {
371
+ if (blockheaders[btcTx.blockhash] == null)
372
+ return null;
373
+ }
374
+ //Retrieve computed headers
375
+ return blockheaders;
376
+ }
322
377
  }
323
378
  exports.StarknetBtcRelay = StarknetBtcRelay;
@@ -1,5 +1,5 @@
1
1
  import { Call } from "starknet";
2
- import { StarknetBase } from "./StarknetBase";
2
+ import { StarknetChainInterface } from "./StarknetChainInterface";
3
3
  import { StarknetTx } from "./modules/StarknetTransactions";
4
4
  export type StarknetGas = {
5
5
  l1?: number;
@@ -16,7 +16,7 @@ export declare class StarknetAction {
16
16
  private readonly root;
17
17
  private readonly instructions;
18
18
  private feeRate;
19
- constructor(mainSigner: string, root: StarknetBase, instructions?: Call[] | Call, gasLimit?: StarknetGas, feeRate?: string);
19
+ constructor(mainSigner: string, root: StarknetChainInterface, instructions?: Call[] | Call, gasLimit?: StarknetGas, feeRate?: string);
20
20
  private estimateFeeRate;
21
21
  addIx(instruction: Call, gasLimit?: StarknetGas): void;
22
22
  add(action: StarknetAction): this;
@@ -0,0 +1,52 @@
1
+ import { Provider, constants } from "starknet";
2
+ import { StarknetTransactions, StarknetTx } from "./modules/StarknetTransactions";
3
+ import { StarknetFees } from "./modules/StarknetFees";
4
+ import { StarknetTokens } from "./modules/StarknetTokens";
5
+ import { StarknetEvents } from "./modules/StarknetEvents";
6
+ import { StarknetSignatures } from "./modules/StarknetSignatures";
7
+ import { StarknetAccounts } from "./modules/StarknetAccounts";
8
+ import { StarknetBlocks } from "./modules/StarknetBlocks";
9
+ import { ChainInterface, TransactionConfirmationOptions } from "@atomiqlabs/base";
10
+ import { StarknetSigner } from "../wallet/StarknetSigner";
11
+ export type StarknetRetryPolicy = {
12
+ maxRetries?: number;
13
+ delay?: number;
14
+ exponential?: boolean;
15
+ };
16
+ export declare class StarknetChainInterface implements ChainInterface {
17
+ readonly chainId = "STARKNET";
18
+ readonly provider: Provider;
19
+ readonly retryPolicy: StarknetRetryPolicy;
20
+ readonly starknetChainId: constants.StarknetChainId;
21
+ Fees: StarknetFees;
22
+ readonly Tokens: StarknetTokens;
23
+ readonly Transactions: StarknetTransactions;
24
+ readonly Signatures: StarknetSignatures;
25
+ readonly Events: StarknetEvents;
26
+ readonly Accounts: StarknetAccounts;
27
+ readonly Blocks: StarknetBlocks;
28
+ protected readonly logger: {
29
+ debug: (msg: any, ...args: any[]) => void;
30
+ info: (msg: any, ...args: any[]) => void;
31
+ warn: (msg: any, ...args: any[]) => void;
32
+ error: (msg: any, ...args: any[]) => void;
33
+ };
34
+ constructor(chainId: constants.StarknetChainId, provider: Provider, retryPolicy?: StarknetRetryPolicy, solanaFeeEstimator?: StarknetFees);
35
+ getBalance(signer: string, tokenAddress: string): Promise<bigint>;
36
+ getNativeCurrencyAddress(): string;
37
+ isValidToken(tokenIdentifier: string): boolean;
38
+ isValidAddress(address: string): boolean;
39
+ offBeforeTxReplace(callback: (oldTx: string, oldTxId: string, newTx: string, newTxId: string) => Promise<void>): boolean;
40
+ onBeforeTxReplace(callback: (oldTx: string, oldTxId: string, newTx: string, newTxId: string) => Promise<void>): void;
41
+ onBeforeTxSigned(callback: (tx: StarknetTx) => Promise<void>): void;
42
+ offBeforeTxSigned(callback: (tx: StarknetTx) => Promise<void>): boolean;
43
+ randomAddress(): string;
44
+ randomSigner(): StarknetSigner;
45
+ sendAndConfirm(signer: StarknetSigner, txs: StarknetTx[], waitForConfirmation?: boolean, abortSignal?: AbortSignal, parallel?: boolean, onBeforePublish?: (txId: string, rawTx: string) => Promise<void>): Promise<string[]>;
46
+ serializeTx(tx: StarknetTx): Promise<string>;
47
+ deserializeTx(txData: string): Promise<StarknetTx>;
48
+ getTxIdStatus(txId: string): Promise<"not_found" | "pending" | "success" | "reverted">;
49
+ getTxStatus(tx: string): Promise<"not_found" | "pending" | "success" | "reverted">;
50
+ txsTransfer(signer: string, token: string, amount: bigint, dstAddress: string, feeRate?: string): Promise<StarknetTx[]>;
51
+ transfer(signer: StarknetSigner, token: string, amount: bigint, dstAddress: string, txOptions?: TransactionConfirmationOptions): Promise<string>;
52
+ }
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StarknetChainInterface = void 0;
4
+ const starknet_1 = require("starknet");
5
+ const Utils_1 = require("../../utils/Utils");
6
+ const StarknetTransactions_1 = require("./modules/StarknetTransactions");
7
+ const StarknetFees_1 = require("./modules/StarknetFees");
8
+ const StarknetAddresses_1 = require("./modules/StarknetAddresses");
9
+ const StarknetTokens_1 = require("./modules/StarknetTokens");
10
+ const StarknetEvents_1 = require("./modules/StarknetEvents");
11
+ const StarknetSignatures_1 = require("./modules/StarknetSignatures");
12
+ const StarknetAccounts_1 = require("./modules/StarknetAccounts");
13
+ const StarknetBlocks_1 = require("./modules/StarknetBlocks");
14
+ const StarknetSigner_1 = require("../wallet/StarknetSigner");
15
+ const buffer_1 = require("buffer");
16
+ const StarknetKeypairWallet_1 = require("../wallet/StarknetKeypairWallet");
17
+ class StarknetChainInterface {
18
+ constructor(chainId, provider, retryPolicy, solanaFeeEstimator = new StarknetFees_1.StarknetFees(provider)) {
19
+ this.chainId = "STARKNET";
20
+ this.logger = (0, Utils_1.getLogger)("StarknetChainInterface: ");
21
+ this.starknetChainId = chainId;
22
+ this.provider = provider;
23
+ this.retryPolicy = retryPolicy;
24
+ this.Fees = solanaFeeEstimator;
25
+ this.Tokens = new StarknetTokens_1.StarknetTokens(this);
26
+ this.Transactions = new StarknetTransactions_1.StarknetTransactions(this);
27
+ this.Signatures = new StarknetSignatures_1.StarknetSignatures(this);
28
+ this.Events = new StarknetEvents_1.StarknetEvents(this);
29
+ this.Accounts = new StarknetAccounts_1.StarknetAccounts(this);
30
+ this.Blocks = new StarknetBlocks_1.StarknetBlocks(this);
31
+ }
32
+ async getBalance(signer, tokenAddress) {
33
+ //TODO: For native token we should discount the cost of deploying an account if it is not deployed yet
34
+ return await this.Tokens.getTokenBalance(signer, tokenAddress);
35
+ }
36
+ getNativeCurrencyAddress() {
37
+ return this.Tokens.getNativeCurrencyAddress();
38
+ }
39
+ isValidToken(tokenIdentifier) {
40
+ return this.Tokens.isValidToken(tokenIdentifier);
41
+ }
42
+ isValidAddress(address) {
43
+ return StarknetAddresses_1.StarknetAddresses.isValidAddress(address);
44
+ }
45
+ ///////////////////////////////////
46
+ //// Callbacks & handlers
47
+ offBeforeTxReplace(callback) {
48
+ return true;
49
+ }
50
+ onBeforeTxReplace(callback) { }
51
+ onBeforeTxSigned(callback) {
52
+ this.Transactions.onBeforeTxSigned(callback);
53
+ }
54
+ offBeforeTxSigned(callback) {
55
+ return this.Transactions.offBeforeTxSigned(callback);
56
+ }
57
+ randomAddress() {
58
+ return (0, Utils_1.toHex)(starknet_1.stark.randomAddress());
59
+ }
60
+ randomSigner() {
61
+ const privateKey = "0x" + buffer_1.Buffer.from(starknet_1.ec.starkCurve.utils.randomPrivateKey()).toString("hex");
62
+ const wallet = new StarknetKeypairWallet_1.StarknetKeypairWallet(this.provider, privateKey);
63
+ return new StarknetSigner_1.StarknetSigner(wallet);
64
+ }
65
+ ////////////////////////////////////////////
66
+ //// Transactions
67
+ sendAndConfirm(signer, txs, waitForConfirmation, abortSignal, parallel, onBeforePublish) {
68
+ return this.Transactions.sendAndConfirm(signer, txs, waitForConfirmation, abortSignal, parallel, onBeforePublish);
69
+ }
70
+ serializeTx(tx) {
71
+ return this.Transactions.serializeTx(tx);
72
+ }
73
+ deserializeTx(txData) {
74
+ return this.Transactions.deserializeTx(txData);
75
+ }
76
+ getTxIdStatus(txId) {
77
+ return this.Transactions.getTxIdStatus(txId);
78
+ }
79
+ getTxStatus(tx) {
80
+ return this.Transactions.getTxStatus(tx);
81
+ }
82
+ txsTransfer(signer, token, amount, dstAddress, feeRate) {
83
+ return this.Tokens.txsTransfer(signer, token, amount, dstAddress, feeRate);
84
+ }
85
+ async transfer(signer, token, amount, dstAddress, txOptions) {
86
+ const txs = await this.Tokens.txsTransfer(signer.getAddress(), token, amount, dstAddress, txOptions?.feeRate);
87
+ const [txId] = await this.Transactions.sendAndConfirm(signer, txs, txOptions?.waitForConfirmation, txOptions?.abortSignal, false);
88
+ return txId;
89
+ }
90
+ }
91
+ exports.StarknetChainInterface = StarknetChainInterface;
@@ -1,14 +1,14 @@
1
1
  import { Provider } from "starknet";
2
- import { StarknetBase, StarknetRetryPolicy } from "./StarknetBase";
2
+ import { StarknetChainInterface, StarknetRetryPolicy } from "./StarknetChainInterface";
3
3
  export declare class StarknetModule {
4
4
  protected readonly provider: Provider;
5
5
  protected readonly retryPolicy: StarknetRetryPolicy;
6
- protected readonly root: StarknetBase;
6
+ protected readonly root: StarknetChainInterface;
7
7
  protected readonly logger: {
8
8
  debug: (msg: any, ...args: any[]) => void;
9
9
  info: (msg: any, ...args: any[]) => void;
10
10
  warn: (msg: any, ...args: any[]) => void;
11
11
  error: (msg: any, ...args: any[]) => void;
12
12
  };
13
- constructor(root: StarknetBase);
13
+ constructor(root: StarknetChainInterface);
14
14
  }
@@ -5,5 +5,5 @@ export declare class StarknetAddresses extends StarknetModule {
5
5
  *
6
6
  * @param value
7
7
  */
8
- isValidAddress(value: string): boolean;
8
+ static isValidAddress(value: string): boolean;
9
9
  }
@@ -11,7 +11,7 @@ class StarknetAddresses extends StarknetModule_1.StarknetModule {
11
11
  *
12
12
  * @param value
13
13
  */
14
- isValidAddress(value) {
14
+ static isValidAddress(value) {
15
15
  if (value.length !== 66)
16
16
  return false;
17
17
  try {
@@ -2,10 +2,10 @@ import { Buffer } from "buffer";
2
2
  import { StarknetModule } from "../StarknetModule";
3
3
  import { StarknetSigner } from "../../wallet/StarknetSigner";
4
4
  import { StarknetType, TypedData } from "starknet";
5
- import { StarknetBase } from "../StarknetBase";
5
+ import { StarknetChainInterface } from "../StarknetChainInterface";
6
6
  export declare class StarknetSignatures extends StarknetModule {
7
7
  private readonly domain;
8
- constructor(root: StarknetBase, domainName?: string);
8
+ constructor(root: StarknetChainInterface, domainName?: string);
9
9
  getTypedMessage(type: StarknetType[], typeName: string, message: object): TypedData;
10
10
  signTypedMessage(signer: StarknetSigner, type: StarknetType[], typeName: string, message: object): Promise<string>;
11
11
  isValidSignature(signature: string, address: string, type: StarknetType[], typeName: string, message: object): Promise<boolean>;