@atomiqlabs/chain-starknet 8.1.11 → 8.2.2
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/README.md +74 -0
- package/dist/index.d.ts +1 -2
- package/dist/index.js +72 -3
- package/dist/node/index.d.ts +10 -0
- package/dist/node/index.js +15 -0
- package/dist/starknet/StarknetInitializer.d.ts +39 -6
- package/dist/starknet/StarknetInitializer.js +3 -3
- package/dist/starknet/btcrelay/StarknetBtcRelay.d.ts +7 -6
- package/dist/starknet/btcrelay/StarknetBtcRelay.js +8 -8
- package/dist/starknet/btcrelay/headers/StarknetBtcHeader.d.ts +2 -0
- package/dist/starknet/btcrelay/headers/StarknetBtcHeader.js +2 -0
- package/dist/starknet/btcrelay/headers/StarknetBtcStoredHeader.d.ts +3 -1
- package/dist/starknet/btcrelay/headers/StarknetBtcStoredHeader.js +3 -1
- package/dist/starknet/chain/StarknetAction.js +1 -1
- package/dist/starknet/chain/StarknetChainInterface.d.ts +25 -0
- package/dist/starknet/chain/StarknetChainInterface.js +7 -0
- package/dist/starknet/chain/modules/StarknetFees.d.ts +15 -19
- package/dist/starknet/chain/modules/StarknetFees.js +23 -29
- package/dist/starknet/chain/modules/StarknetTransactions.d.ts +32 -6
- package/dist/starknet/chain/modules/StarknetTransactions.js +47 -17
- package/dist/starknet/contract/StarknetContractBase.d.ts +12 -3
- package/dist/starknet/contract/StarknetContractBase.js +2 -2
- package/dist/starknet/contract/modules/StarknetContractEvents.js +1 -1
- package/dist/starknet/events/StarknetChainEvents.d.ts +3 -0
- package/dist/starknet/events/StarknetChainEvents.js +3 -0
- package/dist/starknet/events/StarknetChainEventsBrowser.d.ts +45 -7
- package/dist/starknet/events/StarknetChainEventsBrowser.js +20 -9
- package/dist/starknet/spv_swap/StarknetSpvVaultContract.js +4 -4
- package/dist/starknet/swaps/StarknetSwapContract.js +5 -5
- package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +1 -1
- package/dist/starknet/swaps/modules/StarknetSwapClaim.js +2 -2
- package/dist/starknet/swaps/modules/StarknetSwapRefund.js +1 -1
- package/dist/starknet/wallet/StarknetBrowserSigner.d.ts +9 -1
- package/dist/starknet/wallet/StarknetBrowserSigner.js +31 -1
- package/dist/starknet/wallet/StarknetSigner.d.ts +44 -3
- package/dist/starknet/wallet/StarknetSigner.js +52 -2
- package/dist/utils/Utils.d.ts +1 -1
- package/dist/utils/Utils.js +2 -2
- package/node/index.d.ts +1 -0
- package/node/index.js +3 -0
- package/package.json +5 -4
- package/src/index.ts +76 -2
- package/src/node/index.ts +10 -0
- package/src/starknet/StarknetInitializer.ts +40 -1
- package/src/starknet/btcrelay/StarknetBtcRelay.ts +19 -16
- package/src/starknet/btcrelay/headers/StarknetBtcHeader.ts +2 -0
- package/src/starknet/btcrelay/headers/StarknetBtcStoredHeader.ts +3 -1
- package/src/starknet/chain/StarknetAction.ts +2 -2
- package/src/starknet/chain/StarknetChainInterface.ts +29 -1
- package/src/starknet/chain/modules/StarknetFees.ts +23 -27
- package/src/starknet/chain/modules/StarknetTransactions.ts +59 -18
- package/src/starknet/contract/StarknetContractBase.ts +14 -5
- package/src/starknet/contract/modules/StarknetContractEvents.ts +1 -1
- package/src/starknet/events/StarknetChainEvents.ts +3 -0
- package/src/starknet/events/StarknetChainEventsBrowser.ts +51 -10
- package/src/starknet/spv_swap/StarknetSpvVaultContract.ts +4 -4
- package/src/starknet/swaps/StarknetSwapContract.ts +5 -5
- package/src/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +1 -1
- package/src/starknet/swaps/modules/StarknetSwapClaim.ts +3 -3
- package/src/starknet/swaps/modules/StarknetSwapRefund.ts +2 -2
- package/src/starknet/wallet/StarknetBrowserSigner.ts +39 -2
- package/src/starknet/wallet/StarknetSigner.ts +62 -3
- package/src/utils/Utils.ts +3 -3
package/README.md
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# @atomiqlabs/chain-starknet
|
|
2
|
+
|
|
3
|
+
`@atomiqlabs/chain-starknet` is the Starknet integration package for the Atomiq protocol.
|
|
4
|
+
|
|
5
|
+
Within the Atomiq stack, this library provides the Starknet-side building blocks used for Bitcoin-aware swaps and SPV-backed vault flows on Starknet. It includes:
|
|
6
|
+
|
|
7
|
+
- the `StarknetInitializer` used to register Starknet support in the Atomiq SDK
|
|
8
|
+
- the `StarknetChainInterface` used to talk to Starknet RPCs
|
|
9
|
+
- Starknet BTC relay, escrow swap, and SPV vault contract wrappers
|
|
10
|
+
- signer helpers for browser and programmatic Starknet integrations
|
|
11
|
+
- retrying RPC and websocket helpers for chain access and realtime events
|
|
12
|
+
|
|
13
|
+
This package is intended for direct protocol integrations and for higher-level Atomiq SDK layers that need Starknet chain support.
|
|
14
|
+
|
|
15
|
+
## Installation
|
|
16
|
+
|
|
17
|
+
Install the package with its `starknet` peer dependency:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install @atomiqlabs/chain-starknet starknet
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Node-only Helpers
|
|
24
|
+
|
|
25
|
+
The default package entrypoint stays browser-safe and does not export classes that depend on Node's `fs` module.
|
|
26
|
+
|
|
27
|
+
Import backend-only utilities from the dedicated `node` subpath:
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
import {StarknetChainEvents, StarknetPersistentSigner} from "@atomiqlabs/chain-starknet/node";
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Supported Chains
|
|
34
|
+
|
|
35
|
+
This package exports a single Starknet initializer:
|
|
36
|
+
|
|
37
|
+
- Starknet via `StarknetInitializer`
|
|
38
|
+
|
|
39
|
+
Canonical deployments currently defined in this package:
|
|
40
|
+
|
|
41
|
+
| Chain | Canonical deployments included |
|
|
42
|
+
|-------|--------------------------------|
|
|
43
|
+
| Starknet | `MAINNET`, `TESTNET`, `TESTNET4` |
|
|
44
|
+
|
|
45
|
+
By default, `StarknetInitializer` selects `SN_MAIN` Starknet network when `bitcoinNetwork` is `BitcoinNetwork.MAINNET`, and `SN_SEPOLIA` otherwise. That means both `BitcoinNetwork.TESTNET` and `BitcoinNetwork.TESTNET4` use Starknet Sepolia by default, while the BTC relay contract switches to the matching Bitcoin-network-specific deployment.
|
|
46
|
+
|
|
47
|
+
If you need a non-canonical deployment, pass explicit, `swapContract`, `spvVaultContract`, `btcRelayContract`, or handler contract overrides in the initializer options.
|
|
48
|
+
|
|
49
|
+
## SDK Example
|
|
50
|
+
|
|
51
|
+
Initialize the Atomiq SDK with Starknet network support:
|
|
52
|
+
|
|
53
|
+
```ts
|
|
54
|
+
import {StarknetInitializer} from "@atomiqlabs/chain-starknet";
|
|
55
|
+
import {BitcoinNetwork, SwapperFactory, TypedSwapper} from "@atomiqlabs/sdk";
|
|
56
|
+
|
|
57
|
+
// Define chains that you want to support here
|
|
58
|
+
const chains = [StarknetInitializer] as const;
|
|
59
|
+
type SupportedChains = typeof chains;
|
|
60
|
+
|
|
61
|
+
const Factory = new SwapperFactory<SupportedChains>(chains);
|
|
62
|
+
|
|
63
|
+
const swapper: TypedSwapper<SupportedChains> = Factory.newSwapper({
|
|
64
|
+
chains: {
|
|
65
|
+
STARKNET: {
|
|
66
|
+
rpcUrl: starknetRpc,
|
|
67
|
+
wsUrl: starknetWs // Optional, but recommended for realtime event subscriptions
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
bitcoinNetwork: BitcoinNetwork.MAINNET // or BitcoinNetwork.TESTNET / BitcoinNetwork.TESTNET4
|
|
71
|
+
});
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
If you use the lower-level initializer directly, you can also override the default Starknet chain ID and canonical contract addresses independently when you need custom deployments.
|
package/dist/index.d.ts
CHANGED
|
@@ -2,8 +2,7 @@ export { StarknetBtcStoredHeader } from "./starknet/btcrelay/headers/StarknetBtc
|
|
|
2
2
|
export { StarknetBtcHeader } from "./starknet/btcrelay/headers/StarknetBtcHeader";
|
|
3
3
|
export * from "./starknet/btcrelay/StarknetBtcRelay";
|
|
4
4
|
export * from "./starknet/chain/modules/StarknetFees";
|
|
5
|
-
export { StarknetTx, SignedStarknetTx } from "./starknet/chain/modules/StarknetTransactions";
|
|
6
|
-
export { StarknetAction } from "./starknet/chain/StarknetAction";
|
|
5
|
+
export { StarknetTx, SignedStarknetTx, StarknetTxInvoke, StarknetTxDeployAccount, isStarknetTxDeployAccount, isStarknetTxInvoke } from "./starknet/chain/modules/StarknetTransactions";
|
|
7
6
|
export * from "./starknet/chain/StarknetChainInterface";
|
|
8
7
|
export * from "./starknet/events/StarknetChainEventsBrowser";
|
|
9
8
|
export * from "./starknet/provider/RpcProviderWithRetries";
|
package/dist/index.js
CHANGED
|
@@ -14,7 +14,75 @@ 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
|
-
exports.StarknetSwapData = exports.StarknetSpvVaultData = exports.
|
|
17
|
+
exports.StarknetSwapData = exports.StarknetSpvVaultData = exports.isStarknetTxInvoke = exports.isStarknetTxDeployAccount = exports.StarknetBtcHeader = exports.StarknetBtcStoredHeader = void 0;
|
|
18
|
+
/**
|
|
19
|
+
* # @atomiqlabs/chain-starknet
|
|
20
|
+
*
|
|
21
|
+
* `@atomiqlabs/chain-starknet` is the Starknet integration package for the Atomiq protocol.
|
|
22
|
+
*
|
|
23
|
+
* Within the Atomiq stack, this library provides the Starknet-side building blocks used for Bitcoin-aware swaps and SPV-backed vault flows on Starknet. It includes:
|
|
24
|
+
*
|
|
25
|
+
* - the `StarknetInitializer` used to register Starknet support in the Atomiq SDK
|
|
26
|
+
* - the `StarknetChainInterface` used to talk to Starknet RPCs
|
|
27
|
+
* - Starknet BTC relay, escrow swap, and SPV vault contract wrappers
|
|
28
|
+
* - signer helpers for browser and programmatic Starknet integrations
|
|
29
|
+
* - retrying RPC and websocket helpers for chain access and realtime events
|
|
30
|
+
*
|
|
31
|
+
* This package is intended for direct protocol integrations and for higher-level Atomiq SDK layers that need Starknet chain support.
|
|
32
|
+
*
|
|
33
|
+
* ## Installation
|
|
34
|
+
*
|
|
35
|
+
* Install the package with its `starknet` peer dependency:
|
|
36
|
+
*
|
|
37
|
+
* ```bash
|
|
38
|
+
* npm install @atomiqlabs/chain-starknet starknet
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* ## Supported Chains
|
|
42
|
+
*
|
|
43
|
+
* This package exports a single Starknet initializer:
|
|
44
|
+
*
|
|
45
|
+
* - Starknet via `StarknetInitializer`
|
|
46
|
+
*
|
|
47
|
+
* Canonical deployments currently defined in this package:
|
|
48
|
+
*
|
|
49
|
+
* | Chain | Canonical deployments included |
|
|
50
|
+
* |-------|--------------------------------|
|
|
51
|
+
* | Starknet | `MAINNET`, `TESTNET`, `TESTNET4` |
|
|
52
|
+
*
|
|
53
|
+
* By default, `StarknetInitializer` selects `SN_MAIN` Starknet network when `bitcoinNetwork` is `BitcoinNetwork.MAINNET`, and `SN_SEPOLIA` otherwise. That means both `BitcoinNetwork.TESTNET` and `BitcoinNetwork.TESTNET4` use Starknet Sepolia by default, while the BTC relay contract switches to the matching Bitcoin-network-specific deployment.
|
|
54
|
+
*
|
|
55
|
+
* If you need a non-canonical deployment, pass explicit, `swapContract`, `spvVaultContract`, `btcRelayContract`, or handler contract overrides in the initializer options.
|
|
56
|
+
*
|
|
57
|
+
* ## SDK Example
|
|
58
|
+
*
|
|
59
|
+
* Initialize the Atomiq SDK with Starknet network support:
|
|
60
|
+
*
|
|
61
|
+
* ```ts
|
|
62
|
+
* import {StarknetInitializer} from "@atomiqlabs/chain-starknet";
|
|
63
|
+
* import {BitcoinNetwork, SwapperFactory, TypedSwapper} from "@atomiqlabs/sdk";
|
|
64
|
+
*
|
|
65
|
+
* // Define chains that you want to support here
|
|
66
|
+
* const chains = [StarknetInitializer] as const;
|
|
67
|
+
* type SupportedChains = typeof chains;
|
|
68
|
+
*
|
|
69
|
+
* const Factory = new SwapperFactory<SupportedChains>(chains);
|
|
70
|
+
*
|
|
71
|
+
* const swapper: TypedSwapper<SupportedChains> = Factory.newSwapper({
|
|
72
|
+
* chains: {
|
|
73
|
+
* STARKNET: {
|
|
74
|
+
* rpcUrl: starknetRpc,
|
|
75
|
+
* wsUrl: starknetWs // Optional, but recommended for realtime event subscriptions
|
|
76
|
+
* }
|
|
77
|
+
* },
|
|
78
|
+
* bitcoinNetwork: BitcoinNetwork.MAINNET // or BitcoinNetwork.TESTNET / BitcoinNetwork.TESTNET4
|
|
79
|
+
* });
|
|
80
|
+
* ```
|
|
81
|
+
*
|
|
82
|
+
* If you use the lower-level initializer directly, you can also override the default Starknet chain ID and canonical contract addresses independently when you need custom deployments.
|
|
83
|
+
*
|
|
84
|
+
* @packageDocumentation
|
|
85
|
+
*/
|
|
18
86
|
const WebSocket = require("ws");
|
|
19
87
|
if (global.window == null)
|
|
20
88
|
global.WebSocket = WebSocket;
|
|
@@ -24,8 +92,9 @@ var StarknetBtcHeader_1 = require("./starknet/btcrelay/headers/StarknetBtcHeader
|
|
|
24
92
|
Object.defineProperty(exports, "StarknetBtcHeader", { enumerable: true, get: function () { return StarknetBtcHeader_1.StarknetBtcHeader; } });
|
|
25
93
|
__exportStar(require("./starknet/btcrelay/StarknetBtcRelay"), exports);
|
|
26
94
|
__exportStar(require("./starknet/chain/modules/StarknetFees"), exports);
|
|
27
|
-
var
|
|
28
|
-
Object.defineProperty(exports, "
|
|
95
|
+
var StarknetTransactions_1 = require("./starknet/chain/modules/StarknetTransactions");
|
|
96
|
+
Object.defineProperty(exports, "isStarknetTxDeployAccount", { enumerable: true, get: function () { return StarknetTransactions_1.isStarknetTxDeployAccount; } });
|
|
97
|
+
Object.defineProperty(exports, "isStarknetTxInvoke", { enumerable: true, get: function () { return StarknetTransactions_1.isStarknetTxInvoke; } });
|
|
29
98
|
__exportStar(require("./starknet/chain/StarknetChainInterface"), exports);
|
|
30
99
|
__exportStar(require("./starknet/events/StarknetChainEventsBrowser"), exports);
|
|
31
100
|
__exportStar(require("./starknet/provider/RpcProviderWithRetries"), exports);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node.js-only entrypoint for filesystem-backed Starknet helpers.
|
|
3
|
+
*
|
|
4
|
+
* Import from `@atomiqlabs/chain-starknet/node` when you need runtime features
|
|
5
|
+
* that depend on Node's `fs` module.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
export { StarknetChainEvents } from "../starknet/events/StarknetChainEvents";
|
|
10
|
+
export { StarknetPersistentSigner } from "../starknet/wallet/StarknetPersistentSigner";
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StarknetPersistentSigner = exports.StarknetChainEvents = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Node.js-only entrypoint for filesystem-backed Starknet helpers.
|
|
6
|
+
*
|
|
7
|
+
* Import from `@atomiqlabs/chain-starknet/node` when you need runtime features
|
|
8
|
+
* that depend on Node's `fs` module.
|
|
9
|
+
*
|
|
10
|
+
* @packageDocumentation
|
|
11
|
+
*/
|
|
12
|
+
var StarknetChainEvents_1 = require("../starknet/events/StarknetChainEvents");
|
|
13
|
+
Object.defineProperty(exports, "StarknetChainEvents", { enumerable: true, get: function () { return StarknetChainEvents_1.StarknetChainEvents; } });
|
|
14
|
+
var StarknetPersistentSigner_1 = require("../starknet/wallet/StarknetPersistentSigner");
|
|
15
|
+
Object.defineProperty(exports, "StarknetPersistentSigner", { enumerable: true, get: function () { return StarknetPersistentSigner_1.StarknetPersistentSigner; } });
|
|
@@ -9,32 +9,59 @@ import { StarknetChainType } from "./StarknetChainType";
|
|
|
9
9
|
* @category Chain Interface
|
|
10
10
|
*/
|
|
11
11
|
export type StarknetAssetsType = BaseTokenType<"ETH" | "STRK" | "WBTC" | "TBTC" | "USDC" | "USDT" | "_TESTNET_WBTC_VESU">;
|
|
12
|
-
/**
|
|
13
|
-
* Default Starknet token assets configuration
|
|
14
|
-
*
|
|
15
|
-
* @category Chain Interface
|
|
16
|
-
*/
|
|
17
|
-
export declare const StarknetAssets: StarknetAssetsType;
|
|
18
12
|
/**
|
|
19
13
|
* Configuration options for initializing Starknet chain
|
|
20
14
|
*
|
|
21
15
|
* @category Chain Interface
|
|
22
16
|
*/
|
|
23
17
|
export type StarknetOptions = {
|
|
18
|
+
/**
|
|
19
|
+
* Starknet RPC URL or {@link Provider} object to use for Starknet network access
|
|
20
|
+
*/
|
|
24
21
|
rpcUrl: string | Provider;
|
|
22
|
+
/**
|
|
23
|
+
* Optional WebSocket URL or {@link WebSocketChannel} object to use for realtime events subscriptions
|
|
24
|
+
*/
|
|
25
25
|
wsUrl?: string | WebSocketChannel;
|
|
26
|
+
/**
|
|
27
|
+
* Retry policy for the RPC calls
|
|
28
|
+
*/
|
|
26
29
|
retryPolicy?: {
|
|
27
30
|
maxRetries?: number;
|
|
28
31
|
delay?: number;
|
|
29
32
|
exponential?: boolean;
|
|
30
33
|
};
|
|
34
|
+
/**
|
|
35
|
+
* Starknet chain ID: mainnet or sepolia
|
|
36
|
+
*/
|
|
31
37
|
chainId?: constants.StarknetChainId;
|
|
38
|
+
/**
|
|
39
|
+
* Contract address of the Escrow Manager contract, uses canonical deployment by default
|
|
40
|
+
*/
|
|
32
41
|
swapContract?: string;
|
|
42
|
+
/**
|
|
43
|
+
* Optional Escrow Manager contract deployment height, which acts as genesis when querying events
|
|
44
|
+
*/
|
|
33
45
|
swapContractDeploymentHeight?: number;
|
|
46
|
+
/**
|
|
47
|
+
* Contract address of the BTC Relay contract, uses canonical deployment by default
|
|
48
|
+
*/
|
|
34
49
|
btcRelayContract?: string;
|
|
50
|
+
/**
|
|
51
|
+
* Optional BTC Relay contract deployment height, which acts as genesis when querying events
|
|
52
|
+
*/
|
|
35
53
|
btcRelayContractDeploymentHeight?: number;
|
|
54
|
+
/**
|
|
55
|
+
* Contract address of the UTXO-controlled vault (SPV Vault manager) contract, uses canonical deployment by default
|
|
56
|
+
*/
|
|
36
57
|
spvVaultContract?: string;
|
|
58
|
+
/**
|
|
59
|
+
* Optional UTXO-controlled vault (SPV Vault manager) contract deployment height, which acts as genesis when querying events
|
|
60
|
+
*/
|
|
37
61
|
spvVaultContractDeploymentHeight?: number;
|
|
62
|
+
/**
|
|
63
|
+
* Contract addresses of the refund and claim handlers, uses canonical deployment by default
|
|
64
|
+
*/
|
|
38
65
|
handlerContracts?: {
|
|
39
66
|
refund?: {
|
|
40
67
|
timelock?: string;
|
|
@@ -43,7 +70,13 @@ export type StarknetOptions = {
|
|
|
43
70
|
[type in ChainSwapType]?: string;
|
|
44
71
|
};
|
|
45
72
|
};
|
|
73
|
+
/**
|
|
74
|
+
* Starknet network fee API
|
|
75
|
+
*/
|
|
46
76
|
fees?: StarknetFees;
|
|
77
|
+
/**
|
|
78
|
+
* Starknet configuration
|
|
79
|
+
*/
|
|
47
80
|
starknetConfig?: StarknetConfig;
|
|
48
81
|
};
|
|
49
82
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.StarknetInitializer = exports.initializeStarknet =
|
|
3
|
+
exports.StarknetInitializer = exports.initializeStarknet = void 0;
|
|
4
4
|
const starknet_1 = require("starknet");
|
|
5
5
|
const StarknetFees_1 = require("./chain/modules/StarknetFees");
|
|
6
6
|
const StarknetChainInterface_1 = require("./chain/StarknetChainInterface");
|
|
@@ -19,7 +19,7 @@ const WebSocketChannelWithRetries_1 = require("./provider/WebSocketChannelWithRe
|
|
|
19
19
|
*
|
|
20
20
|
* @category Chain Interface
|
|
21
21
|
*/
|
|
22
|
-
|
|
22
|
+
const StarknetAssets = {
|
|
23
23
|
ETH: {
|
|
24
24
|
address: "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7",
|
|
25
25
|
decimals: 18,
|
|
@@ -96,6 +96,6 @@ exports.StarknetInitializer = {
|
|
|
96
96
|
chainId: "STARKNET",
|
|
97
97
|
chainType: null,
|
|
98
98
|
initializer: initializeStarknet,
|
|
99
|
-
tokens:
|
|
99
|
+
tokens: StarknetAssets,
|
|
100
100
|
options: null
|
|
101
101
|
};
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Buffer } from "buffer";
|
|
2
|
-
import { StarknetBtcHeader } from "./headers/StarknetBtcHeader";
|
|
3
2
|
import { BitcoinNetwork, BitcoinRpc, BtcBlock, BtcRelay, RelaySynchronizer } from "@atomiqlabs/base";
|
|
4
3
|
import { StarknetContractBase } from "../contract/StarknetContractBase";
|
|
5
4
|
import { StarknetBtcStoredHeader } from "./headers/StarknetBtcStoredHeader";
|
|
@@ -7,7 +6,6 @@ import { StarknetTx } from "../chain/modules/StarknetTransactions";
|
|
|
7
6
|
import { StarknetSigner } from "../wallet/StarknetSigner";
|
|
8
7
|
import { BtcRelayAbi } from "./BtcRelayAbi";
|
|
9
8
|
import { StarknetChainInterface } from "../chain/StarknetChainInterface";
|
|
10
|
-
import { StarknetAction } from "../chain/StarknetAction";
|
|
11
9
|
/**
|
|
12
10
|
* Starknet BTC Relay bitcoin light client contract representation
|
|
13
11
|
*
|
|
@@ -21,7 +19,7 @@ export declare class StarknetBtcRelay<B extends BtcBlock> extends StarknetContra
|
|
|
21
19
|
* @param mainHeaders New bitcoin blockheaders to submit
|
|
22
20
|
* @param storedHeader Current latest committed and stored bitcoin blockheader in the light client
|
|
23
21
|
*/
|
|
24
|
-
SaveMainHeaders
|
|
22
|
+
private SaveMainHeaders;
|
|
25
23
|
/**
|
|
26
24
|
* Returns a {@link StarknetAction} for submitting a short fork bitcoin blockheaders to the light client,
|
|
27
25
|
* forking the chain from the provided `storedHeader` param's blockheight. For a successful fork the
|
|
@@ -31,7 +29,7 @@ export declare class StarknetBtcRelay<B extends BtcBlock> extends StarknetContra
|
|
|
31
29
|
* @param forkHeaders Fork bitcoin blockheaders to submit
|
|
32
30
|
* @param storedHeader Committed and stored bitcoin blockheader from which to fork the light client
|
|
33
31
|
*/
|
|
34
|
-
SaveShortForkHeaders
|
|
32
|
+
private SaveShortForkHeaders;
|
|
35
33
|
/**
|
|
36
34
|
* Returns a {@link StarknetAction} for submitting a long fork of bitcoin blockheaders to the light client.
|
|
37
35
|
*
|
|
@@ -42,8 +40,11 @@ export declare class StarknetBtcRelay<B extends BtcBlock> extends StarknetContra
|
|
|
42
40
|
* creating the fork), or the tip of the fork (when adding more blockheaders to the fork)
|
|
43
41
|
* @param totalForkHeaders Total blockheaders in the fork - used to estimate the gas usage when re-org happens
|
|
44
42
|
*/
|
|
45
|
-
SaveLongForkHeaders
|
|
46
|
-
|
|
43
|
+
private SaveLongForkHeaders;
|
|
44
|
+
/**
|
|
45
|
+
* @internal
|
|
46
|
+
*/
|
|
47
|
+
readonly _bitcoinRpc: BitcoinRpc<B>;
|
|
47
48
|
readonly maxHeadersPerTx: number;
|
|
48
49
|
readonly maxForkHeadersPerTx: number;
|
|
49
50
|
readonly maxShortForkHeadersPerTx: number;
|
|
@@ -61,7 +61,7 @@ class StarknetBtcRelay extends StarknetContractBase_1.StarknetContractBase {
|
|
|
61
61
|
contractAddress: this.contract.address,
|
|
62
62
|
entrypoint: "submit_main_blockheaders",
|
|
63
63
|
calldata: serializeCalldata(mainHeaders, storedHeader, [])
|
|
64
|
-
},
|
|
64
|
+
}, StarknetFees_1.StarknetFees.starknetGasMul(GAS_PER_BLOCKHEADER, mainHeaders.length));
|
|
65
65
|
}
|
|
66
66
|
/**
|
|
67
67
|
* Returns a {@link StarknetAction} for submitting a short fork bitcoin blockheaders to the light client,
|
|
@@ -77,7 +77,7 @@ class StarknetBtcRelay extends StarknetContractBase_1.StarknetContractBase {
|
|
|
77
77
|
contractAddress: this.contract.address,
|
|
78
78
|
entrypoint: "submit_short_fork_blockheaders",
|
|
79
79
|
calldata: serializeCalldata(forkHeaders, storedHeader, [])
|
|
80
|
-
},
|
|
80
|
+
}, StarknetFees_1.StarknetFees.starknetGasMul(GAS_PER_BLOCKHEADER, forkHeaders.length));
|
|
81
81
|
}
|
|
82
82
|
/**
|
|
83
83
|
* Returns a {@link StarknetAction} for submitting a long fork of bitcoin blockheaders to the light client.
|
|
@@ -94,7 +94,7 @@ class StarknetBtcRelay extends StarknetContractBase_1.StarknetContractBase {
|
|
|
94
94
|
contractAddress: this.contract.address,
|
|
95
95
|
entrypoint: "submit_fork_blockheaders",
|
|
96
96
|
calldata: serializeCalldata(forkHeaders, storedHeader, [(0, Utils_1.toHex)(forkId)])
|
|
97
|
-
},
|
|
97
|
+
}, StarknetFees_1.StarknetFees.starknetGasAdd(StarknetFees_1.StarknetFees.starknetGasMul(GAS_PER_BLOCKHEADER, forkHeaders.length), StarknetFees_1.StarknetFees.starknetGasMul(GAS_PER_BLOCKHEADER_FORK, totalForkHeaders)));
|
|
98
98
|
}
|
|
99
99
|
constructor(chainInterface, bitcoinRpc, bitcoinNetwork, contractAddress = btcRelayAddreses[bitcoinNetwork], contractDeploymentHeight) {
|
|
100
100
|
if (contractAddress == null)
|
|
@@ -106,7 +106,7 @@ class StarknetBtcRelay extends StarknetContractBase_1.StarknetContractBase {
|
|
|
106
106
|
this.maxHeadersPerTx = 40;
|
|
107
107
|
this.maxForkHeadersPerTx = 30;
|
|
108
108
|
this.maxShortForkHeadersPerTx = 40;
|
|
109
|
-
this.
|
|
109
|
+
this._bitcoinRpc = bitcoinRpc;
|
|
110
110
|
}
|
|
111
111
|
/**
|
|
112
112
|
* Computes subsequent commited headers as they will appear on the blockchain when transactions
|
|
@@ -170,7 +170,7 @@ class StarknetBtcRelay extends StarknetContractBase_1.StarknetContractBase {
|
|
|
170
170
|
const starknetBlockHash = starknet_1.hash.computePoseidonHashOnElements((0, Utils_1.bufferToU32Array)(buffer_1.Buffer.from([...blockHash]).reverse()));
|
|
171
171
|
keys.push(starknetBlockHash);
|
|
172
172
|
}
|
|
173
|
-
return this.
|
|
173
|
+
return this._Events.findInContractEvents(["btc_relay::events::StoreHeader", "btc_relay::events::StoreForkHeader"], keys, (event) => {
|
|
174
174
|
return Promise.resolve([StarknetBtcStoredHeader_1.StarknetBtcStoredHeader.fromSerializedFeltArray(event.data), BigInt(event.params.commit_hash)]);
|
|
175
175
|
});
|
|
176
176
|
}
|
|
@@ -241,19 +241,19 @@ class StarknetBtcRelay extends StarknetContractBase_1.StarknetContractBase {
|
|
|
241
241
|
* @inheritDoc
|
|
242
242
|
*/
|
|
243
243
|
async retrieveLatestKnownBlockLog() {
|
|
244
|
-
const data = await this.
|
|
244
|
+
const data = await this._Events.findInContractEvents(["btc_relay::events::StoreHeader", "btc_relay::events::StoreForkHeader"], null, async (event) => {
|
|
245
245
|
const storedHeader = StarknetBtcStoredHeader_1.StarknetBtcStoredHeader.fromSerializedFeltArray(event.data);
|
|
246
246
|
const blockHashHex = storedHeader.getBlockHash().toString("hex");
|
|
247
247
|
const commitHash = event.params.commit_hash;
|
|
248
248
|
const [isInBtcMainChain, btcRelayCommitHash] = await Promise.all([
|
|
249
|
-
this.
|
|
249
|
+
this._bitcoinRpc.isInMainChain(blockHashHex).catch(() => false),
|
|
250
250
|
this.contract.get_commit_hash(storedHeader.getBlockheight())
|
|
251
251
|
]);
|
|
252
252
|
if (!isInBtcMainChain)
|
|
253
253
|
return null;
|
|
254
254
|
if (BigInt(commitHash) !== BigInt(btcRelayCommitHash))
|
|
255
255
|
return null;
|
|
256
|
-
const bitcoinBlockHeader = await this.
|
|
256
|
+
const bitcoinBlockHeader = await this._bitcoinRpc.getBlockHeader(blockHashHex);
|
|
257
257
|
if (bitcoinBlockHeader == null)
|
|
258
258
|
return null;
|
|
259
259
|
return {
|
|
@@ -27,6 +27,8 @@ export declare class StarknetBtcHeader implements BtcHeader {
|
|
|
27
27
|
* Constructs the bitcoin blockheader from a struct as returned by the starknet.js lib
|
|
28
28
|
*
|
|
29
29
|
* @param obj Struct as returned by the starknet.js lib
|
|
30
|
+
*
|
|
31
|
+
* @internal
|
|
30
32
|
*/
|
|
31
33
|
constructor(obj: StarknetBtcHeaderType);
|
|
32
34
|
/**
|
|
@@ -14,6 +14,8 @@ class StarknetBtcHeader {
|
|
|
14
14
|
* Constructs the bitcoin blockheader from a struct as returned by the starknet.js lib
|
|
15
15
|
*
|
|
16
16
|
* @param obj Struct as returned by the starknet.js lib
|
|
17
|
+
*
|
|
18
|
+
* @internal
|
|
17
19
|
*/
|
|
18
20
|
constructor(obj) {
|
|
19
21
|
this.reversed_version = Number(obj.reversed_version);
|
|
@@ -26,7 +26,9 @@ export declare class StarknetBtcStoredHeader implements BtcStoredHeader<Starknet
|
|
|
26
26
|
/**
|
|
27
27
|
* Constructs the bitcoin stored blockheader from a struct as returned by the starknet.js lib
|
|
28
28
|
*
|
|
29
|
-
* @param obj Struct as returned by the starknet.js
|
|
29
|
+
* @param obj Struct as returned by the starknet.js
|
|
30
|
+
*
|
|
31
|
+
* @internal
|
|
30
32
|
*/
|
|
31
33
|
constructor(obj: StarknetBtcStoredHeaderType);
|
|
32
34
|
/**
|
|
@@ -16,7 +16,9 @@ class StarknetBtcStoredHeader {
|
|
|
16
16
|
/**
|
|
17
17
|
* Constructs the bitcoin stored blockheader from a struct as returned by the starknet.js lib
|
|
18
18
|
*
|
|
19
|
-
* @param obj Struct as returned by the starknet.js
|
|
19
|
+
* @param obj Struct as returned by the starknet.js
|
|
20
|
+
*
|
|
21
|
+
* @internal
|
|
20
22
|
*/
|
|
21
23
|
constructor(obj) {
|
|
22
24
|
this.blockheader = obj.blockheader instanceof StarknetBtcHeader_1.StarknetBtcHeader ? obj.blockheader : new StarknetBtcHeader_1.StarknetBtcHeader(obj.blockheader);
|
|
@@ -32,7 +32,7 @@ class StarknetAction {
|
|
|
32
32
|
addIx(instruction, gasLimit) {
|
|
33
33
|
this.instructions.push(instruction);
|
|
34
34
|
if (gasLimit != null)
|
|
35
|
-
this.gas =
|
|
35
|
+
this.gas = StarknetFees_1.StarknetFees.starknetGasAdd(this.gas, gasLimit);
|
|
36
36
|
}
|
|
37
37
|
/**
|
|
38
38
|
* Adds contract calls from another starknet action to this action, while also adding its gas limits
|
|
@@ -14,9 +14,28 @@ import { StarknetSigner } from "../wallet/StarknetSigner";
|
|
|
14
14
|
* @category Chain Interface
|
|
15
15
|
*/
|
|
16
16
|
export type StarknetConfig = {
|
|
17
|
+
/**
|
|
18
|
+
* Limit of the number of events retrieved by a single `starknet_getEvents` RPC call.
|
|
19
|
+
*
|
|
20
|
+
* Defaults to 100 events
|
|
21
|
+
*/
|
|
17
22
|
getLogChunkSize?: number;
|
|
23
|
+
/**
|
|
24
|
+
* When fetching events in the forward direction, sets the limit on the number of blocks
|
|
25
|
+
* to fetch in a single `starknet_getEvents` RPC call.
|
|
26
|
+
*
|
|
27
|
+
* Defaults to 2000 blocks
|
|
28
|
+
*/
|
|
18
29
|
getLogForwardBlockRange?: number;
|
|
30
|
+
/**
|
|
31
|
+
* Maximum numbers of keys allowed to be specified in a single `starknet_getEvents` RPC call
|
|
32
|
+
*
|
|
33
|
+
* Defaults to 64 keys
|
|
34
|
+
*/
|
|
19
35
|
maxGetLogKeys?: number;
|
|
36
|
+
/**
|
|
37
|
+
* Maximum number of parallel contract calls to execute in batch functions
|
|
38
|
+
*/
|
|
20
39
|
maxParallelCalls?: number;
|
|
21
40
|
};
|
|
22
41
|
/**
|
|
@@ -29,10 +48,12 @@ export declare class StarknetChainInterface implements ChainInterface<StarknetTx
|
|
|
29
48
|
readonly starknetChainId: constants.StarknetChainId;
|
|
30
49
|
/**
|
|
31
50
|
* Optional websocket channel for instant notifications
|
|
51
|
+
* @internal
|
|
32
52
|
*/
|
|
33
53
|
readonly wsChannel?: WebSocketChannel;
|
|
34
54
|
/**
|
|
35
55
|
* Underlying starknet.js provider
|
|
56
|
+
* @internal
|
|
36
57
|
*/
|
|
37
58
|
readonly provider: Provider;
|
|
38
59
|
Fees: StarknetFees;
|
|
@@ -96,6 +117,10 @@ export declare class StarknetChainInterface implements ChainInterface<StarknetTx
|
|
|
96
117
|
* @inheritDoc
|
|
97
118
|
*/
|
|
98
119
|
sendSignedAndConfirm(signedTxs: SignedStarknetTx[], waitForConfirmation?: boolean, abortSignal?: AbortSignal, parallel?: boolean, onBeforePublish?: (txId: string, rawTx: string) => Promise<void>): Promise<string[]>;
|
|
120
|
+
/**
|
|
121
|
+
* @inheritDoc
|
|
122
|
+
*/
|
|
123
|
+
prepareTxs(txs: StarknetTx[]): Promise<StarknetTx[]>;
|
|
99
124
|
/**
|
|
100
125
|
* @inheritDoc
|
|
101
126
|
*/
|
|
@@ -123,6 +123,13 @@ class StarknetChainInterface {
|
|
|
123
123
|
sendSignedAndConfirm(signedTxs, waitForConfirmation, abortSignal, parallel, onBeforePublish) {
|
|
124
124
|
return this.Transactions.sendSignedAndConfirm(signedTxs, waitForConfirmation, abortSignal, parallel, onBeforePublish);
|
|
125
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* @inheritDoc
|
|
128
|
+
*/
|
|
129
|
+
async prepareTxs(txs) {
|
|
130
|
+
await this.Transactions.prepareTransactions(txs);
|
|
131
|
+
return txs;
|
|
132
|
+
}
|
|
126
133
|
/**
|
|
127
134
|
* @inheritDoc
|
|
128
135
|
*/
|
|
@@ -19,30 +19,26 @@ export type StarknetGas = {
|
|
|
19
19
|
l2Gas: number;
|
|
20
20
|
l1DataGas: number;
|
|
21
21
|
};
|
|
22
|
-
/**
|
|
23
|
-
* Multiplies all the gas parameters by a specific scalar
|
|
24
|
-
*
|
|
25
|
-
* @param gas
|
|
26
|
-
* @param scalar
|
|
27
|
-
*
|
|
28
|
-
* @category Chain Interface
|
|
29
|
-
*/
|
|
30
|
-
export declare function starknetGasMul(gas: StarknetGas, scalar: number): StarknetGas;
|
|
31
|
-
/**
|
|
32
|
-
* Sums up all the gas parameters
|
|
33
|
-
*
|
|
34
|
-
* @param a
|
|
35
|
-
* @param b
|
|
36
|
-
*
|
|
37
|
-
* @category Chain Interface
|
|
38
|
-
*/
|
|
39
|
-
export declare function starknetGasAdd(a: StarknetGas, b?: StarknetGas): StarknetGas;
|
|
40
22
|
/**
|
|
41
23
|
* A module for starknet fee estimation
|
|
42
24
|
*
|
|
43
25
|
* @category Chain Interface
|
|
44
26
|
*/
|
|
45
27
|
export declare class StarknetFees {
|
|
28
|
+
/**
|
|
29
|
+
* Multiplies all the gas parameters by a specific scalar
|
|
30
|
+
*
|
|
31
|
+
* @param gas
|
|
32
|
+
* @param scalar
|
|
33
|
+
*/
|
|
34
|
+
static starknetGasMul(gas: StarknetGas, scalar: number): StarknetGas;
|
|
35
|
+
/**
|
|
36
|
+
* Sums up all the gas parameters
|
|
37
|
+
*
|
|
38
|
+
* @param a
|
|
39
|
+
* @param b
|
|
40
|
+
*/
|
|
41
|
+
static starknetGasAdd(a: StarknetGas, b?: StarknetGas): StarknetGas;
|
|
46
42
|
private readonly logger;
|
|
47
43
|
private readonly feeDA;
|
|
48
44
|
private readonly nonceDA;
|
|
@@ -54,7 +50,7 @@ export declare class StarknetFees {
|
|
|
54
50
|
* Constructs a new Starknet fee module
|
|
55
51
|
*
|
|
56
52
|
* @param provider A starknet.js provider to use for fee estimation
|
|
57
|
-
* @param maxFeeRate Fee rate limits in base units
|
|
53
|
+
* @param maxFeeRate Fee rate limits in base units, defaults to L1: 20 PFri, L2: 4 PFri, L1 data: 10 PFri
|
|
58
54
|
* @param feeMultiplier A multiplier to use for the returned fee rates
|
|
59
55
|
* @param da Data-availability mode - currently just L1
|
|
60
56
|
*/
|