@atomiqlabs/chain-evm 1.0.0-dev.38 → 1.0.0-dev.40
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/LICENSE +201 -201
- package/dist/chains/botanix/BotanixChainType.d.ts +13 -0
- package/dist/chains/botanix/BotanixChainType.js +2 -0
- package/dist/chains/botanix/BotanixInitializer.d.ts +30 -0
- package/dist/chains/botanix/BotanixInitializer.js +117 -0
- package/dist/chains/citrea/CitreaBtcRelay.d.ts +21 -21
- package/dist/chains/citrea/CitreaBtcRelay.js +43 -43
- package/dist/chains/citrea/CitreaChainType.d.ts +13 -13
- package/dist/chains/citrea/CitreaChainType.js +2 -2
- package/dist/chains/citrea/CitreaFees.d.ts +29 -29
- package/dist/chains/citrea/CitreaFees.js +67 -67
- package/dist/chains/citrea/CitreaInitializer.d.ts +30 -30
- package/dist/chains/citrea/CitreaInitializer.js +127 -127
- package/dist/chains/citrea/CitreaSpvVaultContract.d.ts +15 -15
- package/dist/chains/citrea/CitreaSpvVaultContract.js +74 -74
- package/dist/chains/citrea/CitreaSwapContract.d.ts +22 -22
- package/dist/chains/citrea/CitreaSwapContract.js +96 -96
- package/dist/chains/citrea/CitreaTokens.d.ts +9 -9
- package/dist/chains/citrea/CitreaTokens.js +20 -20
- package/dist/evm/btcrelay/BtcRelayAbi.d.ts +198 -198
- package/dist/evm/btcrelay/BtcRelayAbi.js +261 -261
- package/dist/evm/btcrelay/BtcRelayTypechain.d.ts +172 -172
- package/dist/evm/btcrelay/BtcRelayTypechain.js +2 -2
- package/dist/evm/btcrelay/EVMBtcRelay.d.ts +195 -195
- package/dist/evm/btcrelay/EVMBtcRelay.js +423 -423
- package/dist/evm/btcrelay/headers/EVMBtcHeader.d.ts +33 -33
- package/dist/evm/btcrelay/headers/EVMBtcHeader.js +84 -84
- package/dist/evm/btcrelay/headers/EVMBtcStoredHeader.d.ts +56 -56
- package/dist/evm/btcrelay/headers/EVMBtcStoredHeader.js +123 -123
- package/dist/evm/chain/EVMChainInterface.d.ts +51 -51
- package/dist/evm/chain/EVMChainInterface.js +89 -89
- package/dist/evm/chain/EVMModule.d.ts +9 -9
- package/dist/evm/chain/EVMModule.js +13 -13
- package/dist/evm/chain/modules/ERC20Abi.d.ts +168 -168
- package/dist/evm/chain/modules/ERC20Abi.js +225 -225
- package/dist/evm/chain/modules/EVMAddresses.d.ts +10 -10
- package/dist/evm/chain/modules/EVMAddresses.js +30 -30
- package/dist/evm/chain/modules/EVMBlocks.d.ts +20 -20
- package/dist/evm/chain/modules/EVMBlocks.js +64 -64
- package/dist/evm/chain/modules/EVMEvents.d.ts +36 -36
- package/dist/evm/chain/modules/EVMEvents.js +122 -122
- package/dist/evm/chain/modules/EVMFees.d.ts +36 -36
- package/dist/evm/chain/modules/EVMFees.js +73 -73
- package/dist/evm/chain/modules/EVMSignatures.d.ts +29 -29
- package/dist/evm/chain/modules/EVMSignatures.js +68 -68
- package/dist/evm/chain/modules/EVMTokens.d.ts +70 -70
- package/dist/evm/chain/modules/EVMTokens.js +142 -142
- package/dist/evm/chain/modules/EVMTransactions.d.ts +89 -89
- package/dist/evm/chain/modules/EVMTransactions.js +230 -230
- package/dist/evm/contract/EVMContractBase.d.ts +22 -22
- package/dist/evm/contract/EVMContractBase.js +34 -34
- package/dist/evm/contract/EVMContractModule.d.ts +8 -8
- package/dist/evm/contract/EVMContractModule.js +11 -11
- package/dist/evm/contract/modules/EVMContractEvents.d.ts +42 -42
- package/dist/evm/contract/modules/EVMContractEvents.js +75 -75
- package/dist/evm/events/EVMChainEvents.d.ts +22 -22
- package/dist/evm/events/EVMChainEvents.js +67 -67
- package/dist/evm/events/EVMChainEventsBrowser.d.ts +86 -86
- package/dist/evm/events/EVMChainEventsBrowser.js +294 -294
- package/dist/evm/spv_swap/EVMSpvVaultContract.d.ts +78 -78
- package/dist/evm/spv_swap/EVMSpvVaultContract.js +478 -478
- package/dist/evm/spv_swap/EVMSpvVaultData.d.ts +39 -39
- package/dist/evm/spv_swap/EVMSpvVaultData.js +180 -180
- package/dist/evm/spv_swap/EVMSpvWithdrawalData.d.ts +19 -19
- package/dist/evm/spv_swap/EVMSpvWithdrawalData.js +55 -55
- package/dist/evm/spv_swap/SpvVaultContractAbi.d.ts +91 -91
- package/dist/evm/spv_swap/SpvVaultContractAbi.js +849 -849
- package/dist/evm/spv_swap/SpvVaultContractTypechain.d.ts +450 -450
- package/dist/evm/spv_swap/SpvVaultContractTypechain.js +2 -2
- package/dist/evm/swaps/EVMSwapContract.d.ts +193 -193
- package/dist/evm/swaps/EVMSwapContract.js +378 -378
- package/dist/evm/swaps/EVMSwapData.d.ts +66 -66
- package/dist/evm/swaps/EVMSwapData.js +260 -260
- package/dist/evm/swaps/EVMSwapModule.d.ts +9 -9
- package/dist/evm/swaps/EVMSwapModule.js +11 -11
- package/dist/evm/swaps/EscrowManagerAbi.d.ts +120 -120
- package/dist/evm/swaps/EscrowManagerAbi.js +985 -985
- package/dist/evm/swaps/EscrowManagerTypechain.d.ts +475 -475
- package/dist/evm/swaps/EscrowManagerTypechain.js +2 -2
- package/dist/evm/swaps/handlers/IHandler.d.ts +13 -13
- package/dist/evm/swaps/handlers/IHandler.js +2 -2
- package/dist/evm/swaps/handlers/claim/ClaimHandlers.d.ts +10 -10
- package/dist/evm/swaps/handlers/claim/ClaimHandlers.js +13 -13
- package/dist/evm/swaps/handlers/claim/HashlockClaimHandler.d.ts +20 -20
- package/dist/evm/swaps/handlers/claim/HashlockClaimHandler.js +39 -39
- package/dist/evm/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.d.ts +24 -24
- package/dist/evm/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.js +59 -59
- package/dist/evm/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.d.ts +25 -25
- package/dist/evm/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.js +51 -51
- package/dist/evm/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.d.ts +21 -21
- package/dist/evm/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.js +28 -28
- package/dist/evm/swaps/handlers/claim/btc/IBitcoinClaimHandler.d.ts +48 -48
- package/dist/evm/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +63 -63
- package/dist/evm/swaps/handlers/refund/TimelockRefundHandler.d.ts +17 -17
- package/dist/evm/swaps/handlers/refund/TimelockRefundHandler.js +28 -28
- package/dist/evm/swaps/modules/EVMLpVault.d.ts +69 -69
- package/dist/evm/swaps/modules/EVMLpVault.js +134 -134
- package/dist/evm/swaps/modules/EVMSwapClaim.d.ts +54 -54
- package/dist/evm/swaps/modules/EVMSwapClaim.js +137 -137
- package/dist/evm/swaps/modules/EVMSwapInit.d.ts +88 -88
- package/dist/evm/swaps/modules/EVMSwapInit.js +274 -274
- package/dist/evm/swaps/modules/EVMSwapRefund.d.ts +62 -62
- package/dist/evm/swaps/modules/EVMSwapRefund.js +167 -167
- package/dist/evm/typechain/common.d.ts +50 -50
- package/dist/evm/typechain/common.js +2 -2
- package/dist/evm/wallet/EVMSigner.d.ts +10 -10
- package/dist/evm/wallet/EVMSigner.js +17 -17
- package/dist/index.d.ts +40 -38
- package/dist/index.js +56 -54
- package/dist/utils/Utils.d.ts +15 -15
- package/dist/utils/Utils.js +71 -71
- package/package.json +37 -37
- package/src/chains/botanix/BotanixChainType.ts +28 -0
- package/src/chains/botanix/BotanixInitializer.ts +164 -0
- package/src/chains/citrea/CitreaBtcRelay.ts +57 -57
- package/src/chains/citrea/CitreaChainType.ts +28 -28
- package/src/chains/citrea/CitreaFees.ts +77 -77
- package/src/chains/citrea/CitreaInitializer.ts +178 -178
- package/src/chains/citrea/CitreaSpvVaultContract.ts +75 -75
- package/src/chains/citrea/CitreaSwapContract.ts +102 -102
- package/src/chains/citrea/CitreaTokens.ts +21 -21
- package/src/evm/btcrelay/BtcRelayAbi.ts +258 -258
- package/src/evm/btcrelay/BtcRelayTypechain.ts +371 -371
- package/src/evm/btcrelay/EVMBtcRelay.ts +522 -522
- package/src/evm/btcrelay/headers/EVMBtcHeader.ts +109 -109
- package/src/evm/btcrelay/headers/EVMBtcStoredHeader.ts +152 -152
- package/src/evm/chain/EVMChainInterface.ts +155 -155
- package/src/evm/chain/EVMModule.ts +21 -21
- package/src/evm/chain/modules/ERC20Abi.ts +222 -222
- package/src/evm/chain/modules/EVMAddresses.ts +28 -28
- package/src/evm/chain/modules/EVMBlocks.ts +75 -75
- package/src/evm/chain/modules/EVMEvents.ts +139 -139
- package/src/evm/chain/modules/EVMFees.ts +104 -104
- package/src/evm/chain/modules/EVMSignatures.ts +76 -76
- package/src/evm/chain/modules/EVMTokens.ts +155 -155
- package/src/evm/chain/modules/EVMTransactions.ts +257 -257
- package/src/evm/contract/EVMContractBase.ts +63 -63
- package/src/evm/contract/EVMContractModule.ts +16 -16
- package/src/evm/contract/modules/EVMContractEvents.ts +102 -102
- package/src/evm/events/EVMChainEvents.ts +81 -81
- package/src/evm/events/EVMChainEventsBrowser.ts +390 -390
- package/src/evm/spv_swap/EVMSpvVaultContract.ts +608 -608
- package/src/evm/spv_swap/EVMSpvVaultData.ts +224 -224
- package/src/evm/spv_swap/EVMSpvWithdrawalData.ts +70 -70
- package/src/evm/spv_swap/SpvVaultContractAbi.ts +846 -846
- package/src/evm/spv_swap/SpvVaultContractTypechain.ts +685 -685
- package/src/evm/swaps/EVMSwapContract.ts +600 -600
- package/src/evm/swaps/EVMSwapData.ts +378 -378
- package/src/evm/swaps/EVMSwapModule.ts +16 -16
- package/src/evm/swaps/EscrowManagerAbi.ts +982 -982
- package/src/evm/swaps/EscrowManagerTypechain.ts +723 -723
- package/src/evm/swaps/handlers/IHandler.ts +17 -17
- package/src/evm/swaps/handlers/claim/ClaimHandlers.ts +20 -20
- package/src/evm/swaps/handlers/claim/HashlockClaimHandler.ts +46 -46
- package/src/evm/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.ts +82 -82
- package/src/evm/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.ts +76 -76
- package/src/evm/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.ts +46 -46
- package/src/evm/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +115 -115
- package/src/evm/swaps/handlers/refund/TimelockRefundHandler.ts +37 -37
- package/src/evm/swaps/modules/EVMLpVault.ts +154 -154
- package/src/evm/swaps/modules/EVMSwapClaim.ts +172 -172
- package/src/evm/swaps/modules/EVMSwapInit.ts +328 -328
- package/src/evm/swaps/modules/EVMSwapRefund.ts +229 -229
- package/src/evm/typechain/common.ts +131 -131
- package/src/evm/wallet/EVMSigner.ts +25 -25
- package/src/index.ts +48 -45
- package/src/utils/Utils.ts +81 -81
|
@@ -1,58 +1,58 @@
|
|
|
1
|
-
import {EVMBtcRelay} from "../../evm/btcrelay/EVMBtcRelay";
|
|
2
|
-
import {BtcBlock} from "@atomiqlabs/base";
|
|
3
|
-
import {getLogger} from "../../utils/Utils";
|
|
4
|
-
import {CitreaFees} from "./CitreaFees";
|
|
5
|
-
|
|
6
|
-
const logger = getLogger("CitreaBtcRelay: ");
|
|
7
|
-
|
|
8
|
-
export class CitreaBtcRelay<B extends BtcBlock> extends EVMBtcRelay<B> {
|
|
9
|
-
|
|
10
|
-
public static StateDiffSize = {
|
|
11
|
-
STATE_DIFF_PER_BLOCKHEADER: 22,
|
|
12
|
-
STATE_DIFF_BASE: 30
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Estimate required synchronization fee (worst case) to synchronize btc relay to the required blockheight
|
|
17
|
-
*
|
|
18
|
-
* @param requiredBlockheight
|
|
19
|
-
* @param feeRate
|
|
20
|
-
*/
|
|
21
|
-
public async estimateSynchronizeFee(requiredBlockheight: number, feeRate?: string): Promise<bigint> {
|
|
22
|
-
feeRate ??= await this.Chain.Fees.getFeeRate();
|
|
23
|
-
const tipData = await this.getTipData();
|
|
24
|
-
const currBlockheight = tipData.blockheight;
|
|
25
|
-
|
|
26
|
-
const blockheightDelta = requiredBlockheight-currBlockheight;
|
|
27
|
-
|
|
28
|
-
if(blockheightDelta<=0) return 0n;
|
|
29
|
-
|
|
30
|
-
const numTxs = Math.ceil(blockheightDelta / this.maxHeadersPerTx);
|
|
31
|
-
|
|
32
|
-
const synchronizationFee = (BigInt(blockheightDelta) * await this.getFeePerBlock(feeRate))
|
|
33
|
-
+ CitreaFees.getGasFee(
|
|
34
|
-
EVMBtcRelay.GasCosts.GAS_BASE_MAIN * numTxs,
|
|
35
|
-
feeRate,
|
|
36
|
-
CitreaBtcRelay.StateDiffSize.STATE_DIFF_BASE * numTxs
|
|
37
|
-
);
|
|
38
|
-
logger.debug("estimateSynchronizeFee(): required blockheight: "+requiredBlockheight+
|
|
39
|
-
" blockheight delta: "+blockheightDelta+" fee: "+synchronizationFee.toString(10));
|
|
40
|
-
|
|
41
|
-
return synchronizationFee;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Returns fee required (in native token) to synchronize a single block to btc relay
|
|
46
|
-
*
|
|
47
|
-
* @param feeRate
|
|
48
|
-
*/
|
|
49
|
-
public async getFeePerBlock(feeRate?: string): Promise<bigint> {
|
|
50
|
-
feeRate ??= await this.Chain.Fees.getFeeRate();
|
|
51
|
-
return CitreaFees.getGasFee(
|
|
52
|
-
EVMBtcRelay.GasCosts.GAS_PER_BLOCKHEADER,
|
|
53
|
-
feeRate,
|
|
54
|
-
CitreaBtcRelay.StateDiffSize.STATE_DIFF_PER_BLOCKHEADER
|
|
55
|
-
);
|
|
56
|
-
}
|
|
57
|
-
|
|
1
|
+
import {EVMBtcRelay} from "../../evm/btcrelay/EVMBtcRelay";
|
|
2
|
+
import {BtcBlock} from "@atomiqlabs/base";
|
|
3
|
+
import {getLogger} from "../../utils/Utils";
|
|
4
|
+
import {CitreaFees} from "./CitreaFees";
|
|
5
|
+
|
|
6
|
+
const logger = getLogger("CitreaBtcRelay: ");
|
|
7
|
+
|
|
8
|
+
export class CitreaBtcRelay<B extends BtcBlock> extends EVMBtcRelay<B> {
|
|
9
|
+
|
|
10
|
+
public static StateDiffSize = {
|
|
11
|
+
STATE_DIFF_PER_BLOCKHEADER: 22,
|
|
12
|
+
STATE_DIFF_BASE: 30
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Estimate required synchronization fee (worst case) to synchronize btc relay to the required blockheight
|
|
17
|
+
*
|
|
18
|
+
* @param requiredBlockheight
|
|
19
|
+
* @param feeRate
|
|
20
|
+
*/
|
|
21
|
+
public async estimateSynchronizeFee(requiredBlockheight: number, feeRate?: string): Promise<bigint> {
|
|
22
|
+
feeRate ??= await this.Chain.Fees.getFeeRate();
|
|
23
|
+
const tipData = await this.getTipData();
|
|
24
|
+
const currBlockheight = tipData.blockheight;
|
|
25
|
+
|
|
26
|
+
const blockheightDelta = requiredBlockheight-currBlockheight;
|
|
27
|
+
|
|
28
|
+
if(blockheightDelta<=0) return 0n;
|
|
29
|
+
|
|
30
|
+
const numTxs = Math.ceil(blockheightDelta / this.maxHeadersPerTx);
|
|
31
|
+
|
|
32
|
+
const synchronizationFee = (BigInt(blockheightDelta) * await this.getFeePerBlock(feeRate))
|
|
33
|
+
+ CitreaFees.getGasFee(
|
|
34
|
+
EVMBtcRelay.GasCosts.GAS_BASE_MAIN * numTxs,
|
|
35
|
+
feeRate,
|
|
36
|
+
CitreaBtcRelay.StateDiffSize.STATE_DIFF_BASE * numTxs
|
|
37
|
+
);
|
|
38
|
+
logger.debug("estimateSynchronizeFee(): required blockheight: "+requiredBlockheight+
|
|
39
|
+
" blockheight delta: "+blockheightDelta+" fee: "+synchronizationFee.toString(10));
|
|
40
|
+
|
|
41
|
+
return synchronizationFee;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Returns fee required (in native token) to synchronize a single block to btc relay
|
|
46
|
+
*
|
|
47
|
+
* @param feeRate
|
|
48
|
+
*/
|
|
49
|
+
public async getFeePerBlock(feeRate?: string): Promise<bigint> {
|
|
50
|
+
feeRate ??= await this.Chain.Fees.getFeeRate();
|
|
51
|
+
return CitreaFees.getGasFee(
|
|
52
|
+
EVMBtcRelay.GasCosts.GAS_PER_BLOCKHEADER,
|
|
53
|
+
feeRate,
|
|
54
|
+
CitreaBtcRelay.StateDiffSize.STATE_DIFF_PER_BLOCKHEADER
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
58
|
}
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
import {ChainType} from "@atomiqlabs/base";
|
|
2
|
-
import {EVMPreFetchVerification} from "../../evm/swaps/modules/EVMSwapInit";
|
|
3
|
-
import {EVMTx} from "../../evm/chain/modules/EVMTransactions";
|
|
4
|
-
import {EVMSigner} from "../../evm/wallet/EVMSigner";
|
|
5
|
-
import {EVMSwapData} from "../../evm/swaps/EVMSwapData";
|
|
6
|
-
import {EVMChainInterface} from "../../evm/chain/EVMChainInterface";
|
|
7
|
-
import {EVMChainEventsBrowser} from "../../evm/events/EVMChainEventsBrowser";
|
|
8
|
-
import { EVMSpvVaultData } from "../../evm/spv_swap/EVMSpvVaultData";
|
|
9
|
-
import { EVMSpvWithdrawalData } from "../../evm/spv_swap/EVMSpvWithdrawalData";
|
|
10
|
-
import {CitreaSwapContract} from "./CitreaSwapContract";
|
|
11
|
-
import {CitreaBtcRelay} from "./CitreaBtcRelay";
|
|
12
|
-
import {CitreaSpvVaultContract} from "./CitreaSpvVaultContract";
|
|
13
|
-
|
|
14
|
-
export type CitreaChainType = ChainType<
|
|
15
|
-
"CITREA",
|
|
16
|
-
never,
|
|
17
|
-
EVMPreFetchVerification,
|
|
18
|
-
EVMTx,
|
|
19
|
-
EVMSigner,
|
|
20
|
-
EVMSwapData,
|
|
21
|
-
CitreaSwapContract,
|
|
22
|
-
EVMChainInterface<"CITREA", 5115>,
|
|
23
|
-
EVMChainEventsBrowser,
|
|
24
|
-
CitreaBtcRelay<any>,
|
|
25
|
-
EVMSpvVaultData,
|
|
26
|
-
EVMSpvWithdrawalData,
|
|
27
|
-
CitreaSpvVaultContract
|
|
28
|
-
>;
|
|
1
|
+
import {ChainType} from "@atomiqlabs/base";
|
|
2
|
+
import {EVMPreFetchVerification} from "../../evm/swaps/modules/EVMSwapInit";
|
|
3
|
+
import {EVMTx} from "../../evm/chain/modules/EVMTransactions";
|
|
4
|
+
import {EVMSigner} from "../../evm/wallet/EVMSigner";
|
|
5
|
+
import {EVMSwapData} from "../../evm/swaps/EVMSwapData";
|
|
6
|
+
import {EVMChainInterface} from "../../evm/chain/EVMChainInterface";
|
|
7
|
+
import {EVMChainEventsBrowser} from "../../evm/events/EVMChainEventsBrowser";
|
|
8
|
+
import { EVMSpvVaultData } from "../../evm/spv_swap/EVMSpvVaultData";
|
|
9
|
+
import { EVMSpvWithdrawalData } from "../../evm/spv_swap/EVMSpvWithdrawalData";
|
|
10
|
+
import {CitreaSwapContract} from "./CitreaSwapContract";
|
|
11
|
+
import {CitreaBtcRelay} from "./CitreaBtcRelay";
|
|
12
|
+
import {CitreaSpvVaultContract} from "./CitreaSpvVaultContract";
|
|
13
|
+
|
|
14
|
+
export type CitreaChainType = ChainType<
|
|
15
|
+
"CITREA",
|
|
16
|
+
never,
|
|
17
|
+
EVMPreFetchVerification,
|
|
18
|
+
EVMTx,
|
|
19
|
+
EVMSigner,
|
|
20
|
+
EVMSwapData,
|
|
21
|
+
CitreaSwapContract,
|
|
22
|
+
EVMChainInterface<"CITREA", 5115>,
|
|
23
|
+
EVMChainEventsBrowser,
|
|
24
|
+
CitreaBtcRelay<any>,
|
|
25
|
+
EVMSpvVaultData,
|
|
26
|
+
EVMSpvWithdrawalData,
|
|
27
|
+
CitreaSpvVaultContract
|
|
28
|
+
>;
|
|
@@ -1,77 +1,77 @@
|
|
|
1
|
-
import {EVMFees} from "../../evm/chain/modules/EVMFees";
|
|
2
|
-
import {getLogger} from "../../utils/Utils";
|
|
3
|
-
|
|
4
|
-
export class CitreaFees extends EVMFees {
|
|
5
|
-
|
|
6
|
-
public static readonly StateDiffSize = {
|
|
7
|
-
APPROVE_DIFF_SIZE: 40,
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
protected readonly logger = getLogger("CitreaFees: ");
|
|
11
|
-
|
|
12
|
-
private _blockFeeCache: {
|
|
13
|
-
timestamp: number,
|
|
14
|
-
feeRate: Promise<{baseFee: bigint, l1Fee: bigint}>
|
|
15
|
-
} = null;
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Gets evm fee rate
|
|
19
|
-
*
|
|
20
|
-
* @private
|
|
21
|
-
* @returns {Promise<bigint>} L1 gas price denominated in Wei
|
|
22
|
-
*/
|
|
23
|
-
private async __getFeeRate(): Promise<{baseFee: bigint, l1Fee: bigint}> {
|
|
24
|
-
const res = await this.provider.send("eth_getBlockByNumber", ["latest", false]);
|
|
25
|
-
const l1Fee = BigInt(res.l1FeeRate);
|
|
26
|
-
const baseFee = BigInt(res.baseFeePerGas) * this.feeMultiplierPPM / 1_000_000n;
|
|
27
|
-
|
|
28
|
-
this.logger.debug("__getFeeRate(): Base fee rate: "+baseFee.toString(10)+", l1 fee rate: "+l1Fee.toString(10));
|
|
29
|
-
|
|
30
|
-
return {baseFee, l1Fee};
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Gets the gas price with caching, format: <gas price in Wei>;<transaction version: v1/v3>
|
|
35
|
-
*
|
|
36
|
-
* @private
|
|
37
|
-
*/
|
|
38
|
-
public async getFeeRate(): Promise<string> {
|
|
39
|
-
if(this._blockFeeCache==null || Date.now() - this._blockFeeCache.timestamp > this.MAX_FEE_AGE) {
|
|
40
|
-
let obj = {
|
|
41
|
-
timestamp: Date.now(),
|
|
42
|
-
feeRate: null
|
|
43
|
-
};
|
|
44
|
-
obj.feeRate = this.__getFeeRate().catch(e => {
|
|
45
|
-
if(this._blockFeeCache===obj) this._blockFeeCache=null;
|
|
46
|
-
throw e;
|
|
47
|
-
});
|
|
48
|
-
this._blockFeeCache = obj;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
let {baseFee, l1Fee} = await this._blockFeeCache.feeRate;
|
|
52
|
-
if(baseFee>this.maxFeeRatePerGas) baseFee = this.maxFeeRatePerGas;
|
|
53
|
-
|
|
54
|
-
const fee = baseFee.toString(10)+","+this.priorityFee.toString(10)+","+l1Fee.toString(10);
|
|
55
|
-
|
|
56
|
-
this.logger.debug("getFeeRate(): calculated fee: "+fee);
|
|
57
|
-
|
|
58
|
-
return fee;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Calculates the total gas fee paid for a given gas limit and state diff size at a given fee rate
|
|
64
|
-
*
|
|
65
|
-
* @param gas
|
|
66
|
-
* @param stateDiffSize
|
|
67
|
-
* @param feeRate
|
|
68
|
-
*/
|
|
69
|
-
public static getGasFee(gas: number, feeRate: string, stateDiffSize: number = 0): bigint {
|
|
70
|
-
if(feeRate==null) return 0n;
|
|
71
|
-
|
|
72
|
-
const [maxFee, priorityFee, l1StateDiffFee] = feeRate.split(",");
|
|
73
|
-
|
|
74
|
-
return (BigInt(gas) * BigInt(maxFee)) + (BigInt(stateDiffSize) * BigInt(l1StateDiffFee ?? 0n));
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
}
|
|
1
|
+
import {EVMFees} from "../../evm/chain/modules/EVMFees";
|
|
2
|
+
import {getLogger} from "../../utils/Utils";
|
|
3
|
+
|
|
4
|
+
export class CitreaFees extends EVMFees {
|
|
5
|
+
|
|
6
|
+
public static readonly StateDiffSize = {
|
|
7
|
+
APPROVE_DIFF_SIZE: 40,
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
protected readonly logger = getLogger("CitreaFees: ");
|
|
11
|
+
|
|
12
|
+
private _blockFeeCache: {
|
|
13
|
+
timestamp: number,
|
|
14
|
+
feeRate: Promise<{baseFee: bigint, l1Fee: bigint}>
|
|
15
|
+
} = null;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Gets evm fee rate
|
|
19
|
+
*
|
|
20
|
+
* @private
|
|
21
|
+
* @returns {Promise<bigint>} L1 gas price denominated in Wei
|
|
22
|
+
*/
|
|
23
|
+
private async __getFeeRate(): Promise<{baseFee: bigint, l1Fee: bigint}> {
|
|
24
|
+
const res = await this.provider.send("eth_getBlockByNumber", ["latest", false]);
|
|
25
|
+
const l1Fee = BigInt(res.l1FeeRate);
|
|
26
|
+
const baseFee = BigInt(res.baseFeePerGas) * this.feeMultiplierPPM / 1_000_000n;
|
|
27
|
+
|
|
28
|
+
this.logger.debug("__getFeeRate(): Base fee rate: "+baseFee.toString(10)+", l1 fee rate: "+l1Fee.toString(10));
|
|
29
|
+
|
|
30
|
+
return {baseFee, l1Fee};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Gets the gas price with caching, format: <gas price in Wei>;<transaction version: v1/v3>
|
|
35
|
+
*
|
|
36
|
+
* @private
|
|
37
|
+
*/
|
|
38
|
+
public async getFeeRate(): Promise<string> {
|
|
39
|
+
if(this._blockFeeCache==null || Date.now() - this._blockFeeCache.timestamp > this.MAX_FEE_AGE) {
|
|
40
|
+
let obj = {
|
|
41
|
+
timestamp: Date.now(),
|
|
42
|
+
feeRate: null
|
|
43
|
+
};
|
|
44
|
+
obj.feeRate = this.__getFeeRate().catch(e => {
|
|
45
|
+
if(this._blockFeeCache===obj) this._blockFeeCache=null;
|
|
46
|
+
throw e;
|
|
47
|
+
});
|
|
48
|
+
this._blockFeeCache = obj;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
let {baseFee, l1Fee} = await this._blockFeeCache.feeRate;
|
|
52
|
+
if(baseFee>this.maxFeeRatePerGas) baseFee = this.maxFeeRatePerGas;
|
|
53
|
+
|
|
54
|
+
const fee = baseFee.toString(10)+","+this.priorityFee.toString(10)+","+l1Fee.toString(10);
|
|
55
|
+
|
|
56
|
+
this.logger.debug("getFeeRate(): calculated fee: "+fee);
|
|
57
|
+
|
|
58
|
+
return fee;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Calculates the total gas fee paid for a given gas limit and state diff size at a given fee rate
|
|
64
|
+
*
|
|
65
|
+
* @param gas
|
|
66
|
+
* @param stateDiffSize
|
|
67
|
+
* @param feeRate
|
|
68
|
+
*/
|
|
69
|
+
public static getGasFee(gas: number, feeRate: string, stateDiffSize: number = 0): bigint {
|
|
70
|
+
if(feeRate==null) return 0n;
|
|
71
|
+
|
|
72
|
+
const [maxFee, priorityFee, l1StateDiffFee] = feeRate.split(",");
|
|
73
|
+
|
|
74
|
+
return (BigInt(gas) * BigInt(maxFee)) + (BigInt(stateDiffSize) * BigInt(l1StateDiffFee ?? 0n));
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
}
|