[{"data":1,"prerenderedAt":1155},["ShallowReactive",2],{"navigation":3,"/zksync-network/zksync-connect":778,"/zksync-network/zksync-connect-surround":1150},[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":239,"_dir":779,"_draft":781,"_partial":781,"_locale":782,"title":97,"description":783,"body":784,"_type":1143,"_id":1144,"_source":1145,"_file":1146,"_stem":1147,"_extension":1148,"sitemap":1149},{"_path":780,"title":238},"/zksync-network/zksync-connect/_dir",false,"","Learn about how ZKsync Connect enables interoperable ZKsync chains.",{"type":785,"children":786,"toc":1136},"root",[787,795,800,856,863,868,902,908,913,956,961,970,976,981,1054,1060,1065,1096,1114],{"type":788,"tag":789,"props":790,"children":791},"element","p",{},[792],{"type":793,"value":794},"text","ZKsync Connect enables interoperability across ZKsync chains in the Elastic Network.\nInterop, or interoperability, is a way to communicate and transact between two ZK Stack chains, or between a ZK Stack chain and Ethereum L1.\nIt is made possible by smart contracts that verify transactions across chains using Merkle proofs.",{"type":788,"tag":789,"props":796,"children":797},{},[798],{"type":793,"value":799},"It allows you to:",{"type":788,"tag":801,"props":802,"children":803},"ol",{},[804,816,826,836,846],{"type":788,"tag":805,"props":806,"children":807},"li",{},[808,814],{"type":788,"tag":809,"props":810,"children":811},"strong",{},[812],{"type":793,"value":813},"Observe messages",{"type":793,"value":815},": Track when an interop message (think of it as a special event) is created on the source chain.",{"type":788,"tag":805,"props":817,"children":818},{},[819,824],{"type":788,"tag":809,"props":820,"children":821},{},[822],{"type":793,"value":823},"Send assets:",{"type":793,"value":825}," Transfer ERC20 tokens and other assets between chains.",{"type":788,"tag":805,"props":827,"children":828},{},[829,834],{"type":788,"tag":809,"props":830,"children":831},{},[832],{"type":793,"value":833},"Execute calls:",{"type":793,"value":835}," Call a contract on another ZKsync chain or Ethereum L1 with specific calldata and value.",{"type":788,"tag":805,"props":837,"children":838},{},[839,844],{"type":788,"tag":809,"props":840,"children":841},{},[842],{"type":793,"value":843},"Execute bundles of calls:",{"type":793,"value":845}," Group multiple remote calls into a single bundle, ensuring all of them execute at once.",{"type":788,"tag":805,"props":847,"children":848},{},[849,854],{"type":788,"tag":809,"props":850,"children":851},{},[852],{"type":793,"value":853},"Control shadow accounts:",{"type":793,"value":855}," Manage smart accounts on other chains, including L1, to execute transactions and manage assets\nwithout needing a local account on that chain.",{"type":788,"tag":857,"props":858,"children":860},"h2",{"id":859},"enhanced-user-experience",[861],{"type":793,"value":862},"Enhanced user experience",{"type":788,"tag":789,"props":864,"children":865},{},[866],{"type":793,"value":867},"Interoperability enhances the blockchain user experience by abstracting complex cross-chain interactions.\nUsers do not need to manually bridge funds to another chain in the Elastic Network if they already have funds on one.",{"type":788,"tag":869,"props":870,"children":871},"ul",{},[872,882,892],{"type":788,"tag":805,"props":873,"children":874},{},[875,880],{"type":788,"tag":809,"props":876,"children":877},{},[878],{"type":793,"value":879},"Reduced Complexity",{"type":793,"value":881},": Users interact with a seamless interface that hides the underlying complexities of blockchain operations.",{"type":788,"tag":805,"props":883,"children":884},{},[885,890],{"type":788,"tag":809,"props":886,"children":887},{},[888],{"type":793,"value":889},"Asset Bridging",{"type":793,"value":891},": Relayers manage the process of bridging assets between chains,\nhandling the necessary burning and minting of assets as they move across the ecosystem.",{"type":788,"tag":805,"props":893,"children":894},{},[895,900],{"type":788,"tag":809,"props":896,"children":897},{},[898],{"type":793,"value":899},"Lower Fees",{"type":793,"value":901},": By leveraging efficient relayers and minimizing manual operations,\ntransaction costs are kept low, akin to standard gas fees within a single chain.",{"type":788,"tag":857,"props":903,"children":905},{"id":904},"real-world-application-crosschain-transactions",[906],{"type":793,"value":907},"Real-World Application: Crosschain Transactions",{"type":788,"tag":789,"props":909,"children":910},{},[911],{"type":793,"value":912},"Consider a practical scenario where you want to swap ETH for DAI using a crosschain transaction on a defi platform:",{"type":788,"tag":801,"props":914,"children":915},{},[916,926,936,946],{"type":788,"tag":805,"props":917,"children":918},{},[919,924],{"type":788,"tag":809,"props":920,"children":921},{},[922],{"type":793,"value":923},"Transaction Initiation",{"type":793,"value":925},": You initiate the transaction directly from your wallet.",{"type":788,"tag":805,"props":927,"children":928},{},[929,934],{"type":788,"tag":809,"props":930,"children":931},{},[932],{"type":793,"value":933},"Relayer Involvement",{"type":793,"value":935},": A relayer picks up your ETH and deposits it into the defi chain.",{"type":788,"tag":805,"props":937,"children":938},{},[939,944],{"type":788,"tag":809,"props":940,"children":941},{},[942],{"type":793,"value":943},"Asset Swap",{"type":793,"value":945},": On the defi chain, your ETH is automatically swapped for DAI.",{"type":788,"tag":805,"props":947,"children":948},{},[949,954],{"type":788,"tag":809,"props":950,"children":951},{},[952],{"type":793,"value":953},"Completion and Return",{"type":793,"value":955},": The relayer then transfers the DAI back to your original chain.",{"type":788,"tag":789,"props":957,"children":958},{},[959],{"type":793,"value":960},"This entire process is executed as a single transaction, making it feel as seamless as if no chain-switching occurred.\nThe only difference a user might notice is a slightly longer confirmation time, depending on the specific ZKsync chain used.",{"type":788,"tag":789,"props":962,"children":963},{},[964],{"type":788,"tag":965,"props":966,"children":969},"img",{"alt":967,"src":968},"Interop Swap","/images/zk-stack/interop_swap_example.png",[],{"type":788,"tag":857,"props":971,"children":973},{"id":972},"transaction-lifecycle",[974],{"type":793,"value":975},"Transaction Lifecycle",{"type":788,"tag":789,"props":977,"children":978},{},[979],{"type":793,"value":980},"An interop transaction in the Elastic Network follows these steps:",{"type":788,"tag":801,"props":982,"children":983},{},[984,994,1004,1014,1024,1034,1044],{"type":788,"tag":805,"props":985,"children":986},{},[987,992],{"type":788,"tag":809,"props":988,"children":989},{},[990],{"type":793,"value":991},"Initiation",{"type":793,"value":993},": A transaction is initiated on a ZKsync chain, aimed at crossing to another chain within the Elastic Network.",{"type":788,"tag":805,"props":995,"children":996},{},[997,1002],{"type":788,"tag":809,"props":998,"children":999},{},[1000],{"type":793,"value":1001},"Settlement on L1",{"type":793,"value":1003},": The sending ZKsync chain compiles a cryptographic proof of the transaction and settles it onto Ethereum's Layer 1,\nanchoring the transaction's validity.",{"type":788,"tag":805,"props":1005,"children":1006},{},[1007,1012],{"type":788,"tag":809,"props":1008,"children":1009},{},[1010],{"type":793,"value":1011},"Interop Root Update",{"type":793,"value":1013},": Gateway updates the shared interop/message root to include the source chain's new message root.",{"type":788,"tag":805,"props":1015,"children":1016},{},[1017,1022],{"type":788,"tag":809,"props":1018,"children":1019},{},[1020],{"type":793,"value":1021},"Root Importation",{"type":793,"value":1023},": The receiving ZKsync chain imports this updated interop root through its consensus mechanism.",{"type":788,"tag":805,"props":1025,"children":1026},{},[1027,1032],{"type":788,"tag":809,"props":1028,"children":1029},{},[1030],{"type":793,"value":1031},"Bundle Submission",{"type":793,"value":1033},": A relayer submits the bundle together with a message inclusion proof to the receiving ZKsync chain.\nThis proof connects the bundle message to the imported interop root.",{"type":788,"tag":805,"props":1035,"children":1036},{},[1037,1042],{"type":788,"tag":809,"props":1038,"children":1039},{},[1040],{"type":793,"value":1041},"Verification and Execution",{"type":793,"value":1043},": The receiving ZKsync chain verifies the bundle message against the interop root.\nIf the verification is successful, the transaction is executed, and the relayer is compensated for their service.",{"type":788,"tag":805,"props":1045,"children":1046},{},[1047,1052],{"type":788,"tag":809,"props":1048,"children":1049},{},[1050],{"type":793,"value":1051},"Proof Settlement",{"type":793,"value":1053},": Finally, the receiving ZKsync chain settles its proof on L1, conclusively validating the transaction within the Elastic Network.",{"type":788,"tag":857,"props":1055,"children":1057},{"id":1056},"rollout-phases",[1058],{"type":793,"value":1059},"Rollout Phases",{"type":788,"tag":789,"props":1061,"children":1062},{},[1063],{"type":793,"value":1064},"There are three steps planned for rolling out full interoperability:",{"type":788,"tag":801,"props":1066,"children":1067},{},[1068,1076,1091],{"type":788,"tag":805,"props":1069,"children":1070},{},[1071],{"type":788,"tag":1072,"props":1073,"children":1074},"a",{"href":264},[1075],{"type":793,"value":263},{"type":788,"tag":805,"props":1077,"children":1078},{},[1079,1084,1086],{"type":788,"tag":1072,"props":1080,"children":1081},{"href":261},[1082],{"type":793,"value":1083},"Asset transfers",{"type":793,"value":1085},",\nand ",{"type":788,"tag":1072,"props":1087,"children":1088},{"href":258},[1089],{"type":793,"value":1090},"transaction bundles",{"type":788,"tag":805,"props":1092,"children":1093},{},[1094],{"type":793,"value":1095},"Automatic crosschain transactions, L1 interop, and shadow accounts.",{"type":788,"tag":789,"props":1097,"children":1098},{},[1099,1101,1106,1108,1112],{"type":793,"value":1100},"Only chains that settle on top of ",{"type":788,"tag":1072,"props":1102,"children":1103},{"href":506},[1104],{"type":793,"value":1105},"Gateway",{"type":793,"value":1107}," have access to interop features.\nTo see which chains use ZKsync Gateway, check the ",{"type":788,"tag":1072,"props":1109,"children":1110},{"href":27},[1111],{"type":793,"value":30},{"type":793,"value":1113}," table.",{"type":788,"tag":789,"props":1115,"children":1116},{},[1117,1119,1134],{"type":793,"value":1118},"Messaging is already available on all ZKsync chains that use Gateway.\nAsset transfers and transaction bundles are currently only available for local testing,\nbut will be available for mainnet chains as part of the upcoming ",{"type":788,"tag":1072,"props":1120,"children":1124},{"href":1121,"rel":1122},"https://forum.zknation.io/t/zip-16-v31-interop-bundles-upgrade/979",[1123],"nofollow",[1125,1132],{"type":788,"tag":1126,"props":1127,"children":1129},"code",{"className":1128},[],[1130],{"type":793,"value":1131},"v31",{"type":793,"value":1133}," upgrade",{"type":793,"value":1135},".",{"title":782,"searchDepth":1137,"depth":1137,"links":1138},2,[1139,1140,1141,1142],{"id":859,"depth":1137,"text":862},{"id":904,"depth":1137,"text":907},{"id":972,"depth":1137,"text":975},{"id":1056,"depth":1137,"text":1059},"markdown","content:00.zksync-network:45.zksync-connect:00.index.md","content","00.zksync-network/45.zksync-connect/00.index.md","00.zksync-network/45.zksync-connect/00.index","md",{"loc":239},[1151,1153],{"_path":236,"title":235,"description":1152},"Learn about the ZKsync Easy On-Ramp",{"_path":247,"title":246,"description":1154},"Setup a local environment for testing interoperable ZKsync chains.",1779983667564]