[{"data":1,"prerenderedAt":2035},["ShallowReactive",2],{"navigation":3,"/zksync-network/zksync-connect/messaging":778,"/zksync-network/zksync-connect/messaging-surround":2030},[4,342,457],{"title":5,"_path":6,"children":7},"ZKsync Network","/zksync-network",[8,10,25,37,74,237,268,282,333],{"title":9,"_path":6},"Introduction",{"title":11,"_path":12,"children":13},"Quickstart","/zksync-network/quick-start",[14,16,19,22],{"title":15,"_path":12},"Setup",{"title":17,"_path":18},"Deploy your first contract","/zksync-network/quick-start/deploy-your-first-contract",{"title":20,"_path":21},"Interact with your contract","/zksync-network/quick-start/interact-with-your-contract",{"title":23,"_path":24},"Build a Frontend","/zksync-network/quick-start/build-a-frontend",{"title":26,"_path":27,"children":28},"Environment","/zksync-network/environment",[29,31,34],{"title":30,"_path":27},"Elastic Network Chains",{"title":32,"_path":33},"L1 contracts","/zksync-network/environment/l1-contracts",{"title":35,"_path":36},"System contracts","/zksync-network/environment/l2-contracts",{"title":38,"_path":39,"children":40},"Unique features","/zksync-network/unique-features",[41],{"title":42,"_path":43,"children":44},"ZKsync SSO","/zksync-network/unique-features/zksync-sso",[45,47,50,53,56,59,62,65,68,71],{"title":46,"_path":43},"SSO Intro",{"title":48,"_path":49},"Getting Started","/zksync-network/unique-features/zksync-sso/getting-started",{"title":51,"_path":52},"Architecture","/zksync-network/unique-features/zksync-sso/architecture",{"title":54,"_path":55},"Auth Server","/zksync-network/unique-features/zksync-sso/auth-server",{"title":57,"_path":58},"Sessions","/zksync-network/unique-features/zksync-sso/sessions",{"title":60,"_path":61},"Passkeys","/zksync-network/unique-features/zksync-sso/passkeys",{"title":63,"_path":64},"Accounts","/zksync-network/unique-features/zksync-sso/accounts",{"title":66,"_path":67},"Account Recovery","/zksync-network/unique-features/zksync-sso/account-recovery",{"title":69,"_path":70},"Transaction Flow","/zksync-network/unique-features/zksync-sso/transaction-flow",{"title":72,"_path":73},"FAQs","/zksync-network/unique-features/zksync-sso/faqs",{"title":75,"_path":76,"children":77},"Tooling","/zksync-network/tooling",[78,92,148,173,228,231,234],{"title":79,"_path":80,"children":81},"Local setup","/zksync-network/tooling/local-setup",[82,83,86,89],{"title":48,"_path":80},{"title":84,"_path":85},"anvil-zksync","/zksync-network/tooling/local-setup/anvil-zksync-node",{"title":87,"_path":88},"Docker L1 - L2 Nodes","/zksync-network/tooling/local-setup/dockerized-l1-l2-nodes",{"title":90,"_path":91},"Continuous Integration","/zksync-network/tooling/local-setup/continuous-integration",{"title":93,"_path":94,"children":95},"Hardhat","/zksync-network/tooling/hardhat",[96,98,101,114],{"title":97,"_path":94},"Overview",{"title":99,"_path":100},"Installation","/zksync-network/tooling/hardhat/installation",{"title":102,"_path":103,"children":104},"Guides","/zksync-network/tooling/hardhat/guides",[105,108,111],{"title":106,"_path":107},"Getting started","/zksync-network/tooling/hardhat/guides/getting-started",{"title":109,"_path":110},"Migrating Hardhat project to ZKsync Era","/zksync-network/tooling/hardhat/guides/migrating-to-zksync",{"title":112,"_path":113},"Compiling non-inlinable libraries","/zksync-network/tooling/hardhat/guides/compiling-libraries",{"title":115,"_path":116,"children":117},"Plugins","/zksync-network/tooling/hardhat/plugins",[118,121,124,127,130,133,136,139,142,145],{"title":119,"_path":120},"hardhat-zksync","/zksync-network/tooling/hardhat/plugins/hardhat-zksync",{"title":122,"_path":123},"hardhat-zksync-solc","/zksync-network/tooling/hardhat/plugins/hardhat-zksync-solc",{"title":125,"_path":126},"hardhat-zksync-vyper","/zksync-network/tooling/hardhat/plugins/hardhat-zksync-vyper",{"title":128,"_path":129},"hardhat-zksync-deploy","/zksync-network/tooling/hardhat/plugins/hardhat-zksync-deploy",{"title":131,"_path":132},"hardhat-zksync-upgradable","/zksync-network/tooling/hardhat/plugins/hardhat-zksync-upgradable",{"title":134,"_path":135},"hardhat-zksync-verify","/zksync-network/tooling/hardhat/plugins/hardhat-zksync-verify",{"title":137,"_path":138},"hardhat-zksync-verify-vyper","/zksync-network/tooling/hardhat/plugins/hardhat-zksync-verify-vyper",{"title":140,"_path":141},"hardhat-zksync-ethers","/zksync-network/tooling/hardhat/plugins/hardhat-zksync-ethers",{"title":143,"_path":144},"hardhat-zksync-node","/zksync-network/tooling/hardhat/plugins/hardhat-zksync-node",{"title":146,"_path":147},"Hardhat Community Plugins","/zksync-network/tooling/hardhat/plugins/other-plugins",{"title":149,"_path":150,"children":151},"Foundry","/zksync-network/tooling/foundry",[152,154,156,158],{"title":97,"_path":153},"/zksync-network/tooling/foundry/overview",{"title":99,"_path":155},"/zksync-network/tooling/foundry/installation",{"title":48,"_path":157},"/zksync-network/tooling/foundry/getting-started",{"title":159,"_path":160,"children":161},"Migration Guide","/zksync-network/tooling/foundry/migration-guide",[162,164,167,170],{"title":97,"_path":163},"/zksync-network/tooling/foundry/migration-guide/overview",{"title":165,"_path":166},"Compilation","/zksync-network/tooling/foundry/migration-guide/compilation",{"title":168,"_path":169},"Deployment","/zksync-network/tooling/foundry/migration-guide/deployment",{"title":171,"_path":172},"Testing","/zksync-network/tooling/foundry/migration-guide/testing",{"title":174,"_path":175,"children":176},"ZKsync CLI","/zksync-network/tooling/zksync-cli",[177,178,181,184,187,190,193,196,199,202],{"title":48,"_path":175},{"title":179,"_path":180},"Reading transaction data","/zksync-network/tooling/zksync-cli/reading-transaction-data",{"title":182,"_path":183},"Wallet actions","/zksync-network/tooling/zksync-cli/wallet-actions",{"title":185,"_path":186},"Bridging","/zksync-network/tooling/zksync-cli/bridging",{"title":188,"_path":189},"Interact with contracts","/zksync-network/tooling/zksync-cli/interact-with-contracts",{"title":191,"_path":192},"Creating projects","/zksync-network/tooling/zksync-cli/creating-projects",{"title":194,"_path":195},"Running a node","/zksync-network/tooling/zksync-cli/running-a-node",{"title":197,"_path":198},"Configuring chains","/zksync-network/tooling/zksync-cli/configuring-chains",{"title":200,"_path":201},"Troubleshooting","/zksync-network/tooling/zksync-cli/troubleshooting",{"title":203,"_path":204,"children":205},"CLI Reference","/zksync-network/tooling/zksync-cli/reference",[206,207,210,213,216,219,222,225],{"title":97,"_path":204},{"title":208,"_path":209},"zksync-cli bridge","/zksync-network/tooling/zksync-cli/reference/zksync-cli-bridge",{"title":211,"_path":212},"zksync-cli config chains","/zksync-network/tooling/zksync-cli/reference/zksync-cli-config-chains",{"title":214,"_path":215},"zksync-cli contract","/zksync-network/tooling/zksync-cli/reference/zksync-cli-contract",{"title":217,"_path":218},"zksync-cli create","/zksync-network/tooling/zksync-cli/reference/zksync-cli-create",{"title":220,"_path":221},"zksync-cli dev","/zksync-network/tooling/zksync-cli/reference/zksync-cli-dev",{"title":223,"_path":224},"zksync-cli transaction","/zksync-network/tooling/zksync-cli/reference/zksync-cli-transaction",{"title":226,"_path":227},"zksync-cli wallet","/zksync-network/tooling/zksync-cli/reference/zksync-cli-wallet",{"title":229,"_path":230},"Block explorers","/zksync-network/tooling/block-explorers",{"title":232,"_path":233},"ZKsync External Node","/zksync-network/tooling/external-node",{"title":235,"_path":236},"ZKsync Easy On-Ramp","/zksync-network/tooling/zksync-easy-onramp",{"title":238,"_path":239,"children":240},"ZKsync Connect","/zksync-network/zksync-connect",[241,242,257,259,262,265],{"title":97,"_path":239},{"title":102,"_path":243,"children":244},"/zksync-network/zksync-connect/guides",[245,248,251,254],{"title":246,"_path":247},"Local Setup","/zksync-network/zksync-connect/guides/local-setup",{"title":249,"_path":250},"Transaction Bundles","/zksync-network/zksync-connect/guides/transaction-bundles",{"title":252,"_path":253},"Asset Transfers","/zksync-network/zksync-connect/guides/asset-transfers",{"title":255,"_path":256},"Interop Messages","/zksync-network/zksync-connect/guides/interop-messages",{"title":249,"_path":258},"/zksync-network/zksync-connect/transaction-bundles",{"title":260,"_path":261},"Crosschain Asset Transfers","/zksync-network/zksync-connect/crosschain-asset-transfers",{"title":263,"_path":264},"Messaging","/zksync-network/zksync-connect/messaging",{"title":266,"_path":267},"Interop Fees","/zksync-network/zksync-connect/interop-fees",{"title":269,"_path":270,"children":271},"ZKsync OS Developer Preview","/zksync-network/zksync-os",[272,274,277,280],{"title":273,"_path":270},"ZKsync OS Overview",{"title":275,"_path":276},"Network Details","/zksync-network/zksync-os/network-details",{"title":278,"_path":279},"Developer Quickstart","/zksync-network/zksync-os/quickstart",{"title":72,"_path":281},"/zksync-network/zksync-os/faqs",{"title":283,"_path":284,"children":285},"ZKsync Era","/zksync-network/zksync-era",[286,288,291,294,330],{"title":287,"_path":284},"About ZKsync Era",{"title":289,"_path":290},"ZKsync Era RPC","/zksync-network/zksync-era/network-details",{"title":292,"_path":293},"Features","/zksync-network/zksync-era/unique-features",{"title":295,"_path":296,"children":297},"Ecosystem","/zksync-network/zksync-era/ecosystem",[298,300,303,306,309,312,315,318,321,324,327],{"title":299,"_path":296},"Explore the ecosystem",{"title":301,"_path":302},"Bridges","/zksync-network/zksync-era/ecosystem/bridges",{"title":304,"_path":305},"Cross chain","/zksync-network/zksync-era/ecosystem/cross-chain",{"title":307,"_path":308},"Data indexers","/zksync-network/zksync-era/ecosystem/data-indexers",{"title":310,"_path":311},"Monitoring","/zksync-network/zksync-era/ecosystem/monitoring",{"title":313,"_path":314},"Network faucets","/zksync-network/zksync-era/ecosystem/network-faucets",{"title":316,"_path":317},"Oracles","/zksync-network/zksync-era/ecosystem/oracles",{"title":319,"_path":320},"RPC providers","/zksync-network/zksync-era/ecosystem/node-providers",{"title":322,"_path":323},"Wallets","/zksync-network/zksync-era/ecosystem/wallets",{"title":325,"_path":326},"User Onboarding","/zksync-network/zksync-era/ecosystem/user-onboarding",{"title":328,"_path":329},"Paymasters","/zksync-network/zksync-era/ecosystem/paymasters",{"title":331,"_path":332},"Security and best practices","/zksync-network/zksync-era/security-best-practices",{"title":334,"_path":335,"children":336},"Contributing","/zksync-network/contributing",[337,339],{"title":338,"_path":335},"Contributing to Documentation",{"title":340,"_path":341},"Protocol Contributions","/zksync-network/contributing/protocol-contributions",{"title":343,"_path":344,"children":345},"ZK Stack","/zk-stack",[346,348,351,381,403,419,454],{"title":347,"_path":344},"ZK Stack Overview",{"title":349,"_path":350},"ZKsync Chains","/zk-stack/zk-chains",{"title":352,"_path":353,"children":354},"Components","/zk-stack/components",[355,357,360,363,372,375,378],{"title":356,"_path":353},"ZK Stack Components Overview",{"title":358,"_path":359},"ZKsync OS","/zk-stack/components/zksync-os",{"title":361,"_path":362},"ZKsync OS Server","/zk-stack/components/server",{"title":364,"_path":365,"children":366},"ZKsync Airbender","/zk-stack/components/zksync-airbender",[367,369],{"title":368,"_path":365},"Airbender Overview",{"title":370,"_path":371},"Airbender Deep Dive","/zk-stack/components/zksync-airbender/deepdive",{"title":373,"_path":374},"Block explorer","/zk-stack/components/block-explorer",{"title":376,"_path":377},"Portal","/zk-stack/components/portal",{"title":379,"_path":380},"Fee withdrawer","/zk-stack/components/fee-withdrawer",{"title":382,"_path":383,"children":384},"Run a ZKsync Chain","/zk-stack/running",[385,388,391,394,397,400],{"title":386,"_path":387},"Launch a ZKsync chain","/zk-stack/running/quickstart",{"title":389,"_path":390},"Interact with your chain","/zk-stack/running/using-a-local-zk-chain",{"title":392,"_path":393},"ZKsync Gateway","/zk-stack/running/gateway-settlement-layer",{"title":395,"_path":396},"Prover setup","/zk-stack/running/proving",{"title":398,"_path":399},"Ownership Model","/zk-stack/running/ownership-model",{"title":401,"_path":402},"Rollup as a Service","/zk-stack/running/raas",{"title":404,"_path":405,"children":406},"Customizations","/zk-stack/customizations",[407,410,413,416],{"title":408,"_path":409},"Custom base tokens","/zk-stack/customizations/custom-base-tokens",{"title":411,"_path":412},"Validium in ZK Stack","/zk-stack/customizations/validium",{"title":414,"_path":415},"Configurations","/zk-stack/customizations/configurations",{"title":417,"_path":418},"Transaction filtering","/zk-stack/customizations/transaction-filtering",{"title":420,"_path":421,"children":422},"Prividium™","/zk-stack/prividium",[423,426,428,430,433,436,439,442,445,448,451],{"title":424,"_path":425},"Prividium™ Overview","/zk-stack/prividium/overview",{"title":292,"_path":427},"/zk-stack/prividium/features",{"title":51,"_path":429},"/zk-stack/prividium/architecture",{"title":431,"_path":432},"Deployment Model","/zk-stack/prividium/deployment",{"title":434,"_path":435},"Proxy RPC API","/zk-stack/prividium/proxy",{"title":437,"_path":438},"Administration and User Management","/zk-stack/prividium/administration-user-management",{"title":440,"_path":441},"Permissions and Access Control","/zk-stack/prividium/permissions-overview",{"title":443,"_path":444},"Prividium™ SDK","/zk-stack/prividium/sdk",{"title":446,"_path":447},"Private Block Explorer","/zk-stack/prividium/explorer",{"title":449,"_path":450},"Developer Considerations","/zk-stack/prividium/developer-considerations",{"title":452,"_path":453},"Prividium™ License Model","/zk-stack/prividium/license",{"title":455,"_path":456},"Open Source License","/zk-stack/license",{"title":458,"_path":459,"children":460},"ZKsync Protocol","/zksync-protocol",[461,463,480,505,518,539,558,571,775],{"title":462,"_path":459},"Getting started with ZKsync protocol",{"title":464,"_path":465,"children":466},"ZKsync protocol overview","/zksync-protocol/rollup",[467,468,471,474,477],{"title":464,"_path":465},{"title":469,"_path":470},"Bridging assets","/zksync-protocol/rollup/bridging-assets",{"title":472,"_path":473},"Finality","/zksync-protocol/rollup/finality",{"title":475,"_path":476},"Data availability","/zksync-protocol/rollup/data-availability",{"title":478,"_path":479},"Pubdata compression","/zksync-protocol/rollup/pubdata-compression",{"title":358,"_path":481,"children":482},"/zksync-protocol/zksyncos",[483,484,487,490,493,496,499,502],{"title":273,"_path":481},{"title":485,"_path":486},"Double Resource Accounting","/zksync-protocol/zksyncos/double-accounting",{"title":488,"_path":489},"Bootloader","/zksync-protocol/zksyncos/bootloader",{"title":491,"_path":492},"Execution Environments","/zksync-protocol/zksyncos/execution-environment",{"title":494,"_path":495},"System","/zksync-protocol/zksyncos/system",{"title":497,"_path":498},"Processing of Transactions","/zksync-protocol/zksyncos/tx-processing",{"title":500,"_path":501},"System Hooks","/zksync-protocol/zksyncos/system-hooks",{"title":503,"_path":504},"Runner Flow","/zksync-protocol/zksyncos/runner-flow",{"title":392,"_path":506,"children":507},"/zksync-protocol/gateway",[508,510,512,515],{"title":509,"_path":506},"Gateway Overview",{"title":292,"_path":511},"/zksync-protocol/gateway/features",{"title":513,"_path":514},"Data Availability Considerations","/zksync-protocol/gateway/da-considerations",{"title":516,"_path":517},"Frequently Asked Questions","/zksync-protocol/gateway/gateway-faq",{"title":519,"_path":520,"children":521},"Web3 API","/zksync-protocol/api",[522,524,527,530,533,536],{"title":523,"_path":520},"API Overview",{"title":525,"_path":526},"Conventions","/zksync-protocol/api/conventions",{"title":528,"_path":529},"Ethereum JSON-RPC API","/zksync-protocol/api/ethereum-rpc",{"title":531,"_path":532},"Debug JSON-RPC API","/zksync-protocol/api/debug-rpc",{"title":534,"_path":535},"ZKsync JSON-RPC API","/zksync-protocol/api/zks-rpc",{"title":537,"_path":538},"PubSub JSON-RPC API","/zksync-protocol/api/pub-sub-rpc",{"title":540,"_path":541,"children":542},"Contracts","/zksync-protocol/contracts",[543,545],{"title":544,"_path":541},"ZKsync contracts",{"title":32,"_path":546,"children":547},"/zksync-protocol/contracts/l1-contracts",[548,549,552,555],{"title":32,"_path":546},{"title":550,"_path":551},"L1 ecosystem contracts","/zksync-protocol/contracts/l1-contracts/l1-ecosystem-contracts",{"title":553,"_path":554},"Shared bridges","/zksync-protocol/contracts/l1-contracts/shared-bridges",{"title":556,"_path":557},"ZKsync Chain addresses","/zksync-protocol/contracts/l1-contracts/zk-chain-addresses",{"title":559,"_path":560,"children":561},"Protocol security","/zksync-protocol/security",[562,565,568],{"title":563,"_path":564},"Audits","/zksync-protocol/security/audits",{"title":566,"_path":567},"Bug bounty","/zksync-protocol/security/bug-bounty",{"title":569,"_path":570},"Withdrawal delay","/zksync-protocol/security/withdrawal-delay",{"title":572,"_path":573,"children":574},"EraVM Chains","/zksync-protocol/era-vm",[575,577,604,613,630,695,707,729,756],{"title":576,"_path":573},"EraVM Overview",{"title":578,"_path":579,"children":580},"Transactions","/zksync-protocol/era-vm/transactions",[581,584,587,590],{"title":582,"_path":583},"Transaction lifecycle","/zksync-protocol/era-vm/transactions/transaction-lifecycle",{"title":585,"_path":586},"Blocks and batches","/zksync-protocol/era-vm/transactions/blocks",{"title":588,"_path":589},"L1 \u003C-> L2 communication","/zksync-protocol/era-vm/transactions/l1_l2_communication",{"title":591,"_path":592,"children":593},"Fee model","/zksync-protocol/era-vm/transactions/fee-model",[594,595,598,601],{"title":591,"_path":592},{"title":596,"_path":597},"How L2 gas price works","/zksync-protocol/era-vm/transactions/fee-model/how-l2-gas-price-works",{"title":599,"_path":600},"How ZKsync Chains charges for pubdata","/zksync-protocol/era-vm/transactions/fee-model/how-we-charge-for-pubdata",{"title":602,"_path":603},"ZKsync fee structure","/zksync-protocol/era-vm/transactions/fee-model/fee-structure",{"title":605,"_path":606,"children":607},"EraVM","/zksync-protocol/era-vm/vm",[608,610],{"title":609,"_path":606},"ZKsync Virtual Machine primer",{"title":611,"_path":612},"VM formal specification","/zksync-protocol/era-vm/vm/formal-spec",{"title":540,"_path":614,"children":615},"/zksync-protocol/era-vm/contracts",[616,617,619,621,624,627],{"title":544,"_path":614},{"title":488,"_path":618},"/zksync-protocol/era-vm/contracts/bootloader",{"title":35,"_path":620},"/zksync-protocol/era-vm/contracts/system-contracts",{"title":622,"_path":623},"Handling L1->L2 ops on ZKsync","/zksync-protocol/era-vm/contracts/handling-l1-l2-ops",{"title":625,"_path":626},"Handling pubdata","/zksync-protocol/era-vm/contracts/handling-pubdata",{"title":628,"_path":629},"Pubdata post 4844","/zksync-protocol/era-vm/contracts/pubdata-post-4844",{"title":631,"_path":632,"children":633},"Circuits","/zksync-protocol/era-vm/circuits",[634,635,638,689,692],{"title":97,"_path":632},{"title":636,"_path":637},"ZK terminology","/zksync-protocol/era-vm/circuits/zk-terminology",{"title":639,"_path":640,"children":641},"Concrete circuits","/zksync-protocol/era-vm/circuits/circuits",[642,643,646,649,652,655,658,661,664,667,670,673,676],{"title":97,"_path":640},{"title":644,"_path":645},"Circuit testing","/zksync-protocol/era-vm/circuits/circuits/circuit-testing",{"title":647,"_path":648},"CodeDecommitter","/zksync-protocol/era-vm/circuits/circuits/code-decommitter",{"title":650,"_path":651},"DemuxLogQueue","/zksync-protocol/era-vm/circuits/circuits/demux-log-queue",{"title":653,"_path":654},"ECRecover","/zksync-protocol/era-vm/circuits/circuits/ecrecover",{"title":656,"_path":657},"KeccakRoundFunction","/zksync-protocol/era-vm/circuits/circuits/keccak-round-function",{"title":659,"_path":660},"L1MessagesHasher","/zksync-protocol/era-vm/circuits/circuits/l1-messages-hasher",{"title":662,"_path":663},"LogSorter","/zksync-protocol/era-vm/circuits/circuits/log-sorter",{"title":665,"_path":666},"Main VM","/zksync-protocol/era-vm/circuits/circuits/main-vm",{"title":668,"_path":669},"RAMPermutation","/zksync-protocol/era-vm/circuits/circuits/ram-permutation",{"title":671,"_path":672},"Sha256RoundFunction","/zksync-protocol/era-vm/circuits/circuits/sha256-round-function",{"title":674,"_path":675},"StorageApplication","/zksync-protocol/era-vm/circuits/circuits/storage-application",{"title":677,"_path":678,"children":679},"Sorting and deduplicating","/zksync-protocol/era-vm/circuits/circuits/sorting",[680,681,684,687],{"title":97,"_path":678},{"title":682,"_path":683},"SortDecommitments","/zksync-protocol/era-vm/circuits/circuits/sorting/sort-decommitments",{"title":685,"_path":686},"StorageSorter","/zksync-protocol/era-vm/circuits/circuits/sorting/storage-sorter",{"title":662,"_path":688},"/zksync-protocol/era-vm/circuits/circuits/sorting/log-sorter",{"title":690,"_path":691},"Boojum gadgets","/zksync-protocol/era-vm/circuits/boojum-gadgets",{"title":693,"_path":694},"Boojum function - `check_if_satisfied`","/zksync-protocol/era-vm/circuits/boojum-function-check-if-satisfied",{"title":696,"_path":697,"children":698},"Compilers","/zksync-protocol/era-vm/compiler",[699],{"title":700,"_path":701,"children":702},"Compiler toolchain overview","/zksync-protocol/era-vm/compiler/toolchain",[703,704],{"title":700,"_path":701},{"title":705,"_path":706},"LLVM framework","/zksync-protocol/era-vm/compiler/toolchain/llvm",{"title":708,"_path":709,"children":710},"Differences from L1","/zksync-protocol/era-vm/differences",[711,714,717,720,723,726],{"title":712,"_path":713},"EVM instructions","/zksync-protocol/era-vm/differences/evm-instructions",{"title":715,"_path":716},"Nonces","/zksync-protocol/era-vm/differences/nonces",{"title":718,"_path":719},"Libraries","/zksync-protocol/era-vm/differences/libraries",{"title":721,"_path":722},"Precompiles","/zksync-protocol/era-vm/differences/pre-compiles",{"title":724,"_path":725},"Native AA vs EIP 4337","/zksync-protocol/era-vm/differences/native-vs-eip4337",{"title":727,"_path":728},"Contract deployment","/zksync-protocol/era-vm/differences/contract-deployment",{"title":730,"_path":731,"children":732},"EVM Bytecode Interpreter","/zksync-protocol/era-vm/evm-interpreter",[733,735,738,741,744,747,750,753],{"title":97,"_path":734},"/zksync-protocol/era-vm/evm-interpreter/overview",{"title":736,"_path":737},"EVM bytecode deployment and execution","/zksync-protocol/era-vm/evm-interpreter/deployment-execution",{"title":739,"_path":740},"EraVM ↔ EVM Contract Interactions","/zksync-protocol/era-vm/evm-interpreter/era-evm-interactions",{"title":742,"_path":743},"Differences Between the EVM Bytecode Interpreter and Ethereum","/zksync-protocol/era-vm/evm-interpreter/evm-differences",{"title":745,"_path":746},"Technical Architecture of the EVM Interpreter","/zksync-protocol/era-vm/evm-interpreter/technical-details",{"title":748,"_path":749},"EVM Gas Interpretation","/zksync-protocol/era-vm/evm-interpreter/evm-gas-interpretation",{"title":751,"_path":752},"Pre Deployed Contracts","/zksync-protocol/era-vm/evm-interpreter/pre-deployed-contracts",{"title":754,"_path":755},"EVM Bytecode Interpreter FAQ","/zksync-protocol/era-vm/evm-interpreter/faq",{"title":757,"_path":758,"children":759},"Account Abstraction","/zksync-protocol/era-vm/account-abstraction",[760,761,764,766,769,772],{"title":9,"_path":758},{"title":762,"_path":763},"Design","/zksync-protocol/era-vm/account-abstraction/design",{"title":328,"_path":765},"/zksync-protocol/era-vm/account-abstraction/paymasters",{"title":767,"_path":768},"Building smart accounts","/zksync-protocol/era-vm/account-abstraction/building-smart-accounts",{"title":770,"_path":771},"Signature validation","/zksync-protocol/era-vm/account-abstraction/signature-validation",{"title":773,"_path":774},"Extending EIP-4337","/zksync-protocol/era-vm/account-abstraction/extending-4337",{"title":776,"_path":777},"Upgrades and migrations","/zksync-protocol/upgrades-and-migrations",{"_path":264,"_dir":779,"_draft":780,"_partial":780,"_locale":781,"title":263,"description":782,"body":783,"_type":2023,"_id":2024,"_source":2025,"_file":2026,"_stem":2027,"_extension":2028,"sitemap":2029},"zksync-connect",false,"","Learn about how send and verify messages with ZKsync Connect.",{"type":784,"children":785,"toc":2015},"root",[786,794,799,814,819,841,848,877,1204,1216,1221,1228,1332,1338,1359,1948,1954,1994,2009],{"type":787,"tag":788,"props":789,"children":790},"element","p",{},[791],{"type":792,"value":793},"text","Interop messaging enables sending and verifying messages across ZKsync chains via ZKsync Gateway.",{"type":787,"tag":788,"props":795,"children":796},{},[797],{"type":792,"value":798},"An interop message consists of arbitrary data and has two simple properties:",{"type":787,"tag":800,"props":801,"children":802},"ol",{},[803,809],{"type":787,"tag":804,"props":805,"children":806},"li",{},[807],{"type":792,"value":808},"Anyone can send a message.",{"type":787,"tag":804,"props":810,"children":811},{},[812],{"type":792,"value":813},"Anyone can verify that a given message was successfully sent on some chain.",{"type":787,"tag":788,"props":815,"children":816},{},[817],{"type":792,"value":818},"One example use case for interop messaging would be to unlock experiences on a chain based on activities on another chain.",{"type":787,"tag":788,"props":820,"children":821},{},[822,824,831,833,839],{"type":792,"value":823},"For a full step-by-step tutorial for sending and verifying interop messages using ",{"type":787,"tag":825,"props":826,"children":828},"code",{"className":827},[],[829],{"type":792,"value":830},"zksync-js",{"type":792,"value":832},",\ncheck out the ",{"type":787,"tag":834,"props":835,"children":836},"a",{"href":256},[837],{"type":792,"value":838},"interop messages guide",{"type":792,"value":840},".",{"type":787,"tag":842,"props":843,"children":845},"h2",{"id":844},"sending-a-message",[846],{"type":792,"value":847},"Sending a message",{"type":787,"tag":788,"props":849,"children":850},{},[851,853,859,861,867,869,875],{"type":792,"value":852},"To send a message, you can call the ",{"type":787,"tag":825,"props":854,"children":856},{"className":855},[],[857],{"type":792,"value":858},"sendToL1",{"type":792,"value":860}," function on the ",{"type":787,"tag":825,"props":862,"children":864},{"className":863},[],[865],{"type":792,"value":866},"L1Messenger",{"type":792,"value":868}," contract, which is pre-deployed on every ZKsync chain at address ",{"type":787,"tag":825,"props":870,"children":872},{"className":871},[],[873],{"type":792,"value":874},"0x00..008008",{"type":792,"value":876},":",{"type":787,"tag":878,"props":879,"children":883},"pre",{"className":880,"code":881,"language":882,"meta":781,"style":781},"language-solidity shiki shiki-themes github-light github-light github-dark","//SPDX-License-Identifier: Unlicense\npragma solidity ^0.8.28;\n\ninterface IL1Messenger {\n  function sendToL1(bytes calldata _message) external returns (bytes32);\n}\n\ncontract InteropSendMessage {\n  address constant L2_TO_L1_MESSENGER_SYSTEM_CONTRACT_ADDR = 0x0000000000000000000000000000000000008008;\n\n  IL1Messenger public l1Messenger = IL1Messenger(L2_TO_L1_MESSENGER_SYSTEM_CONTRACT_ADDR);\n\n  function sendMessage(bytes calldata _message) external {\n    l1Messenger.sendToL1(_message);\n  }\n}\n\n","solidity",[884],{"type":787,"tag":825,"props":885,"children":886},{"__ignoreMap":781},[887,899,927,937,957,1016,1025,1033,1051,1084,1092,1124,1132,1169,1187,1196],{"type":787,"tag":888,"props":889,"children":892},"span",{"class":890,"line":891},"line",1,[893],{"type":787,"tag":888,"props":894,"children":896},{"style":895},"--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D",[897],{"type":792,"value":898},"//SPDX-License-Identifier: Unlicense\n",{"type":787,"tag":888,"props":900,"children":902},{"class":890,"line":901},2,[903,909,915,921],{"type":787,"tag":888,"props":904,"children":906},{"style":905},"--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#F97583",[907],{"type":792,"value":908},"pragma",{"type":787,"tag":888,"props":910,"children":912},{"style":911},"--shiki-light:#22863A;--shiki-default:#22863A;--shiki-dark:#85E89D",[913],{"type":792,"value":914}," solidity",{"type":787,"tag":888,"props":916,"children":918},{"style":917},"--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF",[919],{"type":792,"value":920}," ^0.8.28",{"type":787,"tag":888,"props":922,"children":924},{"style":923},"--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E1E4E8",[925],{"type":792,"value":926},";\n",{"type":787,"tag":888,"props":928,"children":930},{"class":890,"line":929},3,[931],{"type":787,"tag":888,"props":932,"children":934},{"emptyLinePlaceholder":933},true,[935],{"type":792,"value":936},"\n",{"type":787,"tag":888,"props":938,"children":940},{"class":890,"line":939},4,[941,946,952],{"type":787,"tag":888,"props":942,"children":943},{"style":905},[944],{"type":792,"value":945},"interface",{"type":787,"tag":888,"props":947,"children":949},{"style":948},"--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#B392F0",[950],{"type":792,"value":951}," IL1Messenger",{"type":787,"tag":888,"props":953,"children":954},{"style":923},[955],{"type":792,"value":956}," {\n",{"type":787,"tag":888,"props":958,"children":960},{"class":890,"line":959},5,[961,966,971,976,981,986,991,996,1001,1006,1011],{"type":787,"tag":888,"props":962,"children":963},{"style":905},[964],{"type":792,"value":965},"  function",{"type":787,"tag":888,"props":967,"children":968},{"style":948},[969],{"type":792,"value":970}," sendToL1",{"type":787,"tag":888,"props":972,"children":973},{"style":923},[974],{"type":792,"value":975},"(",{"type":787,"tag":888,"props":977,"children":978},{"style":917},[979],{"type":792,"value":980},"bytes",{"type":787,"tag":888,"props":982,"children":983},{"style":905},[984],{"type":792,"value":985}," calldata",{"type":787,"tag":888,"props":987,"children":988},{"style":923},[989],{"type":792,"value":990}," _message) ",{"type":787,"tag":888,"props":992,"children":993},{"style":905},[994],{"type":792,"value":995},"external",{"type":787,"tag":888,"props":997,"children":998},{"style":905},[999],{"type":792,"value":1000}," returns",{"type":787,"tag":888,"props":1002,"children":1003},{"style":923},[1004],{"type":792,"value":1005}," (",{"type":787,"tag":888,"props":1007,"children":1008},{"style":917},[1009],{"type":792,"value":1010},"bytes32",{"type":787,"tag":888,"props":1012,"children":1013},{"style":923},[1014],{"type":792,"value":1015},");\n",{"type":787,"tag":888,"props":1017,"children":1019},{"class":890,"line":1018},6,[1020],{"type":787,"tag":888,"props":1021,"children":1022},{"style":923},[1023],{"type":792,"value":1024},"}\n",{"type":787,"tag":888,"props":1026,"children":1028},{"class":890,"line":1027},7,[1029],{"type":787,"tag":888,"props":1030,"children":1031},{"emptyLinePlaceholder":933},[1032],{"type":792,"value":936},{"type":787,"tag":888,"props":1034,"children":1036},{"class":890,"line":1035},8,[1037,1042,1047],{"type":787,"tag":888,"props":1038,"children":1039},{"style":905},[1040],{"type":792,"value":1041},"contract",{"type":787,"tag":888,"props":1043,"children":1044},{"style":948},[1045],{"type":792,"value":1046}," InteropSendMessage",{"type":787,"tag":888,"props":1048,"children":1049},{"style":923},[1050],{"type":792,"value":956},{"type":787,"tag":888,"props":1052,"children":1054},{"class":890,"line":1053},9,[1055,1060,1065,1070,1075,1080],{"type":787,"tag":888,"props":1056,"children":1057},{"style":917},[1058],{"type":792,"value":1059},"  address",{"type":787,"tag":888,"props":1061,"children":1062},{"style":905},[1063],{"type":792,"value":1064}," constant",{"type":787,"tag":888,"props":1066,"children":1067},{"style":923},[1068],{"type":792,"value":1069}," L2_TO_L1_MESSENGER_SYSTEM_CONTRACT_ADDR ",{"type":787,"tag":888,"props":1071,"children":1072},{"style":905},[1073],{"type":792,"value":1074},"=",{"type":787,"tag":888,"props":1076,"children":1077},{"style":917},[1078],{"type":792,"value":1079}," 0x0000000000000000000000000000000000008008",{"type":787,"tag":888,"props":1081,"children":1082},{"style":923},[1083],{"type":792,"value":926},{"type":787,"tag":888,"props":1085,"children":1087},{"class":890,"line":1086},10,[1088],{"type":787,"tag":888,"props":1089,"children":1090},{"emptyLinePlaceholder":933},[1091],{"type":792,"value":936},{"type":787,"tag":888,"props":1093,"children":1095},{"class":890,"line":1094},11,[1096,1101,1106,1111,1115,1119],{"type":787,"tag":888,"props":1097,"children":1098},{"style":923},[1099],{"type":792,"value":1100},"  IL1Messenger ",{"type":787,"tag":888,"props":1102,"children":1103},{"style":905},[1104],{"type":792,"value":1105},"public",{"type":787,"tag":888,"props":1107,"children":1108},{"style":923},[1109],{"type":792,"value":1110}," l1Messenger ",{"type":787,"tag":888,"props":1112,"children":1113},{"style":905},[1114],{"type":792,"value":1074},{"type":787,"tag":888,"props":1116,"children":1117},{"style":948},[1118],{"type":792,"value":951},{"type":787,"tag":888,"props":1120,"children":1121},{"style":923},[1122],{"type":792,"value":1123},"(L2_TO_L1_MESSENGER_SYSTEM_CONTRACT_ADDR);\n",{"type":787,"tag":888,"props":1125,"children":1127},{"class":890,"line":1126},12,[1128],{"type":787,"tag":888,"props":1129,"children":1130},{"emptyLinePlaceholder":933},[1131],{"type":792,"value":936},{"type":787,"tag":888,"props":1133,"children":1135},{"class":890,"line":1134},13,[1136,1140,1145,1149,1153,1157,1161,1165],{"type":787,"tag":888,"props":1137,"children":1138},{"style":905},[1139],{"type":792,"value":965},{"type":787,"tag":888,"props":1141,"children":1142},{"style":948},[1143],{"type":792,"value":1144}," sendMessage",{"type":787,"tag":888,"props":1146,"children":1147},{"style":923},[1148],{"type":792,"value":975},{"type":787,"tag":888,"props":1150,"children":1151},{"style":917},[1152],{"type":792,"value":980},{"type":787,"tag":888,"props":1154,"children":1155},{"style":905},[1156],{"type":792,"value":985},{"type":787,"tag":888,"props":1158,"children":1159},{"style":923},[1160],{"type":792,"value":990},{"type":787,"tag":888,"props":1162,"children":1163},{"style":905},[1164],{"type":792,"value":995},{"type":787,"tag":888,"props":1166,"children":1167},{"style":923},[1168],{"type":792,"value":956},{"type":787,"tag":888,"props":1170,"children":1172},{"class":890,"line":1171},14,[1173,1178,1182],{"type":787,"tag":888,"props":1174,"children":1175},{"style":923},[1176],{"type":792,"value":1177},"    l1Messenger.",{"type":787,"tag":888,"props":1179,"children":1180},{"style":948},[1181],{"type":792,"value":858},{"type":787,"tag":888,"props":1183,"children":1184},{"style":923},[1185],{"type":792,"value":1186},"(_message);\n",{"type":787,"tag":888,"props":1188,"children":1190},{"class":890,"line":1189},15,[1191],{"type":787,"tag":888,"props":1192,"children":1193},{"style":923},[1194],{"type":792,"value":1195},"  }\n",{"type":787,"tag":888,"props":1197,"children":1199},{"class":890,"line":1198},16,[1200],{"type":787,"tag":888,"props":1201,"children":1202},{"style":923},[1203],{"type":792,"value":1024},{"type":787,"tag":788,"props":1205,"children":1206},{},[1207,1209,1214],{"type":792,"value":1208},"The message itself has no destination chain or address. It’s simply a payload created by a user or contract that gets broadcast.\nThere is no expiration for when messages can be verified. They remain verifiable indefinitely.\nThe function name ",{"type":787,"tag":825,"props":1210,"children":1212},{"className":1211},[],[1213],{"type":792,"value":858},{"type":792,"value":1215}," was kept from previous versions for simplicity, although it does not restrict messages from only being verified on the L1.",{"type":787,"tag":788,"props":1217,"children":1218},{},[1219],{"type":792,"value":1220},"These messages are the foundation to unlock more complex crosschain activities in the future,\nlike bridging assets and operate with contracts across different chains.",{"type":787,"tag":1222,"props":1223,"children":1225},"h3",{"id":1224},"lifecycle-of-sending-a-message",[1226],{"type":792,"value":1227},"Lifecycle of sending a message",{"type":787,"tag":800,"props":1229,"children":1230},{},[1231,1249,1259,1277,1287,1297,1315],{"type":787,"tag":804,"props":1232,"children":1233},{},[1234,1240,1242,1247],{"type":787,"tag":1235,"props":1236,"children":1237},"strong",{},[1238],{"type":792,"value":1239},"Send a Message:",{"type":792,"value":1241}," The message is sent via the ",{"type":787,"tag":825,"props":1243,"children":1245},{"className":1244},[],[1246],{"type":792,"value":858},{"type":792,"value":1248}," method in the L1Messenger contract.\nThe naming is leftover from a previous method, but this message first gets sent to Gateway.",{"type":787,"tag":804,"props":1250,"children":1251},{},[1252,1257],{"type":787,"tag":1235,"props":1253,"children":1254},{},[1255],{"type":792,"value":1256},"Batch created:",{"type":792,"value":1258}," The transaction gets included in a batch, which is sent to Gateway.",{"type":787,"tag":804,"props":1260,"children":1261},{},[1262,1267,1269,1275],{"type":787,"tag":1235,"props":1263,"children":1264},{},[1265],{"type":792,"value":1266},"Chain-batch root added to Gateway Message Root:",{"type":792,"value":1268}," The chain-batch root (which includes the log for the message)\nis added to Gateway’s global message root.\nThe ",{"type":787,"tag":825,"props":1270,"children":1272},{"className":1271},[],[1273],{"type":792,"value":1274},"MessageRoot",{"type":792,"value":1276}," is a contract that collects messages from different chains and aggregates them into a single Merkle tree.",{"type":787,"tag":804,"props":1278,"children":1279},{},[1280,1285],{"type":787,"tag":1235,"props":1281,"children":1282},{},[1283],{"type":792,"value":1284},"Event emitted:",{"type":792,"value":1286}," ZKsync Gateway’s MessageRoot contract emits an event indicating that the interop root was updated.",{"type":787,"tag":804,"props":1288,"children":1289},{},[1290,1295],{"type":787,"tag":1235,"props":1291,"children":1292},{},[1293],{"type":792,"value":1294},"Event detected:",{"type":792,"value":1296}," EthWatch detects the event from a ZKsync chain, stores it in its database,and includes it in the next batch’s bootloader state.",{"type":787,"tag":804,"props":1298,"children":1299},{},[1300,1305,1307,1313],{"type":787,"tag":1235,"props":1301,"children":1302},{},[1303],{"type":792,"value":1304},"New Root gets stored:",{"type":792,"value":1306}," The bootloader calls the ",{"type":787,"tag":825,"props":1308,"children":1310},{"className":1309},[],[1311],{"type":792,"value":1312},"L2InteropRootStorage",{"type":792,"value":1314}," contract to update its stored interop roots.",{"type":787,"tag":804,"props":1316,"children":1317},{},[1318,1323,1325,1330],{"type":787,"tag":1235,"props":1319,"children":1320},{},[1321],{"type":792,"value":1322},"Dependency verification:",{"type":792,"value":1324}," The latest batch’s dependency roots are verified against ZKsync Gateway’s ",{"type":787,"tag":825,"props":1326,"children":1328},{"className":1327},[],[1329],{"type":792,"value":1274},{"type":792,"value":1331},".\nAt this point, the interop root for the batch is confirmed.",{"type":787,"tag":842,"props":1333,"children":1335},{"id":1334},"verifying-a-message",[1336],{"type":792,"value":1337},"Verifying a message",{"type":787,"tag":788,"props":1339,"children":1340},{},[1341,1343,1349,1351,1357],{"type":792,"value":1342},"Messages can be verified using the ",{"type":787,"tag":825,"props":1344,"children":1346},{"className":1345},[],[1347],{"type":792,"value":1348},"proveL2MessageInclusionShared",{"type":792,"value":1350}," method\nin the L2 message verification contract deployed at ",{"type":787,"tag":825,"props":1352,"children":1354},{"className":1353},[],[1355],{"type":792,"value":1356},"0x..10009",{"type":792,"value":1358}," on each ZKsync chain.",{"type":787,"tag":878,"props":1360,"children":1362},{"className":880,"code":1361,"language":882,"meta":781,"style":781},"//SPDX-License-Identifier: Unlicense\npragma solidity ^0.8.28;\n\ninterface IMessageVerification {\n  struct L2Message {\n    uint16 txNumberInBatch;\n    address sender;\n    bytes data;\n  }\n\n  function proveL2MessageInclusionShared(\n    uint256 _sourceChainId,\n    uint256 _l1BatchNumber,\n    uint256 _l2MessageIndex,\n    L2Message calldata _l2MessageData,\n    bytes32[] calldata _proof\n  ) external view returns (bool);\n}\n\ncontract InteropVerification {\n  address constant L2_MESSAGE_VERIFICATION_ADDRESS = 0x0000000000000000000000000000000000010009;\n\n  IMessageVerification public l2MessageVerifier = IMessageVerification(L2_MESSAGE_VERIFICATION_ADDRESS);\n\n  function checkVerification(\n    uint256 _sourceChainId,\n    uint256 _l1BatchNumber,\n    uint256 _l2MessageIndex,\n    IMessageVerification.L2Message calldata _l2MessageData,\n    bytes32[] calldata _proof\n  ) external view returns (bool) {\n    return l2MessageVerifier.proveL2MessageInclusionShared(\n      _sourceChainId,\n      _l1BatchNumber,\n      _l2MessageIndex,\n      _l2MessageData,\n      _proof\n    );\n  }\n}\n\n",[1363],{"type":787,"tag":825,"props":1364,"children":1365},{"__ignoreMap":781},[1366,1373,1392,1399,1415,1432,1445,1458,1471,1478,1485,1502,1515,1527,1539,1556,1579,1614,1622,1630,1647,1677,1685,1716,1724,1741,1753,1765,1777,1803,1823,1856,1878,1887,1896,1905,1914,1923,1932,1940],{"type":787,"tag":888,"props":1367,"children":1368},{"class":890,"line":891},[1369],{"type":787,"tag":888,"props":1370,"children":1371},{"style":895},[1372],{"type":792,"value":898},{"type":787,"tag":888,"props":1374,"children":1375},{"class":890,"line":901},[1376,1380,1384,1388],{"type":787,"tag":888,"props":1377,"children":1378},{"style":905},[1379],{"type":792,"value":908},{"type":787,"tag":888,"props":1381,"children":1382},{"style":911},[1383],{"type":792,"value":914},{"type":787,"tag":888,"props":1385,"children":1386},{"style":917},[1387],{"type":792,"value":920},{"type":787,"tag":888,"props":1389,"children":1390},{"style":923},[1391],{"type":792,"value":926},{"type":787,"tag":888,"props":1393,"children":1394},{"class":890,"line":929},[1395],{"type":787,"tag":888,"props":1396,"children":1397},{"emptyLinePlaceholder":933},[1398],{"type":792,"value":936},{"type":787,"tag":888,"props":1400,"children":1401},{"class":890,"line":939},[1402,1406,1411],{"type":787,"tag":888,"props":1403,"children":1404},{"style":905},[1405],{"type":792,"value":945},{"type":787,"tag":888,"props":1407,"children":1408},{"style":948},[1409],{"type":792,"value":1410}," IMessageVerification",{"type":787,"tag":888,"props":1412,"children":1413},{"style":923},[1414],{"type":792,"value":956},{"type":787,"tag":888,"props":1416,"children":1417},{"class":890,"line":959},[1418,1423,1428],{"type":787,"tag":888,"props":1419,"children":1420},{"style":905},[1421],{"type":792,"value":1422},"  struct",{"type":787,"tag":888,"props":1424,"children":1425},{"style":948},[1426],{"type":792,"value":1427}," L2Message",{"type":787,"tag":888,"props":1429,"children":1430},{"style":923},[1431],{"type":792,"value":956},{"type":787,"tag":888,"props":1433,"children":1434},{"class":890,"line":1018},[1435,1440],{"type":787,"tag":888,"props":1436,"children":1437},{"style":917},[1438],{"type":792,"value":1439},"    uint16",{"type":787,"tag":888,"props":1441,"children":1442},{"style":923},[1443],{"type":792,"value":1444}," txNumberInBatch;\n",{"type":787,"tag":888,"props":1446,"children":1447},{"class":890,"line":1027},[1448,1453],{"type":787,"tag":888,"props":1449,"children":1450},{"style":917},[1451],{"type":792,"value":1452},"    address",{"type":787,"tag":888,"props":1454,"children":1455},{"style":923},[1456],{"type":792,"value":1457}," sender;\n",{"type":787,"tag":888,"props":1459,"children":1460},{"class":890,"line":1035},[1461,1466],{"type":787,"tag":888,"props":1462,"children":1463},{"style":917},[1464],{"type":792,"value":1465},"    bytes",{"type":787,"tag":888,"props":1467,"children":1468},{"style":923},[1469],{"type":792,"value":1470}," data;\n",{"type":787,"tag":888,"props":1472,"children":1473},{"class":890,"line":1053},[1474],{"type":787,"tag":888,"props":1475,"children":1476},{"style":923},[1477],{"type":792,"value":1195},{"type":787,"tag":888,"props":1479,"children":1480},{"class":890,"line":1086},[1481],{"type":787,"tag":888,"props":1482,"children":1483},{"emptyLinePlaceholder":933},[1484],{"type":792,"value":936},{"type":787,"tag":888,"props":1486,"children":1487},{"class":890,"line":1094},[1488,1492,1497],{"type":787,"tag":888,"props":1489,"children":1490},{"style":905},[1491],{"type":792,"value":965},{"type":787,"tag":888,"props":1493,"children":1494},{"style":948},[1495],{"type":792,"value":1496}," proveL2MessageInclusionShared",{"type":787,"tag":888,"props":1498,"children":1499},{"style":923},[1500],{"type":792,"value":1501},"(\n",{"type":787,"tag":888,"props":1503,"children":1504},{"class":890,"line":1126},[1505,1510],{"type":787,"tag":888,"props":1506,"children":1507},{"style":917},[1508],{"type":792,"value":1509},"    uint256",{"type":787,"tag":888,"props":1511,"children":1512},{"style":923},[1513],{"type":792,"value":1514}," _sourceChainId,\n",{"type":787,"tag":888,"props":1516,"children":1517},{"class":890,"line":1134},[1518,1522],{"type":787,"tag":888,"props":1519,"children":1520},{"style":917},[1521],{"type":792,"value":1509},{"type":787,"tag":888,"props":1523,"children":1524},{"style":923},[1525],{"type":792,"value":1526}," _l1BatchNumber,\n",{"type":787,"tag":888,"props":1528,"children":1529},{"class":890,"line":1171},[1530,1534],{"type":787,"tag":888,"props":1531,"children":1532},{"style":917},[1533],{"type":792,"value":1509},{"type":787,"tag":888,"props":1535,"children":1536},{"style":923},[1537],{"type":792,"value":1538}," _l2MessageIndex,\n",{"type":787,"tag":888,"props":1540,"children":1541},{"class":890,"line":1189},[1542,1547,1551],{"type":787,"tag":888,"props":1543,"children":1544},{"style":905},[1545],{"type":792,"value":1546},"    L2Message",{"type":787,"tag":888,"props":1548,"children":1549},{"style":905},[1550],{"type":792,"value":985},{"type":787,"tag":888,"props":1552,"children":1553},{"style":923},[1554],{"type":792,"value":1555}," _l2MessageData,\n",{"type":787,"tag":888,"props":1557,"children":1558},{"class":890,"line":1198},[1559,1564,1569,1574],{"type":787,"tag":888,"props":1560,"children":1561},{"style":917},[1562],{"type":792,"value":1563},"    bytes32",{"type":787,"tag":888,"props":1565,"children":1566},{"style":923},[1567],{"type":792,"value":1568},"[] ",{"type":787,"tag":888,"props":1570,"children":1571},{"style":905},[1572],{"type":792,"value":1573},"calldata",{"type":787,"tag":888,"props":1575,"children":1576},{"style":923},[1577],{"type":792,"value":1578}," _proof\n",{"type":787,"tag":888,"props":1580,"children":1582},{"class":890,"line":1581},17,[1583,1588,1592,1597,1601,1605,1610],{"type":787,"tag":888,"props":1584,"children":1585},{"style":923},[1586],{"type":792,"value":1587},"  ) ",{"type":787,"tag":888,"props":1589,"children":1590},{"style":905},[1591],{"type":792,"value":995},{"type":787,"tag":888,"props":1593,"children":1594},{"style":905},[1595],{"type":792,"value":1596}," view",{"type":787,"tag":888,"props":1598,"children":1599},{"style":905},[1600],{"type":792,"value":1000},{"type":787,"tag":888,"props":1602,"children":1603},{"style":923},[1604],{"type":792,"value":1005},{"type":787,"tag":888,"props":1606,"children":1607},{"style":917},[1608],{"type":792,"value":1609},"bool",{"type":787,"tag":888,"props":1611,"children":1612},{"style":923},[1613],{"type":792,"value":1015},{"type":787,"tag":888,"props":1615,"children":1617},{"class":890,"line":1616},18,[1618],{"type":787,"tag":888,"props":1619,"children":1620},{"style":923},[1621],{"type":792,"value":1024},{"type":787,"tag":888,"props":1623,"children":1625},{"class":890,"line":1624},19,[1626],{"type":787,"tag":888,"props":1627,"children":1628},{"emptyLinePlaceholder":933},[1629],{"type":792,"value":936},{"type":787,"tag":888,"props":1631,"children":1633},{"class":890,"line":1632},20,[1634,1638,1643],{"type":787,"tag":888,"props":1635,"children":1636},{"style":905},[1637],{"type":792,"value":1041},{"type":787,"tag":888,"props":1639,"children":1640},{"style":948},[1641],{"type":792,"value":1642}," InteropVerification",{"type":787,"tag":888,"props":1644,"children":1645},{"style":923},[1646],{"type":792,"value":956},{"type":787,"tag":888,"props":1648,"children":1650},{"class":890,"line":1649},21,[1651,1655,1659,1664,1668,1673],{"type":787,"tag":888,"props":1652,"children":1653},{"style":917},[1654],{"type":792,"value":1059},{"type":787,"tag":888,"props":1656,"children":1657},{"style":905},[1658],{"type":792,"value":1064},{"type":787,"tag":888,"props":1660,"children":1661},{"style":923},[1662],{"type":792,"value":1663}," L2_MESSAGE_VERIFICATION_ADDRESS ",{"type":787,"tag":888,"props":1665,"children":1666},{"style":905},[1667],{"type":792,"value":1074},{"type":787,"tag":888,"props":1669,"children":1670},{"style":917},[1671],{"type":792,"value":1672}," 0x0000000000000000000000000000000000010009",{"type":787,"tag":888,"props":1674,"children":1675},{"style":923},[1676],{"type":792,"value":926},{"type":787,"tag":888,"props":1678,"children":1680},{"class":890,"line":1679},22,[1681],{"type":787,"tag":888,"props":1682,"children":1683},{"emptyLinePlaceholder":933},[1684],{"type":792,"value":936},{"type":787,"tag":888,"props":1686,"children":1688},{"class":890,"line":1687},23,[1689,1694,1698,1703,1707,1711],{"type":787,"tag":888,"props":1690,"children":1691},{"style":923},[1692],{"type":792,"value":1693},"  IMessageVerification ",{"type":787,"tag":888,"props":1695,"children":1696},{"style":905},[1697],{"type":792,"value":1105},{"type":787,"tag":888,"props":1699,"children":1700},{"style":923},[1701],{"type":792,"value":1702}," l2MessageVerifier ",{"type":787,"tag":888,"props":1704,"children":1705},{"style":905},[1706],{"type":792,"value":1074},{"type":787,"tag":888,"props":1708,"children":1709},{"style":948},[1710],{"type":792,"value":1410},{"type":787,"tag":888,"props":1712,"children":1713},{"style":923},[1714],{"type":792,"value":1715},"(L2_MESSAGE_VERIFICATION_ADDRESS);\n",{"type":787,"tag":888,"props":1717,"children":1719},{"class":890,"line":1718},24,[1720],{"type":787,"tag":888,"props":1721,"children":1722},{"emptyLinePlaceholder":933},[1723],{"type":792,"value":936},{"type":787,"tag":888,"props":1725,"children":1727},{"class":890,"line":1726},25,[1728,1732,1737],{"type":787,"tag":888,"props":1729,"children":1730},{"style":905},[1731],{"type":792,"value":965},{"type":787,"tag":888,"props":1733,"children":1734},{"style":948},[1735],{"type":792,"value":1736}," checkVerification",{"type":787,"tag":888,"props":1738,"children":1739},{"style":923},[1740],{"type":792,"value":1501},{"type":787,"tag":888,"props":1742,"children":1744},{"class":890,"line":1743},26,[1745,1749],{"type":787,"tag":888,"props":1746,"children":1747},{"style":917},[1748],{"type":792,"value":1509},{"type":787,"tag":888,"props":1750,"children":1751},{"style":923},[1752],{"type":792,"value":1514},{"type":787,"tag":888,"props":1754,"children":1756},{"class":890,"line":1755},27,[1757,1761],{"type":787,"tag":888,"props":1758,"children":1759},{"style":917},[1760],{"type":792,"value":1509},{"type":787,"tag":888,"props":1762,"children":1763},{"style":923},[1764],{"type":792,"value":1526},{"type":787,"tag":888,"props":1766,"children":1768},{"class":890,"line":1767},28,[1769,1773],{"type":787,"tag":888,"props":1770,"children":1771},{"style":917},[1772],{"type":792,"value":1509},{"type":787,"tag":888,"props":1774,"children":1775},{"style":923},[1776],{"type":792,"value":1538},{"type":787,"tag":888,"props":1778,"children":1780},{"class":890,"line":1779},29,[1781,1786,1790,1795,1799],{"type":787,"tag":888,"props":1782,"children":1783},{"style":905},[1784],{"type":792,"value":1785},"    IMessageVerification",{"type":787,"tag":888,"props":1787,"children":1788},{"style":923},[1789],{"type":792,"value":840},{"type":787,"tag":888,"props":1791,"children":1792},{"style":917},[1793],{"type":792,"value":1794},"L2Message",{"type":787,"tag":888,"props":1796,"children":1797},{"style":905},[1798],{"type":792,"value":985},{"type":787,"tag":888,"props":1800,"children":1801},{"style":923},[1802],{"type":792,"value":1555},{"type":787,"tag":888,"props":1804,"children":1806},{"class":890,"line":1805},30,[1807,1811,1815,1819],{"type":787,"tag":888,"props":1808,"children":1809},{"style":917},[1810],{"type":792,"value":1563},{"type":787,"tag":888,"props":1812,"children":1813},{"style":923},[1814],{"type":792,"value":1568},{"type":787,"tag":888,"props":1816,"children":1817},{"style":905},[1818],{"type":792,"value":1573},{"type":787,"tag":888,"props":1820,"children":1821},{"style":923},[1822],{"type":792,"value":1578},{"type":787,"tag":888,"props":1824,"children":1826},{"class":890,"line":1825},31,[1827,1831,1835,1839,1843,1847,1851],{"type":787,"tag":888,"props":1828,"children":1829},{"style":923},[1830],{"type":792,"value":1587},{"type":787,"tag":888,"props":1832,"children":1833},{"style":905},[1834],{"type":792,"value":995},{"type":787,"tag":888,"props":1836,"children":1837},{"style":905},[1838],{"type":792,"value":1596},{"type":787,"tag":888,"props":1840,"children":1841},{"style":905},[1842],{"type":792,"value":1000},{"type":787,"tag":888,"props":1844,"children":1845},{"style":923},[1846],{"type":792,"value":1005},{"type":787,"tag":888,"props":1848,"children":1849},{"style":917},[1850],{"type":792,"value":1609},{"type":787,"tag":888,"props":1852,"children":1853},{"style":923},[1854],{"type":792,"value":1855},") {\n",{"type":787,"tag":888,"props":1857,"children":1859},{"class":890,"line":1858},32,[1860,1865,1870,1874],{"type":787,"tag":888,"props":1861,"children":1862},{"style":905},[1863],{"type":792,"value":1864},"    return",{"type":787,"tag":888,"props":1866,"children":1867},{"style":923},[1868],{"type":792,"value":1869}," l2MessageVerifier.",{"type":787,"tag":888,"props":1871,"children":1872},{"style":948},[1873],{"type":792,"value":1348},{"type":787,"tag":888,"props":1875,"children":1876},{"style":923},[1877],{"type":792,"value":1501},{"type":787,"tag":888,"props":1879,"children":1881},{"class":890,"line":1880},33,[1882],{"type":787,"tag":888,"props":1883,"children":1884},{"style":923},[1885],{"type":792,"value":1886},"      _sourceChainId,\n",{"type":787,"tag":888,"props":1888,"children":1890},{"class":890,"line":1889},34,[1891],{"type":787,"tag":888,"props":1892,"children":1893},{"style":923},[1894],{"type":792,"value":1895},"      _l1BatchNumber,\n",{"type":787,"tag":888,"props":1897,"children":1899},{"class":890,"line":1898},35,[1900],{"type":787,"tag":888,"props":1901,"children":1902},{"style":923},[1903],{"type":792,"value":1904},"      _l2MessageIndex,\n",{"type":787,"tag":888,"props":1906,"children":1908},{"class":890,"line":1907},36,[1909],{"type":787,"tag":888,"props":1910,"children":1911},{"style":923},[1912],{"type":792,"value":1913},"      _l2MessageData,\n",{"type":787,"tag":888,"props":1915,"children":1917},{"class":890,"line":1916},37,[1918],{"type":787,"tag":888,"props":1919,"children":1920},{"style":923},[1921],{"type":792,"value":1922},"      _proof\n",{"type":787,"tag":888,"props":1924,"children":1926},{"class":890,"line":1925},38,[1927],{"type":787,"tag":888,"props":1928,"children":1929},{"style":923},[1930],{"type":792,"value":1931},"    );\n",{"type":787,"tag":888,"props":1933,"children":1935},{"class":890,"line":1934},39,[1936],{"type":787,"tag":888,"props":1937,"children":1938},{"style":923},[1939],{"type":792,"value":1195},{"type":787,"tag":888,"props":1941,"children":1943},{"class":890,"line":1942},40,[1944],{"type":787,"tag":888,"props":1945,"children":1946},{"style":923},[1947],{"type":792,"value":1024},{"type":787,"tag":1222,"props":1949,"children":1951},{"id":1950},"lifecycle-of-verifying-a-message",[1952],{"type":792,"value":1953},"Lifecycle of verifying a message",{"type":787,"tag":800,"props":1955,"children":1956},{},[1957,1982],{"type":787,"tag":804,"props":1958,"children":1959},{},[1960,1965,1967,1973,1975,1980],{"type":787,"tag":1235,"props":1961,"children":1962},{},[1963],{"type":792,"value":1964},"Proof Submission:",{"type":792,"value":1966}," On any ZKsync chain that uses Gateway, the user calls proveL2MessageInclusionShared\nat the ",{"type":787,"tag":825,"props":1968,"children":1970},{"className":1969},[],[1971],{"type":792,"value":1972},"L2_MESSAGE_VERIFICATION_ADDRESS",{"type":792,"value":1974}," (",{"type":787,"tag":825,"props":1976,"children":1978},{"className":1977},[],[1979],{"type":792,"value":1356},{"type":792,"value":1981},"),\nsupplying the message data and a proof of inclusion.\nNote, that this step could be done in the same batch as the dependency verification.",{"type":787,"tag":804,"props":1983,"children":1984},{},[1985,1987,1992],{"type":792,"value":1986},"Final Verification: The ",{"type":787,"tag":825,"props":1988,"children":1990},{"className":1989},[],[1991],{"type":792,"value":1312},{"type":792,"value":1993}," contract is triggered to verify the corresponding\ninterop root inclusion on the chain where the proof was submitted.",{"type":787,"tag":788,"props":1995,"children":1996},{},[1997,1999,2007],{"type":792,"value":1998},"For more detail about how interoperability works at the protocol level,\nvisit the ",{"type":787,"tag":834,"props":2000,"children":2004},{"href":2001,"rel":2002},"https://matter-labs.github.io/zksync-era/core/latest/specs/contracts/interop/overview.html",[2003],"nofollow",[2005],{"type":792,"value":2006},"protocol specifications",{"type":792,"value":2008}," documentation.",{"type":787,"tag":2010,"props":2011,"children":2012},"style",{},[2013],{"type":792,"value":2014},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":781,"searchDepth":901,"depth":901,"links":2016},[2017,2020],{"id":844,"depth":901,"text":847,"children":2018},[2019],{"id":1224,"depth":929,"text":1227},{"id":1334,"depth":901,"text":1337,"children":2021},[2022],{"id":1950,"depth":929,"text":1953},"markdown","content:00.zksync-network:45.zksync-connect:30.messaging.md","content","00.zksync-network/45.zksync-connect/30.messaging.md","00.zksync-network/45.zksync-connect/30.messaging","md",{"loc":264},[2031,2033],{"_path":261,"title":260,"description":2032},"Learn how crosschain asset transfers work.",{"_path":267,"title":266,"description":2034},"Learn about how fees work for sending interop transactions with ZKsync Connect.",1779983668819]