[{"data":1,"prerenderedAt":1471},["ShallowReactive",2],{"navigation":3,"/zksync-network/zksync-connect/interop-fees":778,"/zksync-network/zksync-connect/interop-fees-surround":1466},[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":267,"_dir":779,"_draft":780,"_partial":780,"_locale":781,"title":266,"description":782,"body":783,"_type":1459,"_id":1460,"_source":1461,"_file":1462,"_stem":1463,"_extension":1464,"sitemap":1465},"zksync-connect",false,"","Learn about how fees work for sending interop transactions with ZKsync Connect.",{"type":784,"children":785,"toc":1449},"root",[786,794,825,831,836,892,914,921,926,1021,1027,1032,1091,1097,1196,1201,1213,1326,1334],{"type":787,"tag":788,"props":789,"children":790},"element","p",{},[791],{"type":792,"value":793},"text","Fees for interop transactions are charged in two ways:",{"type":787,"tag":795,"props":796,"children":797},"ul",{},[798,813],{"type":787,"tag":799,"props":800,"children":801},"li",{},[802],{"type":787,"tag":803,"props":804,"children":806},"a",{"href":805},"#sending-fees",[807],{"type":787,"tag":808,"props":809,"children":810},"strong",{},[811],{"type":792,"value":812},"Sending Fees",{"type":787,"tag":799,"props":814,"children":815},{},[816],{"type":787,"tag":803,"props":817,"children":819},{"href":818},"#settlement-fees",[820],{"type":787,"tag":808,"props":821,"children":822},{},[823],{"type":792,"value":824},"Settlement Fees",{"type":787,"tag":826,"props":827,"children":829},"h2",{"id":828},"sending-fees",[830],{"type":792,"value":812},{"type":787,"tag":788,"props":832,"children":833},{},[834],{"type":792,"value":835},"This fee is taken from senders (users) of interop calls or bundles.",{"type":787,"tag":795,"props":837,"children":838},{},[839,851,863,875],{"type":787,"tag":799,"props":840,"children":841},{},[842,844,849],{"type":792,"value":843},"Users are charged on a ",{"type":787,"tag":808,"props":845,"children":846},{},[847],{"type":792,"value":848},"per-call basis",{"type":792,"value":850},".",{"type":787,"tag":799,"props":852,"children":853},{},[854,856,861],{"type":792,"value":855},"Users must pay a fee for ",{"type":787,"tag":808,"props":857,"children":858},{},[859],{"type":792,"value":860},"each call",{"type":792,"value":862}," they send via interop (If there are X calls in the bundle they send → they have to pay X * fee.)",{"type":787,"tag":799,"props":864,"children":865},{},[866,868,873],{"type":792,"value":867},"Sending fees are paid in the ",{"type":787,"tag":808,"props":869,"children":870},{},[871],{"type":792,"value":872},"same transaction",{"type":792,"value":874}," where the user initiates sending a bundle.",{"type":787,"tag":799,"props":876,"children":877},{},[878,880,890],{"type":792,"value":879},"Sending fees are charged by the ",{"type":787,"tag":808,"props":881,"children":882},{},[883],{"type":787,"tag":884,"props":885,"children":887},"code",{"className":886},[],[888],{"type":792,"value":889},"InteropCenter",{"type":792,"value":891}," contract (an entry-point for initiating interop in v31)",{"type":787,"tag":788,"props":893,"children":894},{},[895,897,902,904,913],{"type":792,"value":896},"Users can choose between ",{"type":787,"tag":808,"props":898,"children":899},{},[900],{"type":792,"value":901},"two ways of paying sending fees",{"type":792,"value":903},". The choice is made per-bundle via the ERC-7786 bundle attribute ",{"type":787,"tag":808,"props":905,"children":906},{},[907],{"type":787,"tag":884,"props":908,"children":910},{"className":909},[],[911],{"type":792,"value":912},"useFixedFee(bool)",{"type":792,"value":850},{"type":787,"tag":915,"props":916,"children":918},"h3",{"id":917},"option-1-dynamic-base-token-fee-default",[919],{"type":792,"value":920},"Option 1: Dynamic Base Token Fee (Default)",{"type":787,"tag":788,"props":922,"children":923},{},[924],{"type":792,"value":925},"This is considered the go-to option for paying fees.",{"type":787,"tag":795,"props":927,"children":928},{},[929,951,970,982,993],{"type":787,"tag":799,"props":930,"children":931},{},[932,934,943,945,950],{"type":792,"value":933},"The exact per-call value is read from the state variable ",{"type":787,"tag":808,"props":935,"children":936},{},[937],{"type":787,"tag":884,"props":938,"children":940},{"className":939},[],[941],{"type":792,"value":942},"interopProtocolFee",{"type":792,"value":944}," on ",{"type":787,"tag":884,"props":946,"children":948},{"className":947},[],[949],{"type":792,"value":889},{"type":792,"value":850},{"type":787,"tag":799,"props":952,"children":953},{},[954,956,961,963,969],{"type":792,"value":955},"The fee is ",{"type":787,"tag":808,"props":957,"children":958},{},[959],{"type":792,"value":960},"denominated and paid in the base token",{"type":792,"value":962}," of the sending chain, together with ",{"type":787,"tag":884,"props":964,"children":966},{"className":965},[],[967],{"type":792,"value":968},"msg.value",{"type":792,"value":850},{"type":787,"tag":799,"props":971,"children":972},{},[973,975,981],{"type":792,"value":974},"The per-bundle charge is ",{"type":787,"tag":884,"props":976,"children":978},{"className":977},[],[979],{"type":792,"value":980},"interopProtocolFee * numberOfCalls",{"type":792,"value":850},{"type":787,"tag":799,"props":983,"children":984},{},[985,987,991],{"type":792,"value":986},"Users pay the sending fee in the ",{"type":787,"tag":808,"props":988,"children":989},{},[990],{"type":792,"value":872},{"type":792,"value":992}," where they initiate the interop bundle.",{"type":787,"tag":799,"props":994,"children":995},{},[996,998,1004,1006,1011,1013,1019],{"type":792,"value":997},"The fee value is set via ",{"type":787,"tag":884,"props":999,"children":1001},{"className":1000},[],[1002],{"type":792,"value":1003},"setInteropFee(uint256)",{"type":792,"value":1005},", which is restricted to the ",{"type":787,"tag":808,"props":1007,"children":1008},{},[1009],{"type":792,"value":1010},"bootloader",{"type":792,"value":1012}," (",{"type":787,"tag":884,"props":1014,"children":1016},{"className":1015},[],[1017],{"type":792,"value":1018},"onlyCallFromBootloader",{"type":792,"value":1020},").\nIn practice this means it is updated by the chain’s operator via a system transaction.",{"type":787,"tag":915,"props":1022,"children":1024},{"id":1023},"option-2-fixed-zk-fee",[1025],{"type":792,"value":1026},"Option 2: Fixed ZK Fee",{"type":787,"tag":788,"props":1028,"children":1029},{},[1030],{"type":792,"value":1031},"This is considered a Stage 1 aligned way of paying fees.",{"type":787,"tag":795,"props":1033,"children":1034},{},[1035,1068,1079],{"type":787,"tag":799,"props":1036,"children":1037},{},[1038,1040,1045,1047,1052,1054,1059,1061,1066],{"type":792,"value":1039},"The fee value is ",{"type":787,"tag":808,"props":1041,"children":1042},{},[1043],{"type":792,"value":1044},"hardcoded",{"type":792,"value":1046}," and ",{"type":787,"tag":808,"props":1048,"children":1049},{},[1050],{"type":792,"value":1051},"independent of the chain operator",{"type":792,"value":1053},".\nIt’s only updateable on protocol upgrades, meaning the ",{"type":787,"tag":808,"props":1055,"children":1056},{},[1057],{"type":792,"value":1058},"Operator",{"type":792,"value":1060}," is ",{"type":787,"tag":808,"props":1062,"children":1063},{},[1064],{"type":792,"value":1065},"unable to change",{"type":792,"value":1067}," the fee amount by itself.",{"type":787,"tag":799,"props":1069,"children":1070},{},[1071,1072,1077],{"type":792,"value":955},{"type":787,"tag":808,"props":1073,"children":1074},{},[1075],{"type":792,"value":1076},"denominated and paid in the ZK token",{"type":792,"value":1078}," on the sending chain.",{"type":787,"tag":799,"props":1080,"children":1081},{},[1082,1084,1089],{"type":792,"value":1083},"The ZK token must be ",{"type":787,"tag":808,"props":1085,"children":1086},{},[1087],{"type":792,"value":1088},"bridged to the chain",{"type":792,"value":1090}," before users can use this option.",{"type":787,"tag":915,"props":1092,"children":1094},{"id":1093},"sending-fee-handling",[1095],{"type":792,"value":1096},"Sending Fee Handling",{"type":787,"tag":795,"props":1098,"children":1099},{},[1100,1145],{"type":787,"tag":799,"props":1101,"children":1102},{},[1103,1105,1110,1112,1124,1126,1135,1137],{"type":792,"value":1104},"Sending fees, ",{"type":787,"tag":808,"props":1106,"children":1107},{},[1108],{"type":792,"value":1109},"regardless of the option chosen by the user",{"type":792,"value":1111},", are accumulated ",{"type":787,"tag":808,"props":1113,"children":1114},{},[1115,1117,1122],{"type":792,"value":1116},"inside the ",{"type":787,"tag":884,"props":1118,"children":1120},{"className":1119},[],[1121],{"type":792,"value":889},{"type":792,"value":1123}," contract",{"type":792,"value":1125},",\nkeyed by ",{"type":787,"tag":808,"props":1127,"children":1128},{},[1129],{"type":787,"tag":884,"props":1130,"children":1132},{"className":1131},[],[1133],{"type":792,"value":1134},"block.coinbase",{"type":792,"value":1136}," (the block producer of the block in which the bundle was sent):\n",{"type":787,"tag":795,"props":1138,"children":1139},{},[1140],{"type":787,"tag":799,"props":1141,"children":1142},{},[1143],{"type":792,"value":1144},"Both base token and ZK fees accumulate in InteropCenter.",{"type":787,"tag":799,"props":1146,"children":1147},{},[1148,1150,1155,1157,1163,1164,1170,1172],{"type":792,"value":1149},"Fees are ",{"type":787,"tag":808,"props":1151,"children":1152},{},[1153],{"type":792,"value":1154},"withdrawable by the coinbase",{"type":792,"value":1156}," that earned them, via ",{"type":787,"tag":884,"props":1158,"children":1160},{"className":1159},[],[1161],{"type":792,"value":1162},"claimProtocolFees(receiver)",{"type":792,"value":1046},{"type":787,"tag":884,"props":1165,"children":1167},{"className":1166},[],[1168],{"type":792,"value":1169},"claimZKFees(receiver)",{"type":792,"value":1171},":\n",{"type":787,"tag":795,"props":1173,"children":1174},{},[1175],{"type":787,"tag":799,"props":1176,"children":1177},{},[1178,1180,1186,1188,1194],{"type":792,"value":1179},"The caller must be the coinbase that accrued the balance (checked via ",{"type":787,"tag":884,"props":1181,"children":1183},{"className":1182},[],[1184],{"type":792,"value":1185},"msg.sender",{"type":792,"value":1187},"). The caller can direct the withdrawal to any ",{"type":787,"tag":884,"props":1189,"children":1191},{"className":1190},[],[1192],{"type":792,"value":1193},"receiver",{"type":792,"value":1195}," address.",{"type":787,"tag":826,"props":1197,"children":1199},{"id":1198},"settlement-fees",[1200],{"type":792,"value":824},{"type":787,"tag":788,"props":1202,"children":1203},{},[1204,1206,1211],{"type":792,"value":1205},"This fee is taken from an address specified by ",{"type":787,"tag":808,"props":1207,"children":1208},{},[1209],{"type":792,"value":1210},"operators of the chains settling on Gateway",{"type":792,"value":1212}," when they execute batches on Gateway.",{"type":787,"tag":795,"props":1214,"children":1215},{},[1216,1226,1239,1315],{"type":787,"tag":799,"props":1217,"children":1218},{},[1219,1221,1225],{"type":792,"value":1220},"Settlement fees are charged on a ",{"type":787,"tag":808,"props":1222,"children":1223},{},[1224],{"type":792,"value":848},{"type":792,"value":850},{"type":787,"tag":799,"props":1227,"children":1228},{},[1229,1231,1237],{"type":792,"value":1230},"The operator supplies the payer address (",{"type":787,"tag":884,"props":1232,"children":1234},{"className":1233},[],[1235],{"type":792,"value":1236},"settlementFeePayer",{"type":792,"value":1238},") inside the execute-batches calldata.",{"type":787,"tag":799,"props":1240,"children":1241},{},[1242,1244],{"type":792,"value":1243},"The payer address must have, ahead of time:",{"type":787,"tag":795,"props":1245,"children":1246},{},[1247,1281],{"type":787,"tag":799,"props":1248,"children":1249},{},[1250,1252,1258,1260,1266,1268,1274,1276],{"type":792,"value":1251},"called ",{"type":787,"tag":884,"props":1253,"children":1255},{"className":1254},[],[1256],{"type":792,"value":1257},"setSettlementFeePayerAgreement(chainId, true)",{"type":792,"value":1259}," on the ",{"type":787,"tag":884,"props":1261,"children":1263},{"className":1262},[],[1264],{"type":792,"value":1265},"GWAssetTracker",{"type":792,"value":1267}," opting in to pay for that specific ",{"type":787,"tag":884,"props":1269,"children":1271},{"className":1270},[],[1272],{"type":792,"value":1273},"chainId",{"type":792,"value":1275},", ",{"type":787,"tag":808,"props":1277,"children":1278},{},[1279],{"type":792,"value":1280},"and",{"type":787,"tag":799,"props":1282,"children":1283},{},[1284,1286,1291,1293,1298,1300,1306,1308,1314],{"type":792,"value":1285},"approved the ",{"type":787,"tag":884,"props":1287,"children":1289},{"className":1288},[],[1290],{"type":792,"value":1265},{"type":792,"value":1292}," to spend its ",{"type":787,"tag":808,"props":1294,"children":1295},{},[1296],{"type":792,"value":1297},"wrapped ZK (WZK)",{"type":792,"value":1299}," tokens in the usual ERC-20 way.\nThe per-chain agreement exists to prevent a malicious operator of chain A from specifying a payer address that only intended to pay for chain B.\nWithout an explicit agreement for chain A, the batch execution reverts with ",{"type":787,"tag":884,"props":1301,"children":1303},{"className":1302},[],[1304],{"type":792,"value":1305},"SettlementFeePayerNotAgreed(payer, chainId)",{"type":792,"value":1307},".\nAn agreement can be revoked at any time with ",{"type":787,"tag":884,"props":1309,"children":1311},{"className":1310},[],[1312],{"type":792,"value":1313},"setSettlementFeePayerAgreement(chainId, false)",{"type":792,"value":850},{"type":787,"tag":799,"props":1316,"children":1317},{},[1318,1320,1324],{"type":792,"value":1319},"The fee is pulled from the payer in the ",{"type":787,"tag":808,"props":1321,"children":1322},{},[1323],{"type":792,"value":872},{"type":792,"value":1325}," where the operator settles the batch.\nIf fee collection fails (no agreement, insufficient balance, or missing approval), the whole batch execution reverts.\nThis makes fee collection atomic with settlement.",{"type":787,"tag":788,"props":1327,"children":1328},{},[1329],{"type":787,"tag":808,"props":1330,"children":1331},{},[1332],{"type":792,"value":1333},"Fee Properties",{"type":787,"tag":795,"props":1335,"children":1336},{},[1337,1371,1392,1409],{"type":787,"tag":799,"props":1338,"children":1339},{},[1340,1341,1346,1348],{"type":792,"value":955},{"type":787,"tag":808,"props":1342,"children":1343},{},[1344],{"type":792,"value":1345},"denominated in ZK",{"type":792,"value":1347},", which is the base token on GW.\n",{"type":787,"tag":795,"props":1349,"children":1350},{},[1351],{"type":787,"tag":799,"props":1352,"children":1353},{},[1354,1356,1361,1363,1369],{"type":792,"value":1355},"In the current implementation it is taken in ",{"type":787,"tag":808,"props":1357,"children":1358},{},[1359],{"type":792,"value":1360},"WZK",{"type":792,"value":1362}," (wrapped ZK) via ",{"type":787,"tag":884,"props":1364,"children":1366},{"className":1365},[],[1367],{"type":792,"value":1368},"safeTransferFrom",{"type":792,"value":1370},", to reuse standard ERC-20 approvals/accounting.",{"type":787,"tag":799,"props":1372,"children":1373},{},[1374,1376,1385,1386,1391],{"type":792,"value":1375},"The per-call value is stored in ",{"type":787,"tag":808,"props":1377,"children":1378},{},[1379],{"type":787,"tag":884,"props":1380,"children":1382},{"className":1381},[],[1383],{"type":792,"value":1384},"gatewaySettlementFee",{"type":792,"value":944},{"type":787,"tag":884,"props":1387,"children":1389},{"className":1388},[],[1390],{"type":792,"value":1265},{"type":792,"value":850},{"type":787,"tag":799,"props":1393,"children":1394},{},[1395,1397],{"type":792,"value":1396},"The value is ",{"type":787,"tag":808,"props":1398,"children":1399},{},[1400,1402,1407],{"type":792,"value":1401},"controlled by the owner of ",{"type":787,"tag":884,"props":1403,"children":1405},{"className":1404},[],[1406],{"type":792,"value":1265},{"type":792,"value":1408}," (Decentralized governance)",{"type":787,"tag":799,"props":1410,"children":1411},{},[1412,1414,1419,1421,1426,1428,1433,1435,1441,1443,1448],{"type":792,"value":1413},"Collected settlement fees stay on the ",{"type":787,"tag":884,"props":1415,"children":1417},{"className":1416},[],[1418],{"type":792,"value":1265},{"type":792,"value":1420}," contract (as WZK balance) and are ",{"type":787,"tag":808,"props":1422,"children":1423},{},[1424],{"type":792,"value":1425},"withdrawable by the owner",{"type":792,"value":1427}," of ",{"type":787,"tag":884,"props":1429,"children":1431},{"className":1430},[],[1432],{"type":792,"value":1265},{"type":792,"value":1434},"\nvia ",{"type":787,"tag":884,"props":1436,"children":1438},{"className":1437},[],[1439],{"type":792,"value":1440},"withdrawGatewayFees(recipient)",{"type":792,"value":1442}," ",{"type":787,"tag":808,"props":1444,"children":1445},{},[1446],{"type":792,"value":1447},"(Decentralized Governance)",{"type":792,"value":850},{"title":781,"searchDepth":1450,"depth":1450,"links":1451},2,[1452,1458],{"id":828,"depth":1450,"text":812,"children":1453},[1454,1456,1457],{"id":917,"depth":1455,"text":920},3,{"id":1023,"depth":1455,"text":1026},{"id":1093,"depth":1455,"text":1096},{"id":1198,"depth":1450,"text":824},"markdown","content:00.zksync-network:45.zksync-connect:40.interop-fees.md","content","00.zksync-network/45.zksync-connect/40.interop-fees.md","00.zksync-network/45.zksync-connect/40.interop-fees","md",{"loc":267},[1467,1469],{"_path":264,"title":263,"description":1468},"Learn about how send and verify messages with ZKsync Connect.",{"_path":270,"title":273,"description":1470},"Learn about the ZKsync OS Developer Preview testnet and its architecture.",1779983668823]