diff --git a/Cargo.lock b/Cargo.lock index b98d343564b8..e787a2fd4687 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5573,6 +5573,17 @@ dependencies = [ "libc", ] +[[package]] +name = "selector_generator" +version = "0.1.0" +dependencies = [ + "clap 4.4.6", + "glob", + "serde", + "serde_json", + "sha3 0.10.8", +] + [[package]] name = "semver" version = "1.0.23" diff --git a/Cargo.toml b/Cargo.toml index 075f5007be4c..f16fb570f915 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,6 +6,7 @@ members = [ "core/bin/external_node", "core/bin/merkle_tree_consistency_checker", "core/bin/snapshots_creator", + "core/bin/selector_generator", "core/bin/system-constants-generator", "core/bin/verified_sources_fetcher", "core/bin/zksync_server", @@ -120,6 +121,7 @@ envy = "0.4" ethabi = "18.0.0" flate2 = "1.0.28" futures = "0.3" +glob = "0.3" google-cloud-auth = "0.16.0" google-cloud-storage = "0.20.0" governor = "0.4.2" diff --git a/core/bin/selector_generator/Cargo.toml b/core/bin/selector_generator/Cargo.toml new file mode 100644 index 000000000000..e0b0afe0ae2c --- /dev/null +++ b/core/bin/selector_generator/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "selector_generator" +version = "0.1.0" +edition.workspace = true +authors.workspace = true +homepage.workspace = true +repository.workspace = true +license.workspace = true +keywords.workspace = true +categories.workspace = true +publish = false + +[dependencies] +serde = { workspace = true, features = ["derive"] } +serde_json.workspace = true +sha3.workspace = true +glob.workspace = true +clap = { workspace = true, features = ["derive"] } \ No newline at end of file diff --git a/core/bin/selector_generator/README.md b/core/bin/selector_generator/README.md new file mode 100644 index 000000000000..a954613c7e45 --- /dev/null +++ b/core/bin/selector_generator/README.md @@ -0,0 +1,13 @@ +# Generates the list of solidity selectors + +This tool generates a mapping from solidity selectors to function names. + +The output json file can be used by multiple tools to improve debugging and readability. + +By default, it appends the newly found selectors into the list. + +To run, first make sure that you have your contracts compiled and then run: + +``` +cargo run ../../../contracts ../../../etc/selector-generator-data/selectors.json +``` diff --git a/core/bin/selector_generator/src/main.rs b/core/bin/selector_generator/src/main.rs new file mode 100644 index 000000000000..ad6180413f14 --- /dev/null +++ b/core/bin/selector_generator/src/main.rs @@ -0,0 +1,105 @@ +use std::{ + collections::HashMap, + fs::{File, OpenOptions}, + io::{self}, +}; + +use clap::Parser; +use glob::glob; +use serde::{Deserialize, Serialize}; +use sha3::{Digest, Keccak256}; + +#[derive(Debug, Serialize, Deserialize)] +struct ABIEntry { + #[serde(rename = "type")] + entry_type: String, + name: Option, + inputs: Option>, +} + +#[derive(Debug, Serialize, Deserialize)] +struct ABIInput { + #[serde(rename = "type")] + input_type: String, +} + +#[derive(Debug, Parser)] +#[command(author, version, about, long_about = None)] +struct Cli { + contracts_dir: String, + output_file: String, +} + +/// Computes solidity selector for a given method and arguments. +fn compute_selector(name: &str, inputs: &[ABIInput]) -> String { + let signature = format!( + "{}({})", + name, + inputs + .iter() + .map(|i| i.input_type.clone()) + .collect::>() + .join(",") + ); + let mut hasher = Keccak256::new(); + hasher.update(signature); + format!("{:x}", hasher.finalize())[..8].to_string() +} + +/// Analyses all the JSON files, looking for 'abi' entries, and then computing the selectors for them. +fn process_files(directory: &str, output_file: &str) -> io::Result<()> { + let mut selectors: HashMap = match File::open(output_file) { + Ok(file) => serde_json::from_reader(file).unwrap_or_default(), + Err(_) => HashMap::new(), + }; + let selectors_before = selectors.len(); + let mut analyzed_files = 0; + + for entry in glob(&format!("{}/**/*.json", directory)).expect("Failed to read glob pattern") { + match entry { + Ok(path) => { + let file_path = path.clone(); + let file = File::open(path)?; + let json: Result = serde_json::from_reader(file); + + if let Ok(json) = json { + if let Some(abi) = json.get("abi").and_then(|v| v.as_array()) { + analyzed_files += 1; + for item in abi { + let entry: ABIEntry = serde_json::from_value(item.clone()).unwrap(); + if entry.entry_type == "function" { + if let (Some(name), Some(inputs)) = (entry.name, entry.inputs) { + let selector = compute_selector(&name, &inputs); + selectors.entry(selector).or_insert(name); + } + } + } + } + } else { + eprintln!("Error parsing file: {:?} - ignoring.", file_path) + } + } + Err(e) => eprintln!("Error reading file: {:?}", e), + } + } + println!( + "Analyzed {} files. Added {} selectors (before: {} after: {})", + analyzed_files, + selectors.len() - selectors_before, + selectors_before, + selectors.len() + ); + + let file = OpenOptions::new() + .write(true) + .create(true) + .truncate(true) + .open(output_file)?; + serde_json::to_writer_pretty(file, &selectors)?; + Ok(()) +} + +fn main() -> io::Result<()> { + let args = Cli::parse(); + process_files(&args.contracts_dir, &args.output_file) +} diff --git a/etc/selector-generator-data/README.md b/etc/selector-generator-data/README.md new file mode 100644 index 000000000000..ddba2769e4f2 --- /dev/null +++ b/etc/selector-generator-data/README.md @@ -0,0 +1,3 @@ +# List of selectors from our contracts + +To regenerate the list, please use the selector_generator tool from core/bin directory. diff --git a/etc/selector-generator-data/selectors.json b/etc/selector-generator-data/selectors.json new file mode 100644 index 000000000000..6ea986e4263a --- /dev/null +++ b/etc/selector-generator-data/selectors.json @@ -0,0 +1,518 @@ +{ + "d0f2c663": "getBatchNumberAndTimestamp", + "2a79c611": "getCommitment", + "8129fc1c": "initialize", + "e2a9d554": "setUpgradeTimestamp", + "84c2ff75": "stmAssetId", + "7ac3a553": "withdrawLegacyBridge", + "e91659ae": "addNewChainIfNeeded", + "06d49e5b": "getPubdataPricingMode", + "1ff5a783": "execute", + "8310f2c6": "transferFundsFromSharedBridge", + "80b41246": "getBlockHashEVM", + "7da01cd6": "executeUpgrade", + "74044673": "addStateTransitionManager", + "82b57749": "forwardedBridgeMint", + "6478d8ed": "chainAdmin", + "4af63f02": "deploy", + "d0707b67": "aggregate", + "e0ab6368": "assetIdIsRegistered", + "27e86d6e": "getLastBlockHash", + "13bc9f20": "isOperationReady", + "4a2e35ba": "withdraw", + "1e4fba05": "getChainRoot", + "762008c2": "executeBatchesSharedBridge", + "155fd27a": "setValueUnderNonce", + "a6ae0aac": "coinbase", + "86d516e8": "getCurrentBlockGasLimit", + "3659cfe6": "upgradeTo", + "fa8f7ea6": "getAllHyperchains", + "7b510fe8": "getAccountInfo", + "40c10f19": "mint", + "e02e1bfd": "chainCount", + "015f58d7": "genesisUpgrade", + "28e439f3": "tryBlockAndAggregate", + "e76db865": "setPubdataPricingMode", + "62f84b24": "sendToL1", + "1c9f0149": "updateChainBalancesFromSharedBridge", + "38720778": "sharedBridge", + "64e130cf": "nativeTokenVault", + "adfca15e": "facetFunctionSelectors", + "af500fb7": "readBytes32", + "7b315630": "upgradeChainFromVersion", + "b6ea1757": "pushNewLeaf", + "e66c8c44": "validatorTimelock", + "4f1ef286": "upgradeToAndCall", + "fe26699e": "getTotalBlocksCommitted", + "805b9869": "executeTransactionFromOutside", + "aa4593dc": "revertReceive", + "64b554ad": "forwardedBridgeBurn", + "ba238947": "getProtocolVersion", + "07f8c636": "multicall", + "39607382": "getTotalBlocksExecuted", + "796b89b9": "getBlockTimestamp", + "9cd939e4": "l2LogsRootHash", + "b298e36b": "push", + "7890e5da": "side", + "5e1ac65f": "hashOperation", + "1806aa18": "getCodeSize", + "d4a4ca0d": "getBlockNumberAndTimestamp", + "06bed036": "setL2Block", + "aa970773": "validateAndPayForPaymasterTransaction", + "6223258e": "setDAValidatorPair", + "728cb93b": "bridgeClaimFailedBurn", + "d6abe642": "getAssetId", + "d2ef1b0e": "storedBatchZero", + "51b3c157": "hyperbridgingEnabled", + "53e61bdc": "processL2RollupDAValidatorOutputHash", + "95d89b41": "symbol", + "a37dc1d4": "forwardedBridgeClaimFailedBurn", + "db1f0bf9": "getTotalBatchesCommitted", + "beda594a": "setHyperchain", + "3977d71c": "getAggregatedRoot", + "c4d252f5": "cancel", + "2878fe74": "genesisUpgrade", + "2ab0f529": "isOperationDone", + "5d4edca7": "BRIDGE_HUB", + "d4b9f4fa": "messageRoot", + "fb1a9a57": "getDeploymentNonce", + "bb0fd610": "extendedAccountVersion", + "3cda3351": "create2", + "3a9d7f8d": "stmDeployer", + "db541184": "setShouldRevertOnExecuteBatches", + "74f4f547": "bridgeBurn", + "b852ad36": "l1SharedBridge", + "6ef25c3a": "baseFee", + "eb39e6d5": "stateTransitionManager", + "381c3f13": "checkDA", + "f92ad219": "initialize", + "9fa8826b": "depositHappened", + "01d23d4b": "diamondCut", + "55d35d18": "getValueUnderNonce", + "ee7fb38b": "calculateRoot", + "64d62353": "updateDelay", + "fd3c6b55": "processCalldataDA", + "39b34c6e": "requestBytecodeL1Publication", + "71623274": "l2TransactionBaseCost", + "53b9e632": "assetHandlerAddress", + "c987336c": "upgrade", + "5c975abb": "paused", + "4623c91d": "setValidator", + "4f1e1be0": "storeAccountConstructingCodeHash", + "b0f40a17": "processBatch", + "2c4f2a58": "bridgehubDepositBaseToken", + "ced531eb": "setHashes", + "18160ddd": "totalSupply", + "7cb9357e": "gasPerPubdataByte", + "7877a797": "blockGasLimit", + "cdc4878b": "nodeCount", + "c2eeeebd": "l1Address", + "0f23da43": "revertBatchesSharedBridge", + "e1239cd8": "incrementMinNonceIfEquals", + "8456cb59": "pause", + "9a42c2c2": "zeroPointerTest", + "f9f3ee2d": "setResult", + "7ba8be34": "decodeUint8", + "a635f01d": "delegateCall", + "2f90b184": "L1_CHAIN_ID", + "6c0960f9": "finalizeEthWithdrawal", + "31d50750": "isOperation", + "59ec65a2": "baseToken", + "a9b0d128": "setPriorityTreeStartIndex", + "c4879440": "bridgehubDepositBaseToken", + "823f1d96": "l2TokenProxyBytecodeHash", + "18876a04": "chunkPubdataToBlobs", + "699b0fb9": "bridgeBurn", + "17338945": "unfreezeDiamond", + "8a75bb09": "saveL2LogsRootHash", + "91b19874": "validators", + "63dc94b1": "forceDeploy", + "5a590335": "getDAValidatorPair", + "60144197": "setTokenMultiplierSetter", + "938b5f32": "origin", + "36ba0355": "bridgeMint", + "6dde7209": "l2TokenBeacon", + "bf54096e": "MAX_NUMBER_OF_HYPERCHAINS", + "7e44bc5e": "setImmutables", + "8e8acf87": "getL2BlockNumberAndTimestamp", + "e30c3978": "pendingOwner", + "f5e69a47": "publishCompressedBytecode", + "84da1fb4": "getNewAddressCreate2", + "47fcedb8": "setFeeParams", + "b22dd78e": "storedBatchHash", + "57e6246b": "initialCutHash", + "2b805192": "setNewVersionUpgrade", + "dbfe3e96": "updateSecurityCouncil", + "e03fe177": "getCodeHash", + "02fa5779": "setNewBatch", + "a225efcb": "setPubdataInfo", + "9cc395d0": "bridgeCheckCounterpartAddress", + "868085b1": "getBatchProofPublicInput", + "6a0cd1f5": "removeValidator", + "2ae9c600": "protocolVersion", + "61f91b2e": "initialForceDeploymentHash", + "72425d9d": "getCurrentBlockDifficulty", + "8c2a993e": "bridgeMint", + "b473318e": "l2TransactionBaseCost", + "f851a440": "admin", + "681fe70c": "isEmpty", + "ef3f0bae": "getTotalBatchesVerified", + "ba75bbd8": "front", + "cdffacc6": "facetAddress", + "89f9a072": "validatePubdata", + "66869d49": "changeFeeParams", + "e8b99b1b": "deposit", + "4d4a1eca": "setTokenMultiplier", + "a0803ef7": "currentBlockInfo", + "fb4baf17": "changeFeeParams", + "3591c1a0": "getBridgehub", + "fd791f3c": "getL2DefaultAccountBytecodeHash", + "ec8067c7": "updateNonceOrdering", + "a3912ec8": "receiveEther", + "79823c9a": "getFirstUnprocessedPriorityTx", + "235d9eb5": "setTokenMultiplier", + "dd354a06": "calculateCreate2TokenAddress", + "7efda2ae": "proveL2LeafInclusion", + "f120e6c4": "encodeTxDataHash", + "f5f15168": "l2TokenAddress", + "4d2301cc": "getEthBalance", + "ab07b2e9": "getL2GasPrice", + "363bf964": "setAddresses", + "607457f2": "setShouldRevertOnCommitBatches", + "d1ba7e97": "hyperchainAddress", + "841a9d42": "aggregate3Value", + "ea6c029c": "baseTokenGasPriceMultiplierNominator", + "de8fa431": "getSize", + "24a55db9": "markBytecodeAsPublished", + "c438a9f2": "L2_LEGACY_SHARED_BRIDGE", + "ddeaa8e6": "getBatchHash", + "8f31f052": "isWithdrawalFinalized", + "41cf49bb": "prepareChainCommitment", + "5d382700": "create2Account", + "6d9860e1": "l1AssetRouter", + "e1ad1162": "transfer", + "bf1fe420": "setGasPrice", + "a1954fc5": "getTotalPriorityTxs", + "c0a16dda": "setAssetDeploymentTracker", + "4145ca27": "removePriorityQueueFront", + "09e14277": "setStateTransitionManager", + "1f067457": "revertTransfer", + "b8c2f66f": "getTotalBatchesExecuted", + "07ee9355": "l2BridgeAddress", + "095ea7b3": "approve", + "84b0196e": "eip712Domain", + "18b1771f": "getAssetId", + "f85894c5": "forwardedBridgeBurn", + "bd7c5412": "isEthWithdrawalFinalized", + "70a08231": "balanceOf", + "3425eb89": "tokenMultiplierSetter", + "5aa9b6b5": "getRawNonce", + "7ab08472": "finalizeWithdrawalLegacyErc20Bridge", + "205c2878": "withdrawTo", + "ec3d5f88": "setPriorityTxMaxGasLimit", + "8eb7db57": "bridgehubConfirmL2Transaction", + "2a72b707": "bridgehubRequestL2Transaction", + "0f3fa211": "setNativeTokenVault", + "4bed8212": "isWithdrawalFinalized", + "0c56efe9": "initializeV2", + "501e60d5": "setUpgradeDiamondCut", + "c29f093f": "setSTM", + "f2fde38b": "transferOwnership", + "8c5a3445": "general", + "ca8f93f1": "setLegacyBaseTokenAssetId", + "71abd109": "upgrade", + "eced0bf0": "__DEPRECATED_tokenIsRegistered", + "dc8e4b26": "registerSettlementLayer", + "310ab089": "getImmutable", + "19cae462": "difficulty", + "77421056": "setFunctionToCall", + "3997d064": "tryAggregate", + "f1d357e5": "L1_SHARED_BRIDGE", + "952a3ee7": "getERC20Getters", + "29b98c67": "isDiamondStorageFrozen", + "17d7de7c": "getName", + "e81e0ba1": "isFunctionFreezable", + "7ebba672": "setTokenMultiplier", + "6ee1dc20": "validateNonceUsage", + "6a27e8b5": "getSettlementLayer", + "7a28adb2": "proveL2LogInclusion", + "671a7131": "settlementLayer", + "accdd16c": "freezeChain", + "c3bbd2d7": "isFacetFreezable", + "99a88ec4": "upgrade", + "95f11a40": "bridgeInitialize", + "c9f5c932": "requestL2TransactionTwoBridges", + "f1a78aa6": "postTransaction", + "ca65fe79": "finalizeDeposit", + "5518c73b": "getStateTransitionManager", + "b5b18fe5": "processL2Logs", + "969b53da": "l1Bridge", + "e8a71ca9": "forwardedBridgeMint", + "505e6d47": "updateAllLeaves", + "ecf95b8a": "createAccount", + "84d9fedd": "popFront", + "3f4ba83a": "unpause", + "1f98fa08": "createNewChain", + "313ce567": "decimals", + "3ce695e7": "registerSTMAssetOnL1", + "73c58a2d": "publishBlobs", + "f0e9da23": "readAddress", + "e23d2563": "getEraChainId", + "0ec6b0b7": "getPriorityTxMaxGasLimit", + "fdbb0301": "__DEPRECATED_l2BridgeAddress", + "52d1902d": "proxiableUUID", + "97bb3ce9": "tokenAddress", + "5d83b6da": "__DEPRECATED_baseToken", + "966c523e": "blockAndAggregate", + "f4943a20": "protocolVersionDeadline", + "46746c7d": "commitBatchesSharedBridge", + "87d9d023": "verify", + "57f3921f": "stmAssetIdToAddress", + "e516761e": "markFactoryDeps", + "daa51a8c": "pushBack", + "2e1a7d4d": "withdraw", + "af6ed122": "executeUpgrade", + "a6f2c076": "setDataToBeReturnedInFinalizeWithdrawal", + "01eae183": "depositAmount", + "9e8945d2": "verificationKeyHash", + "a3bd0112": "genesisUpgrade", + "927c4bf7": "upgradeExternal", + "56079ac8": "sendL2ToL1Log", + "d92f86a2": "setLegacyChainAddress", + "be6f11cf": "setPriorityTxMaxGasLimit", + "7321c485": "dummySetValidator", + "c0991525": "claimFailedDeposit", + "72d74cd7": "reinitializeToken", + "ab93d6f3": "requestL2TransactionToGatewayMailbox", + "3601e63e": "bridgeRecoverFailedTransfer", + "eb672419": "requestL2Transaction", + "af6a2dcd": "getTotalBlocksVerified", + "27eb6c0f": "securityCouncil", + "4c6314f0": "getMarker", + "49a7cc72": "payForTransaction", + "f20265d2": "setRevertTransfer", + "84bc3eb0": "withdrawWithMessage", + "79c4f929": "markBytecodeAsPublished", + "580d6bff": "updateAllNodesAtHeight", + "e5355c75": "getL2SystemContractsUpgradeBatchNumber", + "ca408c23": "bridgehubDeposit", + "6ab8f82e": "proveL2LogInclusion", + "7528c2c6": "applyL1ToL2Alias", + "59890bcb": "setExecutedBatches", + "b19f0ade": "executeUpgradeNoOverlap", + "15f9a2fe": "prepareForPaymaster", + "6e9d7899": "legacyBridge", + "ef0e2ff4": "setChainId", + "e52db4ca": "baseTokenAssetId", + "0f28c97d": "getCurrentBlockTimestamp", + "d0e30db0": "deposit", + "9623609d": "upgradeAndCall", + "5ca1e165": "getRoot", + "fe173b97": "gasPrice", + "a851ae78": "setTxOrigin", + "18717dc1": "setPorterAvailability", + "cbcf2e3c": "isTransactionAllowed", + "c4d66de8": "initialize", + "7c9bd1f3": "publishTimestampDataToL1", + "69c76df2": "readUint32", + "a75b496d": "getAllHyperchainChainIDs", + "f5ba4232": "removeStateTransitionManager", + "42cbb15c": "getBlockNumber", + "607e2cb2": "setRevertReceive", + "328ef4fe": "setBaseTokenGasMultiplierPrice", + "1c50cfea": "addTokenAssetId", + "6d1d8363": "scheduleShadow", + "9cc7f708": "balanceOf", + "933999fb": "deposit", + "c2e047ff": "aggregate3", + "bb7044b6": "stateTransitionManagerIsRegistered", + "d4ce08c2": "addNewChain", + "f34d1868": "setExecutionDelay", + "9caf9bac": "setX", + "f113c88b": "createNewChain", + "1cc5d103": "setPorterAvailability", + "cdf25430": "L1_ASSET_ROUTER", + "def9d6af": "protocolVersionIsActive", + "c21a38e2": "proveL2MessageInclusion", + "e543e5bf": "setChainCreationParams", + "4be99e1d": "getCurrentPubdataCost", + "74f4d30d": "storedBlockHash", + "f8f7cd76": "validateTransaction", + "7a0ed627": "facets", + "38a78092": "increaseMinNonce", + "8cb7f3d0": "forceDeployOnAddresses", + "a2d5a0cc": "proveBatchesSharedBridge", + "301e7765": "getChainAdmin", + "fb644fc5": "addChainBatchRoot", + "6006d8b5": "verifyCompressedStateDiffs", + "39509351": "increaseAllowance", + "51cff8d9": "withdraw", + "8ffe1b81": "setBridgeHubAddress", + "95ce3e93": "decodeString", + "09824a80": "registerToken", + "d86970d8": "getL2BootloaderBytecodeHash", + "a31ee5b0": "initialize", + "0d4651aa": "storeAccountConstructedCodeHash", + "9a188371": "requestL2TransactionDirect", + "ed1d7d97": "chainIndexToId", + "c63c4e9b": "minDelay", + "546b6d2a": "SHARED_BRIDGE", + "187598a5": "getNewAddressCreate", + "bf529569": "setFreezability", + "cfe7af7c": "finalizeDeposit", + "bcf284e5": "executeTransaction", + "3437949a": "l1GenesisUpgrade", + "f54266a2": "l1TokenAddress", + "c9d1c097": "stmAssetIdFromChainId", + "39d7d4aa": "getPriorityTreeRoot", + "41c841c3": "L1_WETH_TOKEN", + "19fa7f62": "claimFailedDeposit", + "5c60da1b": "implementation", + "dd62ed3e": "allowance", + "9cd45184": "chainBalance", + "7958004c": "getOperationState", + "8cf2b2f0": "uncheckedInc", + "715018a6": "renounceOwnership", + "30bda03e": "setL1Erc20Bridge", + "c0d5b949": "getCurrentPubdataSpent", + "4de2e468": "getRawCodeHash", + "7ecebe00": "nonces", + "0e18b681": "acceptAdmin", + "d0468156": "getPendingAdmin", + "d83e4e03": "genesisUpgrade", + "49eb3b50": "getTransactionHashes", + "ebf0c717": "root", + "8da5cb5b": "owner", + "11a2ccc1": "finalizeWithdrawal", + "1dd93b33": "keccakValidationTest", + "f088ccdc": "callCodeOracle", + "aad74262": "setProtocolVersionDeadline", + "72c84445": "callKeccak", + "21f603d7": "setTransactionFilterer", + "52ef6b2c": "facetAddresses", + "9e6ea417": "depositLegacyErc20Bridge", + "960dcf24": "getBaseTokenAssetId", + "a888cc3a": "bridgehubRequestL2TransactionOnGateway", + "c7ca373c": "initFromCommitment", + "548a5a33": "setAssetHandlerAddressThisChain", + "402efc91": "stateTransitionManager", + "7b30c8da": "getL2SystemContractsUpgradeTxHash", + "0ef26743": "height", + "79ba5097": "acceptOwnership", + "584b153e": "isOperationPending", + "06fdde03": "name", + "e717bab7": "proveL1ToL2TransactionStatusViaGateway", + "a8b0574e": "getCurrentBlockCoinbase", + "30e5ccbd": "incrementTxNumberInBatch", + "ef011dff": "ERA_CHAIN_ID", + "f8c1f0d2": "upgradeChainFromVersion", + "f3b7dead": "getProxyAdmin", + "f26f3c8f": "proveL2MessageInclusion", + "3558c188": "executeBatches", + "bcd1b23d": "updateFullTree", + "3a3f36f9": "codeOracleTest", + "1de72e34": "baseTokenGasPriceMultiplierDenominator", + "81d100a3": "scheduleTransparent", + "85e4e16a": "assetDeploymentTracker", + "204e1c7a": "getProxyImplementation", + "d566afd3": "createBatchCommitment", + "70f5c679": "setMessageRoot", + "07168226": "deployBeaconProxy", + "7b574586": "publishedBlobCommitments", + "fcc73360": "updateLeaf", + "631f4bac": "getPriorityQueueSize", + "3e64a696": "getBasefee", + "facd743b": "isValidator", + "7fb67816": "setValidatorTimelock", + "ee82ac5e": "getBlockHash", + "6e9960c3": "getAdmin", + "98acd7a6": "getBaseToken", + "06e7517b": "appendTransactionToCurrentL2Block", + "b993549e": "getCommittedBatchTimestamp", + "23dc4a09": "keccakPerformUpgrade", + "cf347e17": "setValidator", + "3408e470": "getChainId", + "ae1f6aaf": "l2Bridge", + "c2e90293": "bridgeRecoverFailedTransfer", + "86b7f856": "publishPubdataAndClearState", + "b292f5f1": "proveL1ToL2TransactionStatus", + "7a592065": "calculateRoot", + "a5277a02": "initialize", + "ef939455": "keccakUpgradeTest", + "3644e515": "DOMAIN_SEPARATOR", + "306395c6": "incrementDeploymentNonce", + "b277f199": "uncheckedAdd", + "6fadcf72": "forward", + "ae65def1": "node", + "e0bf0850": "setShouldRevertOnProveBatches", + "a457c2d7": "decreaseAllowance", + "9f3f89dc": "getZero", + "4dd18bf5": "setPendingAdmin", + "33ce93fe": "getProtocolVersion", + "c87325f1": "finalizeWithdrawal", + "40a434d5": "transferTokenToNTV", + "e9420f8c": "whitelistedSettlementLayers", + "3f704d2a": "setAssetHandlerAddress", + "ede25608": "protocolVersionToUpgradeTimestamp", + "042901c7": "proveL1ToL2TransactionStatus", + "cab7e8eb": "isNonceUsed", + "5aa6fa1f": "NATIVE_TOKEN_VAULT", + "b8776d4d": "chainRegistered", + "8fbb3711": "claimFailedDepositLegacyErc20Bridge", + "8dd14802": "setBridge", + "b3160bad": "executeBatchesSharedBridge", + "f5c1182c": "getSemverProtocolVersion", + "8b257989": "executionDelay", + "588570a5": "initialize", + "4cd40a02": "setLegacyTokenAssetId", + "d124dc4f": "send", + "23b872dd": "transferFrom", + "086a56f8": "getBaseTokenBridge", + "689992b3": "undoL1ToL2Alias", + "03c5d8af": "forwardTransactionOnGateway", + "48ceb85e": "chainIndex", + "ba334825": "hyperchain", + "b1fde1a8": "sharedTree", + "7069d0c0": "executeInstant", + "c2aaf9c4": "receiveEth", + "2986c0e5": "index", + "b5872958": "timestamps", + "c2e4ff97": "markAccountCodeHashAsConstructed", + "9c4d535b": "create", + "923b3b56": "forceDeployOnAddress", + "3635f3e6": "resetTxNumberInBatch", + "19698bc9": "infiniteFunction", + "315fff4e": "THIS_ADDRESS", + "52c9eacb": "upgradeCutHash", + "18e3a941": "getVerifierParams", + "29f172ad": "unsafeOverrideBatch", + "4b561753": "addValidator", + "a9059cbb": "transfer", + "949431dc": "approvalBased", + "8f283970": "changeAdmin", + "85df51fd": "blockHash", + "dead6f7f": "getHyperchain", + "896909dc": "getMinNonce", + "7eff275e": "changeProxyAdmin", + "27ae4c16": "freezeDiamond", + "566338a9": "getL1TokenAddress", + "8ac84c0e": "txNumberInBlock", + "53ce2061": "revertBatches", + "9a8a0592": "chainId", + "f5407abe": "setValues", + "46657fe9": "getVerifier", + "484f0505": "getHyperchainLegacy", + "b760faf9": "depositTo", + "5de097b1": "nullifyChainBalanceByNTV", + "e8295588": "zeros", + "f90eb963": "getPorterAvailability", + "57180981": "updateAccountVersion", + "579952fc": "transferFromTo", + "d505accf": "permit", + "e02da327": "readUint256", + "51d218f7": "unfreezeChain", + "8466d8d1": "getBridgeHubAddress", + "b381724e": "setFeeParams", + "d9caed12": "withdraw", + "9d1b5a81": "getL2SystemContractsUpgradeBlockNumber" +} \ No newline at end of file