@atomiqlabs/chain-starknet 1.0.9 → 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.
- package/dist/index.d.ts +13 -9
- package/dist/index.js +13 -9
- package/dist/starknet/StarknetChainType.d.ts +6 -2
- package/dist/starknet/StarknetInitializer.d.ts +3 -2
- package/dist/starknet/StarknetInitializer.js +17 -6
- package/dist/starknet/btcrelay/StarknetBtcRelay.d.ts +28 -7
- package/dist/starknet/btcrelay/StarknetBtcRelay.js +75 -20
- package/dist/starknet/{base → chain}/StarknetAction.d.ts +2 -2
- package/dist/starknet/chain/StarknetChainInterface.d.ts +52 -0
- package/dist/starknet/chain/StarknetChainInterface.js +91 -0
- package/dist/starknet/{base → chain}/StarknetModule.d.ts +3 -3
- package/dist/starknet/{base → chain}/modules/StarknetAddresses.d.ts +1 -1
- package/dist/starknet/{base → chain}/modules/StarknetAddresses.js +1 -1
- package/dist/starknet/{base → chain}/modules/StarknetSignatures.d.ts +2 -2
- package/dist/starknet/{base → chain}/modules/StarknetTokens.js +2 -1
- package/dist/starknet/{base → chain}/modules/StarknetTransactions.d.ts +7 -1
- package/dist/starknet/{base → chain}/modules/StarknetTransactions.js +45 -16
- package/dist/starknet/contract/StarknetContractBase.d.ts +5 -5
- package/dist/starknet/contract/StarknetContractBase.js +5 -7
- package/dist/starknet/contract/StarknetContractModule.d.ts +8 -0
- package/dist/starknet/contract/StarknetContractModule.js +11 -0
- package/dist/starknet/contract/modules/StarknetContractEvents.d.ts +15 -4
- package/dist/starknet/contract/modules/StarknetContractEvents.js +26 -6
- package/dist/starknet/events/StarknetChainEvents.d.ts +3 -1
- package/dist/starknet/events/StarknetChainEvents.js +9 -9
- package/dist/starknet/events/StarknetChainEventsBrowser.d.ts +23 -6
- package/dist/starknet/events/StarknetChainEventsBrowser.js +106 -13
- package/dist/starknet/provider/RpcProviderWithRetries.d.ts +21 -0
- package/dist/starknet/provider/RpcProviderWithRetries.js +32 -0
- package/dist/starknet/spv_swap/SpvVaultContractAbi.d.ts +488 -0
- package/dist/starknet/spv_swap/SpvVaultContractAbi.js +656 -0
- package/dist/starknet/spv_swap/StarknetSpvVaultContract.d.ts +65 -0
- package/dist/starknet/spv_swap/StarknetSpvVaultContract.js +372 -0
- package/dist/starknet/spv_swap/StarknetSpvVaultData.d.ts +49 -0
- package/dist/starknet/spv_swap/StarknetSpvVaultData.js +144 -0
- package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.d.ts +24 -0
- package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.js +61 -0
- package/dist/starknet/swaps/StarknetSwapContract.d.ts +4 -22
- package/dist/starknet/swaps/StarknetSwapContract.js +23 -80
- package/dist/starknet/swaps/StarknetSwapModule.d.ts +6 -5
- package/dist/starknet/swaps/StarknetSwapModule.js +5 -6
- package/dist/starknet/swaps/handlers/IHandler.d.ts +2 -2
- package/dist/starknet/swaps/handlers/claim/ClaimHandlers.d.ts +1 -1
- package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.d.ts +2 -2
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.d.ts +2 -2
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.d.ts +2 -2
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.d.ts +2 -2
- package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.d.ts +2 -21
- package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +7 -41
- package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.d.ts +2 -2
- package/dist/starknet/swaps/modules/StarknetLpVault.d.ts +1 -1
- package/dist/starknet/swaps/modules/StarknetLpVault.js +9 -9
- package/dist/starknet/swaps/modules/StarknetSwapClaim.d.ts +1 -1
- package/dist/starknet/swaps/modules/StarknetSwapClaim.js +8 -8
- package/dist/starknet/swaps/modules/StarknetSwapInit.d.ts +1 -1
- package/dist/starknet/swaps/modules/StarknetSwapInit.js +9 -9
- package/dist/starknet/swaps/modules/StarknetSwapRefund.d.ts +1 -3
- package/dist/starknet/swaps/modules/StarknetSwapRefund.js +8 -11
- package/dist/starknet/wallet/StarknetSigner.js +1 -1
- package/dist/utils/Utils.d.ts +2 -2
- package/dist/utils/Utils.js +3 -1
- package/package.json +2 -2
- package/src/index.ts +15 -9
- package/src/starknet/StarknetChainType.ts +10 -2
- package/src/starknet/StarknetInitializer.ts +23 -7
- package/src/starknet/btcrelay/StarknetBtcRelay.ts +104 -30
- package/src/starknet/{base → chain}/StarknetAction.ts +3 -3
- package/src/starknet/chain/StarknetChainInterface.ts +149 -0
- package/src/starknet/{base → chain}/StarknetModule.ts +3 -3
- package/src/starknet/{base → chain}/modules/StarknetAddresses.ts +1 -1
- package/src/starknet/{base → chain}/modules/StarknetSignatures.ts +2 -2
- package/src/starknet/{base → chain}/modules/StarknetTokens.ts +2 -1
- package/src/starknet/{base → chain}/modules/StarknetTransactions.ts +43 -18
- package/src/starknet/contract/StarknetContractBase.ts +9 -12
- package/src/starknet/contract/StarknetContractModule.ts +16 -0
- package/src/starknet/contract/modules/StarknetContractEvents.ts +33 -7
- package/src/starknet/events/StarknetChainEvents.ts +15 -11
- package/src/starknet/events/StarknetChainEventsBrowser.ts +159 -26
- package/src/starknet/provider/RpcProviderWithRetries.ts +43 -0
- package/src/starknet/spv_swap/SpvVaultContractAbi.ts +656 -0
- package/src/starknet/spv_swap/StarknetSpvVaultContract.ts +475 -0
- package/src/starknet/spv_swap/StarknetSpvVaultData.ts +194 -0
- package/src/starknet/spv_swap/StarknetSpvWithdrawalData.ts +68 -0
- package/src/starknet/swaps/StarknetSwapContract.ts +28 -116
- package/src/starknet/swaps/StarknetSwapModule.ts +8 -8
- package/src/starknet/swaps/handlers/IHandler.ts +2 -2
- package/src/starknet/swaps/handlers/claim/ClaimHandlers.ts +1 -1
- package/src/starknet/swaps/handlers/claim/HashlockClaimHandler.ts +2 -2
- package/src/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.ts +2 -2
- package/src/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.ts +2 -2
- package/src/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.ts +2 -2
- package/src/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +12 -61
- package/src/starknet/swaps/handlers/refund/TimelockRefundHandler.ts +2 -2
- package/src/starknet/swaps/modules/StarknetLpVault.ts +10 -10
- package/src/starknet/swaps/modules/StarknetSwapClaim.ts +9 -9
- package/src/starknet/swaps/modules/StarknetSwapInit.ts +10 -10
- package/src/starknet/swaps/modules/StarknetSwapRefund.ts +9 -13
- package/src/starknet/wallet/StarknetSigner.ts +1 -1
- package/src/utils/Utils.ts +4 -3
- package/dist/starknet/base/StarknetBase.d.ts +0 -34
- package/dist/starknet/base/StarknetBase.js +0 -29
- package/src/starknet/base/StarknetBase.ts +0 -56
- /package/dist/starknet/{base → chain}/StarknetAction.js +0 -0
- /package/dist/starknet/{base → chain}/StarknetModule.js +0 -0
- /package/dist/starknet/{base → chain}/modules/ERC20Abi.d.ts +0 -0
- /package/dist/starknet/{base → chain}/modules/ERC20Abi.js +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetAccounts.d.ts +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetAccounts.js +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetBlocks.d.ts +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetBlocks.js +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetEvents.d.ts +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetEvents.js +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetFees.d.ts +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetFees.js +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetSignatures.js +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetTokens.d.ts +0 -0
- /package/src/starknet/{base → chain}/modules/ERC20Abi.ts +0 -0
- /package/src/starknet/{base → chain}/modules/StarknetAccounts.ts +0 -0
- /package/src/starknet/{base → chain}/modules/StarknetBlocks.ts +0 -0
- /package/src/starknet/{base → chain}/modules/StarknetEvents.ts +0 -0
- /package/src/starknet/{base → chain}/modules/StarknetFees.ts +0 -0
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
export * from "./starknet/
|
|
2
|
-
export * from "./starknet/
|
|
3
|
-
export * from "./starknet/
|
|
4
|
-
export * from "./starknet/
|
|
5
|
-
export * from "./starknet/
|
|
6
|
-
export * from "./starknet/
|
|
7
|
-
export * from "./starknet/
|
|
8
|
-
export * from "./starknet/
|
|
9
|
-
export * from "./starknet/
|
|
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/
|
|
18
|
-
__exportStar(require("./starknet/
|
|
19
|
-
__exportStar(require("./starknet/
|
|
20
|
-
__exportStar(require("./starknet/
|
|
21
|
-
__exportStar(require("./starknet/
|
|
22
|
-
__exportStar(require("./starknet/
|
|
23
|
-
__exportStar(require("./starknet/
|
|
24
|
-
__exportStar(require("./starknet/
|
|
25
|
-
__exportStar(require("./starknet/
|
|
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 "./
|
|
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
|
-
|
|
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 "./
|
|
3
|
-
import { StarknetRetryPolicy } from "./
|
|
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("./
|
|
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
|
|
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
|
|
35
|
-
const
|
|
36
|
-
const
|
|
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 "../
|
|
6
|
+
import { StarknetTx } from "../chain/modules/StarknetTransactions";
|
|
7
7
|
import { StarknetSigner } from "../wallet/StarknetSigner";
|
|
8
8
|
import { BtcRelayAbi } from "./BtcRelayAbi";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
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(
|
|
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("../
|
|
13
|
-
const StarknetAction_1 = require("../
|
|
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 =
|
|
26
|
-
const GAS_PER_BLOCKHEADER_FORK =
|
|
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(
|
|
62
|
-
super(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 {
|
|
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:
|
|
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 {
|
|
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:
|
|
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:
|
|
13
|
+
constructor(root: StarknetChainInterface);
|
|
14
14
|
}
|
|
@@ -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 {
|
|
5
|
+
import { StarknetChainInterface } from "../StarknetChainInterface";
|
|
6
6
|
export declare class StarknetSignatures extends StarknetModule {
|
|
7
7
|
private readonly domain;
|
|
8
|
-
constructor(root:
|
|
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>;
|