@aztec/ethereum 0.0.1-commit.42ee6df9b → 0.0.1-commit.431c48d
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/dest/client.d.ts +19 -3
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +52 -3
- package/dest/config.d.ts +15 -6
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +29 -9
- package/dest/contracts/chain_state_override.d.ts +78 -0
- package/dest/contracts/chain_state_override.d.ts.map +1 -0
- package/dest/contracts/chain_state_override.js +137 -0
- package/dest/contracts/empire_base.d.ts +1 -3
- package/dest/contracts/empire_base.d.ts.map +1 -1
- package/dest/contracts/fee_asset_price_oracle.d.ts +6 -2
- package/dest/contracts/fee_asset_price_oracle.d.ts.map +1 -1
- package/dest/contracts/fee_asset_price_oracle.js +11 -6
- package/dest/contracts/governance.d.ts +135 -35
- package/dest/contracts/governance.d.ts.map +1 -1
- package/dest/contracts/governance.js +226 -15
- package/dest/contracts/governance_proposer.d.ts +33 -4
- package/dest/contracts/governance_proposer.d.ts.map +1 -1
- package/dest/contracts/governance_proposer.js +52 -13
- package/dest/contracts/gse.d.ts +4 -2
- package/dest/contracts/gse.d.ts.map +1 -1
- package/dest/contracts/gse.js +2 -2
- package/dest/contracts/inbox.d.ts +3 -3
- package/dest/contracts/inbox.d.ts.map +1 -1
- package/dest/contracts/inbox.js +9 -3
- package/dest/contracts/index.d.ts +3 -3
- package/dest/contracts/index.d.ts.map +1 -1
- package/dest/contracts/index.js +2 -2
- package/dest/contracts/multicall.d.ts +79 -13
- package/dest/contracts/multicall.d.ts.map +1 -1
- package/dest/contracts/multicall.js +117 -95
- package/dest/contracts/outbox.d.ts +27 -4
- package/dest/contracts/outbox.d.ts.map +1 -1
- package/dest/contracts/outbox.js +34 -7
- package/dest/contracts/rollup.d.ts +5401 -34
- package/dest/contracts/rollup.d.ts.map +1 -1
- package/dest/contracts/rollup.js +271 -119
- package/dest/contracts/slashing_proposer.d.ts +171 -0
- package/dest/contracts/slashing_proposer.d.ts.map +1 -0
- package/dest/contracts/slashing_proposer.js +753 -0
- package/dest/contracts/watch_event.d.ts +36 -0
- package/dest/contracts/watch_event.d.ts.map +1 -0
- package/dest/contracts/watch_event.js +66 -0
- package/dest/deploy_aztec_l1_contracts.d.ts +4 -7
- package/dest/deploy_aztec_l1_contracts.d.ts.map +1 -1
- package/dest/deploy_aztec_l1_contracts.js +15 -8
- package/dest/foundry_binary.d.ts +13 -0
- package/dest/foundry_binary.d.ts.map +1 -0
- package/dest/foundry_binary.js +52 -0
- package/dest/generated/l1-contracts-defaults.d.ts +2 -2
- package/dest/generated/l1-contracts-defaults.js +2 -2
- package/dest/l1_artifacts.d.ts +14941 -16273
- package/dest/l1_artifacts.d.ts.map +1 -1
- package/dest/l1_artifacts.js +9 -24
- package/dest/l1_contract_addresses.d.ts +61 -65
- package/dest/l1_contract_addresses.d.ts.map +1 -1
- package/dest/l1_contract_addresses.js +101 -82
- package/dest/l1_reader.d.ts +3 -5
- package/dest/l1_reader.d.ts.map +1 -1
- package/dest/l1_reader.js +3 -6
- package/dest/l1_tx_utils/config.js +3 -3
- package/dest/l1_tx_utils/l1_tx_utils.d.ts +7 -1
- package/dest/l1_tx_utils/l1_tx_utils.d.ts.map +1 -1
- package/dest/l1_tx_utils/l1_tx_utils.js +82 -29
- package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts +1 -1
- package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts.map +1 -1
- package/dest/l1_tx_utils/readonly_l1_tx_utils.js +49 -19
- package/dest/l1_tx_utils/tx_delayer.d.ts +5 -3
- package/dest/l1_tx_utils/tx_delayer.d.ts.map +1 -1
- package/dest/l1_tx_utils/tx_delayer.js +7 -5
- package/dest/publisher_manager.d.ts +18 -6
- package/dest/publisher_manager.d.ts.map +1 -1
- package/dest/publisher_manager.js +44 -7
- package/dest/queries.d.ts +13 -2
- package/dest/queries.d.ts.map +1 -1
- package/dest/queries.js +62 -3
- package/dest/test/blob_kzg_warmup.d.ts +19 -0
- package/dest/test/blob_kzg_warmup.d.ts.map +1 -0
- package/dest/test/blob_kzg_warmup.js +64 -0
- package/dest/test/chain_monitor.d.ts +34 -2
- package/dest/test/chain_monitor.d.ts.map +1 -1
- package/dest/test/chain_monitor.js +76 -6
- package/dest/test/eth_cheat_codes.d.ts +26 -3
- package/dest/test/eth_cheat_codes.d.ts.map +1 -1
- package/dest/test/eth_cheat_codes.js +61 -40
- package/dest/test/index.d.ts +2 -1
- package/dest/test/index.d.ts.map +1 -1
- package/dest/test/index.js +1 -0
- package/dest/test/recording_rpc_server.d.ts +18 -0
- package/dest/test/recording_rpc_server.d.ts.map +1 -0
- package/dest/test/recording_rpc_server.js +68 -0
- package/dest/test/rollup_cheat_codes.d.ts +60 -3
- package/dest/test/rollup_cheat_codes.d.ts.map +1 -1
- package/dest/test/rollup_cheat_codes.js +86 -7
- package/dest/test/start_anvil.d.ts +1 -1
- package/dest/test/start_anvil.d.ts.map +1 -1
- package/dest/test/start_anvil.js +41 -5
- package/dest/utils.d.ts +9 -2
- package/dest/utils.d.ts.map +1 -1
- package/dest/utils.js +45 -14
- package/package.json +6 -6
- package/src/client.ts +63 -1
- package/src/config.ts +44 -13
- package/src/contracts/chain_state_override.ts +200 -0
- package/src/contracts/empire_base.ts +0 -2
- package/src/contracts/fee_asset_price_oracle.ts +10 -5
- package/src/contracts/governance.ts +310 -10
- package/src/contracts/governance_proposer.ts +56 -13
- package/src/contracts/gse.ts +7 -2
- package/src/contracts/inbox.ts +12 -4
- package/src/contracts/index.ts +2 -2
- package/src/contracts/multicall.ts +179 -105
- package/src/contracts/outbox.ts +42 -8
- package/src/contracts/rollup.ts +302 -119
- package/src/contracts/{tally_slashing_proposer.ts → slashing_proposer.ts} +119 -45
- package/src/contracts/watch_event.ts +110 -0
- package/src/deploy_aztec_l1_contracts.ts +19 -10
- package/src/foundry_binary.ts +57 -0
- package/src/generated/l1-contracts-defaults.ts +2 -2
- package/src/l1_artifacts.ts +12 -35
- package/src/l1_contract_addresses.ts +120 -94
- package/src/l1_reader.ts +4 -9
- package/src/l1_tx_utils/config.ts +3 -3
- package/src/l1_tx_utils/l1_tx_utils.ts +83 -36
- package/src/l1_tx_utils/readonly_l1_tx_utils.ts +49 -13
- package/src/l1_tx_utils/tx_delayer.ts +16 -7
- package/src/publisher_manager.ts +54 -18
- package/src/queries.ts +70 -4
- package/src/test/blob_kzg_warmup.ts +65 -0
- package/src/test/chain_monitor.ts +93 -5
- package/src/test/eth_cheat_codes.ts +57 -43
- package/src/test/index.ts +1 -0
- package/src/test/recording_rpc_server.ts +69 -0
- package/src/test/rollup_cheat_codes.ts +115 -6
- package/src/test/start_anvil.ts +38 -6
- package/src/utils.ts +41 -17
- package/dest/contracts/empire_slashing_proposer.d.ts +0 -69
- package/dest/contracts/empire_slashing_proposer.d.ts.map +0 -1
- package/dest/contracts/empire_slashing_proposer.js +0 -216
- package/dest/contracts/tally_slashing_proposer.d.ts +0 -140
- package/dest/contracts/tally_slashing_proposer.d.ts.map +0 -1
- package/dest/contracts/tally_slashing_proposer.js +0 -320
- package/src/contracts/empire_slashing_proposer.ts +0 -265
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
|
-
import { schemas
|
|
2
|
+
import { schemas } from '@aztec/foundation/schemas';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* Required L1 contract address keys.
|
|
6
6
|
* NOTE: When changing this list, make sure to update CLI & CI scripts accordingly.
|
|
7
7
|
* For reference: https://github.com/AztecProtocol/aztec-packages/pull/5553
|
|
8
|
-
*/
|
|
8
|
+
*/ const REQUIRED_L1_CONTRACT_ADDRESS_KEYS = [
|
|
9
9
|
'rollupAddress',
|
|
10
10
|
'registryAddress',
|
|
11
11
|
'inboxAddress',
|
|
@@ -18,84 +18,103 @@ import { z } from 'zod';
|
|
|
18
18
|
'governanceAddress',
|
|
19
19
|
'stakingAssetAddress'
|
|
20
20
|
];
|
|
21
|
-
export const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
slashFactoryAddress: schemas.EthAddress.optional(),
|
|
34
|
-
feeAssetHandlerAddress: schemas.EthAddress.optional(),
|
|
35
|
-
stakingAssetHandlerAddress: schemas.EthAddress.optional(),
|
|
36
|
-
zkPassportVerifierAddress: schemas.EthAddress.optional(),
|
|
37
|
-
gseAddress: schemas.EthAddress.optional(),
|
|
38
|
-
dateGatedRelayerAddress: schemas.EthAddress.optional()
|
|
39
|
-
}));
|
|
21
|
+
/** Optional L1 contract address keys — present only in some deployments. */ export const OPTIONAL_L1_CONTRACT_ADDRESS_KEYS = [
|
|
22
|
+
'feeAssetHandlerAddress',
|
|
23
|
+
'stakingAssetHandlerAddress',
|
|
24
|
+
'zkPassportVerifierAddress',
|
|
25
|
+
'gseAddress',
|
|
26
|
+
'dateGatedRelayerAddress'
|
|
27
|
+
];
|
|
28
|
+
/**
|
|
29
|
+
* Names of required L1 contract addresses.
|
|
30
|
+
* NOTE: When changing the set of contracts, update CLI & CI scripts accordingly.
|
|
31
|
+
* For reference: https://github.com/AztecProtocol/aztec-packages/pull/5553
|
|
32
|
+
*/ export const L1ContractsNames = REQUIRED_L1_CONTRACT_ADDRESS_KEYS;
|
|
40
33
|
const parseEnv = (val)=>EthAddress.fromString(val);
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
},
|
|
69
|
-
feeJuiceAddress: {
|
|
70
|
-
description: 'The deployed L1 Fee Juice contract address.',
|
|
71
|
-
parseEnv
|
|
72
|
-
},
|
|
73
|
-
stakingAssetAddress: {
|
|
74
|
-
description: 'The deployed L1 staking asset contract address.',
|
|
75
|
-
parseEnv
|
|
76
|
-
},
|
|
77
|
-
feeJuicePortalAddress: {
|
|
78
|
-
description: 'The deployed L1 Fee Juice portal contract address.',
|
|
79
|
-
parseEnv
|
|
80
|
-
},
|
|
81
|
-
coinIssuerAddress: {
|
|
82
|
-
description: 'The deployed L1 coinIssuer contract address',
|
|
83
|
-
parseEnv
|
|
84
|
-
},
|
|
85
|
-
rewardDistributorAddress: {
|
|
86
|
-
description: 'The deployed L1 rewardDistributor contract address',
|
|
87
|
-
parseEnv
|
|
88
|
-
},
|
|
89
|
-
governanceProposerAddress: {
|
|
90
|
-
description: 'The deployed L1 governanceProposer contract address',
|
|
91
|
-
parseEnv
|
|
92
|
-
},
|
|
93
|
-
governanceAddress: {
|
|
94
|
-
description: 'The deployed L1 governance contract address',
|
|
95
|
-
parseEnv
|
|
96
|
-
},
|
|
97
|
-
stakingAssetHandlerAddress: {
|
|
98
|
-
description: 'The deployed L1 stakingAssetHandler contract address',
|
|
99
|
-
parseEnv
|
|
100
|
-
}
|
|
34
|
+
const addrEnv = (description, env)=>({
|
|
35
|
+
description,
|
|
36
|
+
parseEnv,
|
|
37
|
+
...env && {
|
|
38
|
+
env
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
/**
|
|
42
|
+
* Config mapping for all L1 contract addresses.
|
|
43
|
+
* This is the single source of truth for which contract addresses exist and how to parse them.
|
|
44
|
+
*/ export const l1ContractAddressesMapping = {
|
|
45
|
+
rollupAddress: addrEnv('The deployed L1 rollup contract address.'),
|
|
46
|
+
registryAddress: addrEnv('The deployed L1 registry contract address.', 'REGISTRY_CONTRACT_ADDRESS'),
|
|
47
|
+
inboxAddress: addrEnv('The deployed L1 inbox contract address.'),
|
|
48
|
+
outboxAddress: addrEnv('The deployed L1 outbox contract address.'),
|
|
49
|
+
feeJuiceAddress: addrEnv('The deployed L1 Fee Juice contract address.'),
|
|
50
|
+
feeJuicePortalAddress: addrEnv('The deployed L1 Fee Juice portal contract address.'),
|
|
51
|
+
coinIssuerAddress: addrEnv('The deployed L1 coinIssuer contract address'),
|
|
52
|
+
rewardDistributorAddress: addrEnv('The deployed L1 rewardDistributor contract address'),
|
|
53
|
+
governanceProposerAddress: addrEnv('The deployed L1 governanceProposer contract address'),
|
|
54
|
+
governanceAddress: addrEnv('The deployed L1 governance contract address'),
|
|
55
|
+
stakingAssetAddress: addrEnv('The deployed L1 staking asset contract address.'),
|
|
56
|
+
feeAssetHandlerAddress: addrEnv('The deployed L1 feeAssetHandler contract address', 'FEE_ASSET_HANDLER_CONTRACT_ADDRESS'),
|
|
57
|
+
stakingAssetHandlerAddress: addrEnv('The deployed L1 stakingAssetHandler contract address'),
|
|
58
|
+
zkPassportVerifierAddress: addrEnv('The deployed L1 ZK passport verifier contract address'),
|
|
59
|
+
gseAddress: addrEnv('The deployed L1 GSE contract address'),
|
|
60
|
+
dateGatedRelayerAddress: addrEnv('The deployed L1 date-gated relayer contract address')
|
|
101
61
|
};
|
|
62
|
+
export const L1ContractAddressesSchema = z.object({
|
|
63
|
+
...Object.fromEntries(REQUIRED_L1_CONTRACT_ADDRESS_KEYS.map((k)=>[
|
|
64
|
+
k,
|
|
65
|
+
schemas.EthAddress
|
|
66
|
+
])),
|
|
67
|
+
...Object.fromEntries(OPTIONAL_L1_CONTRACT_ADDRESS_KEYS.map((k)=>[
|
|
68
|
+
k,
|
|
69
|
+
schemas.EthAddress.optional()
|
|
70
|
+
]))
|
|
71
|
+
});
|
|
72
|
+
/**
|
|
73
|
+
* Selects entries from {@link l1ContractAddressesMapping} so composed configs can reuse the same
|
|
74
|
+
* env vars, descriptions, and parsers without duplicating definitions.
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```ts
|
|
78
|
+
* const mappings = {
|
|
79
|
+
* ...pickL1ContractAddressMappings('rollupAddress'),
|
|
80
|
+
* nodeId: { ... },
|
|
81
|
+
* };
|
|
82
|
+
* ```
|
|
83
|
+
*/ export function pickL1ContractAddressMappings(...keys) {
|
|
84
|
+
return Object.fromEntries(keys.map((key)=>[
|
|
85
|
+
key,
|
|
86
|
+
l1ContractAddressesMapping[key]
|
|
87
|
+
]));
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Like {@link pickL1ContractAddressMappings}, but returns a fragment of {@link L1ContractAddressesSchema}'s shape for
|
|
91
|
+
* spreading into `z.object({ ...pickL1ContractAddressesSchemaShape('rollupAddress'), localField: z... })`.
|
|
92
|
+
*/ export function pickL1ContractAddressesSchema(...keys) {
|
|
93
|
+
return Object.fromEntries(keys.map((key)=>[
|
|
94
|
+
key,
|
|
95
|
+
L1ContractAddressesSchema.shape[key]
|
|
96
|
+
]));
|
|
97
|
+
}
|
|
98
|
+
/** Builds an {@link L1ContractAddresses} object from config that stores those fields at the top level. */ export function pickL1ContractAddresses(config) {
|
|
99
|
+
const result = {};
|
|
100
|
+
for (const key of REQUIRED_L1_CONTRACT_ADDRESS_KEYS){
|
|
101
|
+
result[key] = config[key];
|
|
102
|
+
}
|
|
103
|
+
for (const key of OPTIONAL_L1_CONTRACT_ADDRESS_KEYS){
|
|
104
|
+
const v = config[key];
|
|
105
|
+
if (v !== undefined) {
|
|
106
|
+
result[key] = v;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return result;
|
|
110
|
+
}
|
|
111
|
+
export function randomL1ContractAddresses(includeOptional = false) {
|
|
112
|
+
const keys = includeOptional ? [
|
|
113
|
+
...L1ContractsNames,
|
|
114
|
+
...OPTIONAL_L1_CONTRACT_ADDRESS_KEYS
|
|
115
|
+
] : L1ContractsNames;
|
|
116
|
+
return Object.fromEntries(keys.map((name)=>[
|
|
117
|
+
name,
|
|
118
|
+
EthAddress.random()
|
|
119
|
+
]));
|
|
120
|
+
}
|
package/dest/l1_reader.d.ts
CHANGED
|
@@ -1,20 +1,18 @@
|
|
|
1
1
|
import { type ConfigMappingsType } from '@aztec/foundation/config';
|
|
2
2
|
import { type L1ContractAddresses } from './l1_contract_addresses.js';
|
|
3
3
|
/** Configuration of the L1GlobalReader. */
|
|
4
|
-
export
|
|
4
|
+
export type L1ReaderConfig = {
|
|
5
5
|
/** List of URLs of Ethereum RPC nodes that services will connect to (comma separated). */
|
|
6
6
|
l1RpcUrls: string[];
|
|
7
7
|
/** The RPC Url of the ethereum debug host for trace and debug methods. */
|
|
8
8
|
l1DebugRpcUrls: string[];
|
|
9
9
|
/** The chain ID of the ethereum host. */
|
|
10
10
|
l1ChainId: number;
|
|
11
|
-
/** The deployed l1 contract addresses */
|
|
12
|
-
l1Contracts: L1ContractAddresses;
|
|
13
11
|
/** The polling interval viem uses in ms */
|
|
14
12
|
viemPollingIntervalMS: number;
|
|
15
13
|
/** Timeout for HTTP requests to the L1 RPC node in ms. */
|
|
16
14
|
l1HttpTimeoutMS?: number;
|
|
17
|
-
}
|
|
15
|
+
} & L1ContractAddresses;
|
|
18
16
|
export declare const l1ReaderConfigMappings: ConfigMappingsType<L1ReaderConfig>;
|
|
19
17
|
export declare function getL1ReaderConfigFromEnv(): L1ReaderConfig;
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDFfcmVhZGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbDFfcmVhZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxLQUFLLGtCQUFrQixFQUl4QixNQUFNLDBCQUEwQixDQUFDO0FBRWxDLE9BQU8sRUFBRSxLQUFLLG1CQUFtQixFQUE4QixNQUFNLDRCQUE0QixDQUFDO0FBRWxHLDJDQUEyQztBQUMzQyxNQUFNLE1BQU0sY0FBYyxHQUFHO0lBQzNCLDBGQUEwRjtJQUMxRixTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDcEIsMEVBQTBFO0lBQzFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUN6Qix5Q0FBeUM7SUFDekMsU0FBUyxFQUFFLE1BQU0sQ0FBQztJQUNsQiwyQ0FBMkM7SUFDM0MscUJBQXFCLEVBQUUsTUFBTSxDQUFDO0lBQzlCLDBEQUEwRDtJQUMxRCxlQUFlLENBQUMsRUFBRSxNQUFNLENBQUM7Q0FDMUIsR0FBRyxtQkFBbUIsQ0FBQztBQUV4QixlQUFPLE1BQU0sc0JBQXNCLEVBQUUsa0JBQWtCLENBQUMsY0FBYyxDQTZCckUsQ0FBQztBQUVGLHdCQUFnQix3QkFBd0IsSUFBSSxjQUFjLENBRXpEIn0=
|
package/dest/l1_reader.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"l1_reader.d.ts","sourceRoot":"","sources":["../src/l1_reader.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,KAAK,mBAAmB,EAA8B,MAAM,4BAA4B,CAAC;AAElG,2CAA2C;AAC3C,MAAM,
|
|
1
|
+
{"version":3,"file":"l1_reader.d.ts","sourceRoot":"","sources":["../src/l1_reader.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,KAAK,mBAAmB,EAA8B,MAAM,4BAA4B,CAAC;AAElG,2CAA2C;AAC3C,MAAM,MAAM,cAAc,GAAG;IAC3B,0FAA0F;IAC1F,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,0EAA0E;IAC1E,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,qBAAqB,EAAE,MAAM,CAAC;IAC9B,0DAA0D;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,mBAAmB,CAAC;AAExB,eAAO,MAAM,sBAAsB,EAAE,kBAAkB,CAAC,cAAc,CA6BrE,CAAC;AAEF,wBAAgB,wBAAwB,IAAI,cAAc,CAEzD"}
|
package/dest/l1_reader.js
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
import { getConfigFromMappings, numberConfigHelper, optionalNumberConfigHelper } from '@aztec/foundation/config';
|
|
2
2
|
import { l1ContractAddressesMapping } from './l1_contract_addresses.js';
|
|
3
3
|
export const l1ReaderConfigMappings = {
|
|
4
|
-
l1Contracts: {
|
|
5
|
-
description: 'The deployed L1 contract addresses',
|
|
6
|
-
nested: l1ContractAddressesMapping
|
|
7
|
-
},
|
|
8
4
|
l1ChainId: {
|
|
9
5
|
env: 'L1_CHAIN_ID',
|
|
10
|
-
|
|
6
|
+
...optionalNumberConfigHelper(),
|
|
11
7
|
description: 'The chain ID of the ethereum host.'
|
|
12
8
|
},
|
|
13
9
|
l1RpcUrls: {
|
|
@@ -31,7 +27,8 @@ export const l1ReaderConfigMappings = {
|
|
|
31
27
|
env: 'ETHEREUM_HTTP_TIMEOUT_MS',
|
|
32
28
|
description: 'Timeout for HTTP requests to the L1 RPC node in ms.',
|
|
33
29
|
...optionalNumberConfigHelper()
|
|
34
|
-
}
|
|
30
|
+
},
|
|
31
|
+
...l1ContractAddressesMapping
|
|
35
32
|
};
|
|
36
33
|
export function getL1ReaderConfigFromEnv() {
|
|
37
34
|
return getConfigFromMappings(l1ReaderConfigMappings);
|
|
@@ -3,7 +3,7 @@ export const l1TxUtilsConfigMappings = {
|
|
|
3
3
|
gasLimitBufferPercentage: {
|
|
4
4
|
description: 'How much to increase calculated gas limit by (percentage)',
|
|
5
5
|
env: 'L1_GAS_LIMIT_BUFFER_PERCENTAGE',
|
|
6
|
-
...
|
|
6
|
+
...floatConfigHelper(20)
|
|
7
7
|
},
|
|
8
8
|
maxGwei: {
|
|
9
9
|
description: 'Maximum gas price in gwei to be used for transactions.',
|
|
@@ -24,12 +24,12 @@ export const l1TxUtilsConfigMappings = {
|
|
|
24
24
|
priorityFeeBumpPercentage: {
|
|
25
25
|
description: 'How much to increase priority fee by each attempt (percentage)',
|
|
26
26
|
env: 'L1_PRIORITY_FEE_BUMP_PERCENTAGE',
|
|
27
|
-
...
|
|
27
|
+
...floatConfigHelper(20)
|
|
28
28
|
},
|
|
29
29
|
priorityFeeRetryBumpPercentage: {
|
|
30
30
|
description: 'How much to increase priority fee by each retry attempt (percentage)',
|
|
31
31
|
env: 'L1_PRIORITY_FEE_RETRY_BUMP_PERCENTAGE',
|
|
32
|
-
...
|
|
32
|
+
...floatConfigHelper(50)
|
|
33
33
|
},
|
|
34
34
|
minimumPriorityFeePerGas: {
|
|
35
35
|
description: 'Minimum priority fee per gas in Gwei. Acts as a floor for the computed priority fee. If network conditions require a higher fee, the higher fee will be used.',
|
|
@@ -30,6 +30,11 @@ export declare class L1TxUtils extends ReadOnlyL1TxUtils {
|
|
|
30
30
|
protected updateState(l1TxState: L1TxState, newState: TxUtilsState.MINED, l1Timestamp: number): Promise<void>;
|
|
31
31
|
protected updateState(l1TxState: L1TxState, newState: TxUtilsState, l1Timestamp?: undefined): Promise<void>;
|
|
32
32
|
updateConfig(newConfig: Partial<L1TxUtilsConfig>): void;
|
|
33
|
+
/**
|
|
34
|
+
* Clears the cached `lastSentNonce` so the next `sendTransaction` call fetches the real
|
|
35
|
+
* nonce from the chain. Call this after an L1 reorg to prevent stale nonce references.
|
|
36
|
+
*/
|
|
37
|
+
resetNonce(): void;
|
|
33
38
|
getSenderAddress(): EthAddress;
|
|
34
39
|
getSenderBalance(): Promise<bigint>;
|
|
35
40
|
/**
|
|
@@ -39,6 +44,7 @@ export declare class L1TxUtils extends ReadOnlyL1TxUtils {
|
|
|
39
44
|
loadStateAndResumeMonitoring(): Promise<void>;
|
|
40
45
|
private signTransaction;
|
|
41
46
|
protected prepareSignedTransaction(txData: PrepareTransactionRequestRequest): Promise<`0x${string}`>;
|
|
47
|
+
private checkInterruptedOrTimedOut;
|
|
42
48
|
/**
|
|
43
49
|
* Sends a transaction with gas estimation and pricing
|
|
44
50
|
* @param request - The transaction request (to, data, value)
|
|
@@ -104,4 +110,4 @@ export declare class L1TxUtils extends ReadOnlyL1TxUtils {
|
|
|
104
110
|
ethereumSlotDuration: bigint | number;
|
|
105
111
|
}, bindings: LoggerBindings): Delayer;
|
|
106
112
|
}
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDFfdHhfdXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sMV90eF91dGlscy9sMV90eF91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUk3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssY0FBYyxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBSXZGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUl2RCxPQUFPLEVBQ0wsS0FBSyxHQUFHLEVBQ1IsS0FBSyxjQUFjLEVBQ25CLEtBQUssR0FBRyxFQUNSLEtBQUssZ0NBQWdDLEVBQ3JDLEtBQUssYUFBYSxFQUNsQixLQUFLLGtCQUFrQixFQUl4QixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU5QyxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQTJCLE1BQU0sYUFBYSxDQUFDO0FBRTVFLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsT0FBTyxFQUF3QyxNQUFNLGlCQUFpQixDQUFDO0FBQ2hGLE9BQU8sRUFFTCxLQUFLLFlBQVksRUFDakIsS0FBSyxVQUFVLEVBQ2YsS0FBSyxXQUFXLEVBQ2hCLEtBQUssU0FBUyxFQUNkLEtBQUssZUFBZSxFQUVwQixZQUFZLEVBRWIsTUFBTSxZQUFZLENBQUM7QUFTcEIscUJBQWEsU0FBVSxTQUFRLGlCQUFpQjtJQVk1QixNQUFNLEVBQUUsVUFBVTtJQUMzQixPQUFPLEVBQUUsVUFBVTtJQUMxQixTQUFTLENBQUMs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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"l1_tx_utils.d.ts","sourceRoot":"","sources":["../../src/l1_tx_utils/l1_tx_utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAI7D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAIvF,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAIvD,OAAO,EACL,KAAK,GAAG,EACR,KAAK,cAAc,EACnB,KAAK,GAAG,EACR,KAAK,gCAAgC,EACrC,KAAK,aAAa,EAClB,KAAK,kBAAkB,EAIxB,MAAM,MAAM,CAAC;AAEd,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,KAAK,eAAe,EAA2B,MAAM,aAAa,CAAC;AAE5E,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAwC,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,eAAe,EAEpB,YAAY,EAEb,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"l1_tx_utils.d.ts","sourceRoot":"","sources":["../../src/l1_tx_utils/l1_tx_utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { merge, pick } from '@aztec/foundation/collection';
|
|
|
3
3
|
import { InterruptError, TimeoutError } from '@aztec/foundation/error';
|
|
4
4
|
import { createLogger } from '@aztec/foundation/log';
|
|
5
5
|
import { Semaphore } from '@aztec/foundation/queue';
|
|
6
|
-
import { retryUntil } from '@aztec/foundation/retry';
|
|
6
|
+
import { makeBackoff, retry, retryUntil } from '@aztec/foundation/retry';
|
|
7
7
|
import { sleep } from '@aztec/foundation/sleep';
|
|
8
8
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
9
9
|
import { RollupAbi } from '@aztec/l1-artifacts/RollupAbi';
|
|
@@ -16,6 +16,15 @@ import { ReadOnlyL1TxUtils } from './readonly_l1_tx_utils.js';
|
|
|
16
16
|
import { createDelayer, wrapClientWithDelayer } from './tx_delayer.js';
|
|
17
17
|
import { DroppedTransactionError, TerminalTxUtilsState, TxUtilsState, UnknownMinedTxError } from './types.js';
|
|
18
18
|
const MAX_L1_TX_STATES = 32;
|
|
19
|
+
// Backoff (in seconds) for retrying the read-only RPC calls that prepare a tx cancellation. A
|
|
20
|
+
// cancellation is fired in the background after a tx times out and is important (it frees the stuck
|
|
21
|
+
// nonce), so a transient RPC failure while reading the pending nonce or gas price must not abandon it.
|
|
22
|
+
const CANCELLATION_PREP_RETRY_BACKOFF_S = [
|
|
23
|
+
1,
|
|
24
|
+
2,
|
|
25
|
+
4,
|
|
26
|
+
8
|
|
27
|
+
];
|
|
19
28
|
export class L1TxUtils extends ReadOnlyL1TxUtils {
|
|
20
29
|
client;
|
|
21
30
|
address;
|
|
@@ -75,6 +84,12 @@ export class L1TxUtils extends ReadOnlyL1TxUtils {
|
|
|
75
84
|
this.config = merge(this.config, newConfig);
|
|
76
85
|
this.logger.info('Updated L1TxUtils config', pickBy(newConfig, (_, key)=>key in l1TxUtilsConfigMappings));
|
|
77
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* Clears the cached `lastSentNonce` so the next `sendTransaction` call fetches the real
|
|
89
|
+
* nonce from the chain. Call this after an L1 reorg to prevent stale nonce references.
|
|
90
|
+
*/ resetNonce() {
|
|
91
|
+
this.lastSentNonce = undefined;
|
|
92
|
+
}
|
|
78
93
|
getSenderAddress() {
|
|
79
94
|
return this.address;
|
|
80
95
|
}
|
|
@@ -141,18 +156,29 @@ export class L1TxUtils extends ReadOnlyL1TxUtils {
|
|
|
141
156
|
const txRequest = await this.client.prepareTransactionRequest(txData);
|
|
142
157
|
return await this.signTransaction(txRequest);
|
|
143
158
|
}
|
|
159
|
+
async checkInterruptedOrTimedOut(gasConfig) {
|
|
160
|
+
if (this.interrupted) {
|
|
161
|
+
throw new InterruptError(`Transaction sending is interrupted`);
|
|
162
|
+
}
|
|
163
|
+
const now = new Date(await this.getL1Timestamp());
|
|
164
|
+
if (gasConfig.txTimeoutAt && now > gasConfig.txTimeoutAt) {
|
|
165
|
+
throw new TimeoutError(`Transaction timed out before sending (now ${now.toISOString()} > timeoutAt ${gasConfig.txTimeoutAt.toISOString()})`);
|
|
166
|
+
}
|
|
167
|
+
return now;
|
|
168
|
+
}
|
|
144
169
|
/**
|
|
145
170
|
* Sends a transaction with gas estimation and pricing
|
|
146
171
|
* @param request - The transaction request (to, data, value)
|
|
147
172
|
* @param gasConfig - Optional gas configuration
|
|
148
173
|
* @returns The transaction hash and parameters used
|
|
149
174
|
*/ async sendTransaction(request, gasConfigOverrides, blobInputs, stateChange = TxUtilsState.SENT) {
|
|
150
|
-
if (this.interrupted) {
|
|
151
|
-
throw new InterruptError(`Transaction sending is interrupted`);
|
|
152
|
-
}
|
|
153
175
|
try {
|
|
154
176
|
const gasConfig = merge(this.config, gasConfigOverrides);
|
|
155
177
|
const account = this.getSenderAddress().toString();
|
|
178
|
+
// Fail fast before doing any work (gas estimation, balance check) if we've been interrupted
|
|
179
|
+
// or if the caller's deadline has already passed. The same check is repeated after gas
|
|
180
|
+
// estimation in case it took long enough to push us past the deadline.
|
|
181
|
+
await this.checkInterruptedOrTimedOut(gasConfig);
|
|
156
182
|
let gasLimit;
|
|
157
183
|
if (this.debugMaxGasLimit) {
|
|
158
184
|
gasLimit = MAX_L1_TX_LIMIT;
|
|
@@ -166,13 +192,7 @@ export class L1TxUtils extends ReadOnlyL1TxUtils {
|
|
|
166
192
|
...request
|
|
167
193
|
});
|
|
168
194
|
const gasPrice = await this.getGasPrice(gasConfig, !!blobInputs);
|
|
169
|
-
|
|
170
|
-
throw new InterruptError(`Transaction sending is interrupted`);
|
|
171
|
-
}
|
|
172
|
-
const now = new Date(await this.getL1Timestamp());
|
|
173
|
-
if (gasConfig.txTimeoutAt && now > gasConfig.txTimeoutAt) {
|
|
174
|
-
throw new TimeoutError(`Transaction timed out before sending (now ${now.toISOString()} > timeoutAt ${gasConfig.txTimeoutAt.toISOString()})`);
|
|
175
|
-
}
|
|
195
|
+
const now = await this.checkInterruptedOrTimedOut(gasConfig);
|
|
176
196
|
let txHash;
|
|
177
197
|
let nonce;
|
|
178
198
|
let baseState;
|
|
@@ -338,9 +358,25 @@ export class L1TxUtils extends ReadOnlyL1TxUtils {
|
|
|
338
358
|
const account = this.getSenderAddress().toString();
|
|
339
359
|
const initialTxHash = txHashes[0];
|
|
340
360
|
let currentTxHash = txHashes.at(-1);
|
|
341
|
-
let l1Timestamp;
|
|
361
|
+
let l1Timestamp = 0;
|
|
342
362
|
while(true){
|
|
343
|
-
|
|
363
|
+
try {
|
|
364
|
+
l1Timestamp = await this.getL1Timestamp();
|
|
365
|
+
} catch (err) {
|
|
366
|
+
// A transient RPC failure here must not abort monitoring with a rejection: callers that
|
|
367
|
+
// fire this loop in the background would surface it as an unhandled rejection (e.g. when a
|
|
368
|
+
// test tears down its L1 node while a monitor iteration is in flight). Exit quietly if we
|
|
369
|
+
// are shutting down, otherwise retry on the next interval.
|
|
370
|
+
if (this.interrupted) {
|
|
371
|
+
break;
|
|
372
|
+
}
|
|
373
|
+
this.logger.error(`Error fetching L1 timestamp while monitoring tx ${currentTxHash}`, err, {
|
|
374
|
+
nonce,
|
|
375
|
+
account
|
|
376
|
+
});
|
|
377
|
+
await sleep(gasConfig.checkIntervalMs);
|
|
378
|
+
continue;
|
|
379
|
+
}
|
|
344
380
|
try {
|
|
345
381
|
const timePassed = l1Timestamp - state.lastSentAtL1Ts.getTime();
|
|
346
382
|
const [currentNonce, pendingNonce] = await Promise.all([
|
|
@@ -534,20 +570,20 @@ export class L1TxUtils extends ReadOnlyL1TxUtils {
|
|
|
534
570
|
..._blockOverrides
|
|
535
571
|
};
|
|
536
572
|
const gasConfig = merge(this.config, _gasConfig);
|
|
537
|
-
|
|
573
|
+
// Fee fields are deliberately omitted. Supplying them makes the node apply the EIP-1559 upfront funds
|
|
574
|
+
// check (sender balance >= gas * maxFeePerGas) against the worst-case gas cap below, which rejects the
|
|
575
|
+
// whole simulation request before any execution. Omitted fee fields default to a zero gas price.
|
|
538
576
|
const call = {
|
|
539
577
|
to: request.to,
|
|
540
578
|
data: request.data,
|
|
541
579
|
from: request.from ?? this.getSenderAddress().toString(),
|
|
542
|
-
maxFeePerGas: gasPrice.maxFeePerGas,
|
|
543
|
-
maxPriorityFeePerGas: gasPrice.maxPriorityFeePerGas,
|
|
544
580
|
gas: request.gas ?? MAX_L1_TX_LIMIT
|
|
545
581
|
};
|
|
546
582
|
if (!request.gas && !gasConfig.ignoreBlockGasLimit) {
|
|
547
583
|
// MAX_L1_TX_LIMIT is set as call.gas, ensure block gasLimit is sufficient
|
|
548
584
|
blockOverrides.gasLimit = MAX_L1_TX_LIMIT;
|
|
549
585
|
}
|
|
550
|
-
return this._simulate(call, blockOverrides, stateOverrides, gasConfig, abi);
|
|
586
|
+
return await this._simulate(call, blockOverrides, stateOverrides, gasConfig, abi);
|
|
551
587
|
}
|
|
552
588
|
/**
|
|
553
589
|
* Attempts to cancel a transaction by sending a 0-value tx to self with same nonce but higher gas prices
|
|
@@ -566,12 +602,35 @@ export class L1TxUtils extends ReadOnlyL1TxUtils {
|
|
|
566
602
|
await this.updateState(state, TxUtilsState.NOT_MINED);
|
|
567
603
|
return;
|
|
568
604
|
}
|
|
569
|
-
//
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
605
|
+
// Resolve the pending nonce and cancellation gas price up front. These are read-only RPC calls, so
|
|
606
|
+
// they are safe to retry; a transient RPC failure here must not permanently abandon the cancellation
|
|
607
|
+
// (which would leave the nonce stuck and the tx state stranded short of CANCELLED). We retry with a
|
|
608
|
+
// real backoff before giving up, unlike getGasPrice's tight internal retry which can be exhausted by
|
|
609
|
+
// a brief node hiccup. The retried block performs no state-changing send, so retrying cannot
|
|
610
|
+
// double-send the cancellation tx.
|
|
611
|
+
const { currentNonce, cancelGasPrice } = await retry(async ()=>{
|
|
612
|
+
const currentNonce = await this.client.getTransactionCount({
|
|
613
|
+
address: account,
|
|
614
|
+
blockTag: 'pending'
|
|
615
|
+
});
|
|
616
|
+
if (currentNonce >= nonce) {
|
|
617
|
+
// Get gas price with higher priority fee for cancellation
|
|
618
|
+
const cancelGasPrice = await this.getGasPrice({
|
|
619
|
+
...this.config,
|
|
620
|
+
// Use high bump for cancellation to ensure it replaces the original tx
|
|
621
|
+
priorityFeeRetryBumpPercentage: 150
|
|
622
|
+
}, isBlobTx, state.txHashes.length, previousGasPrice);
|
|
623
|
+
return {
|
|
624
|
+
currentNonce,
|
|
625
|
+
cancelGasPrice
|
|
626
|
+
};
|
|
627
|
+
}
|
|
628
|
+
return {
|
|
629
|
+
currentNonce,
|
|
630
|
+
cancelGasPrice: undefined
|
|
631
|
+
};
|
|
632
|
+
}, `Preparing cancellation for L1 tx from account ${account} with nonce ${nonce}`, makeBackoff(CANCELLATION_PREP_RETRY_BACKOFF_S), this.logger);
|
|
633
|
+
if (cancelGasPrice === undefined) {
|
|
575
634
|
this.logger.verbose(`Not sending cancellation for L1 tx from account ${account} with nonce ${nonce} as it is dropped`, {
|
|
576
635
|
nonce,
|
|
577
636
|
account,
|
|
@@ -580,12 +639,6 @@ export class L1TxUtils extends ReadOnlyL1TxUtils {
|
|
|
580
639
|
await this.updateState(state, TxUtilsState.NOT_MINED);
|
|
581
640
|
return;
|
|
582
641
|
}
|
|
583
|
-
// Get gas price with higher priority fee for cancellation
|
|
584
|
-
const cancelGasPrice = await this.getGasPrice({
|
|
585
|
-
...this.config,
|
|
586
|
-
// Use high bump for cancellation to ensure it replaces the original tx
|
|
587
|
-
priorityFeeRetryBumpPercentage: 150
|
|
588
|
-
}, isBlobTx, state.txHashes.length, previousGasPrice);
|
|
589
642
|
const { maxFeePerGas, maxPriorityFeePerGas, maxFeePerBlobGas } = cancelGasPrice;
|
|
590
643
|
this.logger.verbose(`Attempting to cancel L1 ${isBlobTx ? 'blob' : 'vanilla'} transaction from account ${account} with nonce ${nonce} after time out`, {
|
|
591
644
|
maxFeePerGas: formatGwei(maxFeePerGas),
|
|
@@ -80,4 +80,4 @@ export declare class ReadOnlyL1TxUtils {
|
|
|
80
80
|
}>;
|
|
81
81
|
bumpGasLimit(gasLimit: bigint, _gasConfig?: L1TxUtilsConfig): bigint;
|
|
82
82
|
}
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZG9ubHlfbDFfdHhfdXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sMV90eF91dGlscy9yZWFkb25seV9sMV90eF91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFFbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBS3ZELE9BQU8sRUFDTCxLQUFLLEdBQUcsRUFDUixLQUFLLE9BQU8sRUFFWixLQUFLLGNBQWMsRUFFbkIsS0FBSyxpQkFBaUIsRUFDdEIsS0FBSyxHQUFHLEVBSVIsS0FBSyxhQUFhLEVBS25CLE1BQU0sTUFBTSxDQUFDO0FBR2QsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBbUQsTUFBTSxhQUFhLENBQUM7QUFTcEcsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUF1QnhGLHFCQUFhLGlCQUFpQjtJQUtuQixNQUFNLEVBQUUsVUFBVTtJQUN6QixTQUFTLENBQUMsTUFBTSxFQUFFLE1BQU07YUFDUixZQUFZLEVBQUUsWUFBWTtJQUUxQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsT0FBTztJQVI5QixNQUFNLEVBQUUsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3pDLFNBQVMsQ0FBQyxXQUFXLFVBQVM7SUFFOUIsWUFDUyxNQUFNLEVBQUUsVUFBVSxFQUNmLE1BQU0sb0JBQXFELEVBQ3JELFlBQVksRUFBRSxZQUFZLEVBQzFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFDdkIsZ0JBQWdCLEdBQUUsT0FBZSxFQUc1QztJQUVNLFNBQVMsU0FFZjtJQUVNLE9BQU8sU0FFYjtJQUVNLFFBQVE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FFZDtJQUVNLGNBQWMsb0JBRXBCO0lBRU0sT0FBTyxDQUFDLE9BQU8sRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBRTlEO0lBRUQ7O09BRUc7SUFDVSxXQUFXLENBQ3RCLGtCQUFrQixDQUFDLEVBQUUsZUFBZSxFQUNwQyxRQUFRLEdBQUUsT0FBZSxFQUN6QixPQUFPLEdBQUUsTUFBVSxFQUNuQixnQkFBZ0IsQ0FBQyxFQUFFLE9BQU8sT0FBTyxTQUFTLENBQUMsR0FBRyxLQUFLLEdBQUcsUUFBUSxHQUM3RCxPQUFPLENBQUMsUUFBUSxDQUFDLENBb0puQjtJQUVEOztPQUVHO0lBQ1UsV0FBVyxDQUN0QixPQUFPLEVBQUUsT0FBTyxHQUFHLEdBQUcsRUFDdEIsT0FBTyxFQUFFLFdBQVcsRUFDcEIsVUFBVSxDQUFDLEVBQUUsZUFBZSxFQUM1QixXQUFXLENBQUMsRUFBRSxZQUFZLEdBQ3pCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FpQ2pCO0lBRUssbUJBQW1CLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLENBWS9FO0lBRVkseUJBQXlCLENBQ3BDLElBQUksRUFBRSxHQUFHLEVBQ1QsSUFBSSxFQUFFO1FBQ0osSUFBSSxFQUFFLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDckIsWUFBWSxFQUFFLE1BQU0sQ0FBQztRQUNyQixHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQ1QsT0FBTyxFQUFFLEdBQUcsQ0FBQztLQUNkLEVBQ0QsVUFBVSxFQUFFLENBQUMsWUFBWSxHQUFHO1FBQUUsZ0JBQWdCLEVBQUUsTUFBTSxDQUFBO0tBQUUsQ0FBQyxHQUFHLFNBQVMsRUFDckUsYUFBYSxHQUFFLGFBQWtCLCtCQWdEbEM7SUFFWSxRQUFRLENBQ25CLE9BQU8sRUFBRSxXQUFXLEdBQUc7UUFBRSxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUM7UUFBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUE7S0FBRSxFQUNuRCxjQUFjLEdBQUUsY0FBYyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQU0sRUFDbkQsY0FBYyxHQUFFLGFBQWtCLEVBQ2xDLEdBQUcsR0FBRSxHQUFlLEVBQ3BCLFVBQVUsQ0FBQyxFQUFFLGVBQWUsR0FBRztRQUFFLG1CQUFtQixDQUFDLEVBQUUsTUFBTSxDQUFBO0tBQUUsR0FDOUQsT0FBTyxDQUFDO1FBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQztRQUFDLE1BQU0sRUFBRSxLQUFLLE1BQU0sRUFBRSxDQUFBO0tBQUUsQ0FBQyxDQVVyRDtJQUVELFVBQWdCLFNBQVMsQ0FDdkIsSUFBSSxFQUFFLEdBQUcsRUFDVCxjQUFjLDRDQUFxQyxFQUNuRCxjQUFjLDJCQUFvQixFQUNsQyxTQUFTLEVBQUUsZUFBZSxHQUFHO1FBQUUsbUJBQW1CLENBQUMsRUFBRSxNQUFNLENBQUE7S0FBRSxFQUM3RCxHQUFHLEVBQUUsR0FBRzs7O09Bb0RUO0lBRU0sWUFBWSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLEVBQUUsZUFBZSxHQUFHLE1BQU0sQ0FXMUU7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readonly_l1_tx_utils.d.ts","sourceRoot":"","sources":["../../src/l1_tx_utils/readonly_l1_tx_utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAElE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"readonly_l1_tx_utils.d.ts","sourceRoot":"","sources":["../../src/l1_tx_utils/readonly_l1_tx_utils.ts"],"names":[],"mappings":"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"}
|