@atomiqlabs/chain-evm 2.1.12 → 2.2.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/README.md +75 -0
- package/dist/chains/EVMOptions.d.ts +66 -0
- package/dist/chains/EVMOptions.js +2 -0
- package/dist/chains/alpen/AlpenInitializer.d.ts +3 -30
- package/dist/chains/alpen/AlpenInitializer.js +3 -3
- package/dist/chains/botanix/BotanixInitializer.d.ts +3 -30
- package/dist/chains/botanix/BotanixInitializer.js +3 -3
- package/dist/chains/citrea/CitreaBtcRelay.d.ts +5 -0
- package/dist/chains/citrea/CitreaBtcRelay.js +7 -2
- package/dist/chains/citrea/CitreaFees.d.ts +3 -5
- package/dist/chains/citrea/CitreaFees.js +3 -5
- package/dist/chains/citrea/CitreaInitializer.d.ts +3 -29
- package/dist/chains/citrea/CitreaInitializer.js +3 -3
- package/dist/chains/citrea/CitreaSpvVaultContract.d.ts +5 -0
- package/dist/chains/citrea/CitreaSpvVaultContract.js +7 -2
- package/dist/chains/citrea/CitreaSwapContract.d.ts +7 -2
- package/dist/chains/citrea/CitreaSwapContract.js +10 -5
- package/dist/chains/citrea/CitreaTokens.d.ts +5 -0
- package/dist/chains/citrea/CitreaTokens.js +5 -0
- package/dist/chains/goat/GoatInitializer.d.ts +3 -30
- package/dist/chains/goat/GoatInitializer.js +3 -3
- package/dist/evm/btcrelay/EVMBtcRelay.d.ts +41 -10
- package/dist/evm/btcrelay/EVMBtcRelay.js +50 -18
- package/dist/evm/btcrelay/headers/EVMBtcHeader.d.ts +53 -7
- package/dist/evm/btcrelay/headers/EVMBtcHeader.js +43 -5
- package/dist/evm/btcrelay/headers/EVMBtcStoredHeader.d.ts +53 -8
- package/dist/evm/btcrelay/headers/EVMBtcStoredHeader.js +41 -1
- package/dist/evm/chain/EVMChainInterface.d.ts +61 -2
- package/dist/evm/chain/EVMChainInterface.js +14 -7
- package/dist/evm/chain/EVMModule.d.ts +5 -0
- package/dist/evm/chain/EVMModule.js +6 -1
- package/dist/evm/chain/modules/EVMBlocks.d.ts +7 -0
- package/dist/evm/chain/modules/EVMBlocks.js +2 -0
- package/dist/evm/chain/modules/EVMEvents.js +19 -19
- package/dist/evm/chain/modules/EVMFees.d.ts +41 -5
- package/dist/evm/chain/modules/EVMFees.js +24 -5
- package/dist/evm/chain/modules/EVMTokens.d.ts +1 -1
- package/dist/evm/chain/modules/EVMTokens.js +1 -1
- package/dist/evm/chain/modules/EVMTransactions.d.ts +22 -5
- package/dist/evm/chain/modules/EVMTransactions.js +31 -22
- package/dist/evm/contract/EVMContractBase.d.ts +28 -10
- package/dist/evm/contract/EVMContractBase.js +9 -18
- package/dist/evm/contract/EVMContractModule.d.ts +5 -0
- package/dist/evm/contract/EVMContractModule.js +5 -0
- package/dist/evm/contract/modules/EVMContractEvents.d.ts +7 -1
- package/dist/evm/contract/modules/EVMContractEvents.js +23 -3
- package/dist/evm/events/EVMChainEvents.d.ts +8 -0
- package/dist/evm/events/EVMChainEvents.js +8 -0
- package/dist/evm/events/EVMChainEventsBrowser.d.ts +87 -19
- package/dist/evm/events/EVMChainEventsBrowser.js +53 -18
- package/dist/evm/providers/JsonRpcProviderWithRetries.d.ts +9 -0
- package/dist/evm/providers/JsonRpcProviderWithRetries.js +9 -0
- package/dist/evm/providers/ReconnectingWebSocketProvider.d.ts +5 -0
- package/dist/evm/providers/ReconnectingWebSocketProvider.js +5 -0
- package/dist/evm/providers/WebSocketProviderWithRetries.d.ts +9 -0
- package/dist/evm/providers/WebSocketProviderWithRetries.js +9 -0
- package/dist/evm/spv_swap/EVMSpvVaultContract.d.ts +46 -21
- package/dist/evm/spv_swap/EVMSpvVaultContract.js +61 -23
- package/dist/evm/spv_swap/EVMSpvVaultData.d.ts +57 -2
- package/dist/evm/spv_swap/EVMSpvVaultData.js +57 -2
- package/dist/evm/spv_swap/EVMSpvWithdrawalData.d.ts +12 -0
- package/dist/evm/spv_swap/EVMSpvWithdrawalData.js +12 -0
- package/dist/evm/swaps/EVMSwapContract.d.ts +58 -13
- package/dist/evm/swaps/EVMSwapContract.js +81 -54
- package/dist/evm/swaps/EVMSwapData.d.ts +27 -6
- package/dist/evm/swaps/EVMSwapData.js +26 -0
- package/dist/evm/swaps/EVMSwapModule.d.ts +5 -0
- package/dist/evm/swaps/EVMSwapModule.js +5 -0
- package/dist/evm/swaps/handlers/IHandler.d.ts +5 -0
- package/dist/evm/swaps/handlers/claim/ClaimHandlers.d.ts +15 -0
- package/dist/evm/swaps/handlers/claim/ClaimHandlers.js +5 -0
- package/dist/evm/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.d.ts +5 -0
- package/dist/evm/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.d.ts +10 -0
- package/dist/evm/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.d.ts +5 -0
- package/dist/evm/swaps/handlers/claim/btc/IBitcoinClaimHandler.d.ts +15 -0
- package/dist/evm/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +7 -2
- package/dist/evm/swaps/modules/EVMLpVault.d.ts +5 -0
- package/dist/evm/swaps/modules/EVMLpVault.js +9 -4
- package/dist/evm/swaps/modules/EVMSwapClaim.d.ts +7 -2
- package/dist/evm/swaps/modules/EVMSwapClaim.js +11 -6
- package/dist/evm/swaps/modules/EVMSwapInit.d.ts +10 -0
- package/dist/evm/swaps/modules/EVMSwapInit.js +11 -6
- package/dist/evm/swaps/modules/EVMSwapRefund.d.ts +5 -0
- package/dist/evm/swaps/modules/EVMSwapRefund.js +9 -4
- package/dist/evm/wallet/EVMBrowserSigner.d.ts +22 -2
- package/dist/evm/wallet/EVMBrowserSigner.js +40 -2
- package/dist/evm/wallet/EVMPersistentSigner.d.ts +13 -2
- package/dist/evm/wallet/EVMPersistentSigner.js +13 -1
- package/dist/evm/wallet/EVMSigner.d.ts +30 -1
- package/dist/evm/wallet/EVMSigner.js +34 -1
- package/dist/index.d.ts +71 -0
- package/dist/index.js +70 -0
- package/dist/node/index.d.ts +10 -0
- package/dist/node/index.js +15 -0
- package/dist/utils/Utils.d.ts +50 -0
- package/dist/utils/Utils.js +45 -0
- package/node/index.d.ts +1 -0
- package/node/index.js +3 -0
- package/package.json +5 -3
- package/src/chains/EVMOptions.ts +70 -0
- package/src/chains/alpen/AlpenInitializer.ts +5 -27
- package/src/chains/botanix/BotanixChainType.ts +5 -5
- package/src/chains/botanix/BotanixInitializer.ts +5 -27
- package/src/chains/citrea/CitreaBtcRelay.ts +8 -3
- package/src/chains/citrea/CitreaFees.ts +3 -6
- package/src/chains/citrea/CitreaInitializer.ts +5 -27
- package/src/chains/citrea/CitreaSpvVaultContract.ts +7 -2
- package/src/chains/citrea/CitreaSwapContract.ts +11 -6
- package/src/chains/citrea/CitreaTokens.ts +6 -1
- package/src/chains/goat/GoatChainType.ts +5 -5
- package/src/chains/goat/GoatInitializer.ts +3 -25
- package/src/evm/btcrelay/EVMBtcRelay.ts +54 -22
- package/src/evm/btcrelay/headers/EVMBtcHeader.ts +60 -13
- package/src/evm/btcrelay/headers/EVMBtcStoredHeader.ts +55 -10
- package/src/evm/chain/EVMChainInterface.ts +74 -14
- package/src/evm/chain/EVMModule.ts +6 -1
- package/src/evm/chain/modules/EVMBlocks.ts +7 -0
- package/src/evm/chain/modules/EVMEvents.ts +19 -19
- package/src/evm/chain/modules/EVMFees.ts +41 -5
- package/src/evm/chain/modules/EVMTokens.ts +1 -1
- package/src/evm/chain/modules/EVMTransactions.ts +40 -17
- package/src/evm/contract/EVMContractBase.ts +29 -24
- package/src/evm/contract/EVMContractModule.ts +5 -0
- package/src/evm/contract/modules/EVMContractEvents.ts +27 -8
- package/src/evm/events/EVMChainEvents.ts +8 -0
- package/src/evm/events/EVMChainEventsBrowser.ts +103 -29
- package/src/evm/providers/JsonRpcProviderWithRetries.ts +10 -1
- package/src/evm/providers/ReconnectingWebSocketProvider.ts +6 -1
- package/src/evm/providers/WebSocketProviderWithRetries.ts +10 -1
- package/src/evm/spv_swap/EVMSpvVaultContract.ts +72 -32
- package/src/evm/spv_swap/EVMSpvVaultData.ts +57 -2
- package/src/evm/spv_swap/EVMSpvWithdrawalData.ts +12 -0
- package/src/evm/swaps/EVMSwapContract.ts +108 -63
- package/src/evm/swaps/EVMSwapData.ts +27 -1
- package/src/evm/swaps/EVMSwapModule.ts +5 -0
- package/src/evm/swaps/handlers/IHandler.ts +5 -0
- package/src/evm/swaps/handlers/claim/ClaimHandlers.ts +15 -0
- package/src/evm/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.ts +5 -0
- package/src/evm/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.ts +10 -0
- package/src/evm/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.ts +5 -0
- package/src/evm/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +17 -2
- package/src/evm/swaps/modules/EVMLpVault.ts +10 -5
- package/src/evm/swaps/modules/EVMSwapClaim.ts +12 -7
- package/src/evm/swaps/modules/EVMSwapInit.ts +17 -7
- package/src/evm/swaps/modules/EVMSwapRefund.ts +9 -4
- package/src/evm/wallet/EVMBrowserSigner.ts +44 -5
- package/src/evm/wallet/EVMPersistentSigner.ts +14 -2
- package/src/evm/wallet/EVMSigner.ts +37 -1
- package/src/index.ts +72 -0
- package/src/node/index.ts +10 -0
- package/src/utils/Utils.ts +50 -1
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { Signer, TransactionRequest, TransactionResponse } from "ethers";
|
|
2
|
-
import { EVMBlockTag } from "../chain/modules/EVMBlocks";
|
|
3
2
|
import { EVMChainInterface } from "../chain/EVMChainInterface";
|
|
4
3
|
import { EVMSigner } from "./EVMSigner";
|
|
4
|
+
/**
|
|
5
|
+
* A robust EVM signer implementation with internal nonce management, automatic rebroadcasting and fee bumping.
|
|
6
|
+
* Uses Node.js `fs` to persist transaction data across restarts, so it is intended for backend runtimes.
|
|
7
|
+
*
|
|
8
|
+
* @category Wallets
|
|
9
|
+
*/
|
|
5
10
|
export declare class EVMPersistentSigner extends EVMSigner {
|
|
6
|
-
readonly safeBlockTag
|
|
11
|
+
private readonly safeBlockTag;
|
|
7
12
|
private pendingTxs;
|
|
8
13
|
private confirmedNonce;
|
|
9
14
|
private pendingNonce;
|
|
@@ -23,7 +28,13 @@ export declare class EVMPersistentSigner extends EVMSigner {
|
|
|
23
28
|
private checkPastTransactions;
|
|
24
29
|
private startFeeBumper;
|
|
25
30
|
private syncNonceFromChain;
|
|
31
|
+
/**
|
|
32
|
+
* @inheritDoc
|
|
33
|
+
*/
|
|
26
34
|
init(): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* @inheritDoc
|
|
37
|
+
*/
|
|
27
38
|
stop(): Promise<void>;
|
|
28
39
|
private readonly sendTransactionQueue;
|
|
29
40
|
sendTransaction(transaction: TransactionRequest, onBeforePublish?: (txId: string, rawTx: string) => Promise<void>): Promise<TransactionResponse>;
|
|
@@ -10,6 +10,12 @@ const fs = require("fs/promises");
|
|
|
10
10
|
const WAIT_BEFORE_BUMP = 15 * 1000;
|
|
11
11
|
const MIN_FEE_INCREASE_ABSOLUTE = 1n * 1000000000n; //1GWei
|
|
12
12
|
const MIN_FEE_INCREASE_PPM = 100000n; // +10%
|
|
13
|
+
/**
|
|
14
|
+
* A robust EVM signer implementation with internal nonce management, automatic rebroadcasting and fee bumping.
|
|
15
|
+
* Uses Node.js `fs` to persist transaction data across restarts, so it is intended for backend runtimes.
|
|
16
|
+
*
|
|
17
|
+
* @category Wallets
|
|
18
|
+
*/
|
|
13
19
|
class EVMPersistentSigner extends EVMSigner_1.EVMSigner {
|
|
14
20
|
constructor(account, address, chainInterface, directory, minFeeIncreaseAbsolute, minFeeIncreasePpm, waitBeforeBumpMillis) {
|
|
15
21
|
super(account, address, true);
|
|
@@ -25,7 +31,7 @@ class EVMPersistentSigner extends EVMSigner_1.EVMSigner {
|
|
|
25
31
|
this.minFeeIncreaseAbsolute = minFeeIncreaseAbsolute ?? MIN_FEE_INCREASE_ABSOLUTE;
|
|
26
32
|
this.minFeeIncreasePpm = minFeeIncreasePpm ?? MIN_FEE_INCREASE_PPM;
|
|
27
33
|
this.waitBeforeBump = waitBeforeBumpMillis ?? WAIT_BEFORE_BUMP;
|
|
28
|
-
this.safeBlockTag = chainInterface.
|
|
34
|
+
this.safeBlockTag = chainInterface._config.safeBlockTag;
|
|
29
35
|
this.logger = (0, Utils_1.getLogger)("EVMPersistentSigner(" + address + "): ");
|
|
30
36
|
}
|
|
31
37
|
async load() {
|
|
@@ -179,6 +185,9 @@ class EVMPersistentSigner extends EVMSigner_1.EVMSigner {
|
|
|
179
185
|
this.save();
|
|
180
186
|
}
|
|
181
187
|
}
|
|
188
|
+
/**
|
|
189
|
+
* @inheritDoc
|
|
190
|
+
*/
|
|
182
191
|
async init() {
|
|
183
192
|
try {
|
|
184
193
|
await fs.mkdir(this.directory);
|
|
@@ -190,6 +199,9 @@ class EVMPersistentSigner extends EVMSigner_1.EVMSigner {
|
|
|
190
199
|
await this.load();
|
|
191
200
|
this.startFeeBumper();
|
|
192
201
|
}
|
|
202
|
+
/**
|
|
203
|
+
* @inheritDoc
|
|
204
|
+
*/
|
|
193
205
|
stop() {
|
|
194
206
|
this.stopped = true;
|
|
195
207
|
if (this.feeBumper != null) {
|
|
@@ -1,19 +1,48 @@
|
|
|
1
1
|
import { AbstractSigner } from "@atomiqlabs/base";
|
|
2
2
|
import { Signer, TransactionRequest, TransactionResponse } from "ethers";
|
|
3
3
|
/**
|
|
4
|
-
* EVM signer implementation wrapping an ethers Signer
|
|
4
|
+
* EVM signer implementation wrapping an ethers {@link Signer}, for browser-based wallet use
|
|
5
|
+
* {@link EVMBrowserSigner}.
|
|
6
|
+
*
|
|
5
7
|
* @category Wallets
|
|
6
8
|
*/
|
|
7
9
|
export declare class EVMSigner implements AbstractSigner {
|
|
10
|
+
/**
|
|
11
|
+
* A static message, which should be signed by the EVM wallets to generate reproducible entropy. Works when
|
|
12
|
+
* wallets use signing with deterministic nonce, such that signature over the same message always yields the
|
|
13
|
+
* same signature (same entropy).
|
|
14
|
+
*/
|
|
15
|
+
private static readonly EVM_REPRODUCIBLE_ENTROPY_MESSAGE;
|
|
16
|
+
/**
|
|
17
|
+
* Returns a static message, which should be signed by the EVM wallets to generate reproducible entropy. Works when
|
|
18
|
+
* wallets use signing with deterministic nonce, such that signature over the same message always yields the
|
|
19
|
+
* same signature (same entropy).
|
|
20
|
+
*
|
|
21
|
+
* @param appName Application name to differentiate reproducible entropy generated across different apps
|
|
22
|
+
*/
|
|
23
|
+
static getReproducibleEntropyMessage(appName: string): string;
|
|
8
24
|
type: "AtomiqAbstractSigner";
|
|
9
25
|
account: Signer;
|
|
10
26
|
readonly address: string;
|
|
11
27
|
readonly isManagingNoncesInternally: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Constructs a signer wrapping an ethers {@link Signer}.
|
|
30
|
+
*
|
|
31
|
+
* @param account
|
|
32
|
+
* @param address
|
|
33
|
+
* @param isManagingNoncesInternally
|
|
34
|
+
*/
|
|
12
35
|
constructor(account: Signer, address: string, isManagingNoncesInternally?: boolean);
|
|
13
36
|
/**
|
|
14
37
|
* @inheritDoc
|
|
15
38
|
*/
|
|
16
39
|
getAddress(): string;
|
|
40
|
+
/**
|
|
41
|
+
* @inheritDoc
|
|
42
|
+
*/
|
|
17
43
|
signTransaction?(transaction: TransactionRequest): Promise<string>;
|
|
44
|
+
/**
|
|
45
|
+
* @inheritDoc
|
|
46
|
+
*/
|
|
18
47
|
sendTransaction(transaction: TransactionRequest, onBeforePublish?: (txId: string, rawTx: string) => Promise<void>): Promise<TransactionResponse>;
|
|
19
48
|
}
|
|
@@ -3,10 +3,29 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.EVMSigner = void 0;
|
|
4
4
|
const ethers_1 = require("ethers");
|
|
5
5
|
/**
|
|
6
|
-
* EVM signer implementation wrapping an ethers Signer
|
|
6
|
+
* EVM signer implementation wrapping an ethers {@link Signer}, for browser-based wallet use
|
|
7
|
+
* {@link EVMBrowserSigner}.
|
|
8
|
+
*
|
|
7
9
|
* @category Wallets
|
|
8
10
|
*/
|
|
9
11
|
class EVMSigner {
|
|
12
|
+
/**
|
|
13
|
+
* Returns a static message, which should be signed by the EVM wallets to generate reproducible entropy. Works when
|
|
14
|
+
* wallets use signing with deterministic nonce, such that signature over the same message always yields the
|
|
15
|
+
* same signature (same entropy).
|
|
16
|
+
*
|
|
17
|
+
* @param appName Application name to differentiate reproducible entropy generated across different apps
|
|
18
|
+
*/
|
|
19
|
+
static getReproducibleEntropyMessage(appName) {
|
|
20
|
+
return EVMSigner.EVM_REPRODUCIBLE_ENTROPY_MESSAGE.replace(new RegExp("%APPNAME%", 'g'), appName);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Constructs a signer wrapping an ethers {@link Signer}.
|
|
24
|
+
*
|
|
25
|
+
* @param account
|
|
26
|
+
* @param address
|
|
27
|
+
* @param isManagingNoncesInternally
|
|
28
|
+
*/
|
|
10
29
|
constructor(account, address, isManagingNoncesInternally = false) {
|
|
11
30
|
this.type = "AtomiqAbstractSigner";
|
|
12
31
|
this.account = account;
|
|
@@ -19,9 +38,15 @@ class EVMSigner {
|
|
|
19
38
|
getAddress() {
|
|
20
39
|
return (0, ethers_1.getAddress)(this.address);
|
|
21
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* @inheritDoc
|
|
43
|
+
*/
|
|
22
44
|
async signTransaction(transaction) {
|
|
23
45
|
return this.account.signTransaction(transaction);
|
|
24
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* @inheritDoc
|
|
49
|
+
*/
|
|
25
50
|
async sendTransaction(transaction, onBeforePublish) {
|
|
26
51
|
const txResponse = await this.account.sendTransaction(transaction);
|
|
27
52
|
if (onBeforePublish != null)
|
|
@@ -33,3 +58,11 @@ class EVMSigner {
|
|
|
33
58
|
}
|
|
34
59
|
}
|
|
35
60
|
exports.EVMSigner = EVMSigner;
|
|
61
|
+
/**
|
|
62
|
+
* A static message, which should be signed by the EVM wallets to generate reproducible entropy. Works when
|
|
63
|
+
* wallets use signing with deterministic nonce, such that signature over the same message always yields the
|
|
64
|
+
* same signature (same entropy).
|
|
65
|
+
*/
|
|
66
|
+
EVMSigner.EVM_REPRODUCIBLE_ENTROPY_MESSAGE = "Signing this messages generates a reproducible secret to be used on %APPNAME%.\n\nPLEASE DOUBLE CHECK THAT YOU" +
|
|
67
|
+
" ARE ON THE %APPNAME% WEBSITE BEFORE SIGNING THE MESSAGE, SIGNING THIS MESSAGE ON ANY OTHER WEBSITE MIGHT LEAD TO" +
|
|
68
|
+
" LOSS OF FUNDS!";
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* # @atomiqlabs/chain-evm
|
|
3
|
+
*
|
|
4
|
+
* `@atomiqlabs/chain-evm` is the EVM integration package for the Atomiq protocol.
|
|
5
|
+
*
|
|
6
|
+
* Within the Atomiq stack, this library provides the EVM-side building blocks used for Bitcoin-aware swaps and SPV-backed vault flows on supported EVM-compatible chains. It includes:
|
|
7
|
+
*
|
|
8
|
+
* - chain initializers for Atomiq-supported EVM networks
|
|
9
|
+
* - the `EVMChainInterface` used to talk to chain RPCs
|
|
10
|
+
* - BTC relay, escrow swap, and SPV vault contract wrappers
|
|
11
|
+
* - browser and server-side EVM signer helpers
|
|
12
|
+
* - event utilities for tracking swap and vault activity
|
|
13
|
+
*
|
|
14
|
+
* This package is intended for direct protocol integrations and for higher-level Atomiq SDK layers that need EVM chain support.
|
|
15
|
+
*
|
|
16
|
+
* ## Installation
|
|
17
|
+
*
|
|
18
|
+
* Install the package with its `ethers` peer dependency:
|
|
19
|
+
*
|
|
20
|
+
* ```bash
|
|
21
|
+
* npm install @atomiqlabs/chain-evm ethers
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* ## Supported Chains
|
|
25
|
+
*
|
|
26
|
+
* The package currently exports chain initializers for:
|
|
27
|
+
*
|
|
28
|
+
* - Botanix via `BotanixInitializer`
|
|
29
|
+
* - Citrea via `CitreaInitializer`
|
|
30
|
+
* - Alpen via `AlpenInitializer`
|
|
31
|
+
* - GOAT Network via `GoatInitializer`
|
|
32
|
+
*
|
|
33
|
+
* Canonical deployments currently defined in this package:
|
|
34
|
+
*
|
|
35
|
+
* | Chain | Canonical deployments included |
|
|
36
|
+
* | --- | --- |
|
|
37
|
+
* | Botanix | `MAINNET`, `TESTNET` |
|
|
38
|
+
* | Citrea | `MAINNET`, `TESTNET4` |
|
|
39
|
+
* | Alpen | `TESTNET`, `TESTNET4` |
|
|
40
|
+
* | GOAT Network | `TESTNET`, `TESTNET4` |
|
|
41
|
+
*
|
|
42
|
+
* For Alpen and GOAT Network, `MAINNET` chain types exist in the API, but default mainnet contract addresses are not populated in this package yet. In those cases, pass explicit contract addresses if you want to use non-canonical deployments.
|
|
43
|
+
*
|
|
44
|
+
* ## SDK Example
|
|
45
|
+
*
|
|
46
|
+
* Initialize the atomiq SDK with Citrea network support:
|
|
47
|
+
*
|
|
48
|
+
* ```ts
|
|
49
|
+
* import {CitreaInitializer, CitreaInitializerType} from "@atomiqlabs/chain-evm";
|
|
50
|
+
* import {BitcoinNetwork, SwapperFactory, TypedSwapper} from "@atomiqlabs/sdk";
|
|
51
|
+
*
|
|
52
|
+
* //Define chains that you want to support here
|
|
53
|
+
* const chains = [CitreaInitializer] as const;
|
|
54
|
+
* type SupportedChains = typeof chains; //It's helpful that we also get the type of the chains array
|
|
55
|
+
*
|
|
56
|
+
* const Factory = new SwapperFactory<SupportedChains>(chains); //Create swapper factory
|
|
57
|
+
*
|
|
58
|
+
* const swapper: TypedSwapper<SupportedChains> = Factory.newSwapper({
|
|
59
|
+
* chains: {
|
|
60
|
+
* CITREA: {
|
|
61
|
+
* rpcUrl: citreaRpc, //You can also pass JsonApiProvider object here
|
|
62
|
+
* }
|
|
63
|
+
* },
|
|
64
|
+
* bitcoinNetwork: BitcoinNetwork.MAINNET //or BitcoinNetwork.TESTNET3, BitcoinNetwork.TESTNET4 - this also sets the deployment to use for EVM chains
|
|
65
|
+
* });
|
|
66
|
+
* ```
|
|
67
|
+
*
|
|
68
|
+
* @packageDocumentation
|
|
69
|
+
*/
|
|
70
|
+
export * from "./chains/EVMOptions";
|
|
1
71
|
export * from "./chains/citrea/CitreaInitializer";
|
|
2
72
|
export * from "./chains/citrea/CitreaChainType";
|
|
3
73
|
export * from "./chains/citrea/CitreaFees";
|
|
@@ -12,6 +82,7 @@ export { EVMBtcStoredHeader } from "./evm/btcrelay/headers/EVMBtcStoredHeader";
|
|
|
12
82
|
export { EVMBtcRelay } from "./evm/btcrelay/EVMBtcRelay";
|
|
13
83
|
export * from "./evm/chain/EVMChainInterface";
|
|
14
84
|
export * from "./evm/chain/modules/EVMFees";
|
|
85
|
+
export { EVMTx, SignedEVMTx } from "./evm/chain/modules/EVMTransactions";
|
|
15
86
|
export * from "./evm/events/EVMChainEventsBrowser";
|
|
16
87
|
export * from "./evm/providers/JsonRpcProviderWithRetries";
|
|
17
88
|
export * from "./evm/providers/WebSocketProviderWithRetries";
|
package/dist/index.js
CHANGED
|
@@ -15,6 +15,76 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
exports.EVMSpvVaultData = exports.EVMSpvWithdrawalData = exports.EVMSpvVaultContract = exports.EVMBtcRelay = exports.EVMBtcStoredHeader = exports.EVMBtcHeader = void 0;
|
|
18
|
+
/**
|
|
19
|
+
* # @atomiqlabs/chain-evm
|
|
20
|
+
*
|
|
21
|
+
* `@atomiqlabs/chain-evm` is the EVM integration package for the Atomiq protocol.
|
|
22
|
+
*
|
|
23
|
+
* Within the Atomiq stack, this library provides the EVM-side building blocks used for Bitcoin-aware swaps and SPV-backed vault flows on supported EVM-compatible chains. It includes:
|
|
24
|
+
*
|
|
25
|
+
* - chain initializers for Atomiq-supported EVM networks
|
|
26
|
+
* - the `EVMChainInterface` used to talk to chain RPCs
|
|
27
|
+
* - BTC relay, escrow swap, and SPV vault contract wrappers
|
|
28
|
+
* - browser and server-side EVM signer helpers
|
|
29
|
+
* - event utilities for tracking swap and vault activity
|
|
30
|
+
*
|
|
31
|
+
* This package is intended for direct protocol integrations and for higher-level Atomiq SDK layers that need EVM chain support.
|
|
32
|
+
*
|
|
33
|
+
* ## Installation
|
|
34
|
+
*
|
|
35
|
+
* Install the package with its `ethers` peer dependency:
|
|
36
|
+
*
|
|
37
|
+
* ```bash
|
|
38
|
+
* npm install @atomiqlabs/chain-evm ethers
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* ## Supported Chains
|
|
42
|
+
*
|
|
43
|
+
* The package currently exports chain initializers for:
|
|
44
|
+
*
|
|
45
|
+
* - Botanix via `BotanixInitializer`
|
|
46
|
+
* - Citrea via `CitreaInitializer`
|
|
47
|
+
* - Alpen via `AlpenInitializer`
|
|
48
|
+
* - GOAT Network via `GoatInitializer`
|
|
49
|
+
*
|
|
50
|
+
* Canonical deployments currently defined in this package:
|
|
51
|
+
*
|
|
52
|
+
* | Chain | Canonical deployments included |
|
|
53
|
+
* | --- | --- |
|
|
54
|
+
* | Botanix | `MAINNET`, `TESTNET` |
|
|
55
|
+
* | Citrea | `MAINNET`, `TESTNET4` |
|
|
56
|
+
* | Alpen | `TESTNET`, `TESTNET4` |
|
|
57
|
+
* | GOAT Network | `TESTNET`, `TESTNET4` |
|
|
58
|
+
*
|
|
59
|
+
* For Alpen and GOAT Network, `MAINNET` chain types exist in the API, but default mainnet contract addresses are not populated in this package yet. In those cases, pass explicit contract addresses if you want to use non-canonical deployments.
|
|
60
|
+
*
|
|
61
|
+
* ## SDK Example
|
|
62
|
+
*
|
|
63
|
+
* Initialize the atomiq SDK with Citrea network support:
|
|
64
|
+
*
|
|
65
|
+
* ```ts
|
|
66
|
+
* import {CitreaInitializer, CitreaInitializerType} from "@atomiqlabs/chain-evm";
|
|
67
|
+
* import {BitcoinNetwork, SwapperFactory, TypedSwapper} from "@atomiqlabs/sdk";
|
|
68
|
+
*
|
|
69
|
+
* //Define chains that you want to support here
|
|
70
|
+
* const chains = [CitreaInitializer] as const;
|
|
71
|
+
* type SupportedChains = typeof chains; //It's helpful that we also get the type of the chains array
|
|
72
|
+
*
|
|
73
|
+
* const Factory = new SwapperFactory<SupportedChains>(chains); //Create swapper factory
|
|
74
|
+
*
|
|
75
|
+
* const swapper: TypedSwapper<SupportedChains> = Factory.newSwapper({
|
|
76
|
+
* chains: {
|
|
77
|
+
* CITREA: {
|
|
78
|
+
* rpcUrl: citreaRpc, //You can also pass JsonApiProvider object here
|
|
79
|
+
* }
|
|
80
|
+
* },
|
|
81
|
+
* bitcoinNetwork: BitcoinNetwork.MAINNET //or BitcoinNetwork.TESTNET3, BitcoinNetwork.TESTNET4 - this also sets the deployment to use for EVM chains
|
|
82
|
+
* });
|
|
83
|
+
* ```
|
|
84
|
+
*
|
|
85
|
+
* @packageDocumentation
|
|
86
|
+
*/
|
|
87
|
+
__exportStar(require("./chains/EVMOptions"), exports);
|
|
18
88
|
__exportStar(require("./chains/citrea/CitreaInitializer"), exports);
|
|
19
89
|
__exportStar(require("./chains/citrea/CitreaChainType"), exports);
|
|
20
90
|
__exportStar(require("./chains/citrea/CitreaFees"), exports);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node.js-only entrypoint for filesystem-backed EVM helpers.
|
|
3
|
+
*
|
|
4
|
+
* Import from `@atomiqlabs/chain-evm/node` when you need runtime features
|
|
5
|
+
* that depend on Node's `fs` module.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
export { EVMChainEvents } from "../evm/events/EVMChainEvents";
|
|
10
|
+
export { EVMPersistentSigner } from "../evm/wallet/EVMPersistentSigner";
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EVMPersistentSigner = exports.EVMChainEvents = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Node.js-only entrypoint for filesystem-backed EVM helpers.
|
|
6
|
+
*
|
|
7
|
+
* Import from `@atomiqlabs/chain-evm/node` when you need runtime features
|
|
8
|
+
* that depend on Node's `fs` module.
|
|
9
|
+
*
|
|
10
|
+
* @packageDocumentation
|
|
11
|
+
*/
|
|
12
|
+
var EVMChainEvents_1 = require("../evm/events/EVMChainEvents");
|
|
13
|
+
Object.defineProperty(exports, "EVMChainEvents", { enumerable: true, get: function () { return EVMChainEvents_1.EVMChainEvents; } });
|
|
14
|
+
var EVMPersistentSigner_1 = require("../evm/wallet/EVMPersistentSigner");
|
|
15
|
+
Object.defineProperty(exports, "EVMPersistentSigner", { enumerable: true, get: function () { return EVMPersistentSigner_1.EVMPersistentSigner; } });
|
package/dist/utils/Utils.d.ts
CHANGED
|
@@ -1,19 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger interface used across EVM modules.
|
|
3
|
+
*
|
|
4
|
+
* @category Internal/Utils
|
|
5
|
+
*/
|
|
1
6
|
export type LoggerType = {
|
|
2
7
|
debug: (msg: string, ...args: any[]) => void;
|
|
3
8
|
info: (msg: string, ...args: any[]) => void;
|
|
4
9
|
warn: (msg: string, ...args: any[]) => void;
|
|
5
10
|
error: (msg: string, ...args: any[]) => void;
|
|
6
11
|
};
|
|
12
|
+
/**
|
|
13
|
+
* Returns a promise that resolves after `timeoutMillis` unless aborted first.
|
|
14
|
+
*
|
|
15
|
+
* @category Internal/Utils
|
|
16
|
+
*/
|
|
7
17
|
export declare function timeoutPromise(timeoutMillis: number, abortSignal?: AbortSignal): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Wraps an async executor so it runs once at a time and reuses the same promise.
|
|
20
|
+
*
|
|
21
|
+
* @category Internal/Utils
|
|
22
|
+
*/
|
|
8
23
|
export declare function onceAsync<T>(executor: () => Promise<T>): () => Promise<T>;
|
|
24
|
+
/**
|
|
25
|
+
* Creates a prefixed logger that honors the global `atomiqLogLevel`.
|
|
26
|
+
*
|
|
27
|
+
* @category Internal/Utils
|
|
28
|
+
*/
|
|
9
29
|
export declare function getLogger(prefix: string): LoggerType;
|
|
30
|
+
/**
|
|
31
|
+
* Retries an async function using the provided retry policy.
|
|
32
|
+
*
|
|
33
|
+
* @category Internal/Utils
|
|
34
|
+
*/
|
|
10
35
|
export declare function tryWithRetries<T>(func: () => Promise<T>, retryPolicy?: {
|
|
11
36
|
maxRetries?: number;
|
|
12
37
|
delay?: number;
|
|
13
38
|
exponential?: boolean;
|
|
14
39
|
}, errorAllowed?: (e: any) => boolean, abortSignal?: AbortSignal): Promise<T>;
|
|
40
|
+
/**
|
|
41
|
+
* Reverses byte order of a 32-bit unsigned integer.
|
|
42
|
+
*
|
|
43
|
+
* @category Internal/Utils
|
|
44
|
+
*/
|
|
15
45
|
export declare function uint32ReverseEndianness(value: number): number;
|
|
46
|
+
/**
|
|
47
|
+
* Returns the greater of two bigint values.
|
|
48
|
+
*
|
|
49
|
+
* @category Internal/Utils
|
|
50
|
+
*/
|
|
16
51
|
export declare function bigIntMax(a: bigint, b: bigint): bigint;
|
|
52
|
+
/**
|
|
53
|
+
* Ethers.js error codes considered recoverable for retry logic.
|
|
54
|
+
*
|
|
55
|
+
* @category Internal/Utils
|
|
56
|
+
*/
|
|
17
57
|
export declare const allowedEthersErrorCodes: Set<string>;
|
|
58
|
+
/**
|
|
59
|
+
* JSON-RPC error numbers considered recoverable for retry logic.
|
|
60
|
+
*
|
|
61
|
+
* @category Internal/Utils
|
|
62
|
+
*/
|
|
18
63
|
export declare const allowedEthersErrorNumbers: Set<number>;
|
|
64
|
+
/**
|
|
65
|
+
* RPC error messages considered recoverable for retry logic.
|
|
66
|
+
*
|
|
67
|
+
* @category Internal/Utils
|
|
68
|
+
*/
|
|
19
69
|
export declare const allowedEthersErrorMessages: Set<string>;
|
package/dist/utils/Utils.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.allowedEthersErrorMessages = exports.allowedEthersErrorNumbers = exports.allowedEthersErrorCodes = exports.bigIntMax = exports.uint32ReverseEndianness = exports.tryWithRetries = exports.getLogger = exports.onceAsync = exports.timeoutPromise = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Returns a promise that resolves after `timeoutMillis` unless aborted first.
|
|
6
|
+
*
|
|
7
|
+
* @category Internal/Utils
|
|
8
|
+
*/
|
|
4
9
|
function timeoutPromise(timeoutMillis, abortSignal) {
|
|
5
10
|
return new Promise((resolve, reject) => {
|
|
6
11
|
const timeout = setTimeout(resolve, timeoutMillis);
|
|
@@ -12,6 +17,11 @@ function timeoutPromise(timeoutMillis, abortSignal) {
|
|
|
12
17
|
});
|
|
13
18
|
}
|
|
14
19
|
exports.timeoutPromise = timeoutPromise;
|
|
20
|
+
/**
|
|
21
|
+
* Wraps an async executor so it runs once at a time and reuses the same promise.
|
|
22
|
+
*
|
|
23
|
+
* @category Internal/Utils
|
|
24
|
+
*/
|
|
15
25
|
function onceAsync(executor) {
|
|
16
26
|
let promise;
|
|
17
27
|
return () => {
|
|
@@ -25,6 +35,11 @@ function onceAsync(executor) {
|
|
|
25
35
|
};
|
|
26
36
|
}
|
|
27
37
|
exports.onceAsync = onceAsync;
|
|
38
|
+
/**
|
|
39
|
+
* Creates a prefixed logger that honors the global `atomiqLogLevel`.
|
|
40
|
+
*
|
|
41
|
+
* @category Internal/Utils
|
|
42
|
+
*/
|
|
28
43
|
function getLogger(prefix) {
|
|
29
44
|
return {
|
|
30
45
|
debug: (msg, ...args) => global.atomiqLogLevel >= 3 && console.debug(prefix + msg, ...args),
|
|
@@ -35,6 +50,11 @@ function getLogger(prefix) {
|
|
|
35
50
|
}
|
|
36
51
|
exports.getLogger = getLogger;
|
|
37
52
|
const logger = getLogger("Utils: ");
|
|
53
|
+
/**
|
|
54
|
+
* Retries an async function using the provided retry policy.
|
|
55
|
+
*
|
|
56
|
+
* @category Internal/Utils
|
|
57
|
+
*/
|
|
38
58
|
async function tryWithRetries(func, retryPolicy, errorAllowed, abortSignal) {
|
|
39
59
|
retryPolicy = retryPolicy || {};
|
|
40
60
|
retryPolicy.maxRetries = retryPolicy.maxRetries || 5;
|
|
@@ -61,6 +81,11 @@ async function tryWithRetries(func, retryPolicy, errorAllowed, abortSignal) {
|
|
|
61
81
|
throw err;
|
|
62
82
|
}
|
|
63
83
|
exports.tryWithRetries = tryWithRetries;
|
|
84
|
+
/**
|
|
85
|
+
* Reverses byte order of a 32-bit unsigned integer.
|
|
86
|
+
*
|
|
87
|
+
* @category Internal/Utils
|
|
88
|
+
*/
|
|
64
89
|
function uint32ReverseEndianness(value) {
|
|
65
90
|
const valueBN = BigInt(value);
|
|
66
91
|
return Number(((valueBN & 0xffn) << 24n) |
|
|
@@ -69,16 +94,31 @@ function uint32ReverseEndianness(value) {
|
|
|
69
94
|
((valueBN >> 24n) & 0xffn));
|
|
70
95
|
}
|
|
71
96
|
exports.uint32ReverseEndianness = uint32ReverseEndianness;
|
|
97
|
+
/**
|
|
98
|
+
* Returns the greater of two bigint values.
|
|
99
|
+
*
|
|
100
|
+
* @category Internal/Utils
|
|
101
|
+
*/
|
|
72
102
|
function bigIntMax(a, b) {
|
|
73
103
|
return a > b ? a : b;
|
|
74
104
|
}
|
|
75
105
|
exports.bigIntMax = bigIntMax;
|
|
106
|
+
/**
|
|
107
|
+
* Ethers.js error codes considered recoverable for retry logic.
|
|
108
|
+
*
|
|
109
|
+
* @category Internal/Utils
|
|
110
|
+
*/
|
|
76
111
|
exports.allowedEthersErrorCodes = new Set([
|
|
77
112
|
"NOT_IMPLEMENTED", "UNSUPPORTED_OPERATION", "BAD_DATA",
|
|
78
113
|
"NUMERIC_FAULT",
|
|
79
114
|
"INVALID_ARGUMENT", "MISSING_ARGUMENT", "UNEXPECTED_ARGUMENT", "VALUE_MISMATCH",
|
|
80
115
|
"CALL_EXCEPTION", "NONCE_EXPIRED", "REPLACEMENT_UNDERPRICED", "TRANSACTION_REPLACED", "UNCONFIGURED_NAME", "OFFCHAIN_FAULT", "ACTION_REJECTED"
|
|
81
116
|
]);
|
|
117
|
+
/**
|
|
118
|
+
* JSON-RPC error numbers considered recoverable for retry logic.
|
|
119
|
+
*
|
|
120
|
+
* @category Internal/Utils
|
|
121
|
+
*/
|
|
82
122
|
exports.allowedEthersErrorNumbers = new Set([
|
|
83
123
|
3,
|
|
84
124
|
-32700,
|
|
@@ -94,6 +134,11 @@ exports.allowedEthersErrorNumbers = new Set([
|
|
|
94
134
|
// -32005, //Limit exceeded
|
|
95
135
|
-32006 //JSON-RPC version not supported
|
|
96
136
|
]);
|
|
137
|
+
/**
|
|
138
|
+
* RPC error messages considered recoverable for retry logic.
|
|
139
|
+
*
|
|
140
|
+
* @category Internal/Utils
|
|
141
|
+
*/
|
|
97
142
|
exports.allowedEthersErrorMessages = new Set([
|
|
98
143
|
"already known"
|
|
99
144
|
]);
|
package/node/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "../dist/node";
|
package/node/index.js
ADDED
package/package.json
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atomiqlabs/chain-evm",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"description": "EVM specific base implementation",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types:": "./dist/index.d.ts",
|
|
7
7
|
"scripts": {
|
|
8
|
+
"build": "npx -y -p typescript@4.9 tsc",
|
|
8
9
|
"test": "echo \"Error: no test specified\" && exit 1",
|
|
9
10
|
"build:ts4": "npx -p typescript@4.9 tsc --noEmit",
|
|
10
11
|
"build:ts5": "npx -p typescript@5.3 tsc --noEmit"
|
|
11
12
|
},
|
|
12
13
|
"files": [
|
|
13
14
|
"/dist",
|
|
14
|
-
"/src"
|
|
15
|
+
"/src",
|
|
16
|
+
"/node"
|
|
15
17
|
],
|
|
16
18
|
"keywords": [
|
|
17
19
|
"EVM",
|
|
@@ -25,7 +27,7 @@
|
|
|
25
27
|
"author": "adambor",
|
|
26
28
|
"license": "Apache-2.0",
|
|
27
29
|
"dependencies": {
|
|
28
|
-
"@atomiqlabs/base": "^13.
|
|
30
|
+
"@atomiqlabs/base": "^13.2.0",
|
|
29
31
|
"@noble/hashes": "^1.8.0",
|
|
30
32
|
"@scure/btc-signer": "^1.6.0",
|
|
31
33
|
"buffer": "6.0.3",
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import {JsonRpcApiProvider} from "ethers";
|
|
2
|
+
import {EVMConfiguration, EVMRetryPolicy} from "../evm/chain/EVMChainInterface";
|
|
3
|
+
import {ChainSwapType} from "@atomiqlabs/base";
|
|
4
|
+
import {EVMFees} from "../evm/chain/modules/EVMFees";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Generic options for an EVM chain
|
|
8
|
+
*
|
|
9
|
+
* @category Chain Interface
|
|
10
|
+
*/
|
|
11
|
+
export type EVMOptions<C extends string, F extends EVMFees = EVMFees> = {
|
|
12
|
+
/**
|
|
13
|
+
* EVM RPC URL or {@link JsonRpcApiProvider} object to use for EVM network access
|
|
14
|
+
*/
|
|
15
|
+
rpcUrl: string | JsonRpcApiProvider,
|
|
16
|
+
/**
|
|
17
|
+
* Retry policy for the RPC calls
|
|
18
|
+
*/
|
|
19
|
+
retryPolicy?: EVMRetryPolicy,
|
|
20
|
+
/**
|
|
21
|
+
* Network type for the EVM chain
|
|
22
|
+
*/
|
|
23
|
+
chainType?: C,
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Contract address of the Escrow Manager contract, uses canonical deployment by default
|
|
27
|
+
*/
|
|
28
|
+
swapContract?: string,
|
|
29
|
+
/**
|
|
30
|
+
* Optional Escrow Manager contract deployment height, which acts as genesis when querying events
|
|
31
|
+
*/
|
|
32
|
+
swapContractDeploymentHeight?: number,
|
|
33
|
+
/**
|
|
34
|
+
* Contract address of the BTC Relay contract, uses canonical deployment by default
|
|
35
|
+
*/
|
|
36
|
+
btcRelayContract?: string,
|
|
37
|
+
/**
|
|
38
|
+
* Optional BTC Relay contract deployment height, which acts as genesis when querying events
|
|
39
|
+
*/
|
|
40
|
+
btcRelayDeploymentHeight?: number,
|
|
41
|
+
/**
|
|
42
|
+
* Contract address of the UTXO-controlled vault (SPV Vault manager) contract, uses canonical deployment by default
|
|
43
|
+
*/
|
|
44
|
+
spvVaultContract?: string,
|
|
45
|
+
/**
|
|
46
|
+
* Optional UTXO-controlled vault (SPV Vault manager) contract deployment height, which acts as genesis when querying events
|
|
47
|
+
*/
|
|
48
|
+
spvVaultDeploymentHeight?: number,
|
|
49
|
+
/**
|
|
50
|
+
* Contract addresses of the refund and claim handlers, uses canonical deployment by default
|
|
51
|
+
*/
|
|
52
|
+
handlerContracts?: {
|
|
53
|
+
refund?: {
|
|
54
|
+
timelock?: string
|
|
55
|
+
},
|
|
56
|
+
claim?: {
|
|
57
|
+
[type in ChainSwapType]?: string
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* EVM network fee API
|
|
63
|
+
*/
|
|
64
|
+
fees?: F,
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* EVM configuration
|
|
68
|
+
*/
|
|
69
|
+
evmConfig?: Partial<Omit<EVMConfiguration, "safeBlockTag" | "finalizedBlockTag" | "finalityCheckStrategy">>
|
|
70
|
+
}
|