[{"data":1,"prerenderedAt":980},["ShallowReactive",2],{"navigation":3,"/zksync-network/zksync-connect/crosschain-asset-transfers":778,"/zksync-network/zksync-connect/crosschain-asset-transfers-surround":975},[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":261,"_dir":779,"_draft":780,"_partial":780,"_locale":781,"title":260,"description":782,"body":783,"_type":968,"_id":969,"_source":970,"_file":971,"_stem":972,"_extension":973,"sitemap":974},"zksync-connect",false,"","Learn how crosschain asset transfers work.",{"type":784,"children":785,"toc":959},"root",[786,795,810,816,821,826,831,852,857,863,876,882,887,902,907,913,918,930,943,949,954],{"type":787,"tag":788,"props":789,"children":791},"element","h2",{"id":790},"what-are-crosschain-asset-transfers",[792],{"type":793,"value":794},"text","What are crosschain asset transfers?",{"type":787,"tag":796,"props":797,"children":798},"p",{},[799,801,808],{"type":793,"value":800},"Crosschain asset transfers let you move supported assets directly from one ZKsync chain to another ZKsync chain through ZKsync Connect,\nwithout first withdrawing to L1 and bridging again.\nThey are available only on chains that settle on ZKsync Gateway after the ",{"type":787,"tag":802,"props":803,"children":805},"code",{"className":804},[],[806],{"type":793,"value":807},"v31",{"type":793,"value":809}," upgrade.",{"type":787,"tag":788,"props":811,"children":813},{"id":812},"how-do-they-work",[814],{"type":793,"value":815},"How do they work?",{"type":787,"tag":796,"props":817,"children":818},{},[819],{"type":793,"value":820},"With ZKsync Connect crosschain asset transfers, assets are tracked natively across ZKsync chains.\nThe transfer is processed through the Asset Router and Native Token Vault contracts, with asset accounting enforced by asset tracker contracts.",{"type":787,"tag":796,"props":822,"children":823},{},[824],{"type":793,"value":825},"Assets are tracked through asset tracker contracts deployed on L1, Gateway, and the participating L2 chains.\nThe asset transfer contracts ensure that no chain is able to transfer more assets than it has.",{"type":787,"tag":796,"props":827,"children":828},{},[829],{"type":793,"value":830},"For users, this means the transfer stays inside the ZKsync ecosystem and does not require withdrawing to L1 and then re-bridging to another chain.",{"type":787,"tag":796,"props":832,"children":833},{},[834,836,842,844,850],{"type":793,"value":835},"Assets are transferred via transaction bundles.\nOn the destination chain, the ",{"type":787,"tag":802,"props":837,"children":839},{"className":838},[],[840],{"type":793,"value":841},"InteropHandler",{"type":793,"value":843}," executes the bundle by calling the ",{"type":787,"tag":802,"props":845,"children":847},{"className":846},[],[848],{"type":793,"value":849},"L2AssetRouter",{"type":793,"value":851},", which finalizes the transfer.",{"type":787,"tag":796,"props":853,"children":854},{},[855],{"type":793,"value":856},"Different assets use different transfer mechanics.\nFor standard ERC20 tokens, the tokens are burned on the source chain and minted on the destination chain.\nFor other supported assets, the Asset Router calls the asset’s handler to perform the appropriate transfer logic.",{"type":787,"tag":788,"props":858,"children":860},{"id":859},"how-can-i-transfer-an-asset",[861],{"type":793,"value":862},"How can I transfer an asset?",{"type":787,"tag":796,"props":864,"children":865},{},[866,868,874],{"type":793,"value":867},"For a step-by-step guide, check out the ",{"type":787,"tag":869,"props":870,"children":871},"a",{"href":253},[872],{"type":793,"value":873},"asset transfers guide",{"type":793,"value":875},".",{"type":787,"tag":788,"props":877,"children":879},{"id":878},"what-can-i-transfer",[880],{"type":793,"value":881},"What can I transfer?",{"type":787,"tag":796,"props":883,"children":884},{},[885],{"type":793,"value":886},"You can transfer:",{"type":787,"tag":888,"props":889,"children":890},"ul",{},[891,897],{"type":787,"tag":892,"props":893,"children":894},"li",{},[895],{"type":793,"value":896},"Standard fungible ERC20-style tokens supported by the Native Token Vault and Asset Router.",{"type":787,"tag":892,"props":898,"children":899},{},[900],{"type":793,"value":901},"The chain’s base token, including ETH on ETH-based chains, if sent to a contract.",{"type":787,"tag":796,"props":903,"children":904},{},[905],{"type":793,"value":906},"Arbitrary token standards are not supported automatically.\nFor example, ERC721 and ERC1155 assets are not supported by the Asset Router unless custom bridging logic has been added for them.",{"type":787,"tag":788,"props":908,"children":910},{"id":909},"can-i-transfer-an-asset-without-a-special-contract",[911],{"type":793,"value":912},"Can I transfer an asset without a special contract?",{"type":787,"tag":796,"props":914,"children":915},{},[916],{"type":793,"value":917},"Yes.",{"type":787,"tag":796,"props":919,"children":920},{},[921,923,928],{"type":793,"value":922},"For standard crosschain asset transfers, the interop recipient is the ",{"type":787,"tag":802,"props":924,"children":926},{"className":925},[],[927],{"type":793,"value":849},{"type":793,"value":929},", not the final user recipient.\nThis means the final recipient can be either an EOA or a contract.",{"type":787,"tag":796,"props":931,"children":932},{},[933,935,941],{"type":793,"value":934},"A contract only needs to implement ",{"type":787,"tag":802,"props":936,"children":938},{"className":937},[],[939],{"type":793,"value":940},"IERC7786Recipient",{"type":793,"value":942}," if you want to send a general interop message or transaction bundle directly to that contract,\nrather than using the Asset Router transfer flow.",{"type":787,"tag":788,"props":944,"children":946},{"id":945},"is-there-any-setup-required",[947],{"type":793,"value":948},"Is there any setup required?",{"type":787,"tag":796,"props":950,"children":951},{},[952],{"type":793,"value":953},"Before an asset can be transferred, it must be registered with the asset tracking and handler infrastructure.\nThis registration only needs to happen once per asset.",{"type":787,"tag":796,"props":955,"children":956},{},[957],{"type":793,"value":958},"If you deploy an L2-native ERC20 token on a chain that already settles on ZKsync Gateway and you want to use that token for interop,\nyou also need to migrate the token balances to Gateway first.\nUntil that migration happens, the asset tracker flow will not recognize the token for crosschain transfers.\nIf the token is bridged from the L1, this migration will happen automatically.",{"title":781,"searchDepth":960,"depth":960,"links":961},2,[962,963,964,965,966,967],{"id":790,"depth":960,"text":794},{"id":812,"depth":960,"text":815},{"id":859,"depth":960,"text":862},{"id":878,"depth":960,"text":881},{"id":909,"depth":960,"text":912},{"id":945,"depth":960,"text":948},"markdown","content:00.zksync-network:45.zksync-connect:20.crosschain-asset-transfers.md","content","00.zksync-network/45.zksync-connect/20.crosschain-asset-transfers.md","00.zksync-network/45.zksync-connect/20.crosschain-asset-transfers","md",{"loc":261},[976,978],{"_path":258,"title":249,"description":977},"Learn about how transaction bundles work.",{"_path":264,"title":263,"description":979},"Learn about how send and verify messages with ZKsync Connect.",1779983668684]