[{"data":1,"prerenderedAt":3949},["ShallowReactive",2],{"navigation":3,"/zksync-network/zksync-connect/transaction-bundles":778,"/zksync-network/zksync-connect/transaction-bundles-surround":3944},[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":258,"_dir":779,"_draft":780,"_partial":780,"_locale":781,"title":249,"description":782,"body":783,"_type":3937,"_id":3938,"_source":3939,"_file":3940,"_stem":3941,"_extension":3942,"sitemap":3943},"zksync-connect",false,"","Learn about how transaction bundles work.",{"type":784,"children":785,"toc":3919},"root",[786,795,801,806,812,826,967,979,984,2365,2371,2376,2396,2409,2421,2433,2439,2451,2457,2615,2627,2639,2758,2763,2768,2823,2830,2835,2840,2908,2913,2980,2987,2992,3060,3073,3109,3115,3120,3138,3150,3216,3297,3308,3313,3372,3384,3429,3435,3447,3508,3513,3588,3639,3645,3650,3723,3785,3790,3826,3832,3837,3871,3890,3908,3913],{"type":787,"tag":788,"props":789,"children":791},"element","h2",{"id":790},"what-are-transaction-bundles",[792],{"type":793,"value":794},"text","What are transaction bundles?",{"type":787,"tag":796,"props":797,"children":798},"p",{},[799],{"type":793,"value":800},"Transaction bundles are a group of transactions that can be sent from one ZKsync chain (the origin chain) to another ZKsync chain (the destination chain)\nto be executed on the destination chain.\nThe transactions in the bundle are executed one after another in the order they are sent.",{"type":787,"tag":796,"props":802,"children":803},{},[804],{"type":793,"value":805},"They can be configured so that only a specific address can execute the bundle, or any address can.\nBundles are not executed automatically, but this feature will be enabled in a future upgrade.",{"type":787,"tag":788,"props":807,"children":809},{"id":808},"can-any-contract-be-called",[810],{"type":793,"value":811},"Can any contract be called?",{"type":787,"tag":796,"props":813,"children":814},{},[815,817,824],{"type":793,"value":816},"To call a contract with a transaction bundle, the contract must support the ",{"type":787,"tag":818,"props":819,"children":821},"code",{"className":820},[],[822],{"type":793,"value":823},"receiveMessage",{"type":793,"value":825}," interface.",{"type":787,"tag":827,"props":828,"children":832},"pre",{"className":829,"code":830,"language":831,"meta":781,"style":781},"language-solidity shiki shiki-themes github-light github-light github-dark","    function receiveMessage(\n        bytes32,        // message id\n        bytes calldata, // ERC-7930 sender\n        bytes calldata payload // bundle payload\n    ) external payable returns (bytes4) {\n","solidity",[833],{"type":787,"tag":818,"props":834,"children":835},{"__ignoreMap":781},[836,860,881,905,928],{"type":787,"tag":837,"props":838,"children":841},"span",{"class":839,"line":840},"line",1,[842,848,854],{"type":787,"tag":837,"props":843,"children":845},{"style":844},"--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#F97583",[846],{"type":793,"value":847},"    function",{"type":787,"tag":837,"props":849,"children":851},{"style":850},"--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#B392F0",[852],{"type":793,"value":853}," receiveMessage",{"type":787,"tag":837,"props":855,"children":857},{"style":856},"--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E1E4E8",[858],{"type":793,"value":859},"(\n",{"type":787,"tag":837,"props":861,"children":863},{"class":839,"line":862},2,[864,870,875],{"type":787,"tag":837,"props":865,"children":867},{"style":866},"--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF",[868],{"type":793,"value":869},"        bytes32",{"type":787,"tag":837,"props":871,"children":872},{"style":856},[873],{"type":793,"value":874},",        ",{"type":787,"tag":837,"props":876,"children":878},{"style":877},"--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D",[879],{"type":793,"value":880},"// message id\n",{"type":787,"tag":837,"props":882,"children":884},{"class":839,"line":883},3,[885,890,895,900],{"type":787,"tag":837,"props":886,"children":887},{"style":866},[888],{"type":793,"value":889},"        bytes",{"type":787,"tag":837,"props":891,"children":892},{"style":844},[893],{"type":793,"value":894}," calldata",{"type":787,"tag":837,"props":896,"children":897},{"style":856},[898],{"type":793,"value":899},", ",{"type":787,"tag":837,"props":901,"children":902},{"style":877},[903],{"type":793,"value":904},"// ERC-7930 sender\n",{"type":787,"tag":837,"props":906,"children":908},{"class":839,"line":907},4,[909,913,917,923],{"type":787,"tag":837,"props":910,"children":911},{"style":866},[912],{"type":793,"value":889},{"type":787,"tag":837,"props":914,"children":915},{"style":844},[916],{"type":793,"value":894},{"type":787,"tag":837,"props":918,"children":920},{"style":919},"--shiki-light:#E36209;--shiki-default:#E36209;--shiki-dark:#FFAB70",[921],{"type":793,"value":922}," payload",{"type":787,"tag":837,"props":924,"children":925},{"style":877},[926],{"type":793,"value":927}," // bundle payload\n",{"type":787,"tag":837,"props":929,"children":931},{"class":839,"line":930},5,[932,937,942,947,952,957,962],{"type":787,"tag":837,"props":933,"children":934},{"style":856},[935],{"type":793,"value":936},"    ) ",{"type":787,"tag":837,"props":938,"children":939},{"style":844},[940],{"type":793,"value":941},"external",{"type":787,"tag":837,"props":943,"children":944},{"style":844},[945],{"type":793,"value":946}," payable",{"type":787,"tag":837,"props":948,"children":949},{"style":844},[950],{"type":793,"value":951}," returns",{"type":787,"tag":837,"props":953,"children":954},{"style":856},[955],{"type":793,"value":956}," (",{"type":787,"tag":837,"props":958,"children":959},{"style":866},[960],{"type":793,"value":961},"bytes4",{"type":787,"tag":837,"props":963,"children":964},{"style":856},[965],{"type":793,"value":966},") {\n",{"type":787,"tag":796,"props":968,"children":969},{},[970,972,977],{"type":793,"value":971},"If a contract does not have a ",{"type":787,"tag":818,"props":973,"children":975},{"className":974},[],[976],{"type":793,"value":823},{"type":793,"value":978}," function,\nyou must use an adapter contract as an intermediary.",{"type":787,"tag":796,"props":980,"children":981},{},[982],{"type":793,"value":983},"You can see an example of an adapter contract for a counter contract below:",{"type":787,"tag":985,"props":986,"children":987},"drop-panel",{},[988],{"type":787,"tag":989,"props":990,"children":992},"panel",{"label":991},"CounterAdapter.sol",[993],{"type":787,"tag":827,"props":994,"children":996},{"className":829,"code":995,"language":831,"meta":781,"style":781},"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.28;\n\ninterface IERC7786Recipient {\n    function receiveMessage(\n        bytes32 receiveId,\n        bytes calldata sender,\n        bytes calldata payload\n    ) external payable returns (bytes4);\n}\n\ninterface ICounter {\n    function inc() external;\n    function incBy(uint256 by) external;\n}\n\n/// @notice Interop receiver adapter for an existing Counter-like contract.\n/// @dev InteropHandler calls receiveMessage(); this adapter decodes payload and\n///      forwards to target contract methods.\ncontract CounterInteropAdapter is IERC7786Recipient {\n    ICounter public immutable counter;\n\n    address constant INTEROP_HANDLER = 0x000000000000000000000000000000000001000E;\n\n    error Unauthorized(address caller);\n    error UnknownOp(uint8 op);\n\n    event InteropAction(bytes32 indexed receiveId, bytes sender, uint8 op, uint256 by);\n\n    constructor(address _counter) {\n        require(_counter != address(0), \"counter is zero\");\n        counter = ICounter(_counter);\n    }\n\n    /// payload format:\n    /// - abi.encode(uint8(0))               => counter.inc()\n    /// - abi.encode(uint8(1), uint256(by))  => counter.incBy(by)\n    function receiveMessage(\n        bytes32 receiveId,\n        bytes calldata sender,\n        bytes calldata payload\n    ) external payable override returns (bytes4) {\n        if (msg.sender != INTEROP_HANDLER) revert Unauthorized(msg.sender);\n\n        (uint8 op, uint256 by) = _decodePayload(payload);\n\n        if (op == 0) {\n            counter.inc();\n        } else if (op == 1) {\n            counter.incBy(by);\n        } else {\n            revert UnknownOp(op);\n        }\n\n        emit InteropAction(receiveId, sender, op, by);\n        return IERC7786Recipient.receiveMessage.selector;\n    }\n\n    function _decodePayload(bytes calldata payload) internal pure returns (uint8 op, uint256 by) {\n        if (payload.length == 32) {\n            op = abi.decode(payload, (uint8));\n            by = 0;\n        } else {\n            (op, by) = abi.decode(payload, (uint8, uint256));\n        }\n    }\n}\n\n",[997],{"type":787,"tag":818,"props":998,"children":999},{"__ignoreMap":781},[1000,1008,1032,1041,1059,1074,1092,1113,1130,1163,1172,1180,1197,1223,1264,1272,1280,1299,1317,1326,1353,1377,1385,1418,1426,1454,1481,1489,1563,1571,1593,1641,1663,1672,1680,1689,1698,1707,1723,1739,1759,1775,1812,1861,1869,1910,1918,1945,1964,2000,2018,2034,2052,2061,2069,2087,2101,2109,2117,2191,2217,2259,2280,2296,2341,2349,2357],{"type":787,"tag":837,"props":1001,"children":1002},{"class":839,"line":840},[1003],{"type":787,"tag":837,"props":1004,"children":1005},{"style":877},[1006],{"type":793,"value":1007},"// SPDX-License-Identifier: MIT\n",{"type":787,"tag":837,"props":1009,"children":1010},{"class":839,"line":862},[1011,1016,1022,1027],{"type":787,"tag":837,"props":1012,"children":1013},{"style":844},[1014],{"type":793,"value":1015},"pragma",{"type":787,"tag":837,"props":1017,"children":1019},{"style":1018},"--shiki-light:#22863A;--shiki-default:#22863A;--shiki-dark:#85E89D",[1020],{"type":793,"value":1021}," solidity",{"type":787,"tag":837,"props":1023,"children":1024},{"style":866},[1025],{"type":793,"value":1026}," ^0.8.28",{"type":787,"tag":837,"props":1028,"children":1029},{"style":856},[1030],{"type":793,"value":1031},";\n",{"type":787,"tag":837,"props":1033,"children":1034},{"class":839,"line":883},[1035],{"type":787,"tag":837,"props":1036,"children":1038},{"emptyLinePlaceholder":1037},true,[1039],{"type":793,"value":1040},"\n",{"type":787,"tag":837,"props":1042,"children":1043},{"class":839,"line":907},[1044,1049,1054],{"type":787,"tag":837,"props":1045,"children":1046},{"style":844},[1047],{"type":793,"value":1048},"interface",{"type":787,"tag":837,"props":1050,"children":1051},{"style":850},[1052],{"type":793,"value":1053}," IERC7786Recipient",{"type":787,"tag":837,"props":1055,"children":1056},{"style":856},[1057],{"type":793,"value":1058}," {\n",{"type":787,"tag":837,"props":1060,"children":1061},{"class":839,"line":930},[1062,1066,1070],{"type":787,"tag":837,"props":1063,"children":1064},{"style":844},[1065],{"type":793,"value":847},{"type":787,"tag":837,"props":1067,"children":1068},{"style":850},[1069],{"type":793,"value":853},{"type":787,"tag":837,"props":1071,"children":1072},{"style":856},[1073],{"type":793,"value":859},{"type":787,"tag":837,"props":1075,"children":1077},{"class":839,"line":1076},6,[1078,1082,1087],{"type":787,"tag":837,"props":1079,"children":1080},{"style":866},[1081],{"type":793,"value":869},{"type":787,"tag":837,"props":1083,"children":1084},{"style":919},[1085],{"type":793,"value":1086}," receiveId",{"type":787,"tag":837,"props":1088,"children":1089},{"style":856},[1090],{"type":793,"value":1091},",\n",{"type":787,"tag":837,"props":1093,"children":1095},{"class":839,"line":1094},7,[1096,1100,1104,1109],{"type":787,"tag":837,"props":1097,"children":1098},{"style":866},[1099],{"type":793,"value":889},{"type":787,"tag":837,"props":1101,"children":1102},{"style":844},[1103],{"type":793,"value":894},{"type":787,"tag":837,"props":1105,"children":1106},{"style":919},[1107],{"type":793,"value":1108}," sender",{"type":787,"tag":837,"props":1110,"children":1111},{"style":856},[1112],{"type":793,"value":1091},{"type":787,"tag":837,"props":1114,"children":1116},{"class":839,"line":1115},8,[1117,1121,1125],{"type":787,"tag":837,"props":1118,"children":1119},{"style":866},[1120],{"type":793,"value":889},{"type":787,"tag":837,"props":1122,"children":1123},{"style":844},[1124],{"type":793,"value":894},{"type":787,"tag":837,"props":1126,"children":1127},{"style":919},[1128],{"type":793,"value":1129}," payload\n",{"type":787,"tag":837,"props":1131,"children":1133},{"class":839,"line":1132},9,[1134,1138,1142,1146,1150,1154,1158],{"type":787,"tag":837,"props":1135,"children":1136},{"style":856},[1137],{"type":793,"value":936},{"type":787,"tag":837,"props":1139,"children":1140},{"style":844},[1141],{"type":793,"value":941},{"type":787,"tag":837,"props":1143,"children":1144},{"style":844},[1145],{"type":793,"value":946},{"type":787,"tag":837,"props":1147,"children":1148},{"style":844},[1149],{"type":793,"value":951},{"type":787,"tag":837,"props":1151,"children":1152},{"style":856},[1153],{"type":793,"value":956},{"type":787,"tag":837,"props":1155,"children":1156},{"style":866},[1157],{"type":793,"value":961},{"type":787,"tag":837,"props":1159,"children":1160},{"style":856},[1161],{"type":793,"value":1162},");\n",{"type":787,"tag":837,"props":1164,"children":1166},{"class":839,"line":1165},10,[1167],{"type":787,"tag":837,"props":1168,"children":1169},{"style":856},[1170],{"type":793,"value":1171},"}\n",{"type":787,"tag":837,"props":1173,"children":1175},{"class":839,"line":1174},11,[1176],{"type":787,"tag":837,"props":1177,"children":1178},{"emptyLinePlaceholder":1037},[1179],{"type":793,"value":1040},{"type":787,"tag":837,"props":1181,"children":1183},{"class":839,"line":1182},12,[1184,1188,1193],{"type":787,"tag":837,"props":1185,"children":1186},{"style":844},[1187],{"type":793,"value":1048},{"type":787,"tag":837,"props":1189,"children":1190},{"style":850},[1191],{"type":793,"value":1192}," ICounter",{"type":787,"tag":837,"props":1194,"children":1195},{"style":856},[1196],{"type":793,"value":1058},{"type":787,"tag":837,"props":1198,"children":1200},{"class":839,"line":1199},13,[1201,1205,1210,1215,1219],{"type":787,"tag":837,"props":1202,"children":1203},{"style":844},[1204],{"type":793,"value":847},{"type":787,"tag":837,"props":1206,"children":1207},{"style":850},[1208],{"type":793,"value":1209}," inc",{"type":787,"tag":837,"props":1211,"children":1212},{"style":856},[1213],{"type":793,"value":1214},"() ",{"type":787,"tag":837,"props":1216,"children":1217},{"style":844},[1218],{"type":793,"value":941},{"type":787,"tag":837,"props":1220,"children":1221},{"style":856},[1222],{"type":793,"value":1031},{"type":787,"tag":837,"props":1224,"children":1226},{"class":839,"line":1225},14,[1227,1231,1236,1241,1246,1251,1256,1260],{"type":787,"tag":837,"props":1228,"children":1229},{"style":844},[1230],{"type":793,"value":847},{"type":787,"tag":837,"props":1232,"children":1233},{"style":850},[1234],{"type":793,"value":1235}," incBy",{"type":787,"tag":837,"props":1237,"children":1238},{"style":856},[1239],{"type":793,"value":1240},"(",{"type":787,"tag":837,"props":1242,"children":1243},{"style":866},[1244],{"type":793,"value":1245},"uint256",{"type":787,"tag":837,"props":1247,"children":1248},{"style":919},[1249],{"type":793,"value":1250}," by",{"type":787,"tag":837,"props":1252,"children":1253},{"style":856},[1254],{"type":793,"value":1255},") ",{"type":787,"tag":837,"props":1257,"children":1258},{"style":844},[1259],{"type":793,"value":941},{"type":787,"tag":837,"props":1261,"children":1262},{"style":856},[1263],{"type":793,"value":1031},{"type":787,"tag":837,"props":1265,"children":1267},{"class":839,"line":1266},15,[1268],{"type":787,"tag":837,"props":1269,"children":1270},{"style":856},[1271],{"type":793,"value":1171},{"type":787,"tag":837,"props":1273,"children":1275},{"class":839,"line":1274},16,[1276],{"type":787,"tag":837,"props":1277,"children":1278},{"emptyLinePlaceholder":1037},[1279],{"type":793,"value":1040},{"type":787,"tag":837,"props":1281,"children":1283},{"class":839,"line":1282},17,[1284,1289,1294],{"type":787,"tag":837,"props":1285,"children":1286},{"style":877},[1287],{"type":793,"value":1288},"/// ",{"type":787,"tag":837,"props":1290,"children":1291},{"style":844},[1292],{"type":793,"value":1293},"@notice",{"type":787,"tag":837,"props":1295,"children":1296},{"style":877},[1297],{"type":793,"value":1298}," Interop receiver adapter for an existing Counter-like contract.\n",{"type":787,"tag":837,"props":1300,"children":1302},{"class":839,"line":1301},18,[1303,1307,1312],{"type":787,"tag":837,"props":1304,"children":1305},{"style":877},[1306],{"type":793,"value":1288},{"type":787,"tag":837,"props":1308,"children":1309},{"style":844},[1310],{"type":793,"value":1311},"@dev",{"type":787,"tag":837,"props":1313,"children":1314},{"style":877},[1315],{"type":793,"value":1316}," InteropHandler calls receiveMessage(); this adapter decodes payload and\n",{"type":787,"tag":837,"props":1318,"children":1320},{"class":839,"line":1319},19,[1321],{"type":787,"tag":837,"props":1322,"children":1323},{"style":877},[1324],{"type":793,"value":1325},"///      forwards to target contract methods.\n",{"type":787,"tag":837,"props":1327,"children":1329},{"class":839,"line":1328},20,[1330,1335,1340,1345,1349],{"type":787,"tag":837,"props":1331,"children":1332},{"style":844},[1333],{"type":793,"value":1334},"contract",{"type":787,"tag":837,"props":1336,"children":1337},{"style":850},[1338],{"type":793,"value":1339}," CounterInteropAdapter",{"type":787,"tag":837,"props":1341,"children":1342},{"style":844},[1343],{"type":793,"value":1344}," is",{"type":787,"tag":837,"props":1346,"children":1347},{"style":850},[1348],{"type":793,"value":1053},{"type":787,"tag":837,"props":1350,"children":1351},{"style":856},[1352],{"type":793,"value":1058},{"type":787,"tag":837,"props":1354,"children":1356},{"class":839,"line":1355},21,[1357,1362,1367,1372],{"type":787,"tag":837,"props":1358,"children":1359},{"style":856},[1360],{"type":793,"value":1361},"    ICounter ",{"type":787,"tag":837,"props":1363,"children":1364},{"style":844},[1365],{"type":793,"value":1366},"public",{"type":787,"tag":837,"props":1368,"children":1369},{"style":844},[1370],{"type":793,"value":1371}," immutable",{"type":787,"tag":837,"props":1373,"children":1374},{"style":856},[1375],{"type":793,"value":1376}," counter;\n",{"type":787,"tag":837,"props":1378,"children":1380},{"class":839,"line":1379},22,[1381],{"type":787,"tag":837,"props":1382,"children":1383},{"emptyLinePlaceholder":1037},[1384],{"type":793,"value":1040},{"type":787,"tag":837,"props":1386,"children":1388},{"class":839,"line":1387},23,[1389,1394,1399,1404,1409,1414],{"type":787,"tag":837,"props":1390,"children":1391},{"style":866},[1392],{"type":793,"value":1393},"    address",{"type":787,"tag":837,"props":1395,"children":1396},{"style":844},[1397],{"type":793,"value":1398}," constant",{"type":787,"tag":837,"props":1400,"children":1401},{"style":856},[1402],{"type":793,"value":1403}," INTEROP_HANDLER ",{"type":787,"tag":837,"props":1405,"children":1406},{"style":844},[1407],{"type":793,"value":1408},"=",{"type":787,"tag":837,"props":1410,"children":1411},{"style":866},[1412],{"type":793,"value":1413}," 0x000000000000000000000000000000000001000E",{"type":787,"tag":837,"props":1415,"children":1416},{"style":856},[1417],{"type":793,"value":1031},{"type":787,"tag":837,"props":1419,"children":1421},{"class":839,"line":1420},24,[1422],{"type":787,"tag":837,"props":1423,"children":1424},{"emptyLinePlaceholder":1037},[1425],{"type":793,"value":1040},{"type":787,"tag":837,"props":1427,"children":1429},{"class":839,"line":1428},25,[1430,1435,1440,1444,1449],{"type":787,"tag":837,"props":1431,"children":1432},{"style":844},[1433],{"type":793,"value":1434},"    error",{"type":787,"tag":837,"props":1436,"children":1437},{"style":850},[1438],{"type":793,"value":1439}," Unauthorized",{"type":787,"tag":837,"props":1441,"children":1442},{"style":856},[1443],{"type":793,"value":1240},{"type":787,"tag":837,"props":1445,"children":1446},{"style":866},[1447],{"type":793,"value":1448},"address",{"type":787,"tag":837,"props":1450,"children":1451},{"style":856},[1452],{"type":793,"value":1453}," caller);\n",{"type":787,"tag":837,"props":1455,"children":1457},{"class":839,"line":1456},26,[1458,1462,1467,1471,1476],{"type":787,"tag":837,"props":1459,"children":1460},{"style":844},[1461],{"type":793,"value":1434},{"type":787,"tag":837,"props":1463,"children":1464},{"style":850},[1465],{"type":793,"value":1466}," UnknownOp",{"type":787,"tag":837,"props":1468,"children":1469},{"style":856},[1470],{"type":793,"value":1240},{"type":787,"tag":837,"props":1472,"children":1473},{"style":866},[1474],{"type":793,"value":1475},"uint8",{"type":787,"tag":837,"props":1477,"children":1478},{"style":856},[1479],{"type":793,"value":1480}," op);\n",{"type":787,"tag":837,"props":1482,"children":1484},{"class":839,"line":1483},27,[1485],{"type":787,"tag":837,"props":1486,"children":1487},{"emptyLinePlaceholder":1037},[1488],{"type":793,"value":1040},{"type":787,"tag":837,"props":1490,"children":1492},{"class":839,"line":1491},28,[1493,1498,1503,1507,1512,1517,1521,1525,1530,1534,1538,1542,1547,1551,1555,1559],{"type":787,"tag":837,"props":1494,"children":1495},{"style":844},[1496],{"type":793,"value":1497},"    event",{"type":787,"tag":837,"props":1499,"children":1500},{"style":850},[1501],{"type":793,"value":1502}," InteropAction",{"type":787,"tag":837,"props":1504,"children":1505},{"style":856},[1506],{"type":793,"value":1240},{"type":787,"tag":837,"props":1508,"children":1509},{"style":866},[1510],{"type":793,"value":1511},"bytes32",{"type":787,"tag":837,"props":1513,"children":1514},{"style":844},[1515],{"type":793,"value":1516}," indexed",{"type":787,"tag":837,"props":1518,"children":1519},{"style":919},[1520],{"type":793,"value":1086},{"type":787,"tag":837,"props":1522,"children":1523},{"style":856},[1524],{"type":793,"value":899},{"type":787,"tag":837,"props":1526,"children":1527},{"style":866},[1528],{"type":793,"value":1529},"bytes",{"type":787,"tag":837,"props":1531,"children":1532},{"style":919},[1533],{"type":793,"value":1108},{"type":787,"tag":837,"props":1535,"children":1536},{"style":856},[1537],{"type":793,"value":899},{"type":787,"tag":837,"props":1539,"children":1540},{"style":866},[1541],{"type":793,"value":1475},{"type":787,"tag":837,"props":1543,"children":1544},{"style":919},[1545],{"type":793,"value":1546}," op",{"type":787,"tag":837,"props":1548,"children":1549},{"style":856},[1550],{"type":793,"value":899},{"type":787,"tag":837,"props":1552,"children":1553},{"style":866},[1554],{"type":793,"value":1245},{"type":787,"tag":837,"props":1556,"children":1557},{"style":919},[1558],{"type":793,"value":1250},{"type":787,"tag":837,"props":1560,"children":1561},{"style":856},[1562],{"type":793,"value":1162},{"type":787,"tag":837,"props":1564,"children":1566},{"class":839,"line":1565},29,[1567],{"type":787,"tag":837,"props":1568,"children":1569},{"emptyLinePlaceholder":1037},[1570],{"type":793,"value":1040},{"type":787,"tag":837,"props":1572,"children":1574},{"class":839,"line":1573},30,[1575,1580,1584,1588],{"type":787,"tag":837,"props":1576,"children":1577},{"style":844},[1578],{"type":793,"value":1579},"    constructor",{"type":787,"tag":837,"props":1581,"children":1582},{"style":856},[1583],{"type":793,"value":1240},{"type":787,"tag":837,"props":1585,"children":1586},{"style":866},[1587],{"type":793,"value":1448},{"type":787,"tag":837,"props":1589,"children":1590},{"style":856},[1591],{"type":793,"value":1592}," _counter) {\n",{"type":787,"tag":837,"props":1594,"children":1596},{"class":839,"line":1595},31,[1597,1602,1607,1612,1617,1621,1626,1631,1637],{"type":787,"tag":837,"props":1598,"children":1599},{"style":844},[1600],{"type":793,"value":1601},"        require",{"type":787,"tag":837,"props":1603,"children":1604},{"style":856},[1605],{"type":793,"value":1606},"(_counter ",{"type":787,"tag":837,"props":1608,"children":1609},{"style":844},[1610],{"type":793,"value":1611},"!=",{"type":787,"tag":837,"props":1613,"children":1614},{"style":866},[1615],{"type":793,"value":1616}," address",{"type":787,"tag":837,"props":1618,"children":1619},{"style":856},[1620],{"type":793,"value":1240},{"type":787,"tag":837,"props":1622,"children":1623},{"style":866},[1624],{"type":793,"value":1625},"0",{"type":787,"tag":837,"props":1627,"children":1628},{"style":856},[1629],{"type":793,"value":1630},"), ",{"type":787,"tag":837,"props":1632,"children":1634},{"style":1633},"--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF",[1635],{"type":793,"value":1636},"\"counter is zero\"",{"type":787,"tag":837,"props":1638,"children":1639},{"style":856},[1640],{"type":793,"value":1162},{"type":787,"tag":837,"props":1642,"children":1644},{"class":839,"line":1643},32,[1645,1650,1654,1658],{"type":787,"tag":837,"props":1646,"children":1647},{"style":856},[1648],{"type":793,"value":1649},"        counter ",{"type":787,"tag":837,"props":1651,"children":1652},{"style":844},[1653],{"type":793,"value":1408},{"type":787,"tag":837,"props":1655,"children":1656},{"style":850},[1657],{"type":793,"value":1192},{"type":787,"tag":837,"props":1659,"children":1660},{"style":856},[1661],{"type":793,"value":1662},"(_counter);\n",{"type":787,"tag":837,"props":1664,"children":1666},{"class":839,"line":1665},33,[1667],{"type":787,"tag":837,"props":1668,"children":1669},{"style":856},[1670],{"type":793,"value":1671},"    }\n",{"type":787,"tag":837,"props":1673,"children":1675},{"class":839,"line":1674},34,[1676],{"type":787,"tag":837,"props":1677,"children":1678},{"emptyLinePlaceholder":1037},[1679],{"type":793,"value":1040},{"type":787,"tag":837,"props":1681,"children":1683},{"class":839,"line":1682},35,[1684],{"type":787,"tag":837,"props":1685,"children":1686},{"style":877},[1687],{"type":793,"value":1688},"    /// payload format:\n",{"type":787,"tag":837,"props":1690,"children":1692},{"class":839,"line":1691},36,[1693],{"type":787,"tag":837,"props":1694,"children":1695},{"style":877},[1696],{"type":793,"value":1697},"    /// - abi.encode(uint8(0))               => counter.inc()\n",{"type":787,"tag":837,"props":1699,"children":1701},{"class":839,"line":1700},37,[1702],{"type":787,"tag":837,"props":1703,"children":1704},{"style":877},[1705],{"type":793,"value":1706},"    /// - abi.encode(uint8(1), uint256(by))  => counter.incBy(by)\n",{"type":787,"tag":837,"props":1708,"children":1710},{"class":839,"line":1709},38,[1711,1715,1719],{"type":787,"tag":837,"props":1712,"children":1713},{"style":844},[1714],{"type":793,"value":847},{"type":787,"tag":837,"props":1716,"children":1717},{"style":850},[1718],{"type":793,"value":853},{"type":787,"tag":837,"props":1720,"children":1721},{"style":856},[1722],{"type":793,"value":859},{"type":787,"tag":837,"props":1724,"children":1726},{"class":839,"line":1725},39,[1727,1731,1735],{"type":787,"tag":837,"props":1728,"children":1729},{"style":866},[1730],{"type":793,"value":869},{"type":787,"tag":837,"props":1732,"children":1733},{"style":919},[1734],{"type":793,"value":1086},{"type":787,"tag":837,"props":1736,"children":1737},{"style":856},[1738],{"type":793,"value":1091},{"type":787,"tag":837,"props":1740,"children":1742},{"class":839,"line":1741},40,[1743,1747,1751,1755],{"type":787,"tag":837,"props":1744,"children":1745},{"style":866},[1746],{"type":793,"value":889},{"type":787,"tag":837,"props":1748,"children":1749},{"style":844},[1750],{"type":793,"value":894},{"type":787,"tag":837,"props":1752,"children":1753},{"style":919},[1754],{"type":793,"value":1108},{"type":787,"tag":837,"props":1756,"children":1757},{"style":856},[1758],{"type":793,"value":1091},{"type":787,"tag":837,"props":1760,"children":1762},{"class":839,"line":1761},41,[1763,1767,1771],{"type":787,"tag":837,"props":1764,"children":1765},{"style":866},[1766],{"type":793,"value":889},{"type":787,"tag":837,"props":1768,"children":1769},{"style":844},[1770],{"type":793,"value":894},{"type":787,"tag":837,"props":1772,"children":1773},{"style":919},[1774],{"type":793,"value":1129},{"type":787,"tag":837,"props":1776,"children":1778},{"class":839,"line":1777},42,[1779,1783,1787,1791,1796,1800,1804,1808],{"type":787,"tag":837,"props":1780,"children":1781},{"style":856},[1782],{"type":793,"value":936},{"type":787,"tag":837,"props":1784,"children":1785},{"style":844},[1786],{"type":793,"value":941},{"type":787,"tag":837,"props":1788,"children":1789},{"style":844},[1790],{"type":793,"value":946},{"type":787,"tag":837,"props":1792,"children":1793},{"style":844},[1794],{"type":793,"value":1795}," override",{"type":787,"tag":837,"props":1797,"children":1798},{"style":844},[1799],{"type":793,"value":951},{"type":787,"tag":837,"props":1801,"children":1802},{"style":856},[1803],{"type":793,"value":956},{"type":787,"tag":837,"props":1805,"children":1806},{"style":866},[1807],{"type":793,"value":961},{"type":787,"tag":837,"props":1809,"children":1810},{"style":856},[1811],{"type":793,"value":966},{"type":787,"tag":837,"props":1813,"children":1815},{"class":839,"line":1814},43,[1816,1821,1825,1830,1835,1840,1845,1849,1853,1857],{"type":787,"tag":837,"props":1817,"children":1818},{"style":844},[1819],{"type":793,"value":1820},"        if",{"type":787,"tag":837,"props":1822,"children":1823},{"style":856},[1824],{"type":793,"value":956},{"type":787,"tag":837,"props":1826,"children":1827},{"style":866},[1828],{"type":793,"value":1829},"msg.sender",{"type":787,"tag":837,"props":1831,"children":1832},{"style":844},[1833],{"type":793,"value":1834}," !=",{"type":787,"tag":837,"props":1836,"children":1837},{"style":856},[1838],{"type":793,"value":1839}," INTEROP_HANDLER) ",{"type":787,"tag":837,"props":1841,"children":1842},{"style":844},[1843],{"type":793,"value":1844},"revert",{"type":787,"tag":837,"props":1846,"children":1847},{"style":850},[1848],{"type":793,"value":1439},{"type":787,"tag":837,"props":1850,"children":1851},{"style":856},[1852],{"type":793,"value":1240},{"type":787,"tag":837,"props":1854,"children":1855},{"style":866},[1856],{"type":793,"value":1829},{"type":787,"tag":837,"props":1858,"children":1859},{"style":856},[1860],{"type":793,"value":1162},{"type":787,"tag":837,"props":1862,"children":1864},{"class":839,"line":1863},44,[1865],{"type":787,"tag":837,"props":1866,"children":1867},{"emptyLinePlaceholder":1037},[1868],{"type":793,"value":1040},{"type":787,"tag":837,"props":1870,"children":1872},{"class":839,"line":1871},45,[1873,1878,1882,1887,1891,1896,1900,1905],{"type":787,"tag":837,"props":1874,"children":1875},{"style":856},[1876],{"type":793,"value":1877},"        (",{"type":787,"tag":837,"props":1879,"children":1880},{"style":866},[1881],{"type":793,"value":1475},{"type":787,"tag":837,"props":1883,"children":1884},{"style":856},[1885],{"type":793,"value":1886}," op, ",{"type":787,"tag":837,"props":1888,"children":1889},{"style":866},[1890],{"type":793,"value":1245},{"type":787,"tag":837,"props":1892,"children":1893},{"style":856},[1894],{"type":793,"value":1895}," by) ",{"type":787,"tag":837,"props":1897,"children":1898},{"style":844},[1899],{"type":793,"value":1408},{"type":787,"tag":837,"props":1901,"children":1902},{"style":850},[1903],{"type":793,"value":1904}," _decodePayload",{"type":787,"tag":837,"props":1906,"children":1907},{"style":856},[1908],{"type":793,"value":1909},"(payload);\n",{"type":787,"tag":837,"props":1911,"children":1913},{"class":839,"line":1912},46,[1914],{"type":787,"tag":837,"props":1915,"children":1916},{"emptyLinePlaceholder":1037},[1917],{"type":793,"value":1040},{"type":787,"tag":837,"props":1919,"children":1921},{"class":839,"line":1920},47,[1922,1926,1931,1936,1941],{"type":787,"tag":837,"props":1923,"children":1924},{"style":844},[1925],{"type":793,"value":1820},{"type":787,"tag":837,"props":1927,"children":1928},{"style":856},[1929],{"type":793,"value":1930}," (op ",{"type":787,"tag":837,"props":1932,"children":1933},{"style":844},[1934],{"type":793,"value":1935},"==",{"type":787,"tag":837,"props":1937,"children":1938},{"style":866},[1939],{"type":793,"value":1940}," 0",{"type":787,"tag":837,"props":1942,"children":1943},{"style":856},[1944],{"type":793,"value":966},{"type":787,"tag":837,"props":1946,"children":1948},{"class":839,"line":1947},48,[1949,1954,1959],{"type":787,"tag":837,"props":1950,"children":1951},{"style":856},[1952],{"type":793,"value":1953},"            counter.",{"type":787,"tag":837,"props":1955,"children":1956},{"style":850},[1957],{"type":793,"value":1958},"inc",{"type":787,"tag":837,"props":1960,"children":1961},{"style":856},[1962],{"type":793,"value":1963},"();\n",{"type":787,"tag":837,"props":1965,"children":1967},{"class":839,"line":1966},49,[1968,1973,1978,1983,1987,1991,1996],{"type":787,"tag":837,"props":1969,"children":1970},{"style":856},[1971],{"type":793,"value":1972},"        } ",{"type":787,"tag":837,"props":1974,"children":1975},{"style":844},[1976],{"type":793,"value":1977},"else",{"type":787,"tag":837,"props":1979,"children":1980},{"style":844},[1981],{"type":793,"value":1982}," if",{"type":787,"tag":837,"props":1984,"children":1985},{"style":856},[1986],{"type":793,"value":1930},{"type":787,"tag":837,"props":1988,"children":1989},{"style":844},[1990],{"type":793,"value":1935},{"type":787,"tag":837,"props":1992,"children":1993},{"style":866},[1994],{"type":793,"value":1995}," 1",{"type":787,"tag":837,"props":1997,"children":1998},{"style":856},[1999],{"type":793,"value":966},{"type":787,"tag":837,"props":2001,"children":2003},{"class":839,"line":2002},50,[2004,2008,2013],{"type":787,"tag":837,"props":2005,"children":2006},{"style":856},[2007],{"type":793,"value":1953},{"type":787,"tag":837,"props":2009,"children":2010},{"style":850},[2011],{"type":793,"value":2012},"incBy",{"type":787,"tag":837,"props":2014,"children":2015},{"style":856},[2016],{"type":793,"value":2017},"(by);\n",{"type":787,"tag":837,"props":2019,"children":2021},{"class":839,"line":2020},51,[2022,2026,2030],{"type":787,"tag":837,"props":2023,"children":2024},{"style":856},[2025],{"type":793,"value":1972},{"type":787,"tag":837,"props":2027,"children":2028},{"style":844},[2029],{"type":793,"value":1977},{"type":787,"tag":837,"props":2031,"children":2032},{"style":856},[2033],{"type":793,"value":1058},{"type":787,"tag":837,"props":2035,"children":2037},{"class":839,"line":2036},52,[2038,2043,2047],{"type":787,"tag":837,"props":2039,"children":2040},{"style":844},[2041],{"type":793,"value":2042},"            revert",{"type":787,"tag":837,"props":2044,"children":2045},{"style":850},[2046],{"type":793,"value":1466},{"type":787,"tag":837,"props":2048,"children":2049},{"style":856},[2050],{"type":793,"value":2051},"(op);\n",{"type":787,"tag":837,"props":2053,"children":2055},{"class":839,"line":2054},53,[2056],{"type":787,"tag":837,"props":2057,"children":2058},{"style":856},[2059],{"type":793,"value":2060},"        }\n",{"type":787,"tag":837,"props":2062,"children":2064},{"class":839,"line":2063},54,[2065],{"type":787,"tag":837,"props":2066,"children":2067},{"emptyLinePlaceholder":1037},[2068],{"type":793,"value":1040},{"type":787,"tag":837,"props":2070,"children":2072},{"class":839,"line":2071},55,[2073,2078,2082],{"type":787,"tag":837,"props":2074,"children":2075},{"style":844},[2076],{"type":793,"value":2077},"        emit",{"type":787,"tag":837,"props":2079,"children":2080},{"style":850},[2081],{"type":793,"value":1502},{"type":787,"tag":837,"props":2083,"children":2084},{"style":856},[2085],{"type":793,"value":2086},"(receiveId, sender, op, by);\n",{"type":787,"tag":837,"props":2088,"children":2090},{"class":839,"line":2089},56,[2091,2096],{"type":787,"tag":837,"props":2092,"children":2093},{"style":844},[2094],{"type":793,"value":2095},"        return",{"type":787,"tag":837,"props":2097,"children":2098},{"style":856},[2099],{"type":793,"value":2100}," IERC7786Recipient.receiveMessage.selector;\n",{"type":787,"tag":837,"props":2102,"children":2104},{"class":839,"line":2103},57,[2105],{"type":787,"tag":837,"props":2106,"children":2107},{"style":856},[2108],{"type":793,"value":1671},{"type":787,"tag":837,"props":2110,"children":2112},{"class":839,"line":2111},58,[2113],{"type":787,"tag":837,"props":2114,"children":2115},{"emptyLinePlaceholder":1037},[2116],{"type":793,"value":1040},{"type":787,"tag":837,"props":2118,"children":2120},{"class":839,"line":2119},59,[2121,2125,2129,2133,2137,2141,2145,2149,2154,2159,2163,2167,2171,2175,2179,2183,2187],{"type":787,"tag":837,"props":2122,"children":2123},{"style":844},[2124],{"type":793,"value":847},{"type":787,"tag":837,"props":2126,"children":2127},{"style":850},[2128],{"type":793,"value":1904},{"type":787,"tag":837,"props":2130,"children":2131},{"style":856},[2132],{"type":793,"value":1240},{"type":787,"tag":837,"props":2134,"children":2135},{"style":866},[2136],{"type":793,"value":1529},{"type":787,"tag":837,"props":2138,"children":2139},{"style":844},[2140],{"type":793,"value":894},{"type":787,"tag":837,"props":2142,"children":2143},{"style":919},[2144],{"type":793,"value":922},{"type":787,"tag":837,"props":2146,"children":2147},{"style":856},[2148],{"type":793,"value":1255},{"type":787,"tag":837,"props":2150,"children":2151},{"style":844},[2152],{"type":793,"value":2153},"internal",{"type":787,"tag":837,"props":2155,"children":2156},{"style":844},[2157],{"type":793,"value":2158}," pure",{"type":787,"tag":837,"props":2160,"children":2161},{"style":844},[2162],{"type":793,"value":951},{"type":787,"tag":837,"props":2164,"children":2165},{"style":856},[2166],{"type":793,"value":956},{"type":787,"tag":837,"props":2168,"children":2169},{"style":866},[2170],{"type":793,"value":1475},{"type":787,"tag":837,"props":2172,"children":2173},{"style":919},[2174],{"type":793,"value":1546},{"type":787,"tag":837,"props":2176,"children":2177},{"style":856},[2178],{"type":793,"value":899},{"type":787,"tag":837,"props":2180,"children":2181},{"style":866},[2182],{"type":793,"value":1245},{"type":787,"tag":837,"props":2184,"children":2185},{"style":919},[2186],{"type":793,"value":1250},{"type":787,"tag":837,"props":2188,"children":2189},{"style":856},[2190],{"type":793,"value":966},{"type":787,"tag":837,"props":2192,"children":2194},{"class":839,"line":2193},60,[2195,2199,2204,2208,2213],{"type":787,"tag":837,"props":2196,"children":2197},{"style":844},[2198],{"type":793,"value":1820},{"type":787,"tag":837,"props":2200,"children":2201},{"style":856},[2202],{"type":793,"value":2203}," (payload.length ",{"type":787,"tag":837,"props":2205,"children":2206},{"style":844},[2207],{"type":793,"value":1935},{"type":787,"tag":837,"props":2209,"children":2210},{"style":866},[2211],{"type":793,"value":2212}," 32",{"type":787,"tag":837,"props":2214,"children":2215},{"style":856},[2216],{"type":793,"value":966},{"type":787,"tag":837,"props":2218,"children":2220},{"class":839,"line":2219},61,[2221,2226,2230,2235,2240,2245,2250,2254],{"type":787,"tag":837,"props":2222,"children":2223},{"style":856},[2224],{"type":793,"value":2225},"            op ",{"type":787,"tag":837,"props":2227,"children":2228},{"style":844},[2229],{"type":793,"value":1408},{"type":787,"tag":837,"props":2231,"children":2232},{"style":866},[2233],{"type":793,"value":2234}," abi",{"type":787,"tag":837,"props":2236,"children":2237},{"style":856},[2238],{"type":793,"value":2239},".",{"type":787,"tag":837,"props":2241,"children":2242},{"style":850},[2243],{"type":793,"value":2244},"decode",{"type":787,"tag":837,"props":2246,"children":2247},{"style":856},[2248],{"type":793,"value":2249},"(payload, (",{"type":787,"tag":837,"props":2251,"children":2252},{"style":866},[2253],{"type":793,"value":1475},{"type":787,"tag":837,"props":2255,"children":2256},{"style":856},[2257],{"type":793,"value":2258},"));\n",{"type":787,"tag":837,"props":2260,"children":2262},{"class":839,"line":2261},62,[2263,2268,2272,2276],{"type":787,"tag":837,"props":2264,"children":2265},{"style":856},[2266],{"type":793,"value":2267},"            by ",{"type":787,"tag":837,"props":2269,"children":2270},{"style":844},[2271],{"type":793,"value":1408},{"type":787,"tag":837,"props":2273,"children":2274},{"style":866},[2275],{"type":793,"value":1940},{"type":787,"tag":837,"props":2277,"children":2278},{"style":856},[2279],{"type":793,"value":1031},{"type":787,"tag":837,"props":2281,"children":2283},{"class":839,"line":2282},63,[2284,2288,2292],{"type":787,"tag":837,"props":2285,"children":2286},{"style":856},[2287],{"type":793,"value":1972},{"type":787,"tag":837,"props":2289,"children":2290},{"style":844},[2291],{"type":793,"value":1977},{"type":787,"tag":837,"props":2293,"children":2294},{"style":856},[2295],{"type":793,"value":1058},{"type":787,"tag":837,"props":2297,"children":2299},{"class":839,"line":2298},64,[2300,2305,2309,2313,2317,2321,2325,2329,2333,2337],{"type":787,"tag":837,"props":2301,"children":2302},{"style":856},[2303],{"type":793,"value":2304},"            (op, by) ",{"type":787,"tag":837,"props":2306,"children":2307},{"style":844},[2308],{"type":793,"value":1408},{"type":787,"tag":837,"props":2310,"children":2311},{"style":866},[2312],{"type":793,"value":2234},{"type":787,"tag":837,"props":2314,"children":2315},{"style":856},[2316],{"type":793,"value":2239},{"type":787,"tag":837,"props":2318,"children":2319},{"style":850},[2320],{"type":793,"value":2244},{"type":787,"tag":837,"props":2322,"children":2323},{"style":856},[2324],{"type":793,"value":2249},{"type":787,"tag":837,"props":2326,"children":2327},{"style":866},[2328],{"type":793,"value":1475},{"type":787,"tag":837,"props":2330,"children":2331},{"style":856},[2332],{"type":793,"value":899},{"type":787,"tag":837,"props":2334,"children":2335},{"style":866},[2336],{"type":793,"value":1245},{"type":787,"tag":837,"props":2338,"children":2339},{"style":856},[2340],{"type":793,"value":2258},{"type":787,"tag":837,"props":2342,"children":2344},{"class":839,"line":2343},65,[2345],{"type":787,"tag":837,"props":2346,"children":2347},{"style":856},[2348],{"type":793,"value":2060},{"type":787,"tag":837,"props":2350,"children":2352},{"class":839,"line":2351},66,[2353],{"type":787,"tag":837,"props":2354,"children":2355},{"style":856},[2356],{"type":793,"value":1671},{"type":787,"tag":837,"props":2358,"children":2360},{"class":839,"line":2359},67,[2361],{"type":787,"tag":837,"props":2362,"children":2363},{"style":856},[2364],{"type":793,"value":1171},{"type":787,"tag":788,"props":2366,"children":2368},{"id":2367},"how-can-i-send-a-transaction-bundle",[2369],{"type":793,"value":2370},"How can I send a transaction bundle?",{"type":787,"tag":796,"props":2372,"children":2373},{},[2374],{"type":793,"value":2375},"The basic steps of using bundles are:",{"type":787,"tag":2377,"props":2378,"children":2379},"ol",{},[2380,2386,2391],{"type":787,"tag":2381,"props":2382,"children":2383},"li",{},[2384],{"type":793,"value":2385},"Construct a bundle.",{"type":787,"tag":2381,"props":2387,"children":2388},{},[2389],{"type":793,"value":2390},"Send the bundle.",{"type":787,"tag":2381,"props":2392,"children":2393},{},[2394],{"type":793,"value":2395},"Execute the bundle on the destination chain.",{"type":787,"tag":796,"props":2397,"children":2398},{},[2399,2401,2407],{"type":793,"value":2400},"The ",{"type":787,"tag":818,"props":2402,"children":2404},{"className":2403},[],[2405],{"type":793,"value":2406},"InteropCenter",{"type":793,"value":2408}," contract is used to send bundles.",{"type":787,"tag":796,"props":2410,"children":2411},{},[2412,2413,2419],{"type":793,"value":2400},{"type":787,"tag":818,"props":2414,"children":2416},{"className":2415},[],[2417],{"type":793,"value":2418},"InteropHandler",{"type":793,"value":2420}," contract is used to finalize and execute bundles.",{"type":787,"tag":796,"props":2422,"children":2423},{},[2424,2426,2432],{"type":793,"value":2425},"For a step-by-step guide, check out the ",{"type":787,"tag":2427,"props":2428,"children":2429},"a",{"href":250},[2430],{"type":793,"value":2431},"transaction bundle guide",{"type":793,"value":2239},{"type":787,"tag":788,"props":2434,"children":2436},{"id":2435},"is-there-a-fee",[2437],{"type":793,"value":2438},"Is there a fee?",{"type":787,"tag":796,"props":2440,"children":2441},{},[2442,2444,2449],{"type":793,"value":2443},"There is a small additional fee required to send a transaction bundle from one chain to another.\nRead the ",{"type":787,"tag":2427,"props":2445,"children":2446},{"href":267},[2447],{"type":793,"value":2448},"interop fees",{"type":793,"value":2450}," section to learn more about how fees work.",{"type":787,"tag":788,"props":2452,"children":2454},{"id":2453},"lifecycle-of-a-bundle",[2455],{"type":793,"value":2456},"Lifecycle of a bundle",{"type":787,"tag":2377,"props":2458,"children":2459},{},[2460,2479,2497,2507,2517,2542,2566,2597],{"type":787,"tag":2381,"props":2461,"children":2462},{},[2463,2469,2471,2477],{"type":787,"tag":2464,"props":2465,"children":2466},"strong",{},[2467],{"type":793,"value":2468},"Bundle creation:",{"type":793,"value":2470}," The sender builds an ",{"type":787,"tag":818,"props":2472,"children":2474},{"className":2473},[],[2475],{"type":793,"value":2476},"InteropBundle",{"type":793,"value":2478}," with a destination chain,\none or more calls, and bundle attributes such as the execution address,\nunbundler address, and fee mode.",{"type":787,"tag":2381,"props":2480,"children":2481},{},[2482,2487,2489,2495],{"type":787,"tag":2464,"props":2483,"children":2484},{},[2485],{"type":793,"value":2486},"Bundle submission:",{"type":793,"value":2488}," The sender calls ",{"type":787,"tag":818,"props":2490,"children":2492},{"className":2491},[],[2493],{"type":793,"value":2494},"InteropCenter.sendBundle",{"type":793,"value":2496}," on the source chain.\nThe contract validates the destination chain, processes the call starters,\ncollects the required fees, and emits the bundle as an L2 to L1 message.",{"type":787,"tag":2381,"props":2498,"children":2499},{},[2500,2505],{"type":787,"tag":2464,"props":2501,"children":2502},{},[2503],{"type":793,"value":2504},"Interop root update:",{"type":793,"value":2506}," After the source chain settles through Gateway,\nthe bundle message is included in the shared interop root for that chain.",{"type":787,"tag":2381,"props":2508,"children":2509},{},[2510,2515],{"type":787,"tag":2464,"props":2511,"children":2512},{},[2513],{"type":793,"value":2514},"Root importation:",{"type":793,"value":2516}," The destination chain imports the relevant interop root,\nmaking the bundle message provable there.",{"type":787,"tag":2381,"props":2518,"children":2519},{},[2520,2525,2527,2533,2535,2540],{"type":787,"tag":2464,"props":2521,"children":2522},{},[2523],{"type":793,"value":2524},"Proof submission:",{"type":793,"value":2526}," A relayer submits the ABI-encoded bundle and its\n",{"type":787,"tag":818,"props":2528,"children":2530},{"className":2529},[],[2531],{"type":793,"value":2532},"MessageInclusionProof",{"type":793,"value":2534}," to ",{"type":787,"tag":818,"props":2536,"children":2538},{"className":2537},[],[2539],{"type":793,"value":2418},{"type":793,"value":2541}," on the destination chain.",{"type":787,"tag":2381,"props":2543,"children":2544},{},[2545,2550,2552,2557,2559,2565],{"type":787,"tag":2464,"props":2546,"children":2547},{},[2548],{"type":793,"value":2549},"Bundle verification:",{"type":793,"value":2551}," ",{"type":787,"tag":818,"props":2553,"children":2555},{"className":2554},[],[2556],{"type":793,"value":2418},{"type":793,"value":2558}," checks that the proof matches the source chain,\ndestination chain, and bundle contents, then marks the bundle as ",{"type":787,"tag":818,"props":2560,"children":2562},{"className":2561},[],[2563],{"type":793,"value":2564},"Verified",{"type":793,"value":2239},{"type":787,"tag":2381,"props":2567,"children":2568},{},[2569,2574,2575,2581,2583,2588,2590,2596],{"type":787,"tag":2464,"props":2570,"children":2571},{},[2572],{"type":793,"value":2573},"Bundle execution:",{"type":793,"value":2551},{"type":787,"tag":818,"props":2576,"children":2578},{"className":2577},[],[2579],{"type":793,"value":2580},"InteropHandler.executeBundle",{"type":793,"value":2582}," calls each destination contract's\n",{"type":787,"tag":818,"props":2584,"children":2586},{"className":2585},[],[2587],{"type":793,"value":823},{"type":793,"value":2589}," function in order.\nIf every call succeeds, the bundle is executed atomically and marked as ",{"type":787,"tag":818,"props":2591,"children":2593},{"className":2592},[],[2594],{"type":793,"value":2595},"FullyExecuted",{"type":793,"value":2239},{"type":787,"tag":2381,"props":2598,"children":2599},{},[2600,2605,2607,2613],{"type":787,"tag":2464,"props":2601,"children":2602},{},[2603],{"type":793,"value":2604},"Optional unbundling:",{"type":793,"value":2606}," If the bundle is verified but cannot be fully executed as one atomic operation,\nthe authorized unbundler can use ",{"type":787,"tag":818,"props":2608,"children":2610},{"className":2609},[],[2611],{"type":793,"value":2612},"unbundleBundle",{"type":793,"value":2614}," to execute or cancel calls individually.",{"type":787,"tag":788,"props":2616,"children":2618},{"id":2617},"sendbundle-details",[2619,2625],{"type":787,"tag":818,"props":2620,"children":2622},{"className":2621},[],[2623],{"type":793,"value":2624},"sendBundle",{"type":793,"value":2626}," Details",{"type":787,"tag":796,"props":2628,"children":2629},{},[2630,2632,2637],{"type":793,"value":2631},"The interface for sending a bundle via the ",{"type":787,"tag":818,"props":2633,"children":2635},{"className":2634},[],[2636],{"type":793,"value":2406},{"type":793,"value":2638}," contract looks like this:",{"type":787,"tag":827,"props":2640,"children":2642},{"className":829,"code":2641,"language":831,"meta":781,"style":781},"  function sendBundle(\n        bytes calldata _destinationChainId,\n        InteropCallStarter[] calldata _callStarters,\n        bytes[] calldata _bundleAttributes\n    ) external payable returns (bytes32 bundleHash);\n",[2643],{"type":787,"tag":818,"props":2644,"children":2645},{"__ignoreMap":781},[2646,2663,2679,2702,2722],{"type":787,"tag":837,"props":2647,"children":2648},{"class":839,"line":840},[2649,2654,2659],{"type":787,"tag":837,"props":2650,"children":2651},{"style":844},[2652],{"type":793,"value":2653},"  function",{"type":787,"tag":837,"props":2655,"children":2656},{"style":850},[2657],{"type":793,"value":2658}," sendBundle",{"type":787,"tag":837,"props":2660,"children":2661},{"style":856},[2662],{"type":793,"value":859},{"type":787,"tag":837,"props":2664,"children":2665},{"class":839,"line":862},[2666,2670,2674],{"type":787,"tag":837,"props":2667,"children":2668},{"style":866},[2669],{"type":793,"value":889},{"type":787,"tag":837,"props":2671,"children":2672},{"style":844},[2673],{"type":793,"value":894},{"type":787,"tag":837,"props":2675,"children":2676},{"style":856},[2677],{"type":793,"value":2678}," _destinationChainId,\n",{"type":787,"tag":837,"props":2680,"children":2681},{"class":839,"line":883},[2682,2687,2692,2697],{"type":787,"tag":837,"props":2683,"children":2684},{"style":844},[2685],{"type":793,"value":2686},"        InteropCallStarter",{"type":787,"tag":837,"props":2688,"children":2689},{"style":856},[2690],{"type":793,"value":2691},"[] ",{"type":787,"tag":837,"props":2693,"children":2694},{"style":844},[2695],{"type":793,"value":2696},"calldata",{"type":787,"tag":837,"props":2698,"children":2699},{"style":856},[2700],{"type":793,"value":2701}," _callStarters,\n",{"type":787,"tag":837,"props":2703,"children":2704},{"class":839,"line":907},[2705,2709,2713,2717],{"type":787,"tag":837,"props":2706,"children":2707},{"style":866},[2708],{"type":793,"value":889},{"type":787,"tag":837,"props":2710,"children":2711},{"style":856},[2712],{"type":793,"value":2691},{"type":787,"tag":837,"props":2714,"children":2715},{"style":844},[2716],{"type":793,"value":2696},{"type":787,"tag":837,"props":2718,"children":2719},{"style":856},[2720],{"type":793,"value":2721}," _bundleAttributes\n",{"type":787,"tag":837,"props":2723,"children":2724},{"class":839,"line":930},[2725,2729,2733,2737,2741,2745,2749,2754],{"type":787,"tag":837,"props":2726,"children":2727},{"style":856},[2728],{"type":793,"value":936},{"type":787,"tag":837,"props":2730,"children":2731},{"style":844},[2732],{"type":793,"value":941},{"type":787,"tag":837,"props":2734,"children":2735},{"style":844},[2736],{"type":793,"value":946},{"type":787,"tag":837,"props":2738,"children":2739},{"style":844},[2740],{"type":793,"value":951},{"type":787,"tag":837,"props":2742,"children":2743},{"style":856},[2744],{"type":793,"value":956},{"type":787,"tag":837,"props":2746,"children":2747},{"style":866},[2748],{"type":793,"value":1511},{"type":787,"tag":837,"props":2750,"children":2751},{"style":919},[2752],{"type":793,"value":2753}," bundleHash",{"type":787,"tag":837,"props":2755,"children":2756},{"style":856},[2757],{"type":793,"value":1162},{"type":787,"tag":796,"props":2759,"children":2760},{},[2761],{"type":793,"value":2762},"The function returns the hash of the sent bundle.",{"type":787,"tag":796,"props":2764,"children":2765},{},[2766],{"type":793,"value":2767},"There are three input arguments:",{"type":787,"tag":2769,"props":2770,"children":2771},"ul",{},[2772,2793,2812],{"type":787,"tag":2381,"props":2773,"children":2774},{},[2775,2781,2783,2791],{"type":787,"tag":818,"props":2776,"children":2778},{"className":2777},[],[2779],{"type":793,"value":2780},"_destinationChainId",{"type":793,"value":2782},": An ",{"type":787,"tag":2427,"props":2784,"children":2788},{"href":2785,"rel":2786},"https://eips.ethereum.org/EIPS/eip-7930",[2787],"nofollow",[2789],{"type":793,"value":2790},"ERC-7930",{"type":793,"value":2792}," address that MUST have an empty address field,\nand encodes an EVM destination chain ID to send the bundle to.",{"type":787,"tag":2381,"props":2794,"children":2795},{},[2796,2802,2804,2810],{"type":787,"tag":818,"props":2797,"children":2799},{"className":2798},[],[2800],{"type":793,"value":2801},"_callStarters",{"type":793,"value":2803},": An array of ",{"type":787,"tag":818,"props":2805,"children":2807},{"className":2806},[],[2808],{"type":793,"value":2809},"InteropCallStarter",{"type":793,"value":2811}," structs.",{"type":787,"tag":2381,"props":2813,"children":2814},{},[2815,2821],{"type":787,"tag":818,"props":2816,"children":2818},{"className":2817},[],[2819],{"type":793,"value":2820},"_bundleAttributes",{"type":793,"value":2822},": A bytes array for the bundle's attributes.",{"type":787,"tag":2824,"props":2825,"children":2827},"h3",{"id":2826},"interop-call-starters",[2828],{"type":793,"value":2829},"Interop Call Starters",{"type":787,"tag":796,"props":2831,"children":2832},{},[2833],{"type":793,"value":2834},"An interop call starter represents a transaction to be included in the bundle.",{"type":787,"tag":796,"props":2836,"children":2837},{},[2838],{"type":793,"value":2839},"An interop call starter struct looks like this:",{"type":787,"tag":827,"props":2841,"children":2843},{"className":829,"code":2842,"language":831,"meta":781,"style":781},"struct InteropCallStarter {\n    bytes to;\n    bytes data;\n    bytes[] callAttributes;\n}\n",[2844],{"type":787,"tag":818,"props":2845,"children":2846},{"__ignoreMap":781},[2847,2864,2877,2889,2901],{"type":787,"tag":837,"props":2848,"children":2849},{"class":839,"line":840},[2850,2855,2860],{"type":787,"tag":837,"props":2851,"children":2852},{"style":844},[2853],{"type":793,"value":2854},"struct",{"type":787,"tag":837,"props":2856,"children":2857},{"style":850},[2858],{"type":793,"value":2859}," InteropCallStarter",{"type":787,"tag":837,"props":2861,"children":2862},{"style":856},[2863],{"type":793,"value":1058},{"type":787,"tag":837,"props":2865,"children":2866},{"class":839,"line":862},[2867,2872],{"type":787,"tag":837,"props":2868,"children":2869},{"style":866},[2870],{"type":793,"value":2871},"    bytes",{"type":787,"tag":837,"props":2873,"children":2874},{"style":856},[2875],{"type":793,"value":2876}," to;\n",{"type":787,"tag":837,"props":2878,"children":2879},{"class":839,"line":883},[2880,2884],{"type":787,"tag":837,"props":2881,"children":2882},{"style":866},[2883],{"type":793,"value":2871},{"type":787,"tag":837,"props":2885,"children":2886},{"style":856},[2887],{"type":793,"value":2888}," data;\n",{"type":787,"tag":837,"props":2890,"children":2891},{"class":839,"line":907},[2892,2896],{"type":787,"tag":837,"props":2893,"children":2894},{"style":866},[2895],{"type":793,"value":2871},{"type":787,"tag":837,"props":2897,"children":2898},{"style":856},[2899],{"type":793,"value":2900},"[] callAttributes;\n",{"type":787,"tag":837,"props":2902,"children":2903},{"class":839,"line":930},[2904],{"type":787,"tag":837,"props":2905,"children":2906},{"style":856},[2907],{"type":793,"value":1171},{"type":787,"tag":796,"props":2909,"children":2910},{},[2911],{"type":793,"value":2912},"It contains three fields:",{"type":787,"tag":2769,"props":2914,"children":2915},{},[2916,2942,2960],{"type":787,"tag":2381,"props":2917,"children":2918},{},[2919,2925,2927,2932,2934,2940],{"type":787,"tag":818,"props":2920,"children":2922},{"className":2921},[],[2923],{"type":793,"value":2924},"to",{"type":793,"value":2926},": the ",{"type":787,"tag":2427,"props":2928,"children":2930},{"href":2785,"rel":2929},[2787],[2931],{"type":793,"value":2790},{"type":793,"value":2933}," address to call on the destination chain. The address must have empty ",{"type":787,"tag":818,"props":2935,"children":2937},{"className":2936},[],[2938],{"type":793,"value":2939},"ChainReference",{"type":793,"value":2941},".\nThis is due to the fact that chain ID is always provided on a bundle level as the destination chain ID.",{"type":787,"tag":2381,"props":2943,"children":2944},{},[2945,2951,2953,2958],{"type":787,"tag":818,"props":2946,"children":2948},{"className":2947},[],[2949],{"type":793,"value":2950},"data",{"type":793,"value":2952},": The calldata payload to send to the ",{"type":787,"tag":818,"props":2954,"children":2956},{"className":2955},[],[2957],{"type":793,"value":2924},{"type":793,"value":2959}," address on the destination chain.",{"type":787,"tag":2381,"props":2961,"children":2962},{},[2963,2969,2971,2978],{"type":787,"tag":818,"props":2964,"children":2966},{"className":2965},[],[2967],{"type":793,"value":2968},"callAttributes",{"type":793,"value":2970},": The ",{"type":787,"tag":2427,"props":2972,"children":2975},{"href":2973,"rel":2974},"https://eips.ethereum.org/EIPS/eip-7786",[2787],[2976],{"type":793,"value":2977},"EIP-7786",{"type":793,"value":2979}," attributes.\nAttributes are structured metadata to be used by the gateway.",{"type":787,"tag":2981,"props":2982,"children":2984},"h4",{"id":2983},"call-attributes",[2985],{"type":793,"value":2986},"Call Attributes",{"type":787,"tag":796,"props":2988,"children":2989},{},[2990],{"type":793,"value":2991},"The call attributes describe how a call inside a bundle should be executed on the destination chain.",{"type":787,"tag":827,"props":2993,"children":2995},{"className":829,"code":2994,"language":831,"meta":781,"style":781},"struct CallAttributes {\n    uint256 interopCallValue;\n    bool indirectCall;\n    uint256 indirectCallMessageValue;\n}\n",[2996],{"type":787,"tag":818,"props":2997,"children":2998},{"__ignoreMap":781},[2999,3015,3028,3041,3053],{"type":787,"tag":837,"props":3000,"children":3001},{"class":839,"line":840},[3002,3006,3011],{"type":787,"tag":837,"props":3003,"children":3004},{"style":844},[3005],{"type":793,"value":2854},{"type":787,"tag":837,"props":3007,"children":3008},{"style":850},[3009],{"type":793,"value":3010}," CallAttributes",{"type":787,"tag":837,"props":3012,"children":3013},{"style":856},[3014],{"type":793,"value":1058},{"type":787,"tag":837,"props":3016,"children":3017},{"class":839,"line":862},[3018,3023],{"type":787,"tag":837,"props":3019,"children":3020},{"style":866},[3021],{"type":793,"value":3022},"    uint256",{"type":787,"tag":837,"props":3024,"children":3025},{"style":856},[3026],{"type":793,"value":3027}," interopCallValue;\n",{"type":787,"tag":837,"props":3029,"children":3030},{"class":839,"line":883},[3031,3036],{"type":787,"tag":837,"props":3032,"children":3033},{"style":866},[3034],{"type":793,"value":3035},"    bool",{"type":787,"tag":837,"props":3037,"children":3038},{"style":856},[3039],{"type":793,"value":3040}," indirectCall;\n",{"type":787,"tag":837,"props":3042,"children":3043},{"class":839,"line":907},[3044,3048],{"type":787,"tag":837,"props":3045,"children":3046},{"style":866},[3047],{"type":793,"value":3022},{"type":787,"tag":837,"props":3049,"children":3050},{"style":856},[3051],{"type":793,"value":3052}," indirectCallMessageValue;\n",{"type":787,"tag":837,"props":3054,"children":3055},{"class":839,"line":930},[3056],{"type":787,"tag":837,"props":3057,"children":3058},{"style":856},[3059],{"type":793,"value":1171},{"type":787,"tag":796,"props":3061,"children":3062},{},[3063,3065,3071],{"type":793,"value":3064},"A ",{"type":787,"tag":818,"props":3066,"children":3068},{"className":3067},[],[3069],{"type":793,"value":3070},"CallAttributes",{"type":793,"value":3072}," struct includes:",{"type":787,"tag":2769,"props":3074,"children":3075},{},[3076,3087,3098],{"type":787,"tag":2381,"props":3077,"children":3078},{},[3079,3085],{"type":787,"tag":818,"props":3080,"children":3082},{"className":3081},[],[3083],{"type":793,"value":3084},"interopCallValue",{"type":793,"value":3086},": The base token value on destination chain to send for an interop call.",{"type":787,"tag":2381,"props":3088,"children":3089},{},[3090,3096],{"type":787,"tag":818,"props":3091,"children":3093},{"className":3092},[],[3094],{"type":793,"value":3095},"indirectCall",{"type":793,"value":3097},": If the call is direct or not.\nAn indirect call first calls a contract specified by the call starter, which then returns an actual call starter that is used to form an interop call.\nIn particular, this is used for interop token transfers.\nIn contrast, a direct call uses the call starter to form an interop call.",{"type":787,"tag":2381,"props":3099,"children":3100},{},[3101,3107],{"type":787,"tag":818,"props":3102,"children":3104},{"className":3103},[],[3105],{"type":793,"value":3106},"indirectCallMessageValue",{"type":793,"value":3108},": The base token value on the origin chain to send for an indirect call.",{"type":787,"tag":2824,"props":3110,"children":3112},{"id":3111},"bundle-attributes",[3113],{"type":793,"value":3114},"Bundle Attributes",{"type":787,"tag":796,"props":3116,"children":3117},{},[3118],{"type":793,"value":3119},"The information in the bundle attributes decides three things:",{"type":787,"tag":2377,"props":3121,"children":3122},{},[3123,3128,3133],{"type":787,"tag":2381,"props":3124,"children":3125},{},[3126],{"type":793,"value":3127},"If anyone can execute the bundle on the destination chain, or only some specific address.",{"type":787,"tag":2381,"props":3129,"children":3130},{},[3131],{"type":793,"value":3132},"What address can unbundle the bundle.",{"type":787,"tag":2381,"props":3134,"children":3135},{},[3136],{"type":793,"value":3137},"What fee mode is used when the bundle is sent.",{"type":787,"tag":796,"props":3139,"children":3140},{},[3141,3142,3148],{"type":793,"value":3064},{"type":787,"tag":818,"props":3143,"children":3145},{"className":3144},[],[3146],{"type":793,"value":3147},"BundleAttributes",{"type":793,"value":3149}," struct looks like this:",{"type":787,"tag":827,"props":3151,"children":3153},{"className":829,"code":3152,"language":831,"meta":781,"style":781},"struct BundleAttributes {\n    bytes executionAddress;\n    bytes unbundlerAddress;\n    bool useFixedFee;\n}\n",[3154],{"type":787,"tag":818,"props":3155,"children":3156},{"__ignoreMap":781},[3157,3173,3185,3197,3209],{"type":787,"tag":837,"props":3158,"children":3159},{"class":839,"line":840},[3160,3164,3169],{"type":787,"tag":837,"props":3161,"children":3162},{"style":844},[3163],{"type":793,"value":2854},{"type":787,"tag":837,"props":3165,"children":3166},{"style":850},[3167],{"type":793,"value":3168}," BundleAttributes",{"type":787,"tag":837,"props":3170,"children":3171},{"style":856},[3172],{"type":793,"value":1058},{"type":787,"tag":837,"props":3174,"children":3175},{"class":839,"line":862},[3176,3180],{"type":787,"tag":837,"props":3177,"children":3178},{"style":866},[3179],{"type":793,"value":2871},{"type":787,"tag":837,"props":3181,"children":3182},{"style":856},[3183],{"type":793,"value":3184}," executionAddress;\n",{"type":787,"tag":837,"props":3186,"children":3187},{"class":839,"line":883},[3188,3192],{"type":787,"tag":837,"props":3189,"children":3190},{"style":866},[3191],{"type":793,"value":2871},{"type":787,"tag":837,"props":3193,"children":3194},{"style":856},[3195],{"type":793,"value":3196}," unbundlerAddress;\n",{"type":787,"tag":837,"props":3198,"children":3199},{"class":839,"line":907},[3200,3204],{"type":787,"tag":837,"props":3201,"children":3202},{"style":866},[3203],{"type":793,"value":3035},{"type":787,"tag":837,"props":3205,"children":3206},{"style":856},[3207],{"type":793,"value":3208}," useFixedFee;\n",{"type":787,"tag":837,"props":3210,"children":3211},{"class":839,"line":930},[3212],{"type":787,"tag":837,"props":3213,"children":3214},{"style":856},[3215],{"type":793,"value":1171},{"type":787,"tag":2769,"props":3217,"children":3218},{},[3219,3238,3264],{"type":787,"tag":2381,"props":3220,"children":3221},{},[3222,3223,3229,3231,3236],{"type":793,"value":2400},{"type":787,"tag":818,"props":3224,"children":3226},{"className":3225},[],[3227],{"type":793,"value":3228},"executionAddress",{"type":793,"value":3230}," can either be empty or an ",{"type":787,"tag":2427,"props":3232,"children":3234},{"href":2785,"rel":3233},[2787],[3235],{"type":793,"value":2790},{"type":793,"value":3237}," address.\nIf the byte array is empty then execution is permissionless.",{"type":787,"tag":2381,"props":3239,"children":3240},{},[3241,3242,3248,3250,3255,3257,3262],{"type":793,"value":2400},{"type":787,"tag":818,"props":3243,"children":3245},{"className":3244},[],[3246],{"type":793,"value":3247},"unbundlerAddress",{"type":793,"value":3249}," must be an ",{"type":787,"tag":2427,"props":3251,"children":3253},{"href":2785,"rel":3252},[2787],[3254],{"type":793,"value":2790},{"type":793,"value":3256}," address.\nIf the unbundler is not set for a bundle,\nthe ",{"type":787,"tag":818,"props":3258,"children":3260},{"className":3259},[],[3261],{"type":793,"value":2406},{"type":793,"value":3263}," contract sets the unbundler to be equal to the original sender.",{"type":787,"tag":2381,"props":3265,"children":3266},{},[3267,3273,3275,3281,3283,3289,3291,3296],{"type":787,"tag":818,"props":3268,"children":3270},{"className":3269},[],[3271],{"type":793,"value":3272},"useFixedFee",{"type":793,"value":3274}," selects the fee mode for the bundle.\nIf ",{"type":787,"tag":818,"props":3276,"children":3278},{"className":3277},[],[3279],{"type":793,"value":3280},"true",{"type":793,"value":3282},", the sender pays the fixed interop fee in ZK tokens.\nIf ",{"type":787,"tag":818,"props":3284,"children":3286},{"className":3285},[],[3287],{"type":793,"value":3288},"false",{"type":793,"value":3290},", the sender pays the dynamic per-call fee in the source chain's base token.\nIf the attribute is omitted, it defaults to ",{"type":787,"tag":818,"props":3292,"children":3294},{"className":3293},[],[3295],{"type":793,"value":3288},{"type":793,"value":2239},{"type":787,"tag":788,"props":3298,"children":3300},{"id":3299},"executebundle-details",[3301,3307],{"type":787,"tag":818,"props":3302,"children":3304},{"className":3303},[],[3305],{"type":793,"value":3306},"executeBundle",{"type":793,"value":2626},{"type":787,"tag":796,"props":3309,"children":3310},{},[3311],{"type":793,"value":3312},"Bundles are executed atomically, which means that\nif any call in the bundle fails, every call in the bundle is reverted.",{"type":787,"tag":827,"props":3314,"children":3316},{"className":829,"code":3315,"language":831,"meta":781,"style":781},"function executeBundle(bytes memory _bundle, MessageInclusionProof memory _proof) external;\n",[3317],{"type":787,"tag":818,"props":3318,"children":3319},{"__ignoreMap":781},[3320],{"type":787,"tag":837,"props":3321,"children":3322},{"class":839,"line":840},[3323,3328,3333,3337,3341,3346,3351,3355,3359,3364,3368],{"type":787,"tag":837,"props":3324,"children":3325},{"style":844},[3326],{"type":793,"value":3327},"function",{"type":787,"tag":837,"props":3329,"children":3330},{"style":850},[3331],{"type":793,"value":3332}," executeBundle",{"type":787,"tag":837,"props":3334,"children":3335},{"style":856},[3336],{"type":793,"value":1240},{"type":787,"tag":837,"props":3338,"children":3339},{"style":866},[3340],{"type":793,"value":1529},{"type":787,"tag":837,"props":3342,"children":3343},{"style":844},[3344],{"type":793,"value":3345}," memory",{"type":787,"tag":837,"props":3347,"children":3348},{"style":856},[3349],{"type":793,"value":3350}," _bundle, ",{"type":787,"tag":837,"props":3352,"children":3353},{"style":844},[3354],{"type":793,"value":2532},{"type":787,"tag":837,"props":3356,"children":3357},{"style":844},[3358],{"type":793,"value":3345},{"type":787,"tag":837,"props":3360,"children":3361},{"style":856},[3362],{"type":793,"value":3363}," _proof) ",{"type":787,"tag":837,"props":3365,"children":3366},{"style":844},[3367],{"type":793,"value":941},{"type":787,"tag":837,"props":3369,"children":3370},{"style":856},[3371],{"type":793,"value":1031},{"type":787,"tag":796,"props":3373,"children":3374},{},[3375,3377,3382],{"type":793,"value":3376},"There are two input arguments for ",{"type":787,"tag":818,"props":3378,"children":3380},{"className":3379},[],[3381],{"type":793,"value":3306},{"type":793,"value":3383},":",{"type":787,"tag":2377,"props":3385,"children":3386},{},[3387,3411],{"type":787,"tag":2381,"props":3388,"children":3389},{},[3390,3396,3398,3403,3405,3410],{"type":787,"tag":818,"props":3391,"children":3393},{"className":3392},[],[3394],{"type":793,"value":3395},"_bundle",{"type":793,"value":3397},": the ABI-encoded ",{"type":787,"tag":818,"props":3399,"children":3401},{"className":3400},[],[3402],{"type":793,"value":2476},{"type":793,"value":3404}," to execute.\nThis must match exactly the bundle that is sent in ",{"type":787,"tag":818,"props":3406,"children":3408},{"className":3407},[],[3409],{"type":793,"value":2624},{"type":793,"value":2239},{"type":787,"tag":2381,"props":3412,"children":3413},{},[3414,3420,3422,3427],{"type":787,"tag":818,"props":3415,"children":3417},{"className":3416},[],[3418],{"type":793,"value":3419},"_proof",{"type":793,"value":3421},": The inclusion proof for the bundle message.\nThe bundle message itself gets broadcasted by the ",{"type":787,"tag":818,"props":3423,"children":3425},{"className":3424},[],[3426],{"type":793,"value":2406},{"type":793,"value":3428}," contract when the bundle was sent.",{"type":787,"tag":788,"props":3430,"children":3432},{"id":3431},"getting-the-status-of-a-bundle",[3433],{"type":793,"value":3434},"Getting the status of a bundle",{"type":787,"tag":796,"props":3436,"children":3437},{},[3438,3440,3445],{"type":793,"value":3439},"Once a bundle is sent, its status can be queried from the ",{"type":787,"tag":818,"props":3441,"children":3443},{"className":3442},[],[3444],{"type":793,"value":2418},{"type":793,"value":3446}," contract using the bundle hash.",{"type":787,"tag":827,"props":3448,"children":3450},{"className":829,"code":3449,"language":831,"meta":781,"style":781},"function bundleStatus(bytes32 bundleHash) external view returns (BundleStatus);\n",[3451],{"type":787,"tag":818,"props":3452,"children":3453},{"__ignoreMap":781},[3454],{"type":787,"tag":837,"props":3455,"children":3456},{"class":839,"line":840},[3457,3461,3466,3470,3474,3478,3482,3486,3491,3495,3499,3504],{"type":787,"tag":837,"props":3458,"children":3459},{"style":844},[3460],{"type":793,"value":3327},{"type":787,"tag":837,"props":3462,"children":3463},{"style":850},[3464],{"type":793,"value":3465}," bundleStatus",{"type":787,"tag":837,"props":3467,"children":3468},{"style":856},[3469],{"type":793,"value":1240},{"type":787,"tag":837,"props":3471,"children":3472},{"style":866},[3473],{"type":793,"value":1511},{"type":787,"tag":837,"props":3475,"children":3476},{"style":919},[3477],{"type":793,"value":2753},{"type":787,"tag":837,"props":3479,"children":3480},{"style":856},[3481],{"type":793,"value":1255},{"type":787,"tag":837,"props":3483,"children":3484},{"style":844},[3485],{"type":793,"value":941},{"type":787,"tag":837,"props":3487,"children":3488},{"style":844},[3489],{"type":793,"value":3490}," view",{"type":787,"tag":837,"props":3492,"children":3493},{"style":844},[3494],{"type":793,"value":951},{"type":787,"tag":837,"props":3496,"children":3497},{"style":856},[3498],{"type":793,"value":956},{"type":787,"tag":837,"props":3500,"children":3501},{"style":844},[3502],{"type":793,"value":3503},"BundleStatus",{"type":787,"tag":837,"props":3505,"children":3506},{"style":856},[3507],{"type":793,"value":1162},{"type":787,"tag":796,"props":3509,"children":3510},{},[3511],{"type":793,"value":3512},"A bundle can have four different statuses:",{"type":787,"tag":827,"props":3514,"children":3516},{"className":829,"code":3515,"language":831,"meta":781,"style":781},"enum BundleStatus {\n    Unreceived,\n    Verified,\n    FullyExecuted,\n    Unbundled\n}\n",[3517],{"type":787,"tag":818,"props":3518,"children":3519},{"__ignoreMap":781},[3520,3537,3549,3561,3573,3581],{"type":787,"tag":837,"props":3521,"children":3522},{"class":839,"line":840},[3523,3528,3533],{"type":787,"tag":837,"props":3524,"children":3525},{"style":844},[3526],{"type":793,"value":3527},"enum",{"type":787,"tag":837,"props":3529,"children":3530},{"style":850},[3531],{"type":793,"value":3532}," BundleStatus",{"type":787,"tag":837,"props":3534,"children":3535},{"style":856},[3536],{"type":793,"value":1058},{"type":787,"tag":837,"props":3538,"children":3539},{"class":839,"line":862},[3540,3545],{"type":787,"tag":837,"props":3541,"children":3542},{"style":866},[3543],{"type":793,"value":3544},"    Unreceived",{"type":787,"tag":837,"props":3546,"children":3547},{"style":856},[3548],{"type":793,"value":1091},{"type":787,"tag":837,"props":3550,"children":3551},{"class":839,"line":883},[3552,3557],{"type":787,"tag":837,"props":3553,"children":3554},{"style":866},[3555],{"type":793,"value":3556},"    Verified",{"type":787,"tag":837,"props":3558,"children":3559},{"style":856},[3560],{"type":793,"value":1091},{"type":787,"tag":837,"props":3562,"children":3563},{"class":839,"line":907},[3564,3569],{"type":787,"tag":837,"props":3565,"children":3566},{"style":866},[3567],{"type":793,"value":3568},"    FullyExecuted",{"type":787,"tag":837,"props":3570,"children":3571},{"style":856},[3572],{"type":793,"value":1091},{"type":787,"tag":837,"props":3574,"children":3575},{"class":839,"line":930},[3576],{"type":787,"tag":837,"props":3577,"children":3578},{"style":866},[3579],{"type":793,"value":3580},"    Unbundled\n",{"type":787,"tag":837,"props":3582,"children":3583},{"class":839,"line":1076},[3584],{"type":787,"tag":837,"props":3585,"children":3586},{"style":856},[3587],{"type":793,"value":1171},{"type":787,"tag":2769,"props":3589,"children":3590},{},[3591,3602,3612,3628],{"type":787,"tag":2381,"props":3592,"children":3593},{},[3594,3600],{"type":787,"tag":818,"props":3595,"children":3597},{"className":3596},[],[3598],{"type":793,"value":3599},"Unreceived",{"type":793,"value":3601},": The bundle is not processed in any way yet.",{"type":787,"tag":2381,"props":3603,"children":3604},{},[3605,3610],{"type":787,"tag":818,"props":3606,"children":3608},{"className":3607},[],[3609],{"type":793,"value":2564},{"type":793,"value":3611},": The bundle's inclusion proof was accepted, but the bundle is not processed or executed.",{"type":787,"tag":2381,"props":3613,"children":3614},{},[3615,3620,3622,3627],{"type":787,"tag":818,"props":3616,"children":3618},{"className":3617},[],[3619],{"type":793,"value":2595},{"type":793,"value":3621},": All calls in the bundle have been executed via ",{"type":787,"tag":818,"props":3623,"children":3625},{"className":3624},[],[3626],{"type":793,"value":3306},{"type":793,"value":2239},{"type":787,"tag":2381,"props":3629,"children":3630},{},[3631,3637],{"type":787,"tag":818,"props":3632,"children":3634},{"className":3633},[],[3635],{"type":793,"value":3636},"Unbundled",{"type":793,"value":3638},": Bundle was processed, but not executed.\nThis can happen if a bundle is attempted to be executed but one of the calls fails.",{"type":787,"tag":2824,"props":3640,"children":3642},{"id":3641},"call-status",[3643],{"type":793,"value":3644},"Call status",{"type":787,"tag":796,"props":3646,"children":3647},{},[3648],{"type":793,"value":3649},"You can also track the individual status of a call inside a bundle using the bundle hash and index of the call in the bundle.",{"type":787,"tag":827,"props":3651,"children":3653},{"className":829,"code":3652,"language":831,"meta":781,"style":781},"function callStatus(bytes32 bundleHash, uint256 callIndex) external view returns (CallStatus);\n",[3654],{"type":787,"tag":818,"props":3655,"children":3656},{"__ignoreMap":781},[3657],{"type":787,"tag":837,"props":3658,"children":3659},{"class":839,"line":840},[3660,3664,3669,3673,3677,3681,3685,3689,3694,3698,3702,3706,3710,3714,3719],{"type":787,"tag":837,"props":3661,"children":3662},{"style":844},[3663],{"type":793,"value":3327},{"type":787,"tag":837,"props":3665,"children":3666},{"style":850},[3667],{"type":793,"value":3668}," callStatus",{"type":787,"tag":837,"props":3670,"children":3671},{"style":856},[3672],{"type":793,"value":1240},{"type":787,"tag":837,"props":3674,"children":3675},{"style":866},[3676],{"type":793,"value":1511},{"type":787,"tag":837,"props":3678,"children":3679},{"style":919},[3680],{"type":793,"value":2753},{"type":787,"tag":837,"props":3682,"children":3683},{"style":856},[3684],{"type":793,"value":899},{"type":787,"tag":837,"props":3686,"children":3687},{"style":866},[3688],{"type":793,"value":1245},{"type":787,"tag":837,"props":3690,"children":3691},{"style":919},[3692],{"type":793,"value":3693}," callIndex",{"type":787,"tag":837,"props":3695,"children":3696},{"style":856},[3697],{"type":793,"value":1255},{"type":787,"tag":837,"props":3699,"children":3700},{"style":844},[3701],{"type":793,"value":941},{"type":787,"tag":837,"props":3703,"children":3704},{"style":844},[3705],{"type":793,"value":3490},{"type":787,"tag":837,"props":3707,"children":3708},{"style":844},[3709],{"type":793,"value":951},{"type":787,"tag":837,"props":3711,"children":3712},{"style":856},[3713],{"type":793,"value":956},{"type":787,"tag":837,"props":3715,"children":3716},{"style":844},[3717],{"type":793,"value":3718},"CallStatus",{"type":787,"tag":837,"props":3720,"children":3721},{"style":856},[3722],{"type":793,"value":1162},{"type":787,"tag":827,"props":3724,"children":3726},{"className":829,"code":3725,"language":831,"meta":781,"style":781},"enum CallStatus {\n    Unprocessed,\n    Executed,\n    Cancelled\n}\n",[3727],{"type":787,"tag":818,"props":3728,"children":3729},{"__ignoreMap":781},[3730,3746,3758,3770,3778],{"type":787,"tag":837,"props":3731,"children":3732},{"class":839,"line":840},[3733,3737,3742],{"type":787,"tag":837,"props":3734,"children":3735},{"style":844},[3736],{"type":793,"value":3527},{"type":787,"tag":837,"props":3738,"children":3739},{"style":850},[3740],{"type":793,"value":3741}," CallStatus",{"type":787,"tag":837,"props":3743,"children":3744},{"style":856},[3745],{"type":793,"value":1058},{"type":787,"tag":837,"props":3747,"children":3748},{"class":839,"line":862},[3749,3754],{"type":787,"tag":837,"props":3750,"children":3751},{"style":866},[3752],{"type":793,"value":3753},"    Unprocessed",{"type":787,"tag":837,"props":3755,"children":3756},{"style":856},[3757],{"type":793,"value":1091},{"type":787,"tag":837,"props":3759,"children":3760},{"class":839,"line":883},[3761,3766],{"type":787,"tag":837,"props":3762,"children":3763},{"style":866},[3764],{"type":793,"value":3765},"    Executed",{"type":787,"tag":837,"props":3767,"children":3768},{"style":856},[3769],{"type":793,"value":1091},{"type":787,"tag":837,"props":3771,"children":3772},{"class":839,"line":907},[3773],{"type":787,"tag":837,"props":3774,"children":3775},{"style":866},[3776],{"type":793,"value":3777},"    Cancelled\n",{"type":787,"tag":837,"props":3779,"children":3780},{"class":839,"line":930},[3781],{"type":787,"tag":837,"props":3782,"children":3783},{"style":856},[3784],{"type":793,"value":1171},{"type":787,"tag":796,"props":3786,"children":3787},{},[3788],{"type":793,"value":3789},"A call can either be:",{"type":787,"tag":2769,"props":3791,"children":3792},{},[3793,3804,3815],{"type":787,"tag":2381,"props":3794,"children":3795},{},[3796,3802],{"type":787,"tag":818,"props":3797,"children":3799},{"className":3798},[],[3800],{"type":793,"value":3801},"Unprocessed",{"type":793,"value":3803},": The call is not processed yet.",{"type":787,"tag":2381,"props":3805,"children":3806},{},[3807,3813],{"type":787,"tag":818,"props":3808,"children":3810},{"className":3809},[],[3811],{"type":793,"value":3812},"Executed",{"type":793,"value":3814},": The call was successfully executed.",{"type":787,"tag":2381,"props":3816,"children":3817},{},[3818,3824],{"type":787,"tag":818,"props":3819,"children":3821},{"className":3820},[],[3822],{"type":793,"value":3823},"Cancelled",{"type":793,"value":3825},": The call was cancelled during unbundling.",{"type":787,"tag":788,"props":3827,"children":3829},{"id":3828},"when-a-call-fails",[3830],{"type":793,"value":3831},"When a call fails",{"type":787,"tag":796,"props":3833,"children":3834},{},[3835],{"type":793,"value":3836},"What happens depends on which path is used:",{"type":787,"tag":2769,"props":3838,"children":3839},{},[3840,3850,3861],{"type":787,"tag":2381,"props":3841,"children":3842},{},[3843,3848],{"type":787,"tag":818,"props":3844,"children":3846},{"className":3845},[],[3847],{"type":793,"value":3306},{"type":793,"value":3849}," is atomic.\nIf any call fails, the entire transaction reverts and none of the calls are marked as executed.",{"type":787,"tag":2381,"props":3851,"children":3852},{},[3853,3859],{"type":787,"tag":818,"props":3854,"children":3856},{"className":3855},[],[3857],{"type":793,"value":3858},"verifyBundle",{"type":793,"value":3860}," only checks that the bundle message was included.\nIt does not execute any calls, so it can be used first when you want to inspect or manage a bundle before execution.",{"type":787,"tag":2381,"props":3862,"children":3863},{},[3864,3869],{"type":787,"tag":818,"props":3865,"children":3867},{"className":3866},[],[3868],{"type":793,"value":2612},{"type":793,"value":3870}," is the recovery path for non-atomic handling.\nAfter a bundle has been verified, the authorized unbundler can choose call-by-call statuses and process the bundle incrementally.",{"type":787,"tag":796,"props":3872,"children":3873},{},[3874,3876,3881,3883,3888],{"type":793,"value":3875},"This means you cannot partially succeed through ",{"type":787,"tag":818,"props":3877,"children":3879},{"className":3878},[],[3880],{"type":793,"value":3306},{"type":793,"value":3882},",\nbut you can still handle a problematic bundle after verification by using ",{"type":787,"tag":818,"props":3884,"children":3886},{"className":3885},[],[3887],{"type":793,"value":2612},{"type":793,"value":3889}," to:",{"type":787,"tag":2769,"props":3891,"children":3892},{},[3893,3898,3903],{"type":787,"tag":2381,"props":3894,"children":3895},{},[3896],{"type":793,"value":3897},"execute the calls that are valid",{"type":787,"tag":2381,"props":3899,"children":3900},{},[3901],{"type":793,"value":3902},"cancel the calls that should not run",{"type":787,"tag":2381,"props":3904,"children":3905},{},[3906],{"type":793,"value":3907},"leave other calls untouched until a later unbundling step",{"type":787,"tag":796,"props":3909,"children":3910},{},[3911],{"type":793,"value":3912},"In practice, this is the flow to use when one call in a bundle is malformed or expected to fail,\nbut you still want to recover and process the rest of the bundle in a controlled way.",{"type":787,"tag":3914,"props":3915,"children":3916},"style",{},[3917],{"type":793,"value":3918},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":781,"searchDepth":862,"depth":862,"links":3920},[3921,3922,3923,3924,3925,3926,3931,3933,3936],{"id":790,"depth":862,"text":794},{"id":808,"depth":862,"text":811},{"id":2367,"depth":862,"text":2370},{"id":2435,"depth":862,"text":2438},{"id":2453,"depth":862,"text":2456},{"id":2617,"depth":862,"text":3927,"children":3928},"sendBundle Details",[3929,3930],{"id":2826,"depth":883,"text":2829},{"id":3111,"depth":883,"text":3114},{"id":3299,"depth":862,"text":3932},"executeBundle Details",{"id":3431,"depth":862,"text":3434,"children":3934},[3935],{"id":3641,"depth":883,"text":3644},{"id":3828,"depth":862,"text":3831},"markdown","content:00.zksync-network:45.zksync-connect:10.transaction-bundles.md","content","00.zksync-network/45.zksync-connect/10.transaction-bundles.md","00.zksync-network/45.zksync-connect/10.transaction-bundles","md",{"loc":258},[3945,3947],{"_path":256,"title":255,"description":3946},"A guide for sending and verifying interop messages with ZKsync Connect.",{"_path":261,"title":260,"description":3948},"Learn how crosschain asset transfers work.",1779983668258]