> ## Documentation Index
> Fetch the complete documentation index at: https://docs.layerzero.network/llms.txt
> Use this file to discover all available pages before exploring further.

# Interactive Contract Playground

> Step-by-step guide to interactive contract playground using LayerZero V2. Build and deploy omnichain applications with crosschain messaging. Follow step-by-...

export const InteractiveDVN = ({functionName, description = null}) => {
  const {useState, useEffect, useRef, useMemo} = React;
  const DVN_DATA = JSON.parse('[[[1,"ethereum","Ethereum Mainnet"],[56,"bsc","BNB Smart Chain (BSC) Mainnet"],[43114,"avalanche","Avalanche Mainnet"],[137,"polygon","Polygon Mainnet"],[42161,"arbitrum","Arbitrum Mainnet"],[10,"optimism","Optimism Mainnet"],[250,"fantom","Fantom Mainnet"],[53935,"dfk","DFK Chain"],[1666600000,"harmony","Harmony Mainnet"],[432204,"dexalot","Dexalot Subnet Mainnet"],[42220,"celo","Celo Mainnet"],[1284,"moonbeam","Moonbeam Mainnet"],[122,"fuse","Fuse Mainnet"],[100,"gnosis","Gnosis Mainnet"],[7979,"dos","DOS Chain Mainnet"],[8217,"klaytn","Kaia Mainnet (formerly Klaytn)"],[1088,"metis","Metis Mainnet"],[1116,"coredao","CoreDAO Mainnet"],[66,"okx","OKX Mainnet"],[1101,"zkevm","Polygon zkEVM Mainnet"],[7700,"canto","Canto Mainnet"],[324,"zksync","zkSync Era Mainnet"],[1285,"moonriver","Moonriver Mainnet"],[101,"solana","Solana Mainnet"],[1559,"tenet","Tenet Mainnet"],[42170,"nova","Arbitrum Nova Mainnet"],[82,"meter","Meter Mainnet"],[2222,"kava","Kava Mainnet"],[5000,"mantle","Mantle Mainnet"],[59144,"linea","Linea Mainnet"],[8453,"base","Base Mainnet"],[7777777,"zora","Zora Mainnet"],[88,"tomo","Viction Mainnet"],[5151706,"loot","Loot Mainnet"],[4337,"beam","Beam Mainnet"],[40,"telos","TelosEVM Mainnet"],[204,"opbnb","opBNB Mainnet"],[592,"astar","Astar Mainnet"],[1313161554,"aurora","Near Aurora Mainnet"],[1030,"conflux","Conflux eSpace Mainnet"],[291,"orderly","Orderly Mainnet"],[534352,"scroll","Scroll Mainnet"],[37,"xpla","XPLA Mainnet"],[169,"manta","Manta Pacific Mainnet"],[148,"shimmer","Shimmer Mainnet"],[1380012617,"rarible","Rari Chain Mainnet"],[660279,"xai","Xai Mainnet"],[111188,"real","re.al Mainnet"],[710420,"tiltyard","Tiltyard Mainnet"],[81457,"blast","Blast Mainnet"],[252,"fraxtal","Fraxtal Mainnet"],[34443,"mode","Mode Mainnet"],[19011,"homeverse","Homeverse Mainnet"],[4200,"merlin","Merlin Mainnet"],[666666666,"degen","Degen Mainnet"],[2046399126,"skale","Skale Mainnet"],[196,"xlayer","X Layer Mainnet"],[1996,"sanko","Sanko Mainnet"],[60808,"bob","BOB Mainnet"],[1329,"sei","Sei Mainnet"],[7560,"cyber","Cyber Mainnet"],[8822,"iota","IOTA EVM Mainnet"],[81,"joc","Japan Open Chain Mainnet"],[167000,"taiko","Taiko Mainnet"],[94524,"xchain","XChain Mainnet"],[42793,"etherlink","Etherlink Mainnet"],[6001,"bouncebit","Bouncebit Mainnet"],[1625,"gravity","Gravity Mainnet"],[14,"flare","Flare Mainnet"],[3338,"peaq","Peaq Mainnet"],[48900,"zircuit","Zircuit Mainnet"],[1890,"lightlink","Lightlink Mainnet"],[957,"lyra","Lyra Mainnet"],[33139,"ape","Ape Mainnet"],[1729,"reya","Reya Mainnet"],[200901,"bitlayer","Bitlayer Mainnet"],[295,"hedera","Hedera Mainnet"],[11501,"bevm","Bevm Mainnet"],[480,"worldchain","Worldchain Mainnet"],[130,"unichain","Unichain Mainnet"],[1135,"lisk","Lisk Mainnet"],[2818,"morph","Morph Mainnet"],[81224,"codex","Codex Mainnet"],[2741,"abstract","Abstract Mainnet"],[null,"movement","Movement Mainnet"],[55244,"superposition","Superposition Mainnet"],[41923,"edu","EDU Chain Mainnet"],[43111,"hemi","Hemi Mainnet"],[1480,"islander","Vana Mainnet"],[21000000,"mp1","Corn Mainnet"],[146,"sonic","Sonic Mainnet"],[30,"rootstock","Rootstock Mainnet"],[50104,"sophon","Sophon Mainnet"],[1923,"swell","Swell Mainnet"],[747,"flow","EVM on Flow Mainnet"],[57073,"ink","Ink Mainnet"],[1868,"soneium","Soneium Mainnet"],[8227,"space","Otherworld Space Mainnet"],[1300,"glue","Glue Mainnet"],[25,"cronosevm","Cronos EVM Mainnet"],[388,"cronoszkevm","Cronos zkEVM Mainnet"],[2345,"goat","Goat Mainnet"],[80094,"bera","Berachain Mainnet"],[5165,"bahamut","Bahamut Mainnet"],[1514,"story","Story Mainnet"],[50,"xdc","XDC Mainnet"],[12739,"concrete","Concrete"],[999,"hyperliquid","HyperEVM Mainnet"],[6900,"nibiru","Nibiru Mainnet"],[98866,"plumephoenix","Plume Mainnet"],[43419,"gunz","Gunz Mainnet"],[69000,"animechain","Animechain Mainnet"],[232,"lens","Lens Mainnet"],[964,"subtensorevm","Subtensor EVM Mainnet"],[747474,"katana","Katana"],[3637,"botanix","Botanix"],[239,"tac","Tac"],[2355,"silicon","Silicon Mainnet"],[5031,"somnia","Somnia Mainnet"],[6985385,"humanity","Humanity Mainnet"],[9745,"plasma","Plasma Mainnet"],[9069,"apexfusionnexus","Apex Fusion Nexus Mainnet"],[1408,"zkverify","zkVerify Mainnet"],[16661,"og","0G Mainnet"],[10088,"gatelayer","Gate Layer Mainnet"],[143,"monad","Monad Mainnet"],[1380270412,"ethereal","Ethereal Mainnet"],[1612,"openledger","OpenLedger Mainnet"],[7208,"nexera","Nexera Mainnet"],[988,"stable","Stable Mainnet"],[26514,"horizen","Horizen Mainnet"],[151,"redbelly","Redbelly Mainnet"],[4114,"citrea","Citrea Mainnet"],[5464,"sagaevm","Sagaevm Mainnet"],[728126428,"tron","Tron Mainnet"]],[[1,"01node","01node","0x58dff8622759ea75910a08dba5d060579271dcd7"],[1,"animoca-blockdaemon","Animoca-Blockdaemon (lzRead)","0x864b42dddc43a610e7506c163048c087f0b406ef"],[1,"animoca-blockdaemon","Animoca-Blockdaemon","0x7e65bdd15c8db8995f80abf0d6593b57dc8be437"],[1,"altlayer","AltLayer (lzRead)","0x1e129c36bc3afc3f0d46a42c9d9cab7586bda94c"],[1,"axelar","Axelar","0xce5b47fa5139fc5f3c8c5f4c278ad5f56a7b2016"],[1,"bharvest","B-Harvest","0x98b2e2aa4694680ed610d4f0a9bb78e8f7f1f200"],[1,"bcw","BCW Group","0xe552485d02edd3067fe7fcbd4dd56bb1d3a998d2"],[1,"bcw","BCW Group (lzRead)","0x3a283ed6bcce8d9dfb673fbfba6e644c9d02e9ab"],[1,"bera","Bera","0xe2e558c85e00b4d7529433c1cc78ab678cf62538"],[1,"bitgo","BitGo","0xc9ca319f6da263910fd9b037ec3d817a814ef3d8"],[1,"blockhunters","Blockhunters","0x6e70fcdc42d3d63748b7d8883399dcb16bbb5c8c"],[1,"brale","Brale","0x707f480a30fa724658640b65bc233a2a6180f887"],[1,"canary","Canary","0xa4fe5a5b9a846458a70cd0748228aed3bf65c2cd"],[1,"ccip","Chainlink CCIP","0x771d10d0c86e26ea8d3b778ad4d31b30533b9cbf"],[1,"delegate","Delegate","0x87048402c32632b7c4d0a892d82bc1160e8b2393"],[1,"deutsche-telekom","Deutsche Telekom","0x373a6e5c0c4e89e24819f00aa37ea370917aaff4"],[1,"eigenzero","EigenZero","0x4184dd22692c8b50d8d7ee0d7b6028e45dbf8108"],[1,"flowdesk","Flowdesk","0x2fdbb1e2419e13a7e043d07eaf412934b73ad7a8"],[1,"frax","Frax","0x38654142f5e672ae86a1b21523aafc765e6a1e08"],[1,"gitcoin","Gitcoin","0x15fadad87913c3bb95f8f9f2e2b287e71ba7817d"],[1,"google-cloud","Google Cloud","0xd56e4eab23cb81f43168f9f45211eb027b9ac7cc"],[1,"horizen-labs","Horizen","0x380275805876ff19055ea900cdb2b46a94ecf20d"],[1,"horizen-labs","Horizen (lzRead)","0x2f0ba3dbb93cf087e32c15aab46726fdb4fb24cf"],[1,"lagrange-labs","Lagrange","0x95729ea44326f8add8a9b1d987279dbdc1dd3dff"],[1,"layerzero-labs","LayerZero Labs","0x589dedbd617e0cbcb916a9223f4d1300c294236b"],[1,"layerzero-labs","LayerZero Labs (lzRead)","0xdb979d0a36af0525afa60fc265b1525505c55d79"],[1,"luganodes","Luganodes","0x58249a2ec05c1978bf21df1f5ec1847e42455cf4"],[1,"mantle-bank","Mantle Bank","0x868e6393aea25e8c7e58bc5d4c90a5237c573ff6"],[1,"mim","MIM","0x0ae4e6a9a8b01ee22c6a49af22b674a4e033a23d"],[1,"muon","Muon","0xa3858e2a9860c935fc9586a617e9b2a674c3e4c8"],[1,"mysten-labs","Mysten Labs","0x3d68029e411b181fefa1a8ba60aaf27dbe68636c"],[1,"nansen","Nansen","0x3a4636e9ab975d28d3af808b4e1c9fd936374e30"],[1,"nethermind","Nethermind (lzRead)","0xf4064220871e3b94ca6ab3b0cee8e29178bf47de"],[1,"nethermind","Nethermind","0xa59ba433ac34d2927232918ef5b2eaafcf130ba5"],[1,"nocturnal-labs","Nocturnal Labs (lzRead)","0x7c42f598d22e8711998bac7c3360a7b3a514863d"],[1,"nodes-guru","Nodes.Guru","0x9f45834f0c8042e36935781b944443e906886a87"],[1,"nodit","Nodit","0x0cea5a94f8cd3330c4f84944bf4500f8dacd440c"],[1,"omni-x","Omni X","0xaf75bfd402f3d4ee84978179a6c87d16c4bd1724"],[1,"p2p","P2P","0x06559ee34d85a88317bf0bfe307444116c631b67"],[1,"planetarium-labs","Planetarium Labs","0x972ed7bd3d42d9c0bea3632992ebf7e97186ea4a"],[1,"polyhedra-network","Polyhedra zkBridge","0x8ddf05f9a5c488b4973897e278b58895bf87cb24"],[1,"p-ops-team","P-OPS","0x94aafe0a92a8300f0a2100a7f3de47d6845747a9"],[1,"predicate","Predicate","0x006e1248be5e40b4a4e7099397719df7ab872de7"],[1,"republic-crypto","Republic","0xa1bc1b9af01a0ec78883aa5dc7decdce897e1e76"],[1,"restake","Restake","0xe4193136b92ba91402313e95347c8e9fad8d27d0"],[1,"mercury","Shrapnel","0xce97511db880571a7c31821eb026ef12fcac892e"],[1,"stablelab","StableLab","0x5fddd320a1e29bb466fa635661b125d51d976f92"],[1,"stakingcabin","StakingCabin","0xcd0ca0619fc8db4d47b19a1f04105312952e5f6d"],[1,"portal","Portal","0x92ef4381a03372985985e70fb15e9f081e2e8d14"],[1,"superform","Superform","0x7518f30bd5867b5fa86702556245dead173afe46"],[1,"switchboard","Switchboard","0x276e6b1138d2d49c0cda86658765d12ef84550c1"],[1,"ubisoft","Ubisoft","0xcc9da5b157ed87e24a9cf562e6a7c05d3c3decd3"],[1,"usdt0","USDT0","0x3b0531eb02ab4ad72e7a531180beef9493a00dd2"],[1,"zeeve","Zeeve","0x02041731cb8cbae90838bb8632c359fc0c2b0775"],[56,"01node","01node","0x8fc629aa400d4d9c0b118f2685a49316552abf27"],[56,"animoca-blockdaemon","Animoca-Blockdaemon","0x313328609a9c38459cae56625fff7f2ad6dcde3b"],[56,"animoca-blockdaemon","Animoca-Blockdaemon (lzRead)","0xd4925b81f62457caca368412315d230535b9a48a"],[56,"altlayer","AltLayer (lzRead)","0xdb979d0a36af0525afa60fc265b1525505c55d79"],[56,"axelar","Axelar","0x878c20d3685cdbc5e2680a8a0e7fb97389344fe1"],[56,"bcw","BCW Group","0xd36246c322ee102a2203bca9cafb84c179d306f6"],[56,"bcw","BCW Group (lzRead)","0x5246d80e5673251eb1977ae9d07a93fbd8649963"],[56,"bera","Bera","0x8ed0a851964604bb1b6b1a703f4c8234ee684d76"],[56,"bitgo","BitGo","0xa2ceb887f545400b8247dfb7e9ccada7ababbde8"],[56,"blockhunters","Blockhunters","0x547bf6889b1095b7cc6e525a1f8e8fdb26134a38"],[56,"brale","Brale","0xbc625fc2db9754fd4cd3cfb7dbaa81b9c6f6e2e2"],[56,"canary","Canary","0xfa9ba83c102283958b997adc8b44ed3a3cdb5dda"],[56,"ccip","Chainlink CCIP","0x53561bcfe6b3f23bc72e5b9919c12322729942e8"],[56,"delegate","Delegate","0x9eeee79f5dbc4d99354b5cb547c138af432f937b"],[56,"deutsche-telekom","Deutsche Telekom","0xf0a5c5306adbfd4e3dfd5d4b148b451c411d3878"],[56,"eigenzero","EigenZero","0x9188b373378d284c9174ae474c2b0a937924b34b"],[56,"flowdesk","Flowdesk","0x00e91548787caf130d811ef1872f2bc2c0583d90"],[56,"frax","Frax","0xd4bf35ce3bfc7f7d7dfc0694a7d4aa8b8c60a38c"],[56,"gitcoin","Gitcoin","0xe4b64c3a70cd7f7c38d48f66ba5db9a41c485f64"],[56,"google-cloud","Google Cloud","0xd56e4eab23cb81f43168f9f45211eb027b9ac7cc"],[56,"horizen-labs","Horizen","0x247624e2143504730aec22912ed41f092498bef2"],[56,"horizen-labs","Horizen (lzRead)","0x81d8516adae92b655acaf6a04c9526716baeb849"],[56,"layerzero-labs","LayerZero Labs (lzRead)","0x509889389cfb7a89850017425810116a44676f58"],[56,"layerzero-labs","LayerZero Labs","0xfd6865c841c2d64565562fcc7e05e619a30615f0"],[56,"luganodes","Luganodes","0x2c7185f5b0976397d9eb5c19d639d4005e6708f0"],[56,"mim","MIM","0x25e0e650a78e6304a3983fc4b7ffc6544b1beea6"],[56,"muon","Muon","0xa3858e2a9860c935fc9586a617e9b2a674c3e4c8"],[56,"nansen","Nansen","0x534c6b3e6805e9287ff1d49c349d5f7a01b9b7f5"],[56,"nethermind","Nethermind","0x31f748a368a893bdb5abb67ec95f232507601a73"],[56,"nethermind","Nethermind (lzRead)","0x0321a1b9e48ccdc5a8a32c524b858e10072ef798"],[56,"nocturnal-labs","Nocturnal Labs (lzRead)","0x48ecf6d66045aad8d75e72109489ac29da6066a9"],[56,"nodes-guru","Nodes.Guru","0x1bab20e7fdc79257729cb596bef85db76c44915e"],[56,"nodit","Nodit","0xeece50190806fa57016028d31d8631419882401c"],[56,"omni-x","Omni X","0x5a4c666e9c7aa86fd4fbfdfbfd04646dcc45c6c5"],[56,"p2p","P2P","0x439264fb87581a70bb6d7befd16b636521b0ad2d"],[56,"planetarium-labs","Planetarium Labs","0x05aaefdf9db6e0f7d27fa3b6ee099edb33da029e"],[56,"polyhedra-network","Polyhedra zkBridge","0x8ddf05f9a5c488b4973897e278b58895bf87cb24"],[56,"p-ops-team","P-OPS","0x33e5fcc13d7439cc62d54c41aa966197145b3cd7"],[56,"republic-crypto","Republic","0xf7ddee427507cdb6885e53caaaa1973b1fe29357"],[56,"restake","Restake","0x4d52f5bc932cf1a854381a85ad9ed79b8497c153"],[56,"mercury","Shrapnel","0xb4fa7f1c67e5ec99b556ec92cbddbcdd384106f2"],[56,"stablelab","StableLab","0xabc9b1819cc4d9846550f928b985993cf6240439"],[56,"stakingcabin","StakingCabin","0xccf6ee53aa0b7c7f190d2a7b273e7b04cce14d21"],[56,"portal","Portal","0xbd40c9047980500c46b8aed4462e2f889299febe"],[56,"superform","Superform","0xf4c489afd83625f510947e63ff8f90dfee0ae46c"],[56,"switchboard","Switchboard","0xf0809f6e760a5452ee567975eda7a28da4a83d38"],[56,"usdt0","USDT0","0x72f697797ac173f09eda73dd9c11a141376d2b57"],[56,"zeeve","Zeeve","0x92453ce02159f774f1c846a4a0693008ed020f59"],[43114,"01node","01node","0xa80aa110f05c9c6140018aae0c4e08a70f43350d"],[43114,"animoca-blockdaemon","Animoca-Blockdaemon (lzRead)","0xab82e9b24004b954985528dac14d1b020722a3c8"],[43114,"animoca-blockdaemon","Animoca-Blockdaemon","0xffe42dc3927a240f3459e5ec27eaabd88727173e"],[43114,"altlayer","AltLayer (lzRead)","0x8efb6b7dc61c6b6638714747d5e6b81a3512b5c3"],[43114,"axelar","Axelar","0xc390fd7ca590a505655eb6c454ed0783c99a2ea9"],[43114,"bcw","BCW Group","0x7b8a0fd9d6ae5011d5cbd3e85ed6d5510f98c9bf"],[43114,"bcw","BCW Group (lzRead)","0x7a42a1c1deba75756f9af12bee6b29cfc2be3d70"],[43114,"bera","Bera","0xf18f2c3d86ec9a350d5e10cb67c614201f210d3d"],[43114,"bitgo","BitGo","0xc18d69d1a83294d0886e1b79f241405f1fa86cb6"],[43114,"blockhunters","Blockhunters","0xd074b6bbcbec2f2b4c4265de3d95e521f82bf669"],[43114,"brale","Brale","0xc4a92afb196657d08b688b1bc60b6b0da5e7551f"],[43114,"canary","Canary","0xcc49e6fca014c77e1eb604351cc1e08c84511760"],[43114,"ccip","Chainlink CCIP","0xd46270746acbca85dab8de1ce1d71c46c2f2994c"],[43114,"delegate","Delegate","0x83d06212b6647b0d0865e730270751e3fdf5036e"],[43114,"deutsche-telekom","Deutsche Telekom","0xbe57e9e7d9eb16b92c6383792abe28d64a18c0f1"],[43114,"eigenzero","EigenZero","0xd3333aa4fa669d3eb036676ec01cb0acaaec0cc0"],[43114,"flowdesk","Flowdesk","0x795c62387ef3022b61f2c705bfbe5d94a78b971d"],[43114,"frax","Frax","0xfe4c37cd401f58ee0bf4d214447bf306c2bbd41b"],[43114,"gitcoin","Gitcoin","0xe9d8f20ae42e4634b07b9c994e23ce71c266d205"],[43114,"google-cloud","Google Cloud","0xd56e4eab23cb81f43168f9f45211eb027b9ac7cc"],[43114,"horizen-labs","Horizen","0x07c05eab7716acb6f83ebf6268f8eecda8892ba1"],[43114,"horizen-labs","Horizen (lzRead)","0x1a5df1367f21d55b13d5e2f8778ad644bc97ac6d"],[43114,"layerzero-labs","LayerZero Labs (lzRead)","0x0ffe02df012299a370d5dd69298a5826eacafdf8"],[43114,"layerzero-labs","LayerZero Labs","0x962f502a63f5fbeb44dc9ab932122648e8352959"],[43114,"luganodes","Luganodes","0xe4193136b92ba91402313e95347c8e9fad8d27d0"],[43114,"mim","MIM","0xf45742bbfabcee739ea2a2d0ba2dd140f1f2c6a3"],[43114,"muon","Muon","0xa3858e2a9860c935fc9586a617e9b2a674c3e4c8"],[43114,"nansen","Nansen","0xc816afa2f1c4ab615fe735270d1831fa7d067d15"],[43114,"nethermind","Nethermind","0xa59ba433ac34d2927232918ef5b2eaafcf130ba5"],[43114,"nethermind","Nethermind (lzRead)","0x1308151a7ebac14f435d3ad5ff95c34160d539a5"],[43114,"nocturnal-labs","Nocturnal Labs (lzRead)","0xbd836c4c9d2c3ff94718173b463054c3e2c11cf4"],[43114,"nodes-guru","Nodes.Guru","0xd251d8a85cdfc84518b9454ee6a8d017e503f56c"],[43114,"nodit","Nodit","0x0f56ce0ca0595792db727a21596edc2fd39be444"],[43114,"omni-x","Omni X","0x21caf0bce846aaa78c9f23c5a4ec5988ecbf9988"],[43114,"p2p","P2P","0xe94ae34dfcc87a61836938641444080b98402c75"],[43114,"planetarium-labs","Planetarium Labs","0x2ac038606fff3fb00317b8f0ccfb4081694acdd0"],[43114,"polyhedra-network","Polyhedra zkBridge","0x8ddf05f9a5c488b4973897e278b58895bf87cb24"],[43114,"p-ops-team","P-OPS","0x2b8cbea81315130a4c422e875063362640ddfeb0"],[43114,"republic-crypto","Republic","0x1feb08b1a53a9710afce82d380b8c2833c69a37e"],[43114,"restake","Restake","0x377b51593a03b82543c1508fe7e75aba6acde008"],[43114,"mercury","Shrapnel","0x6a110d94e1baa6984a3d904bab37ae49b90e6b4f"],[43114,"stablelab","StableLab","0x5fddd320a1e29bb466fa635661b125d51d976f92"],[43114,"stakingcabin","StakingCabin","0xb6323aa5a3fc07d93a3cf0f1044447f2a88b7dab"],[43114,"portal","Portal","0x0e95cf21ad9376a26997c97f326c5a0a267bb8ff"],[43114,"superform","Superform","0x8fb0b7d74b557e4b45ef89648bac197eab2e4325"],[43114,"switchboard","Switchboard","0x92ef4381a03372985985e70fb15e9f081e2e8d14"],[43114,"ubisoft","Ubisoft","0xc86d023c11c5e8aa731f40b65158590624d242af"],[43114,"usdt0","USDT0","0x375c76c6e8ec55a358e6a8c72fe233d0d4a96bee"],[43114,"zeeve","Zeeve","0x65c41255c7f49a4b728676a0ede4a1329ff6911a"],[1,"bitgo","BitGo","0x7bd708541500f6242478e929a7f0938af896718a19f1a0bc0905ef10b0403ca7"],[1,"brale","Brale","0x56fc034696296ff665e393184c462966030603d0c001f259d4fce9b7c998eb7e"],[1,"deutsche-telekom","Deutsche Telekom","0xb3e501ffd9d101f9eb400aa4a6373b9be227273b6ddd54b73c426b8523ab05e3"],[1,"frax","Frax","0x3d5c8533fa5dfa60c953036e9a2afe3e9d3fc614197feebf8599ec1f54e8f2ec"],[1,"horizen-labs","Horizen","0x9880ed7ade7e7f8f8eb070ce72c51b231921e29e65b3d51fa3810814bba32c00"],[1,"layerzero-labs","LayerZero Labs","0xf3f0a412626edba5ddd3613d91109b241893873ac5479ade231cf0b3130572b5"],[1,"nansen","Nansen","0x20fab35efd384fe5cb7f2e95d0bd11f8713bbaf2371aca52ab59e1df349ebc0a"],[1,"nethermind","Nethermind","0x07ad47ea4f858e7189d2c6e7327f166993e8f884386db9564d732bcff63fe4ff"],[1,"p2p","P2P","0xcb2ab3c2fb799c6578b9950f9db7ff555a2d4967ef15437230346f56599801ae"],[1,"p-ops-team","P-OPS","0xfbb67958a4726360b410b2238d96915a1a0290df652466692dc540a5abbfa7ec"],[137,"01node","01node","0xf0809f6e760a5452ee567975eda7a28da4a83d38"],[137,"animoca-blockdaemon","Animoca-Blockdaemon","0xa6f5ddbf0bd4d03334523465439d301080574742"],[137,"altlayer","AltLayer (lzRead)","0xbabbb709b3cefe563f2ab14898a53301686d48b9"],[137,"bcw","BCW Group (lzRead)","0x66d771b8f938ccb82a1a9cb7a93671cb92016ab0"],[137,"bcw","BCW Group","0xd410ddb726991f372b69a05b006d2ae5a8cedbd6"],[137,"bera","Bera","0xcf46153f01355036bf07e5f7fb1eb262f25dfedd"],[137,"bitgo","BitGo","0x02152f4624596602dcbb8b8ead2988ad44edc865"],[137,"blockhunters","Blockhunters","0xbd40c9047980500c46b8aed4462e2f889299febe"],[137,"brale","Brale","0x8b430df07ce9666fdffd99c1ea0153f6e178bcd6"],[137,"canary","Canary","0x13feb7234ff60a97af04477d6421415766753ba3"],[137,"delegate","Delegate","0x4d52f5bc932cf1a854381a85ad9ed79b8497c153"],[137,"deutsche-telekom","Deutsche Telekom","0x5cccb8de6cdba9d2af9d84465653af7390fdf9dd"],[137,"flowdesk","Flowdesk","0x2cabf8f2c0aae35a771a1c19487684e94388b03a"],[137,"frax","Frax","0xdab6e6ecb3513a8d2614ad75199b4b264a731050"],[137,"gitcoin","Gitcoin","0xecb3ac94976f11a53ae74af1f36fb89e247faeef"],[137,"google-cloud","Google Cloud","0xd56e4eab23cb81f43168f9f45211eb027b9ac7cc"],[137,"horizen-labs","Horizen","0x25e0e650a78e6304a3983fc4b7ffc6544b1beea6"],[137,"horizen-labs","Horizen (lzRead)","0x5cff49d69d79d677dd3e5b38e048a0dcb6d86aaf"],[137,"layerzero-labs","LayerZero Labs","0x23de2fe932d9043291f870324b74f820e11dc81a"],[137,"layerzero-labs","LayerZero Labs (lzRead)","0xa70c51c38d5a9990f3113a403d74eba01fce4ccb"],[137,"luganodes","Luganodes","0xd1b5493e712081a6fbab73116405590046668f6b"],[137,"mim","MIM","0x1bab20e7fdc79257729cb596bef85db76c44915e"],[137,"muon","Muon","0xa3858e2a9860c935fc9586a617e9b2a674c3e4c8"],[137,"nansen","Nansen","0x0a8618f71db88ab5d0caf0610ede19f0ab8817c5"],[137,"nethermind","Nethermind","0x31f748a368a893bdb5abb67ec95f232507601a73"],[137,"nethermind","Nethermind (lzRead)","0xbcefdadb8d24b1d36c26b522235012cd4cf162f6"],[137,"nocturnal-labs","Nocturnal Labs (lzRead)","0xf60c89799c85d8fab79519f7666dcde2a7c97cca"],[137,"nodes-guru","Nodes.Guru","0xf7ddee427507cdb6885e53caaaa1973b1fe29357"],[137,"nodit","Nodit","0x4c41b4edf85dee828c2cfcc80019cb2bbcfb69a5"],[137,"omni-x","Omni X","0x06b85533967179ed5bc9c754b84ae7d02f7ed830"],[137,"p2p","P2P","0x9eeee79f5dbc4d99354b5cb547c138af432f937b"],[137,"planetarium-labs","Planetarium Labs","0x2ac038606fff3fb00317b8f0ccfb4081694acdd0"],[137,"polyhedra-network","Polyhedra zkBridge","0x8ddf05f9a5c488b4973897e278b58895bf87cb24"],[137,"p-ops-team","P-OPS","0xa75abcc0fab6ae09c8fd808bec7be7e88fe31d6b"],[137,"republic-crypto","Republic","0x547bf6889b1095b7cc6e525a1f8e8fdb26134a38"],[137,"restake","Restake","0x2afa3787cd95fee5d5753cd717ef228eb259f4ea"],[137,"mercury","Shrapnel","0x54dd79f5ce72b51fcbbcb170dd01e32034323565"],[137,"stablelab","StableLab","0xabc9b1819cc4d9846550f928b985993cf6240439"],[137,"stakingcabin","StakingCabin","0xcd19d26710cacf8241583769f353ea7395159007"],[137,"portal","Portal","0x8fc629aa400d4d9c0b118f2685a49316552abf27"],[137,"superform","Superform","0x1e4ce74ccf5498b19900649d9196e64bab592451"],[137,"switchboard","Switchboard","0xc6d46f63578635e4a7140cdf4d0eea0fd7bb50ec"],[137,"usdt0","USDT0","0xdd3d71ff05d9206c69c667d22b3a0970009780e4"],[42161,"01node","01node","0x7a205ed4e3d7f9d0777594501705d8cd405c3b05"],[42161,"animoca-blockdaemon","Animoca-Blockdaemon (lzRead)","0xf0e40968e27f63b3b0a0b3baac4a274149376591"],[42161,"animoca-blockdaemon","Animoca-Blockdaemon","0xddaa92ce2d2fac3f7c5eae19136e438902ab46cc"],[42161,"altlayer","AltLayer (lzRead)","0x8ede21203e062d7d1eaec11c4c72ad04cdc15658"],[42161,"axelar","Axelar","0x9d3979c7e3dd26653c52256307709c09f47741e0"],[42161,"bcw","BCW Group","0x78203678d264063815dac114ea810e9837cd80f7"],[42161,"bcw","BCW Group (lzRead)","0x05ce650134d943c5e336dc7990e84fb4e69fdf29"],[42161,"bera","Bera","0xf2e89ed7e342c708ba8cd79b293ad9244f5fccb3"],[42161,"bitgo","BitGo","0x0711dd777ae626ef5e0a4f50e199c7a0e0666857"],[42161,"blockhunters","Blockhunters","0xd074b6bbcbec2f2b4c4265de3d95e521f82bf669"],[42161,"brale","Brale","0x66228c260b0edf66ae74d127251102a5f146ae5e"],[42161,"canary","Canary","0xf2e380c90e6c09721297526dbc74f870e114dfcb"],[42161,"delegate","Delegate","0xdf30c9f6a70ce65a152c5bd09826525d7e97ba49"],[42161,"deutsche-telekom","Deutsche Telekom","0xeae839784e5f6c79bbaf34b6023a2f62e134ab39"],[42161,"flowdesk","Flowdesk","0xc07125d75bfa05a0108de0f64c4d6ebb12b357f6"],[42161,"frax","Frax","0xb42726e41dbe96fc4ea6d73cd792167608353698"],[42161,"gitcoin","Gitcoin","0x82c1d3209e32beb7a55069b2c8af5b6f62e2dbd1"],[42161,"google-cloud","Google Cloud","0xd56e4eab23cb81f43168f9f45211eb027b9ac7cc"],[42161,"horizen-labs","Horizen","0x19670df5e16bea2ba9b9e68b48c054c5baea06b8"],[42161,"horizen-labs","Horizen (lzRead)","0x5cff49d69d79d677dd3e5b38e048a0dcb6d86aaf"],[42161,"lagrange-labs","Lagrange","0x021e401c2a1a60618c5e6353a40524971eba1e8d"],[42161,"layerzero-labs","LayerZero Labs","0x2f55c492897526677c5b68fb199ea31e2c126416"],[42161,"layerzero-labs","LayerZero Labs (lzRead)","0x1308151a7ebac14f435d3ad5ff95c34160d539a5"],[42161,"luganodes","Luganodes","0x54dd79f5ce72b51fcbbcb170dd01e32034323565"],[42161,"mantle-bank","Mantle Bank","0x50ff206140cadada2d9d510f1a184be9221d86cf"],[42161,"mim","MIM","0x9e930731cb4a6bf7ecc11f695a295c60bdd212eb"],[42161,"muon","Muon","0xa3858e2a9860c935fc9586a617e9b2a674c3e4c8"],[42161,"nansen","Nansen","0x01f9aad7c53626bf8807d640d9ddf852254d6f63"],[42161,"nethermind","Nethermind (lzRead)","0x14e570a1684c7ca883b35e1b25d2f7cec98a16cd"],[42161,"nethermind","Nethermind","0xa7b5189bca84cd304d8553977c7c614329750d99"],[42161,"nocturnal-labs","Nocturnal Labs (lzRead)","0xfdd2e77a6addc1e18862f43297500d2ebfbd94ac"],[42161,"nodes-guru","Nodes.Guru","0xd954bf7968ef68875c9100c9ec890f969504d120"],[42161,"nodit","Nodit","0x4c41b4edf85dee828c2cfcc80019cb2bbcfb69a5"],[42161,"omni-x","Omni X","0xabea0b6b9237b589e676dc16f6d74bf7612591f4"],[42161,"p2p","P2P","0xb3ce0a5d132cd9bf965aba435e650c55edce0062"],[42161,"planetarium-labs","Planetarium Labs","0xe6cd8c2e46ef396df88048449e5b1c75172b40c3"],[42161,"polyhedra-network","Polyhedra zkBridge","0x8ddf05f9a5c488b4973897e278b58895bf87cb24"],[42161,"p-ops-team","P-OPS","0x8fa9eef18c2a1459024f0b44714e5acc1ce7f5e8"],[42161,"restake","Restake","0x969a0bdd86a230345ad87a6a381de5ed9e6cda85"],[42161,"mercury","Shrapnel","0x7b8a0fd9d6ae5011d5cbd3e85ed6d5510f98c9bf"],[42161,"stablelab","StableLab","0xcd37ca043f8479064e10635020c65ffc005d36f6"],[42161,"stakingcabin","StakingCabin","0xb0646fb9028364ac1f04477271375ef32a8a5e62"],[42161,"portal","Portal","0x539008c98b17803a273edf98aba2d4414ee3f4d7"],[42161,"superform","Superform","0x5496d03d9065b08e5677e1c5d1107110bb05d445"],[42161,"switchboard","Switchboard","0xcced05c3667877b545285b25f19f794436a1c481"],[42161,"ubisoft","Ubisoft","0x77aaf86b4466a67869667babe02c6ebe7e7791d6"],[42161,"usdt0","USDT0","0xa8b8575fa41c305953f519c7d288cd7741727c7b"],[42161,"zeeve","Zeeve","0x7151c89f6ba70d6ab845289e4ec706530ffaf3cb"],[10,"01node","01node","0x969a0bdd86a230345ad87a6a381de5ed9e6cda85"],[10,"animoca-blockdaemon","Animoca-Blockdaemon (lzRead)","0x3b247f1b48f055ebf2db593672b98c9597e3081e"],[10,"animoca-blockdaemon","Animoca-Blockdaemon","0x7b8a0fd9d6ae5011d5cbd3e85ed6d5510f98c9bf"],[10,"altlayer","AltLayer (lzRead)","0x06e8042729cef3ae6d6db5350f48f9d736c3675d"],[10,"axelar","Axelar","0x218b462e19d00c8fed4adbce78f33aef88d2ccfc"],[10,"bcw","BCW Group (lzRead)","0x41f3a349e6ac46caad2da04cfceae3e0de0e6c0c"],[10,"bcw","BCW Group","0x73ddc92e39aeda95feb8d3e0008016d9f1268c76"],[10,"bera","Bera","0x5f5512c760f69a338cf2758d1e6a957571bb6ee0"],[10,"bitgo","BitGo","0xf24dc834039a1e39f6b99a51df05df9c91e35b2d"],[10,"blockhunters","Blockhunters","0xb3ce0a5d132cd9bf965aba435e650c55edce0062"],[10,"brale","Brale","0xd37adf2200142ec766a519099e7b55cb9198b640"],[10,"canary","Canary","0x5b6735c66d97479ccd18294fc96b3084ecb2fa3f"],[10,"delegate","Delegate","0x7a205ed4e3d7f9d0777594501705d8cd405c3b05"],[10,"deutsche-telekom","Deutsche Telekom","0x427bd19a0463fc4edc2e247d35eb61323d7e5541"],[10,"flowdesk","Flowdesk","0x57f61546bd2259db04ee7132ac385e5447174403"],[10,"frax","Frax","0x7240264781aa2f97cb994c6231297a8606483242"],[10,"gitcoin","Gitcoin","0x37a37d958a43810ec169eece501c525664ddf890"],[10,"google-cloud","Google Cloud","0xd56e4eab23cb81f43168f9f45211eb027b9ac7cc"],[10,"horizen-labs","Horizen","0x9e930731cb4a6bf7ecc11f695a295c60bdd212eb"],[10,"horizen-labs","Horizen (lzRead)","0xeb64c44109ede90cc6e34953ab122a1f09460a44"],[10,"lagrange-labs","Lagrange","0xa4281c1c88f0278ff696edeb517052153190fc9e"],[10,"layerzero-labs","LayerZero Labs","0x6a02d83e8d433304bba74ef1c427913958187142"],[10,"layerzero-labs","LayerZero Labs (lzRead)","0xd4925b81f62457caca368412315d230535b9a48a"],[10,"luganodes","Luganodes","0xd841a741addcb6dea735d3b8c9faf96ba3f3d30d"],[10,"mim","MIM","0xd954bf7968ef68875c9100c9ec890f969504d120"],[10,"muon","Muon","0xa3858e2a9860c935fc9586a617e9b2a674c3e4c8"],[10,"nansen","Nansen","0x3b0531eb02ab4ad72e7a531180beef9493a00dd2"],[10,"nethermind","Nethermind (lzRead)","0x6075e53dc2ddcfa81142fbad52315ae627ffce75"],[10,"nethermind","Nethermind","0xa7b5189bca84cd304d8553977c7c614329750d99"],[10,"nocturnal-labs","Nocturnal Labs (lzRead)","0x47039f4327f74e755f65821040a7e0addd596d09"],[10,"nodes-guru","Nodes.Guru","0xe6cd8c2e46ef396df88048449e5b1c75172b40c3"],[10,"nodit","Nodit","0x1288cdad593856d7672f82e4cc5fdfe1cf59646d"],[10,"omni-x","Omni X","0x03d2414476a742aba715bcc337583c820525e22a"],[10,"p2p","P2P","0x539008c98b17803a273edf98aba2d4414ee3f4d7"],[10,"planetarium-labs","Planetarium Labs","0x021e401c2a1a60618c5e6353a40524971eba1e8d"],[10,"polyhedra-network","Polyhedra zkBridge","0x8ddf05f9a5c488b4973897e278b58895bf87cb24"],[10,"p-ops-team","P-OPS","0xe552485d02edd3067fe7fcbd4dd56bb1d3a998d2"],[10,"restake","Restake","0xcced05c3667877b545285b25f19f794436a1c481"],[10,"mercury","Shrapnel","0xd36246c322ee102a2203bca9cafb84c179d306f6"],[10,"stablelab","StableLab","0xcd37ca043f8479064e10635020c65ffc005d36f6"],[10,"stakingcabin","StakingCabin","0x56d675bfd1574ff170723689223c3a93dee5fa78"],[10,"portal","Portal","0xdf30c9f6a70ce65a152c5bd09826525d7e97ba49"],[10,"superform","Superform","0xb0b2ef168f52f6d1e42f461e11117295ef992daf"],[10,"switchboard","Switchboard","0x313328609a9c38459cae56625fff7f2ad6dcde3b"],[10,"ubisoft","Ubisoft","0x51accfb59e4bda0f8324934f9789e9ea19fbeff4"],[10,"usdt0","USDT0","0x947bb89919d1e5996d6c46223626ac2e97bcf8a3"],[10,"zeeve","Zeeve","0x4873d56816f45ef341a8819d7039e4746ed77c21"],[250,"01node","01node","0x8fc629aa400d4d9c0b118f2685a49316552abf27"],[250,"animoca-blockdaemon","Animoca-Blockdaemon","0x313328609a9c38459cae56625fff7f2ad6dcde3b"],[250,"bera","Bera","0x1a53015b6b4d88a943ed512bd179fbd89a768b6b"],[250,"bitgo","BitGo","0x3b247f1b48f055ebf2db593672b98c9597e3081e"],[250,"blockhunters","Blockhunters","0x547bf6889b1095b7cc6e525a1f8e8fdb26134a38"],[250,"brale","Brale","0x2d1d241d06b28440c115afa712695148ad31c47e"],[250,"canary","Canary","0xe5bffd46776251b70895517d4ab635a640da61e9"],[250,"delegate","Delegate","0x9eeee79f5dbc4d99354b5cb547c138af432f937b"],[250,"deutsche-telekom","Deutsche Telekom","0x8181f551c95928c0648d4378dc4d95e847bc3945"],[250,"flowdesk","Flowdesk","0x4c4552785d09a422231a1fb3da02b49a3e99426c"],[250,"gitcoin","Gitcoin","0xf4213560f316007082731e8574e1a9630f91f1b1"],[250,"google-cloud","Google Cloud","0xd56e4eab23cb81f43168f9f45211eb027b9ac7cc"],[250,"horizen-labs","Horizen","0x25e0e650a78e6304a3983fc4b7ffc6544b1beea6"],[250,"layerzero-labs","LayerZero Labs","0xe60a3959ca23a92bf5aaf992ef837ca7f828628a"],[250,"luganodes","Luganodes","0xa6f5ddbf0bd4d03334523465439d301080574742"],[250,"mim","MIM","0x1bab20e7fdc79257729cb596bef85db76c44915e"],[250,"muon","Muon","0xa3858e2a9860c935fc9586a617e9b2a674c3e4c8"],[250,"nansen","Nansen","0x57555da46d20f39bc6795bcd6ff50ce425a0e5af"],[250,"nethermind","Nethermind","0x31f748a368a893bdb5abb67ec95f232507601a73"],[250,"nodes-guru","Nodes.Guru","0x05aaefdf9db6e0f7d27fa3b6ee099edb33da029e"],[250,"omni-x","Omni X","0xe0f0fbbdbf9d398eca0dd8c86d1f308d895b9eb7"],[250,"p2p","P2P","0x439264fb87581a70bb6d7befd16b636521b0ad2d"],[250,"planetarium-labs","Planetarium Labs","0xf7ddee427507cdb6885e53caaaa1973b1fe29357"],[250,"polyhedra-network","Polyhedra zkBridge","0x8ddf05f9a5c488b4973897e278b58895bf87cb24"],[250,"p-ops-team","P-OPS","0x78203678d264063815dac114ea810e9837cd80f7"],[250,"restake","Restake","0x4d52f5bc932cf1a854381a85ad9ed79b8497c153"],[250,"mercury","Shrapnel","0xb4fa7f1c67e5ec99b556ec92cbddbcdd384106f2"],[250,"stablelab","StableLab","0xabc9b1819cc4d9846550f928b985993cf6240439"],[250,"stakingcabin","StakingCabin","0x193204535913df3a3b350fcd2e1c97d047abb409"],[250,"portal","Portal","0xbd40c9047980500c46b8aed4462e2f889299febe"],[250,"superform","Superform","0x2edfe0220a74d9609c79711a65e3a2f2a85dc83b"],[250,"switchboard","Switchboard","0xf0809f6e760a5452ee567975eda7a28da4a83d38"],[53935,"bcw","BCW Group","0x6a110d94e1baa6984a3d904bab37ae49b90e6b4f"],[53935,"canary","Canary","0xab6d3d37d8dc309e7d8086b2e85a953b84ee5fa9"],[53935,"horizen-labs","Horizen","0xa9ff468ad000a4d5729826459197a0db843f433e"],[53935,"layerzero-labs","LayerZero Labs","0x1f7e674143031e74bc48a0c570c174a07aa9c5d0"],[53935,"nethermind","Nethermind","0x7fe673201724925b5c477d4e1a4bd3e954688cf5"],[1666600000,"canary","Canary","0xa6f5ddbf0bd4d03334523465439d301080574742"],[1666600000,"google-cloud","Google Cloud","0xd56e4eab23cb81f43168f9f45211eb027b9ac7cc"],[1666600000,"horizen-labs","Horizen","0x462a63dbe8ca43a57d379c88a382c02862b9a2ce"],[1666600000,"layerzero-labs","LayerZero Labs","0x8363302080e711e0cab978c081b9e69308d49808"],[1666600000,"nethermind","Nethermind","0xd24972c11f91c1bb9eaee97ec96bb9c33cf7af24"],[432204,"bcw","BCW Group","0x58dff8622759ea75910a08dba5d060579271dcd7"],[432204,"canary","Canary","0x9bb011796fc3604d3a4faa5863f587a33f6224af"],[432204,"horizen-labs","Horizen","0xd42306df1a805d8053bc652ce0cd9f62bde80146"],[432204,"layerzero-labs","LayerZero Labs","0xb98d764d25d53f803f05d451225612e4a9a3b712"],[432204,"nethermind","Nethermind","0x70bf42c69173d6e33b834f59630dac592c70b369"],[42220,"canary","Canary","0x94aafe0a92a8300f0a2100a7f3de47d6845747a9"],[42220,"deutsche-telekom","Deutsche Telekom","0xea928f8e62f3dac51288056015b1d4e3ecfacdac"],[42220,"google-cloud","Google Cloud","0xd56e4eab23cb81f43168f9f45211eb027b9ac7cc"],[42220,"horizen-labs","Horizen","0x31f748a368a893bdb5abb67ec95f232507601a73"],[42220,"horizen-labs","Horizen (lzRead)","0x391a2021483cb476d059a78130f95165c79604b7"],[42220,"layerzero-labs","LayerZero Labs","0x75b073994560a5c03cd970414d9170be0c6e5c36"],[42220,"layerzero-labs","LayerZero Labs (lzRead)","0xd4925b81f62457caca368412315d230535b9a48a"],[42220,"luganodes","Luganodes","0x82f6ad698f3116ca1b71836a7f1303628fa855db"],[42220,"nethermind","Nethermind","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[42220,"nethermind","Nethermind (lzRead)","0x6cde6b51d91e9d81b639abb6552e5b1b04d98a0b"],[42220,"p2p","P2P","0x7e65bdd15c8db8995f80abf0d6593b57dc8be437"],[42220,"polyhedra-network","Polyhedra zkBridge","0x8ddf05f9a5c488b4973897e278b58895bf87cb24"],[42220,"usdt0","USDT0","0x18f76f0d8ccd176bbe59b3870fa486d1fff87026"],[1284,"canary","Canary","0x33e5fcc13d7439cc62d54c41aa966197145b3cd7"],[1284,"google-cloud","Google Cloud","0xd56e4eab23cb81f43168f9f45211eb027b9ac7cc"],[1284,"horizen-labs","Horizen","0x34730f2570e6cff8b1c91faabf37d0dd917c4367"],[1284,"layerzero-labs","LayerZero Labs","0x8b9b67b22ab2ed6ee324c2fd43734dbd2dddd045"],[1284,"nethermind","Nethermind","0x790d7b1e97a086eb0012393b65a5b32ce58a04dc"],[1284,"polyhedra-network","Polyhedra zkBridge","0x8ddf05f9a5c488b4973897e278b58895bf87cb24"],[1284,"p-ops-team","P-OPS","0x7fe673201724925b5c477d4e1a4bd3e954688cf5"],[122,"bcw","BCW Group","0x7fe673201724925b5c477d4e1a4bd3e954688cf5"],[122,"canary","Canary","0x7a3d18e2324536294cd6f054cdde7c994f40391a"],[122,"horizen-labs","Horizen","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[122,"layerzero-labs","LayerZero Labs","0x795f8325af292ff6e58249361d1954893be15aff"],[122,"nethermind","Nethermind","0x809cde2afcf8627312e87a6a7bbffab3f8f347c7"],[100,"canary","Canary","0x90ee303d4743f460b9a38415e09f3799b85a4efc"],[100,"deutsche-telekom","Deutsche Telekom","0x93d2d7aadc9f2cf5ebc88e9703e06db09b8fd85b"],[100,"google-cloud","Google Cloud","0xd56e4eab23cb81f43168f9f45211eb027b9ac7cc"],[100,"horizen-labs","Horizen","0x6abdb569dc985504cccb541ade8445e5266e7388"],[100,"layerzero-labs","LayerZero Labs","0x11bb2991882a86dc3e38858d922559a385d506ba"],[100,"luganodes","Luganodes","0x7cc59b5062a8291804a21a2a793c6ce9ea2f0eb9"],[100,"nansen","Nansen","0x13feb7234ff60a97af04477d6421415766753ba3"],[100,"nethermind","Nethermind","0x7fe673201724925b5c477d4e1a4bd3e954688cf5"],[100,"p2p","P2P","0xf10ea2c0d43bc4973cfbcc94ebafc39d1d4af118"],[100,"polyhedra-network","Polyhedra zkBridge","0x8ddf05f9a5c488b4973897e278b58895bf87cb24"],[100,"p-ops-team","P-OPS","0x790d7b1e97a086eb0012393b65a5b32ce58a04dc"],[7979,"bcw","BCW Group","0x2ac038606fff3fb00317b8f0ccfb4081694acdd0"],[7979,"canary","Canary","0x45a7305c65aad28384f20a80f87a5183772e4f70"],[7979,"horizen-labs","Horizen","0x33e5fcc13d7439cc62d54c41aa966197145b3cd7"],[7979,"layerzero-labs","LayerZero Labs","0x203dfa8cbcbe234821da01a6e95fcbf92da065ea"],[7979,"nethermind","Nethermind","0xacde1f22eeab249d3ca6ba8805c8fee9f52a16e7"],[8217,"bcw","BCW Group","0x28af4dadbc5066e994986e8bb105240023dc44b6"],[8217,"canary","Canary","0x1154d04d07aee26ff2c200bd373eb76a7e5694d6"],[8217,"deutsche-telekom","Deutsche Telekom","0xca29b2be45f1d609189dc467e0f1e48ee202ed0e"],[8217,"horizen-labs","Horizen","0xacde1f22eeab249d3ca6ba8805c8fee9f52a16e7"],[8217,"layerzero-labs","LayerZero Labs","0xc80233ad8251e668becbc3b0415707fc7075501e"],[8217,"nethermind","Nethermind","0x6a4c9096f162f0ab3c0517b0a40dc1ce44785e16"],[8217,"p2p","P2P","0xf7a1963e52b1471d01e320d547b72b05f443c9e6"],[8217,"polyhedra-network","Polyhedra zkBridge","0x8ddf05f9a5c488b4973897e278b58895bf87cb24"],[1088,"bcw","BCW Group","0x7a7ddc46882220a075934f40380d3a7e1e87d409"],[1088,"canary","Canary","0xaf75bfd402f3d4ee84978179a6c87d16c4bd1724"],[1088,"horizen-labs","Horizen","0x7fe673201724925b5c477d4e1a4bd3e954688cf5"],[1088,"layerzero-labs","LayerZero Labs","0x32d4f92437454829b3fe7bebfece5d0523deb475"],[1088,"nethermind","Nethermind","0x6abdb569dc985504cccb541ade8445e5266e7388"],[1088,"polyhedra-network","Polyhedra zkBridge","0x8ddf05f9a5c488b4973897e278b58895bf87cb24"],[1116,"bcw","BCW Group","0x7a7ddc46882220a075934f40380d3a7e1e87d409"],[1116,"canary","Canary","0xc133fd6b4c44277ed592e903c0585936d7585fa5"],[1116,"deutsche-telekom","Deutsche Telekom","0xde79818c75649773fc462e9d3134b23b81741481"],[1116,"horizen-labs","Horizen","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[1116,"layerzero-labs","LayerZero Labs","0x3c5575898f59c097681d1fc239c2c6ad36b7b41c"],[1116,"nethermind","Nethermind","0x7fe673201724925b5c477d4e1a4bd3e954688cf5"],[1116,"polyhedra-network","Polyhedra zkBridge","0x8ddf05f9a5c488b4973897e278b58895bf87cb24"],[66,"canary","Canary","0x07653d28b0f53d4c54b70eb1f9025795b23a9d6e"],[66,"horizen-labs","Horizen","0x7fe673201724925b5c477d4e1a4bd3e954688cf5"],[66,"layerzero-labs","LayerZero Labs","0x52eea5c490fb89c7a0084b32feab854eeff07c82"],[1101,"bcw","BCW Group","0x12b4e588beb7154519c0c6f737bb8cba1d4e5bc7"],[1101,"frax","Frax","0x651b1cf59014420112f8b7fcfda840a16ad763e0"],[1101,"horizen-labs","Horizen","0x7fe673201724925b5c477d4e1a4bd3e954688cf5"],[1101,"layerzero-labs","LayerZero Labs","0x488863d609f3a673875a914fbee7508a1de45ec6"],[1101,"nethermind","Nethermind","0x7a7ddc46882220a075934f40380d3a7e1e87d409"],[1101,"ubisoft","Ubisoft","0xd074b6bbcbec2f2b4c4265de3d95e521f82bf669"],[7700,"bcw","BCW Group","0x7fe673201724925b5c477d4e1a4bd3e954688cf5"],[7700,"canary","Canary","0x73ddc92e39aeda95feb8d3e0008016d9f1268c76"],[7700,"horizen-labs","Horizen","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[7700,"layerzero-labs","LayerZero Labs","0x1bacc2205312534375c8d1801c27d28370656cff"],[7700,"nethermind","Nethermind","0x809cde2afcf8627312e87a6a7bbffab3f8f347c7"],[324,"bcw","BCW Group","0x0d1bc4efd08940eb109ef3040c1386d09b6334e0"],[324,"canary","Canary","0x05db3a229293c09f639a16526bb2481704716df0"],[324,"frax","Frax","0x2eb85384cad49a67ebd8e2afb0f72b3f586baf03"],[324,"horizen-labs","Horizen","0x1253e268bc04bb43cb96d2f7ee858b8a1433cf6d"],[324,"layerzero-labs","LayerZero Labs","0x620a9df73d2f1015ea75aea1067227f9013f5c51"],[324,"nethermind","Nethermind","0xb183c2b91cf76cad13602b32ada2fd273f19009c"],[324,"ubisoft","Ubisoft","0x02a7bf7298d17c12181578ff474c17c922aad75a"],[1285,"bcw","BCW Group","0x7a7ddc46882220a075934f40380d3a7e1e87d409"],[1285,"canary","Canary","0x8fa9eef18c2a1459024f0b44714e5acc1ce7f5e8"],[1285,"horizen-labs","Horizen","0x7fe673201724925b5c477d4e1a4bd3e954688cf5"],[1285,"layerzero-labs","LayerZero Labs","0x2b3ebe6662ad402317ee7ef4e6b25c79a0f91015"],[1285,"nethermind","Nethermind","0xfe1cd27827e16b07e61a4ac96b521bdb35e00328"],[101,"bharvest","B-Harvest","F8tr3GMivioYFEvJAR2WW5CKjPtgMQtM5CEuSjjVkjWL"],[101,"canary","Canary","7jMeX5mzXnSSKYd8DxBDP4xMnkNFZZZm5W28FWUTbwU3"],[101,"deutsche-telekom","Deutsche Telekom","FxFxe8j7e2xgpP9bw8LUehmz7DoQXaNFadJMEUKwBcRs"],[101,"frax","Frax","6YB63FDuyYLt5gnJeiVmYRE4c6tFid5SrBZzMLQFfexm"],[101,"google-cloud","Google Cloud","F7gu9kLcpn4bSTZn183mhn2RXUuMy7zckdxJZdUjuALw"],[101,"horizen-labs","Horizen","HR9NQKK1ynW9NzgdM37dU5CBtqRHTukmbMKS7qkwSkHX"],[101,"layerzero-labs","LayerZero Labs","4VDjp6XQaxoZf5RGwiPU9NR1EXSZn2TP4ATMmiSzLfhb"],[101,"luganodes","Luganodes","41QAdzUraTcvk1P2B6fcs5nQ4EeEKEGnQy5EPpCQ5AdX"],[101,"nansen","Nansen","Fn8yyjaLbqw9FZyyLaTkb8o8RWp3vztxNChtPxcV1cLV"],[101,"nethermind","Nethermind","GPjyWr8vCotGuFubDpTxDxy9Vj1ZeEN4F2dwRmFiaGab"],[101,"p2p","P2P","29EKzmCscUg8mf4f5uskwMqvu2SXM8hKF1gWi1cCBoKT"],[101,"usdt0","USDT0","JBt34GkVns6VSoP2dCPpViW28eqE4GNgKaoZPRP63wZs"],[1559,"bcw","BCW Group","0x7fe673201724925b5c477d4e1a4bd3e954688cf5"],[1559,"canary","Canary","0xa1491ada1168f04df32f72913fc3f27522950acf"],[1559,"horizen-labs","Horizen","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[1559,"layerzero-labs","LayerZero Labs","0x28a5536ca9f36c45a9d2ac8d2b62fc46fde024b6"],[42170,"bcw","BCW Group","0x34730f2570e6cff8b1c91faabf37d0dd917c4367"],[42170,"canary","Canary","0xe4193136b92ba91402313e95347c8e9fad8d27d0"],[42170,"google-cloud","Google Cloud","0xd56e4eab23cb81f43168f9f45211eb027b9ac7cc"],[42170,"horizen-labs","Horizen","0x7fe673201724925b5c477d4e1a4bd3e954688cf5"],[42170,"layerzero-labs","LayerZero Labs","0xb7e97ad5661134185fe608b2a31fe8cef2147ba9"],[42170,"polyhedra-network","Polyhedra zkBridge","0x8ddf05f9a5c488b4973897e278b58895bf87cb24"],[82,"bcw","BCW Group","0xc4e1b199c3b24954022fce7ba85419b3f0669142"],[82,"horizen-labs","Horizen","0x3f10b9b75b05f103995ee8b8e2803aa6c7a9dcdf"],[82,"layerzero-labs","LayerZero Labs","0xb792afc44214b5f910216bc904633dbd15b31680"],[82,"nethermind","Nethermind","0x08095eced6c0b46d50ee45a6a59c0fd3de0b0855"],[2222,"axelar","Axelar","0x80c4c3768dd5a3dd105cf2bd868fdc50280e398b"],[2222,"bcw","BCW Group","0x7fe673201724925b5c477d4e1a4bd3e954688cf5"],[2222,"canary","Canary","0x06b85533967179ed5bc9c754b84ae7d02f7ed830"],[2222,"horizen-labs","Horizen","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[2222,"layerzero-labs","LayerZero Labs","0x2d40a7b66f776345cf763c8ebb83199cd285e7a3"],[2222,"nethermind","Nethermind","0x6a4c9096f162f0ab3c0517b0a40dc1ce44785e16"],[5000,"axelar","Axelar","0x6e6359a9abe2e235ef2b82e48f0f93d1ec16afbb"],[5000,"bcw","BCW Group","0x7a7ddc46882220a075934f40380d3a7e1e87d409"],[5000,"canary","Canary","0xa2447e5b58d357c49bf74b50b14421e6a100e525"],[5000,"deutsche-telekom","Deutsche Telekom","0x45f1d581f704b3203d0a4eab2a572658d7a2e678"],[5000,"horizen-labs","Horizen","0x7fe673201724925b5c477d4e1a4bd3e954688cf5"],[5000,"horizen-labs","Horizen (lzRead)","0x28b81e60cea9889dd51cbd04b7afc4e92d048447"],[5000,"layerzero-labs","LayerZero Labs","0x28b6140ead70cb2fb669705b3598ffb4beaa060b"],[5000,"layerzero-labs","LayerZero Labs (lzRead)","0xcc49e6fca014c77e1eb604351cc1e08c84511760"],[5000,"luganodes","Luganodes","0x315b0e76a510607bb0f706b17716f426d5b385b8"],[5000,"mantle-bank","Mantle Bank","0xb797053fba3d41f5067c4bd74dc334328395c4d2"],[5000,"nansen","Nansen","0x58620c352dd33eaaa2f6513877515453e20e8656"],[5000,"nethermind","Nethermind","0xb19a9370d404308040a9760678c8ca28affbbb76"],[5000,"nethermind","Nethermind (lzRead)","0x3e249f6892acfef1922fc3bce38fefeec3896817"],[5000,"p2p","P2P","0x2206ceb6809bd39f8707ed5ee618f8cfa57e40f2"],[5000,"polyhedra-network","Polyhedra zkBridge","0x8ddf05f9a5c488b4973897e278b58895bf87cb24"],[5000,"usdt0","USDT0","0xb832b06ab57da86afbd6a1af9857703d548fb37d"],[59144,"canary","Canary","0xda63525a0fc42bcc2cad1dd28708d5ed11849347"],[59144,"deutsche-telekom","Deutsche Telekom","0xa2d10677441230c4aed58030e4ea6ba7bfd80393"],[59144,"frax","Frax","0xf4064220871e3b94ca6ab3b0cee8e29178bf47de"],[59144,"google-cloud","Google Cloud","0xd56e4eab23cb81f43168f9f45211eb027b9ac7cc"],[59144,"horizen-labs","Horizen","0x7fe673201724925b5c477d4e1a4bd3e954688cf5"],[59144,"layerzero-labs","LayerZero Labs","0x129ee430cb2ff2708ccaddbdb408a88fe4ffd480"],[59144,"luganodes","Luganodes","0x08670e326968d18d4fe359080b8e3eeea552e867"],[59144,"muon","Muon","0xa3858e2a9860c935fc9586a617e9b2a674c3e4c8"],[59144,"nethermind","Nethermind","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[59144,"p2p","P2P","0x0b239476a771834d846cb505817bac3c391c338a"],[59144,"polyhedra-network","Polyhedra zkBridge","0x8ddf05f9a5c488b4973897e278b58895bf87cb24"],[59144,"superform","Superform","0x7a205ed4e3d7f9d0777594501705d8cd405c3b05"],[8453,"animoca-blockdaemon","Animoca-Blockdaemon (lzRead)","0x41ef29f974fc9f6772654f005271c64210425391"],[8453,"bcw","BCW Group","0xb3ce0a5d132cd9bf965aba435e650c55edce0062"],[8453,"bcw","BCW Group (lzRead)","0xd77a62b54ee18bcd667b6cd158d5a000182af5cf"],[8453,"bitgo","BitGo","0x133e9fb2d339d8428476a714b1113b024343811e"],[8453,"canary","Canary","0x554833698ae0fb22ecc90b01222903fd62ca4b47"],[8453,"deutsche-telekom","Deutsche Telekom","0xc2a0c36f5939a14966705c7cec813163faeea1f0"],[8453,"frax","Frax","0x187cf227f81c287303ee765ee001e151347faaa2"],[8453,"google-cloud","Google Cloud","0xd56e4eab23cb81f43168f9f45211eb027b9ac7cc"],[8453,"horizen-labs","Horizen","0xa7b5189bca84cd304d8553977c7c614329750d99"],[8453,"horizen-labs","Horizen (lzRead)","0x3a4636e9ab975d28d3af808b4e1c9fd936374e30"],[8453,"lagrange-labs","Lagrange","0xc50a49186aa80427aa3b0d3c2cec19ba64222a29"],[8453,"layerzero-labs","LayerZero Labs (lzRead)","0xb1473ac9f58fb27597a21710da9d1071841e8163"],[8453,"layerzero-labs","LayerZero Labs","0x9e059a54699a285714207b43b055483e78faac25"],[8453,"luganodes","Luganodes","0xa0af56164f02bdf9d75287ee77c568889f11d5f2"],[8453,"mantle-bank","Mantle Bank","0x761bc869351293c5572ed5581e23e7d5d9c6d3d1"],[8453,"muon","Muon","0xa3858e2a9860c935fc9586a617e9b2a674c3e4c8"],[8453,"nansen","Nansen","0x93ac538152e1bc4f093ae5666ee9fd1d84f4f4bf"],[8453,"nethermind","Nethermind","0xcd37ca043f8479064e10635020c65ffc005d36f6"],[8453,"nethermind","Nethermind (lzRead)","0x658947bc7956aea0067a62cf87ab02ae199ef3f3"],[8453,"nocturnal-labs","Nocturnal Labs (lzRead)","0xf4c489afd83625f510947e63ff8f90dfee0ae46c"],[8453,"omni-x","Omni X","0xeede111103535e473451311e26c3e6660b0f77e1"],[8453,"p2p","P2P","0x5b6735c66d97479ccd18294fc96b3084ecb2fa3f"],[8453,"polyhedra-network","Polyhedra zkBridge","0x8ddf05f9a5c488b4973897e278b58895bf87cb24"],[8453,"superform","Superform","0xeb62f578497bdc351dd650853a751135212faf49"],[8453,"ubisoft","Ubisoft","0x505e855810cb243b2f23e95fdbb8f28d22f87a8c"],[8453,"zeeve","Zeeve","0x6b34e842175c701f488e2dd335a98caaec49593f"],[7777777,"bcw","BCW Group","0x7fe673201724925b5c477d4e1a4bd3e954688cf5"],[7777777,"canary","Canary","0x3ad8537b6936c596ca36d736063380810f7d3252"],[7777777,"horizen-labs","Horizen","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[7777777,"layerzero-labs","LayerZero Labs","0xc1ec25a9e8a8de5aa346f635b33e5b74c4c081af"],[7777777,"luganodes","Luganodes","0x9fe36b305120556dbeefab58d58877d87b553df5"],[7777777,"nethermind","Nethermind","0xa7b5189bca84cd304d8553977c7c614329750d99"],[7777777,"p2p","P2P","0xd1b5493e712081a6fbab73116405590046668f6b"],[88,"bcw","BCW Group","0x7fe673201724925b5c477d4e1a4bd3e954688cf5"],[88,"horizen-labs","Horizen","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[88,"layerzero-labs","LayerZero Labs","0x1ace9dd1bc743ad036ef2d92af42ca70a1159df5"],[88,"nethermind","Nethermind","0x790d7b1e97a086eb0012393b65a5b32ce58a04dc"],[5151706,"bcw","BCW Group","0x7fe673201724925b5c477d4e1a4bd3e954688cf5"],[5151706,"canary","Canary","0xa1491ada1168f04df32f72913fc3f27522950acf"],[5151706,"horizen-labs","Horizen","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[5151706,"layerzero-labs","LayerZero Labs","0x4f8b7a7a346da5c467085377796e91220d904c15"],[4337,"bcw","BCW Group","0x7fe673201724925b5c477d4e1a4bd3e954688cf5"],[4337,"canary","Canary","0xa1bc1b9af01a0ec78883aa5dc7decdce897e1e76"],[4337,"horizen-labs","Horizen","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[4337,"layerzero-labs","LayerZero Labs","0x5e38c31c28d0f485d6dc3ffabf8980bbcd882294"],[40,"bcw","BCW Group","0x7fe673201724925b5c477d4e1a4bd3e954688cf5"],[40,"bitgo","BitGo","0x31b8c7cd7226ea79e833fabdccbca0fa38d6e0a1"],[40,"canary","Canary","0xae5273d893ad87c8f38d45e822a7b4321ccefb4c"],[40,"horizen-labs","Horizen","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[40,"layerzero-labs","LayerZero Labs","0x3c5575898f59c097681d1fc239c2c6ad36b7b41c"],[40,"nethermind","Nethermind","0x809cde2afcf8627312e87a6a7bbffab3f8f347c7"],[204,"bcw","BCW Group","0x7fe673201724925b5c477d4e1a4bd3e954688cf5"],[204,"canary","Canary","0xe5491fac6965aa664efd6d1ae5e7d1d56da4fdda"],[204,"horizen-labs","Horizen","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[204,"layerzero-labs","LayerZero Labs","0x3ebb618b5c9d09de770979d552b27d6357aff73b"],[204,"nethermind","Nethermind","0x6a4c9096f162f0ab3c0517b0a40dc1ce44785e16"],[204,"polyhedra-network","Polyhedra zkBridge","0x8ddf05f9a5c488b4973897e278b58895bf87cb24"],[592,"bcw","BCW Group","0x7a7ddc46882220a075934f40380d3a7e1e87d409"],[592,"canary","Canary","0x31b8c7cd7226ea79e833fabdccbca0fa38d6e0a1"],[592,"horizen-labs","Horizen","0x7fe673201724925b5c477d4e1a4bd3e954688cf5"],[592,"layerzero-labs","LayerZero Labs","0xe1975c47779edaaaba31f64934a33affd3ce15c2"],[592,"nethermind","Nethermind","0xb19a9370d404308040a9760678c8ca28affbbb76"],[1313161554,"bcw","BCW Group","0x70bf42c69173d6e33b834f59630dac592c70b369"],[1313161554,"canary","Canary","0xb4caa217dd195b3b40eee24b82c8093c2ea659cd"],[1313161554,"frax","Frax","0x045d70bf1939af0489cb44533750a2e15c92d7d4"],[1313161554,"horizen-labs","Horizen","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[1313161554,"layerzero-labs","LayerZero Labs","0xd4a903930f2c9085586cda0b11d9681eecb20d2f"],[1313161554,"nethermind","Nethermind","0x34730f2570e6cff8b1c91faabf37d0dd917c4367"],[1030,"bcw","BCW Group","0x7fe673201724925b5c477d4e1a4bd3e954688cf5"],[1030,"canary","Canary","0xe0f0fbbdbf9d398eca0dd8c86d1f308d895b9eb7"],[1030,"deutsche-telekom","Deutsche Telekom","0x45a7305c65aad28384f20a80f87a5183772e4f70"],[1030,"horizen-labs","Horizen","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[1030,"layerzero-labs","LayerZero Labs","0x8d183a062e99cad6f3723e6d836f9ea13886b173"],[1030,"nethermind","Nethermind","0x809cde2afcf8627312e87a6a7bbffab3f8f347c7"],[1030,"usdt0","USDT0","0x38179d3bfa6ef1d69a8a7b0b671ba3d8836b2ae8"],[291,"bcw","BCW Group","0x7fe673201724925b5c477d4e1a4bd3e954688cf5"],[291,"canary","Canary","0xd42306df1a805d8053bc652ce0cd9f62bde80146"],[291,"horizen-labs","Horizen","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[291,"layerzero-labs","LayerZero Labs","0xf53857dbc0d2c59d5666006ec200cba2936b8c35"],[291,"nethermind","Nethermind","0x6a4c9096f162f0ab3c0517b0a40dc1ce44785e16"],[534352,"axelar","Axelar","0x70cedf51c199fad12c6c0a71cd876af948059540"],[534352,"bcw","BCW Group","0x7a7ddc46882220a075934f40380d3a7e1e87d409"],[534352,"canary","Canary","0xdf44a1594d3d516f7cdfb4dc275a79a5f6e3db1d"],[534352,"frax","Frax","0x93bb6f93fa90a18e88a27bcfbcb048f7e14733c6"],[534352,"horizen-labs","Horizen","0x7fe673201724925b5c477d4e1a4bd3e954688cf5"],[534352,"horizen-labs","Horizen (lzRead)","0xfa9ba83c102283958b997adc8b44ed3a3cdb5dda"],[534352,"layerzero-labs","LayerZero Labs","0xbe0d08a85eebfcc6eda0a843521f7cbb1180d2e2"],[534352,"layerzero-labs","LayerZero Labs (lzRead)","0x755b3b6e6be0747f02ccc0b96001403fc7e8def5"],[534352,"luganodes","Luganodes","0xf60c89799c85d8fab79519f7666dcde2a7c97cca"],[534352,"nethermind","Nethermind","0x446755349101cb20c582c224462c3912d3584dce"],[534352,"nethermind","Nethermind (lzRead)","0xb212750bc22d26499dabf3ffe2ba1931dc3af3e1"],[534352,"p2p","P2P","0xc6a6324932b399d6a673b7ed0af671f28033e046"],[534352,"polyhedra-network","Polyhedra zkBridge","0x8ddf05f9a5c488b4973897e278b58895bf87cb24"],[534352,"p-ops-team","P-OPS","0x34730f2570e6cff8b1c91faabf37d0dd917c4367"],[37,"bcw","BCW Group","0x7fe673201724925b5c477d4e1a4bd3e954688cf5"],[37,"canary","Canary","0x73ddc92e39aeda95feb8d3e0008016d9f1268c76"],[37,"horizen-labs","Horizen","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[37,"layerzero-labs","LayerZero Labs","0x2d24207f9c1f77b2e08f2c3ad430da18e355cf66"],[37,"nethermind","Nethermind","0x809cde2afcf8627312e87a6a7bbffab3f8f347c7"],[37,"ubisoft","Ubisoft","0xa51ce237fafa3052d5d3308df38a024724bb1274"],[169,"bcw","BCW Group","0x809cde2afcf8627312e87a6a7bbffab3f8f347c7"],[169,"canary","Canary","0xdf44a1594d3d516f7cdfb4dc275a79a5f6e3db1d"],[169,"horizen-labs","Horizen","0x31f748a368a893bdb5abb67ec95f232507601a73"],[169,"layerzero-labs","LayerZero Labs","0xa09db5142654e3eb5cf547d66833fae7097b21c3"],[169,"nethermind","Nethermind","0x247624e2143504730aec22912ed41f092498bef2"],[169,"polyhedra-network","Polyhedra zkBridge","0x8ddf05f9a5c488b4973897e278b58895bf87cb24"],[148,"bcw","BCW Group","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[148,"canary","Canary","0x7e65bdd15c8db8995f80abf0d6593b57dc8be437"],[148,"horizen-labs","Horizen","0xa59ba433ac34d2927232918ef5b2eaafcf130ba5"],[148,"layerzero-labs","LayerZero Labs","0x9bdf3ae7e2e3d211811e5e782a808ca0a75bf1fc"],[148,"nethermind","Nethermind","0x5fddd320a1e29bb466fa635661b125d51d976f92"],[1380012617,"horizen-labs","Horizen","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[1380012617,"layerzero-labs","LayerZero Labs","0x0b5e5452d0c9da1bb5fb0664f48313e9667d7820"],[1380012617,"nethermind","Nethermind","0xb53648ca1aa054a80159c1175c03679fdc76bf88"],[660279,"bcw","BCW Group","0x34730f2570e6cff8b1c91faabf37d0dd917c4367"],[660279,"canary","Canary","0x7a3d18e2324536294cd6f054cdde7c994f40391a"],[660279,"horizen-labs","Horizen","0xe94ae34dfcc87a61836938641444080b98402c75"],[660279,"layerzero-labs","LayerZero Labs","0x9c061c9a4782294eef65ef28cb88233a987f4bdd"],[660279,"nethermind","Nethermind","0xacde1f22eeab249d3ca6ba8805c8fee9f52a16e7"],[111188,"canary","Canary","0x4134190b4cc18a9745ee0422cbc91c94f46a4cc1"],[111188,"horizen-labs","Horizen","0x439264fb87581a70bb6d7befd16b636521b0ad2d"],[111188,"layerzero-labs","LayerZero Labs","0x6788f52439aca6bff597d3eec2dc9a44b8fee842"],[111188,"nethermind","Nethermind","0xabc9b1819cc4d9846550f928b985993cf6240439"],[111188,"stakingcabin","StakingCabin","0xfd4ad9cdbd06fd4d8ca521307bf63a20239208ef"],[710420,"horizen-labs","Horizen","0x0165c910ea47964a23dc4fb7c7483f6f3ad462ae"],[710420,"layerzero-labs","LayerZero Labs","0xcfc3f9dd0205b76ff04e20243f106465dd829656"],[81457,"axelar","Axelar","0xb830a5afcbebb936c30c607a18bbba9f5b0a592f"],[81457,"canary","Canary","0x6398e91001cc1682bba103e6b2489fa5675a5a64"],[81457,"frax","Frax","0xfa06f93ad99825114c8f8738943734b07fdd162f"],[81457,"horizen-labs","Horizen","0x70bf42c69173d6e33b834f59630dac592c70b369"],[81457,"layerzero-labs","LayerZero Labs","0xc097ab8cd7b053326dfe9fb3e3a31a0cce3b526f"],[81457,"nethermind","Nethermind","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[81457,"polyhedra-network","Polyhedra zkBridge","0x0ff4cc28826356503bb79c00637bec0ee006f237"],[81457,"superform","Superform","0x0e95cf21ad9376a26997c97f326c5a0a267bb8ff"],[252,"axelar","Axelar","0x025bab5b7271790f9cf188fdce2c4214857f48d3"],[252,"canary","Canary","0x6398e91001cc1682bba103e6b2489fa5675a5a64"],[252,"frax","Frax","0x26cd5abadf7ec3f0f02b48314bfca6b2342cddd4"],[252,"horizen-labs","Horizen","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[252,"layerzero-labs","LayerZero Labs","0xcce466a522984415bc91338c232d98869193d46e"],[252,"nethermind","Nethermind","0xa7b5189bca84cd304d8553977c7c614329750d99"],[34443,"canary","Canary","0x5d8aed4182a8ecc47386e88aa8753dde7423996e"],[34443,"frax","Frax","0x315b0e76a510607bb0f706b17716f426d5b385b8"],[34443,"horizen-labs","Horizen","0xacde1f22eeab249d3ca6ba8805c8fee9f52a16e7"],[34443,"horizen-labs","Horizen (lzRead)","0x7c42f598d22e8711998bac7c3360a7b3a514863d"],[34443,"layerzero-labs","LayerZero Labs","0xce8358bc28dd8296ce8caf1cd2b44787abd65887"],[34443,"layerzero-labs","LayerZero Labs (lzRead)","0x47fe112e334f5f766db3c44f7c1813468240ede9"],[34443,"nethermind","Nethermind","0xcd37ca043f8479064e10635020c65ffc005d36f6"],[34443,"nethermind","Nethermind (lzRead)","0xe4ef857900a0ca59bcb903e7b2ccfb050be7dc97"],[34443,"polyhedra-network","Polyhedra zkBridge","0x8ddf05f9a5c488b4973897e278b58895bf87cb24"],[19011,"horizen-labs","Horizen","0x97841d4ab18e9a923322a002d5b8eb42b31ccdb5"],[19011,"layerzero-labs","LayerZero Labs","0x6788f52439aca6bff597d3eec2dc9a44b8fee842"],[19011,"stakingcabin","StakingCabin","0x1294e3347ec64fd63e1d0594dc1294247cd237c7"],[19011,"ubisoft","Ubisoft","0x60af1c48abd2f6013e06269292a77b3285e984b9"],[4200,"canary","Canary","0x4134190b4cc18a9745ee0422cbc91c94f46a4cc1"],[4200,"horizen-labs","Horizen","0x439264fb87581a70bb6d7befd16b636521b0ad2d"],[4200,"layerzero-labs","LayerZero Labs","0x6788f52439aca6bff597d3eec2dc9a44b8fee842"],[4200,"nethermind","Nethermind","0xabc9b1819cc4d9846550f928b985993cf6240439"],[4200,"polyhedra-network","Polyhedra zkBridge","0x8ddf05f9a5c488b4973897e278b58895bf87cb24"],[4200,"stakingcabin","StakingCabin","0xfd4ad9cdbd06fd4d8ca521307bf63a20239208ef"],[666666666,"canary","Canary","0xf10ea2c0d43bc4973cfbcc94ebafc39d1d4af118"],[666666666,"horizen-labs","Horizen","0x01a998260da061efb9a85b26d42f8f8662bf3d5f"],[666666666,"layerzero-labs","LayerZero Labs","0x6788f52439aca6bff597d3eec2dc9a44b8fee842"],[666666666,"nethermind","Nethermind","0x8d77d35604a9f37f488e41d1d916b2a0088f82dd"],[2046399126,"layerzero-labs","LayerZero Labs","0xce8358bc28dd8296ce8caf1cd2b44787abd65887"],[196,"canary","Canary","0x047d9dbe4fc6b5c916f37237f547f9f42809935a"],[196,"frax","Frax","0x2ae36a544b904f2f2960f6fd1a6084b4b11ba334"],[196,"horizen-labs","Horizen","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[196,"layerzero-labs","LayerZero Labs","0x9c061c9a4782294eef65ef28cb88233a987f4bdd"],[196,"nethermind","Nethermind","0x28af4dadbc5066e994986e8bb105240023dc44b6"],[196,"polyhedra-network","Polyhedra zkBridge","0x8ddf05f9a5c488b4973897e278b58895bf87cb24"],[196,"usdt0","USDT0","0x6de0d56e2d695db9e2b4fbeca3d81372c59848bb"],[1996,"canary","Canary","0x21caf0bce846aaa78c9f23c5a4ec5988ecbf9988"],[1996,"horizen-labs","Horizen","0x5fddd320a1e29bb466fa635661b125d51d976f92"],[1996,"layerzero-labs","LayerZero Labs","0x6788f52439aca6bff597d3eec2dc9a44b8fee842"],[1996,"omni-x","Omni X","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[1996,"stakingcabin","StakingCabin","0x1253ca32712171b5d28115a1346f2b22bb9a41d5"],[60808,"bitgo","BitGo","0xaa391622e42ae501371cd745ce0bad588a8c65fd"],[60808,"canary","Canary","0x46d6e532a913cdf688fb7863ce1cf360a81ec5e4"],[60808,"horizen-labs","Horizen","0xf2067660520f79eb7a8326dc1266dce0167d64e7"],[60808,"layerzero-labs","LayerZero Labs","0x6788f52439aca6bff597d3eec2dc9a44b8fee842"],[60808,"nethermind","Nethermind","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[1329,"bcw","BCW Group","0x1feb08b1a53a9710afce82d380b8c2833c69a37e"],[1329,"bitgo","BitGo","0x26cd5abadf7ec3f0f02b48314bfca6b2342cddd4"],[1329,"canary","Canary","0x33051ad47157a50bb49a646256b854c60f707c86"],[1329,"frax","Frax","0xe016f0f39fb7dcf14e9412d92f2049668d4d2612"],[1329,"horizen-labs","Horizen","0x87048402c32632b7c4d0a892d82bc1160e8b2393"],[1329,"horizen-labs","Horizen (lzRead)","0x96ca3420bedd887cabdaba29c7dce6bad57af98b"],[1329,"layerzero-labs","LayerZero Labs","0x6788f52439aca6bff597d3eec2dc9a44b8fee842"],[1329,"layerzero-labs","LayerZero Labs (lzRead)","0xf6eddf89a273b5cbfbc54cee618762983823c3f4"],[1329,"luganodes","Luganodes","0x6e01aa282f058873d28055e07d85f4197e8db261"],[1329,"nansen","Nansen","0xf85f51c1d5b4de2446d99b104acfca7ff63bd3ad"],[1329,"nethermind","Nethermind","0xd24972c11f91c1bb9eaee97ec96bb9c33cf7af24"],[1329,"nethermind","Nethermind (lzRead)","0xa93d4490444eba60839742859cfde53bf0967dc9"],[1329,"p2p","P2P","0xa83a87a0bdce466edfbb6794404e1d7f556b8f20"],[1329,"stakingcabin","StakingCabin","0x93d2d7aadc9f2cf5ebc88e9703e06db09b8fd85b"],[1329,"usdt0","USDT0","0x8efb6b7dc61c6b6638714747d5e6b81a3512b5c3"],[7560,"canary","Canary","0x3a855fce450f7aef93b14251d94cc4a47f9ff010"],[7560,"horizen-labs","Horizen","0x9885110b909e88bb94f7f767a68ec2558b2afa73"],[7560,"layerzero-labs","LayerZero Labs","0x6788f52439aca6bff597d3eec2dc9a44b8fee842"],[7560,"nethermind","Nethermind","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[7560,"polyhedra-network","Polyhedra zkBridge","0x8ddf05f9a5c488b4973897e278b58895bf87cb24"],[7560,"stakingcabin","StakingCabin","0x2206ceb6809bd39f8707ed5ee618f8cfa57e40f2"],[8822,"canary","Canary","0xecbaa45c33ce6fa284995e5f8314f5bc7f1c2008"],[8822,"horizen-labs","Horizen","0xdfc9455f8f86b45fa3b1116967f740905de6fe51"],[8822,"layerzero-labs","LayerZero Labs","0x6788f52439aca6bff597d3eec2dc9a44b8fee842"],[8822,"nethermind","Nethermind","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[81,"canary","Canary","0x5488a4ca201421cf100dc1b90d1de5b26b421f64"],[81,"horizen-labs","Horizen","0xfb02364e3f5e97d8327dc6e4326e93828a28657d"],[81,"layerzero-labs","LayerZero Labs","0x9c061c9a4782294eef65ef28cb88233a987f4bdd"],[81,"nethermind","Nethermind","0x57eb450b257e6a5d65cdc9a7b95245139975eacf"],[81,"stakingcabin","StakingCabin","0x34730f2570e6cff8b1c91faabf37d0dd917c4367"],[167000,"canary","Canary","0xa9ff468ad000a4d5729826459197a0db843f433e"],[167000,"horizen-labs","Horizen","0xbd237ef21319e2200487bdf30c188c6c34b16d3b"],[167000,"layerzero-labs","LayerZero Labs","0xc097ab8cd7b053326dfe9fb3e3a31a0cce3b526f"],[167000,"nethermind","Nethermind","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[167000,"stakingcabin","StakingCabin","0x2c7185f5b0976397d9eb5c19d639d4005e6708f0"],[94524,"horizen-labs","Horizen","0x0e5c792ec122cbe89ce0085d7efcdb151eae3376"],[94524,"layerzero-labs","LayerZero Labs","0x9c061c9a4782294eef65ef28cb88233a987f4bdd"],[94524,"nethermind","Nethermind","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[42793,"horizen-labs","Horizen (lzRead)","0xecc3dc1cc45b1934ce713f8fb0d3d3852c01a5c1"],[42793,"horizen-labs","Horizen","0xe7411fca6d67de2aa856570dbd59a19fcde81bd8"],[42793,"layerzero-labs","LayerZero Labs","0xc097ab8cd7b053326dfe9fb3e3a31a0cce3b526f"],[42793,"layerzero-labs","LayerZero Labs (lzRead)","0xf8f34c79d409f96e700158de041ebb7fe754fd27"],[42793,"nethermind","Nethermind","0x7a23612f07d81f16b26cf0b5a4c3eca0e8668df2"],[42793,"nethermind","Nethermind (lzRead)","0x4a6b9962945d866f53fd114bb76b38b8791b8c1d"],[42793,"zeeve","Zeeve","0x1e023ed98a1236fb30054ba1317bb82c3c37785f"],[6001,"horizen-labs","Horizen","0x8d77d35604a9f37f488e41d1d916b2a0088f82dd"],[6001,"layerzero-labs","LayerZero Labs","0x9c061c9a4782294eef65ef28cb88233a987f4bdd"],[1625,"canary","Canary","0xe9c24dd582e37faaca7d44c799530688de92da73"],[1625,"horizen-labs","Horizen","0xe95b63c4da1d94fa5022e7c23c984f278b416ca7"],[1625,"layerzero-labs","LayerZero Labs","0x9c061c9a4782294eef65ef28cb88233a987f4bdd"],[1625,"nethermind","Nethermind","0x4b92bc2a7d681bf5230472c80d92acfe9a6b9435"],[1625,"nodes-guru","Nodes.Guru","0x4d52f5bc932cf1a854381a85ad9ed79b8497c153"],[1625,"stakingcabin","StakingCabin","0x0d155ec1dfc983e919c318964fd16078408e99cc"],[14,"canary","Canary","0xd791948db16ab4373fa394b74c727ddb7fb02520"],[14,"horizen-labs","Horizen","0xeaa5a170d2588f84773f965281f8611d61312832"],[14,"layerzero-labs","LayerZero Labs","0x9c061c9a4782294eef65ef28cb88233a987f4bdd"],[14,"nethermind","Nethermind","0x9bcd17a654bffaa6f8fea38d19661a7210e22196"],[14,"polyhedra-network","Polyhedra zkBridge","0x8ddf05f9a5c488b4973897e278b58895bf87cb24"],[14,"stakingcabin","StakingCabin","0xce97511db880571a7c31821eb026ef12fcac892e"],[14,"usdt0","USDT0","0x7cec38c06a2fec9fd525b1925544110204cbb5f6"],[3338,"canary","Canary","0x0c0c8fd5351fd936a987c790d88b137df4e73d64"],[3338,"horizen-labs","Horizen","0x21caf0bce846aaa78c9f23c5a4ec5988ecbf9988"],[3338,"layerzero-labs","LayerZero Labs","0x6788f52439aca6bff597d3eec2dc9a44b8fee842"],[3338,"nansen","Nansen","0xc2a0c36f5939a14966705c7cec813163faeea1f0"],[3338,"nethermind","Nethermind","0x725fafe20b74ff6f88daea0c506190a8f1037635"],[3338,"nodes-guru","Nodes.Guru","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[3338,"p2p","P2P","0x795720d981c1f4d4d4381682225572c431284592"],[3338,"stakingcabin","StakingCabin","0x2edfe0220a74d9609c79711a65e3a2f2a85dc83b"],[48900,"canary","Canary","0xe552485d02edd3067fe7fcbd4dd56bb1d3a998d2"],[48900,"horizen-labs","Horizen","0xdcdd4628f858b45260c31d6ad076bd2c3d3c2f73"],[48900,"layerzero-labs","LayerZero Labs","0x6788f52439aca6bff597d3eec2dc9a44b8fee842"],[48900,"nethermind","Nethermind","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[48900,"stakingcabin","StakingCabin","0x92ef4381a03372985985e70fb15e9f081e2e8d14"],[1890,"canary","Canary","0xf1042bba248634583d0678d53fb33bc885e09f11"],[1890,"horizen-labs","Horizen","0xacde1f22eeab249d3ca6ba8805c8fee9f52a16e7"],[1890,"layerzero-labs","LayerZero Labs","0x6788f52439aca6bff597d3eec2dc9a44b8fee842"],[1890,"nethermind","Nethermind","0x18f76f0d8ccd176bbe59b3870fa486d1fff87026"],[957,"canary","Canary","0x047d9dbe4fc6b5c916f37237f547f9f42809935a"],[957,"horizen-labs","Horizen","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[957,"layerzero-labs","LayerZero Labs","0x9c061c9a4782294eef65ef28cb88233a987f4bdd"],[33139,"canary","Canary","0x9bb011796fc3604d3a4faa5863f587a33f6224af"],[33139,"horizen-labs","Horizen","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[33139,"horizen-labs","Horizen (lzRead)","0x452646362d5fe81cfda49bbf620be480358c0663"],[33139,"layerzero-labs","LayerZero Labs (lzRead)","0x965a80dc87cec5848310e612dead84b543aef874"],[33139,"layerzero-labs","LayerZero Labs","0x6788f52439aca6bff597d3eec2dc9a44b8fee842"],[33139,"nethermind","Nethermind","0x07653d28b0f53d4c54b70eb1f9025795b23a9d6e"],[33139,"nethermind","Nethermind (lzRead)","0xb2e6e01a5bef9bf25f00105dc7e47542f750de68"],[1729,"horizen-labs","Horizen","0x6c5f923b63fdd52fb9c45daefa8695fa6b55a935"],[1729,"layerzero-labs","LayerZero Labs","0x6788f52439aca6bff597d3eec2dc9a44b8fee842"],[200901,"horizen-labs","Horizen","0x95729ea44326f8add8a9b1d987279dbdc1dd3dff"],[200901,"layerzero-labs","LayerZero Labs","0x6788f52439aca6bff597d3eec2dc9a44b8fee842"],[200901,"nethermind","Nethermind","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[295,"bcw","BCW Group","0x97841d4ab18e9a923322a002d5b8eb42b31ccdb5"],[295,"bitgo","BitGo","0xa83a87a0bdce466edfbb6794404e1d7f556b8f20"],[295,"canary","Canary","0x4b92bc2a7d681bf5230472c80d92acfe9a6b9435"],[295,"horizen-labs","Horizen","0xd0f50363e1ae33feac8e0e067e42d0070c394525"],[295,"layerzero-labs","LayerZero Labs","0xce8358bc28dd8296ce8caf1cd2b44787abd65887"],[295,"nethermind","Nethermind","0xecc3dc1cc45b1934ce713f8fb0d3d3852c01a5c1"],[295,"usdt0","USDT0","0x9d5d4983c4ed9253e920aa82be9436f1fbeae0c0"],[11501,"canary","Canary","0x4fe90e0f2a99e464d6e97b161d72101cd03c20fe"],[11501,"horizen-labs","Horizen","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[11501,"layerzero-labs","LayerZero Labs","0x9c061c9a4782294eef65ef28cb88233a987f4bdd"],[480,"canary","Canary","0xe9c24dd582e37faaca7d44c799530688de92da73"],[480,"frax","Frax","0xe16561b56bdf003b785347d237905bae24f5f973"],[480,"horizen-labs","Horizen","0x95729ea44326f8add8a9b1d987279dbdc1dd3dff"],[480,"horizen-labs","Horizen (lzRead)","0x00e91548787caf130d811ef1872f2bc2c0583d90"],[480,"layerzero-labs","LayerZero Labs","0x6788f52439aca6bff597d3eec2dc9a44b8fee842"],[480,"layerzero-labs","LayerZero Labs (lzRead)","0xf007f1fef50c0acaf4418741454bcaeaecb96b87"],[480,"nethermind","Nethermind","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[480,"nethermind","Nethermind (lzRead)","0x30ac79b638fffd3a7f05338249ac6ed371e2df2b"],[130,"animoca-blockdaemon","Animoca-Blockdaemon","0x1337834fd822065af36a13657d2e847616129f3f"],[130,"bitgo","BitGo","0x6a4c9096f162f0ab3c0517b0a40dc1ce44785e16"],[130,"canary","Canary","0x00a979a5d306e9c5f8cf473659e75f8002e06fc8"],[130,"frax","Frax","0x97faa2a9c9bf8b4082b175a5b894ce6bac6697a8"],[130,"horizen-labs","Horizen","0xc6a6324932b399d6a673b7ed0af671f28033e046"],[130,"horizen-labs","Horizen (lzRead)","0xd8a1e914bdc19be62d548403303f13663a360c6b"],[130,"layerzero-labs","LayerZero Labs","0x282b3386571f7f794450d5789911a9804fa346b4"],[130,"layerzero-labs","LayerZero Labs (lzRead)","0xb85775a6868c1a729447951fd59f9f7f095cd0b1"],[130,"luganodes","Luganodes","0xf02d0f9acc2870e12c34aa3816dd86fac1339f38"],[130,"nansen","Nansen","0x144c6a7a17781e165f430b18f0680c5b3e3713e2"],[130,"nethermind","Nethermind","0x25e0e650a78e6304a3983fc4b7ffc6544b1beea6"],[130,"nethermind","Nethermind (lzRead)","0x643923a777570c5377cd0e973d999c00cce55249"],[130,"p2p","P2P","0xab82e9b24004b954985528dac14d1b020722a3c8"],[130,"usdt0","USDT0","0x208894346d2995a26493f8c2a5b04fb1ee41a899"],[1135,"canary","Canary","0x0d155ec1dfc983e919c318964fd16078408e99cc"],[1135,"horizen-labs","Horizen","0x6c5f923b63fdd52fb9c45daefa8695fa6b55a935"],[1135,"layerzero-labs","LayerZero Labs","0x6788f52439aca6bff597d3eec2dc9a44b8fee842"],[1135,"nethermind","Nethermind","0x4b92bc2a7d681bf5230472c80d92acfe9a6b9435"],[2818,"canary","Canary","0xf10ea2c0d43bc4973cfbcc94ebafc39d1d4af118"],[2818,"horizen-labs","Horizen","0x6c5f923b63fdd52fb9c45daefa8695fa6b55a935"],[2818,"layerzero-labs","LayerZero Labs","0x6788f52439aca6bff597d3eec2dc9a44b8fee842"],[2818,"nethermind","Nethermind","0xdf30c9f6a70ce65a152c5bd09826525d7e97ba49"],[81224,"canary","Canary","0x391a2021483cb476d059a78130f95165c79604b7"],[81224,"horizen-labs","Horizen","0x5131e3a44c499b11bd694d1070635cf49ebfebf3"],[81224,"layerzero-labs","LayerZero Labs","0x9c061c9a4782294eef65ef28cb88233a987f4bdd"],[81224,"nethermind","Nethermind","0xabc9b1819cc4d9846550f928b985993cf6240439"],[2741,"canary","Canary","0xcb773caf620d2a6703d2cd30c567a6c2906ccfbb"],[2741,"frax","Frax","0xa8c83febab692d6f08cfa303e5d53b3b34f9046d"],[2741,"horizen-labs","Horizen","0x264fe346fcd0a89e3b41a6499bac80dea7e908d2"],[2741,"horizen-labs","Horizen (lzRead)","0xd45174e7654977e8bc3d0648d06c89401978a65a"],[2741,"layerzero-labs","LayerZero Labs (lzRead)","0x02a7bf7298d17c12181578ff474c17c922aad75a"],[2741,"layerzero-labs","LayerZero Labs","0xf4da94b4ee9d8e209e3bf9f469221ce2731a7112"],[2741,"luganodes","Luganodes","0x022da66b230da7efdeed802dfc77ee8dd258e2c8"],[2741,"nethermind","Nethermind (lzRead)","0x05db3a229293c09f639a16526bb2481704716df0"],[2741,"nethermind","Nethermind","0xc4a1f52fda034a9a5e1b3b27d14451d15776fef6"],[2741,"p2p","P2P","0x52b7e1958f6ad3e195dc30578da5fa7ac5827a2a"],[2741,"ubisoft","Ubisoft","0x62aa89bad332788021f6f4f4fb196d5fe59c27a6"],[null,"brale","Brale","0x2ad42b71b1aca51a600ba111982ea4ad048af944ea95678459670b92a88e5dac"],[null,"frax","Frax","0xc4a5d892efdf6689d2595c3f438e465702b5a7db0bed8125c4e218464a14ba28"],[null,"horizen-labs","Horizen","0x2b696b3ee859b7eb624e1fd5de49f4d3806f49862f1177d6827fd1beffde9179"],[null,"layerzero-labs","LayerZero Labs","0xdf8f0a53b20f1656f998504b81259698d126523a31bdbbae45ba1e8a3078d8da"],[null,"nethermind","Nethermind","0x0da7ab938aa044372db0d66a3a370d4479042b3f31e2a30940a157647065b46b"],[null,"p2p","P2P","0xbcfb6d3ce5e99275e5fa09b3f53eaaea32365c776d023c51a680c4c420d88b91"],[null,"brale","Brale","0xb81eec5368fef53384dc7cb85d51cfb407409938773389e356505266840c73ca"],[null,"horizen-labs","Horizen","0xc4e2ef8ef44045cafc5bd8bd838dc357e4a0cf4cb5d2c06a98fbc4a87c7b5b72"],[null,"layerzero-labs","LayerZero Labs","0xd8717e05c622a366394bedb326ca10e6a34b25df20ec9b572382b65c8a68461f"],[null,"nethermind","Nethermind","0x6ae3cd90d5b75e89f8b223412a419d1a9f8848cdcdc99ce85b71040946aab376"],[55244,"canary","Canary","0x396dc0a78f789586e2982fccd830c5954c193f3c"],[55244,"horizen-labs","Horizen","0x38179d3bfa6ef1d69a8a7b0b671ba3d8836b2ae8"],[55244,"layerzero-labs","LayerZero Labs","0x282b3386571f7f794450d5789911a9804fa346b4"],[55244,"nethermind","Nethermind","0x07c05eab7716acb6f83ebf6268f8eecda8892ba1"],[41923,"canary","Canary","0x73ddc44aa34a838744c53aa23886e784a7b1f734"],[41923,"horizen-labs","Horizen","0xf4672690ef45b46eaa3b688fe2f0fc09e9366b20"],[41923,"layerzero-labs","LayerZero Labs","0x9c061c9a4782294eef65ef28cb88233a987f4bdd"],[41923,"nethermind","Nethermind","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[43111,"canary","Canary","0x396dc0a78f789586e2982fccd830c5954c193f3c"],[43111,"horizen-labs","Horizen","0x38179d3bfa6ef1d69a8a7b0b671ba3d8836b2ae8"],[43111,"layerzero-labs","LayerZero Labs","0x282b3386571f7f794450d5789911a9804fa346b4"],[43111,"nethermind","Nethermind","0x07c05eab7716acb6f83ebf6268f8eecda8892ba1"],[1480,"canary","Canary","0x45a7305c65aad28384f20a80f87a5183772e4f70"],[1480,"horizen-labs","Horizen","0xca848bcb059e33adb260d793ee360924b6aa8e86"],[1480,"layerzero-labs","LayerZero Labs","0x6788f52439aca6bff597d3eec2dc9a44b8fee842"],[1480,"nethermind","Nethermind","0x70bf42c69173d6e33b834f59630dac592c70b369"],[21000000,"canary","Canary","0x5311241a20055f9c0b02d18d6c52f2b711c07b03"],[21000000,"horizen-labs","Horizen","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[21000000,"layerzero-labs","LayerZero Labs","0x6788f52439aca6bff597d3eec2dc9a44b8fee842"],[21000000,"nethermind","Nethermind","0xe33de1a8cf9bcdc6b509c44eef66f47c65da6d47"],[21000000,"usdt0","USDT0","0x91f93749e44c7b6510dcd236aeade39dfc901d49"],[146,"bitgo","BitGo","0xdfbb5c677db41b5ef3a180509cde27b5c9784655"],[146,"canary","Canary","0xb2c7832aa8dda878de6f949485f927e9e532e92c"],[146,"deutsche-telekom","Deutsche Telekom","0xde79818c75649773fc462e9d3134b23b81741481"],[146,"frax","Frax","0x805ed883fa3453e7ac588667785a4495c573cd13"],[146,"horizen-labs","Horizen","0x54dd79f5ce72b51fcbbcb170dd01e32034323565"],[146,"horizen-labs","Horizen (lzRead)","0xca764b512e2d2fd15fca1c0a38f7cfe9153148f0"],[146,"layerzero-labs","LayerZero Labs","0x282b3386571f7f794450d5789911a9804fa346b4"],[146,"layerzero-labs","LayerZero Labs (lzRead)","0x78f607fc38e071ceb8630b7b12c358ee01c31e96"],[146,"luganodes","Luganodes","0xc8b7744afd77c3eecf310383837a07584766a51a"],[146,"muon","Muon","0xa3858e2a9860c935fc9586a617e9b2a674c3e4c8"],[146,"nansen","Nansen","0x64d684840881b45869b0c72b17aa911a3fc4305e"],[146,"nethermind","Nethermind","0x05aaefdf9db6e0f7d27fa3b6ee099edb33da029e"],[146,"nethermind","Nethermind (lzRead)","0x3b0531eb02ab4ad72e7a531180beef9493a00dd2"],[146,"p2p","P2P","0x45a7305c65aad28384f20a80f87a5183772e4f70"],[30,"canary","Canary","0xf1042bba248634583d0678d53fb33bc885e09f11"],[30,"horizen-labs","Horizen","0x54dd79f5ce72b51fcbbcb170dd01e32034323565"],[30,"layerzero-labs","LayerZero Labs","0x6788f52439aca6bff597d3eec2dc9a44b8fee842"],[30,"nethermind","Nethermind","0x05aaefdf9db6e0f7d27fa3b6ee099edb33da029e"],[30,"usdt0","USDT0","0xbabbb709b3cefe563f2ab14898a53301686d48b9"],[50104,"canary","Canary","0x99aa6f70535873ac8167d69893a2cf70eca544c3"],[50104,"horizen-labs","Horizen","0xcec9f0a49073ac4a1c439d06cb9448512389a64e"],[50104,"layerzero-labs","LayerZero Labs","0x07fd0e370b49919ca8da0ce842b8177263c0e12c"],[50104,"nethermind","Nethermind","0xa1a31d9ddf919e87a23a1416b0aa0b600d32435d"],[1923,"bitgo","BitGo","0x1269d1777ba8cf7498fe741869ed4b73f2a47e93"],[1923,"canary","Canary","0xa2447e5b58d357c49bf74b50b14421e6a100e525"],[1923,"horizen-labs","Horizen","0xf4672690ef45b46eaa3b688fe2f0fc09e9366b20"],[1923,"layerzero-labs","LayerZero Labs","0x6788f52439aca6bff597d3eec2dc9a44b8fee842"],[1923,"nethermind","Nethermind","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[747,"bitgo","BitGo","0xccdebdb5acfd6ae062859ac66653b10ed77586c2"],[747,"canary","Canary","0xe4e65d80deb0e2c8391215bcba4b5f7603420407"],[747,"horizen-labs","Horizen","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[747,"layerzero-labs","LayerZero Labs","0x6788f52439aca6bff597d3eec2dc9a44b8fee842"],[747,"layerzero-labs","LayerZero Labs (lzRead)","0x6bea5b5799f5fb11da9d801b2ae599e3237c92fd"],[747,"nethermind","Nethermind","0x3c61aad6d402d867c653f603558f4b8f91abe952"],[747,"nethermind","Nethermind (lzRead)","0x75ab9d30e4ff4913a4df9a02af8cef3525a93f68"],[57073,"canary","Canary","0x1e4ce74ccf5498b19900649d9196e64bab592451"],[57073,"frax","Frax","0xf007f1fef50c0acaf4418741454bcaeaecb96b87"],[57073,"horizen-labs","Horizen","0x395b14700812cccc38b8e64f0a06ce2045fe9ba3"],[57073,"horizen-labs","Horizen (lzRead)","0x5fc8c440f7b9c7646c2904ac63c1c0ca714c733e"],[57073,"layerzero-labs","LayerZero Labs","0x174f2ba26f8adeafa82663bcf908288d5dbca649"],[57073,"layerzero-labs","LayerZero Labs (lzRead)","0x2cabf8f2c0aae35a771a1c19487684e94388b03a"],[57073,"luganodes","Luganodes","0x0ad6c9eb13e373154bfb303561b979bac5fa2302"],[57073,"nansen","Nansen","0x3a4636e9ab975d28d3af808b4e1c9fd936374e30"],[57073,"nethermind","Nethermind","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[57073,"nethermind","Nethermind (lzRead)","0x96ca3420bedd887cabdaba29c7dce6bad57af98b"],[57073,"p2p","P2P","0x68b6fb5e728db92a09ba810595915ae3d7399e40"],[57073,"usdt0","USDT0","0xdf44a1594d3d516f7cdfb4dc275a79a5f6e3db1d"],[1868,"bitgo","BitGo","0x04584d612802a3a26b160e3f90341e6443ddb76a"],[1868,"canary","Canary","0xdd1564f68aa802e30819f9e8043664584a8a3e87"],[1868,"horizen-labs","Horizen","0x8fc629aa400d4d9c0b118f2685a49316552abf27"],[1868,"horizen-labs","Horizen (lzRead)","0xff78c0d5bbc133615b54d3f7ee45b8e314d38bd2"],[1868,"layerzero-labs","LayerZero Labs","0xfdfa2330713a8e2eac6e4f15918f11937ffa4dbe"],[1868,"layerzero-labs","LayerZero Labs (lzRead)","0xb2609ff80cdc626b6a6782366e5b43639e19cb8c"],[1868,"nethermind","Nethermind","0x5cc4e4d2cdf15795dc5ea383b8768ec91a587719"],[1868,"nethermind","Nethermind (lzRead)","0x1a53015b6b4d88a943ed512bd179fbd89a768b6b"],[1868,"p2p","P2P","0xf85d19e8884eb985a7f77ba385409ec7ad2923a5"],[8227,"canary","Canary","0xe4193136b92ba91402313e95347c8e9fad8d27d0"],[8227,"horizen-labs","Horizen","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[8227,"layerzero-labs","LayerZero Labs","0x7cacbe439ead55fa1c22790330b12835c6884a91"],[1300,"canary","Canary","0xe4e65d80deb0e2c8391215bcba4b5f7603420407"],[1300,"horizen-labs","Horizen","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[1300,"layerzero-labs","LayerZero Labs","0xce8358bc28dd8296ce8caf1cd2b44787abd65887"],[1300,"nethermind","Nethermind","0xaa3099f91912e07976c2dd1598dc740d81bd3fea"],[null,"brale","Brale","0x00103b780b45ad24d118c6a551d483ab99ce5b23d1e2cab27a2c3c086cf59506"],[null,"deutsche-telekom","Deutsche Telekom","0x00db0e3115b2eaade45493608a46519b86a9168b1c43c2d6bfcff8ee5c4c1c44"],[null,"horizen-labs","Horizen","0x049e0ecaa2b3b4fc1966b06481d0b584e983327f4e55b185a73b8bd2eb7650e2"],[null,"layerzero-labs","LayerZero Labs","0x0d122dec4ec8bd66c68344faf0dd471d727a7d57a21b62051705bbe2e4c272a7"],[null,"nethermind","Nethermind","0x0bdb39aae986f3fad5c19a9a9c888f8cc4c3e2c042c23533b71b701db62633a7"],[null,"usdt0","USDT0","0x04b9f9836004d7f53e52e01602d9c07c14cdf38b8a946b6e813cfea8de10927d"],[25,"canary","Canary","0xf1042bba248634583d0678d53fb33bc885e09f11"],[25,"horizen-labs","Horizen","0xe33de1a8cf9bcdc6b509c44eef66f47c65da6d47"],[25,"layerzero-labs","LayerZero Labs","0xce8358bc28dd8296ce8caf1cd2b44787abd65887"],[25,"nethermind","Nethermind","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[388,"canary","Canary","0xc4a1f52fda034a9a5e1b3b27d14451d15776fef6"],[388,"horizen-labs","Horizen","0x1253e268bc04bb43cb96d2f7ee858b8a1433cf6d"],[388,"layerzero-labs","LayerZero Labs","0x07fd0e370b49919ca8da0ce842b8177263c0e12c"],[388,"nethermind","Nethermind","0x3a5a74f863ec48c1769c4ee85f6c3d70f5655e2a"],[2345,"canary","Canary","0x396dc0a78f789586e2982fccd830c5954c193f3c"],[2345,"horizen-labs","Horizen","0xdf0771128bd4b9b18ed883d5af41a6c725c51b38"],[2345,"layerzero-labs","LayerZero Labs","0x282b3386571f7f794450d5789911a9804fa346b4"],[2345,"nethermind","Nethermind","0xe6cd8c2e46ef396df88048449e5b1c75172b40c3"],[80094,"animoca-blockdaemon","Animoca-Blockdaemon","0xa2d10677441230c4aed58030e4ea6ba7bfd80393"],[80094,"bera","Bera","0x10473bd2f7320476b5e5e59649e3dc129d9d0029"],[80094,"bitgo","BitGo","0xdff3f73c260b3361d4f006b02972c6af6c5c5417"],[80094,"canary","Canary","0x06e8042729cef3ae6d6db5350f48f9d736c3675d"],[80094,"deutsche-telekom","Deutsche Telekom","0x0273fbff931704884668a9efe50e7a2b3fc30505"],[80094,"frax","Frax","0x559a194dae0508342e7ce1ad96e7e90a77f8bc4c"],[80094,"horizen-labs","Horizen","0xecbaa45c33ce6fa284995e5f8314f5bc7f1c2008"],[80094,"horizen-labs","Horizen (lzRead)","0x59b5042691bd2fd3700ceb9a4c7630be3ecf9484"],[80094,"layerzero-labs","LayerZero Labs","0x282b3386571f7f794450d5789911a9804fa346b4"],[80094,"layerzero-labs","LayerZero Labs (lzRead)","0x5933a371ea26e11318389ee3322ae3ec16463502"],[80094,"luganodes","Luganodes","0xfd4d23eb5cea65f6cc7eec8f3b394e55aed68299"],[80094,"mantle-bank","Mantle Bank","0x88a8b858c7fcb3fe0052c9b7bcc69183a9cebd76"],[80094,"mim","MIM","0x73ddc92e39aeda95feb8d3e0008016d9f1268c76"],[80094,"nansen","Nansen","0x00a979a5d306e9c5f8cf473659e75f8002e06fc8"],[80094,"nethermind","Nethermind","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[80094,"nethermind","Nethermind (lzRead)","0x2da965594e1f2d7d42569ab9127847d7a4bf38ff"],[80094,"p2p","P2P","0x3b247f1b48f055ebf2db593672b98c9597e3081e"],[80094,"usdt0","USDT0","0xd01ae6905d48315f7be10c7330aecf8360ef5b12"],[5165,"canary","Canary","0x4fe90e0f2a99e464d6e97b161d72101cd03c20fe"],[5165,"horizen-labs","Horizen","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[5165,"layerzero-labs","LayerZero Labs","0x282b3386571f7f794450d5789911a9804fa346b4"],[1514,"canary","Canary","0x77aaf86b4466a67869667babe02c6ebe7e7791d6"],[1514,"horizen-labs","Horizen","0x73ddc92e39aeda95feb8d3e0008016d9f1268c76"],[1514,"horizen-labs","Horizen (lzRead)","0xdd9b12623ec1c7e744819708b9217b309fde4080"],[1514,"layerzero-labs","LayerZero Labs","0x9c061c9a4782294eef65ef28cb88233a987f4bdd"],[1514,"layerzero-labs","LayerZero Labs (lzRead)","0xdd779aaad20e62275457af91b123bb13dd5afd0b"],[1514,"nethermind","Nethermind","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[1514,"nethermind","Nethermind (lzRead)","0x032959aec390996b9a82fea8273c76b938e3c861"],[50,"canary","Canary","0x307d81ef09c72730f57667bf1e9b62db4904053f"],[50,"deutsche-telekom","Deutsche Telekom","0xdfdb9b369ef5821e9e6cb9b3329c74c38fe93194"],[50,"horizen-labs","Horizen","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[50,"layerzero-labs","LayerZero Labs","0x6788f52439aca6bff597d3eec2dc9a44b8fee842"],[50,"nethermind","Nethermind","0x1294e3347ec64fd63e1d0594dc1294247cd237c7"],[12739,"horizen-labs","Horizen","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[12739,"layerzero-labs","LayerZero Labs","0x6788f52439aca6bff597d3eec2dc9a44b8fee842"],[12739,"nethermind","Nethermind","0x047d9dbe4fc6b5c916f37237f547f9f42809935a"],[999,"bitgo","BitGo","0xf55e9daef79eec17f76e800f059495f198ef8348"],[999,"canary","Canary","0x83342ec538df0460e730a8f543fe63063e2d44c4"],[999,"deutsche-telekom","Deutsche Telekom","0x32ffd21260172518a8844fec76a88c8f239c384b"],[999,"frax","Frax","0x082a08f524c043ec7f6b9a42bae79a1990d8499a"],[999,"horizen-labs","Horizen","0xbb83ecf372cbb6daa629ea9a9a53bec6d601f229"],[999,"horizen-labs","Horizen (lzRead)","0xd88d5c7b1779b54c9228ce00560913fb99c32acb"],[999,"layerzero-labs","LayerZero Labs","0xc097ab8cd7b053326dfe9fb3e3a31a0cce3b526f"],[999,"layerzero-labs","LayerZero Labs (lzRead)","0x7ffd4989882a006ac51f324b4889b3087d71b716"],[999,"luganodes","Luganodes","0x9e451905f65ef78d62b93dac3513486da8429d0a"],[999,"mim","MIM","0x32b29d6b6cd4a851548a6e888cc25e39e8a16d86"],[999,"nansen","Nansen","0xcfe987ebff7612b53d145dd70ee24d00e12d6a1f"],[999,"nethermind","Nethermind","0x8e49ef1dfae17e547ca0e7526ffda81fbaca810a"],[999,"nethermind","Nethermind (lzRead)","0xffe7244216f46401f541125bc8349bbbeb666027"],[999,"omni-x","Omni X","0x3e3a9bc9149ddf1d3a3ea51c0a49eb9fe6347043"],[999,"p2p","P2P","0xc7423626016bc40375458bc0277f28681ec91c8e"],[999,"usdt0","USDT0","0xae016a939935d6fe6185900d4c7c7c9b27366cac"],[6900,"horizen-labs","Horizen","0xf0809f6e760a5452ee567975eda7a28da4a83d38"],[6900,"layerzero-labs","LayerZero Labs","0x5727e81a40015961145330d91cc27b5e189ff3e1"],[6900,"mim","MIM","0x53fa9f0bd34f3f0e80580d1c93168f56c9555ca4"],[6900,"nethermind","Nethermind","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[98866,"canary","Canary","0x395b14700812cccc38b8e64f0a06ce2045fe9ba3"],[98866,"frax","Frax","0x1e4ce74ccf5498b19900649d9196e64bab592451"],[98866,"horizen-labs","Horizen","0x5e0744f8fbf26446c683bcf4cd405ad56ba76f8a"],[98866,"layerzero-labs","LayerZero Labs","0x4208d6e27538189bb48e603d6123a94b8abe0a0b"],[98866,"layerzero-labs","LayerZero Labs (lzRead)","0xaf75bfd402f3d4ee84978179a6c87d16c4bd1724"],[98866,"nethermind","Nethermind","0x882a1ee8891c7d22310dedf032ef9653785532b8"],[98866,"nethermind","Nethermind (lzRead)","0xcbfb74e751052404dcdab09494e5a502f9be0438"],[98866,"predicate","Predicate","0xd7bb44516b476ca805fb9d6fc5b508ef3ee9448d"],[43419,"canary","Canary","0x0d7cb4033e0c193f65b3639e61b6986a29bf1dd4"],[43419,"horizen-labs","Horizen","0xfc977a4e88157b697417ade965cef0a2dfa39c70"],[43419,"layerzero-labs","LayerZero Labs","0x6788f52439aca6bff597d3eec2dc9a44b8fee842"],[43419,"nethermind","Nethermind","0x70bf42c69173d6e33b834f59630dac592c70b369"],[69000,"layerzero-labs","LayerZero Labs","0x282b3386571f7f794450d5789911a9804fa346b4"],[69000,"nethermind","Nethermind","0x9e0e95ede70f680f74480b510ff9f45c70e3da80"],[232,"horizen-labs","Horizen","0x27bb790440376db53c840326263801fafd9f0ee6"],[232,"layerzero-labs","LayerZero Labs","0x07fd0e370b49919ca8da0ce842b8177263c0e12c"],[232,"nethermind","Nethermind","0x62aa89bad332788021f6f4f4fb196d5fe59c27a6"],[964,"canary","Canary","0xc71a3d16f00d93c78ab89aaedde7c0012a3b26cb"],[964,"deutsche-telekom","Deutsche Telekom","0x58dff8622759ea75910a08dba5d060579271dcd7"],[964,"horizen-labs","Horizen","0xb3d5fd1f98510e90bd59bd702ed362622672b97f"],[964,"layerzero-labs","LayerZero Labs","0x282b3386571f7f794450d5789911a9804fa346b4"],[964,"nethermind","Nethermind","0x8d77d35604a9f37f488e41d1d916b2a0088f82dd"],[964,"p2p","P2P","0x6c5f923b63fdd52fb9c45daefa8695fa6b55a935"],[747474,"canary","Canary","0x53ff818a1c492e667e2cd0b5afe0fc82c66d33c7"],[747474,"deutsche-telekom","Deutsche Telekom","0x7cc59b5062a8291804a21a2a793c6ce9ea2f0eb9"],[747474,"frax","Frax","0x5fa12ebc08e183c1f5d44678cf897edefe68738b"],[747474,"horizen-labs","Horizen","0x84a410a8a912e333b957680998a76e526f98e207"],[747474,"layerzero-labs","LayerZero Labs","0x282b3386571f7f794450d5789911a9804fa346b4"],[747474,"nethermind","Nethermind","0xacde1f22eeab249d3ca6ba8805c8fee9f52a16e7"],[3637,"canary","Canary","0xbcefdadb8d24b1d36c26b522235012cd4cf162f6"],[3637,"deutsche-telekom","Deutsche Telekom","0x7a3d18e2324536294cd6f054cdde7c994f40391a"],[3637,"frax","Frax","0xf835af1dcea24c255149e0ad7c9ff1a5e8611fa2"],[3637,"horizen-labs","Horizen","0x713d826aaa1f974c1dc0472fc71219e93c3b1614"],[3637,"layerzero-labs","LayerZero Labs","0x282b3386571f7f794450d5789911a9804fa346b4"],[3637,"nethermind","Nethermind","0xa4281c1c88f0278ff696edeb517052153190fc9e"],[239,"canary","Canary","0x07ff86c392588254ad10f0811dbbcad45f4c7d87"],[239,"deutsche-telekom","Deutsche Telekom","0xacde1f22eeab249d3ca6ba8805c8fee9f52a16e7"],[239,"horizen-labs","Horizen","0xb19a9370d404308040a9760678c8ca28affbbb76"],[239,"layerzero-labs","LayerZero Labs","0x282b3386571f7f794450d5789911a9804fa346b4"],[239,"luganodes","Luganodes","0x58249a2ec05c1978bf21df1f5ec1847e42455cf4"],[239,"nethermind","Nethermind","0x97841d4ab18e9a923322a002d5b8eb42b31ccdb5"],[239,"p2p","P2P","0x965a80dc87cec5848310e612dead84b543aef874"],[null,"bharvest","B-Harvest","0x4a9cb9e7910bb17cce04f0416ef41d3828d4a9598deb4da0fc7edb86a3976fbe"],[null,"bitgo","BitGo","0x825963b9f56614be069e5bd28e720b9ec00b06dc995cb3ab53708dbb62912367"],[null,"deutsche-telekom","Deutsche Telekom","0x6d593b3f473eafc58ad01d21de6bd4673535f83cceda8a4287cb187eafaac464"],[null,"horizen-labs","Horizen","0x92128a5edf4a0f696464de66d00986ef41b37faf705ceb3d9d9a4e5c306fbf91"],[null,"layerzero-labs","LayerZero Labs","0x52aa129049de845353484868d1be6e2df6878b0ed2213d94d3c827309aeae685"],[null,"luganodes","Luganodes","0xb5c7e0ad19f3aa1fe60bdc2af6d39af3de088f06bdccb35ecfd7d9465579cb55"],[null,"mysten-labs","Mysten Labs","0x3efa9a92de7f4575fa04fb841aeb566f7c437d13515796d2842376e97ce82cba"],[null,"nethermind","Nethermind","0x0c12321ebe562b8fb8a74e6d29f144ea199a8f31a4cea3a417ce72477f6dfebb"],[2355,"layerzero-labs","LayerZero Labs","0x282b3386571f7f794450d5789911a9804fa346b4"],[2355,"nethermind","Nethermind","0x31f748a368a893bdb5abb67ec95f232507601a73"],[5031,"bitgo","BitGo","0xdd9b12623ec1c7e744819708b9217b309fde4080"],[5031,"horizen-labs","Horizen","0x5fddd320a1e29bb466fa635661b125d51d976f92"],[5031,"layerzero-labs","LayerZero Labs","0x282b3386571f7f794450d5789911a9804fa346b4"],[5031,"luganodes","Luganodes","0x5488a4ca201421cf100dc1b90d1de5b26b421f64"],[5031,"nethermind","Nethermind","0x5fa12ebc08e183c1f5d44678cf897edefe68738b"],[5031,"p2p","P2P","0xe57af13d6676f7a37d37ab603aaea6d63b1dee8e"],[6985385,"canary","Canary","0x97841d4ab18e9a923322a002d5b8eb42b31ccdb5"],[6985385,"layerzero-labs","LayerZero Labs","0x7cacbe439ead55fa1c22790330b12835c6884a91"],[9745,"canary","Canary","0x2465ee263149a18d61c9224244c61a5871dc0473"],[9745,"deutsche-telekom","Deutsche Telekom","0xf81da1b0f3ac725503ad0c2c229d1edc57204787"],[9745,"frax","Frax","0x0a5a808dc5f9280b26ebe11b356d200e34a48517"],[9745,"horizen-labs","Horizen","0xd4ce45957fbcb88b868ad2c759c7db9bc2741e56"],[9745,"layerzero-labs","LayerZero Labs","0x282b3386571f7f794450d5789911a9804fa346b4"],[9745,"layerzero-labs","LayerZero Labs (lzRead)","0xe5bffd46776251b70895517d4ab635a640da61e9"],[9745,"nethermind","Nethermind","0xa51ce237fafa3052d5d3308df38a024724bb1274"],[9745,"nethermind","Nethermind (lzRead)","0x193204535913df3a3b350fcd2e1c97d047abb409"],[9745,"p2p","P2P","0xfd429433af17c5c75e4c8bc84b8f6dcd1b2c051a"],[9745,"usdt0","USDT0","0xdcdd4628f858b45260c31d6ad076bd2c3d3c2f73"],[9069,"layerzero-labs","LayerZero Labs","0x282b3386571f7f794450d5789911a9804fa346b4"],[9069,"nethermind","Nethermind","0x70bf42c69173d6e33b834f59630dac592c70b369"],[1408,"horizen-labs","Horizen","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[1408,"layerzero-labs","LayerZero Labs","0x282b3386571f7f794450d5789911a9804fa346b4"],[1408,"nethermind","Nethermind","0x38179d3bfa6ef1d69a8a7b0b671ba3d8836b2ae8"],[16661,"canary","Canary","0x183940c4855a01da92bc2f96f7e0a8aecbf797ff"],[16661,"deutsche-telekom","Deutsche Telekom","0x2ef2097f8c2467a0e274c9022142dc91aae457a8"],[16661,"layerzero-labs","LayerZero Labs","0x6788f52439aca6bff597d3eec2dc9a44b8fee842"],[16661,"luganodes","Luganodes","0xe6655528dbb0f7d1407264aa878a5b5363b8752c"],[16661,"nethermind","Nethermind","0x95729ea44326f8add8a9b1d987279dbdc1dd3dff"],[10088,"horizen-labs","Horizen","0xdd7b5e1db4aafd5c8ec3b764efb8ed265aa5445b"],[10088,"layerzero-labs","LayerZero Labs","0x6788f52439aca6bff597d3eec2dc9a44b8fee842"],[143,"bitgo","BitGo","0xdd107f9b5209670840f9cd58e241f460651c16c4"],[143,"canary","Canary","0x493626c5d852b9b187a9eb709d0b0978a3877238"],[143,"deutsche-telekom","Deutsche Telekom","0x2c7185f5b0976397d9eb5c19d639d4005e6708f0"],[143,"frax","Frax","0x5ec52fb644072247c3264f0ac3db981cdebe3eca"],[143,"horizen-labs","Horizen","0xdcdd4628f858b45260c31d6ad076bd2c3d3c2f73"],[143,"layerzero-labs","LayerZero Labs","0x282b3386571f7f794450d5789911a9804fa346b4"],[143,"nethermind","Nethermind","0xacde1f22eeab249d3ca6ba8805c8fee9f52a16e7"],[143,"usdt0","USDT0","0x2dcbd79f38d6871232422db88ec29e8d97135ac7"],[1380270412,"canary","Canary","0x56053a8f4db677e5774f8ee5bdd9d2dc270075f3"],[1380270412,"horizen-labs","Horizen","0x2afa3787cd95fee5d5753cd717ef228eb259f4ea"],[1380270412,"layerzero-labs","LayerZero Labs","0x282b3386571f7f794450d5789911a9804fa346b4"],[1380270412,"nethermind","Nethermind","0x6d4fc4bd9f9c29086e2aa67d4c81f32d2e0f285c"],[1612,"horizen-labs","Horizen","0xcee801c12814a7c5b8d792098f624fb3d7ad8651"],[1612,"layerzero-labs","LayerZero Labs","0x9c061c9a4782294eef65ef28cb88233a987f4bdd"],[1612,"nethermind","Nethermind","0x97841d4ab18e9a923322a002d5b8eb42b31ccdb5"],[7208,"horizen-labs","Horizen","0xa83c79e69117eefb888592a23bc02cb6029ada3a"],[7208,"layerzero-labs","LayerZero Labs","0x282b3386571f7f794450d5789911a9804fa346b4"],[7208,"nansen","Nansen","0xf007f1fef50c0acaf4418741454bcaeaecb96b87"],[7208,"nethermind","Nethermind","0x8d77d35604a9f37f488e41d1d916b2a0088f82dd"],[988,"canary","Canary","0x8d6cc20d84fbeb5733c60436ceb8957da2ac02c8"],[988,"deutsche-telekom","Deutsche Telekom","0xed1390548adfe890c48c7aaead2bc9336d7f6a58"],[988,"frax","Frax","0x45a7305c65aad28384f20a80f87a5183772e4f70"],[988,"horizen-labs","Horizen","0x965a80dc87cec5848310e612dead84b543aef874"],[988,"layerzero-labs","LayerZero Labs","0x9c061c9a4782294eef65ef28cb88233a987f4bdd"],[988,"nethermind","Nethermind","0x9bcd17a654bffaa6f8fea38d19661a7210e22196"],[988,"p2p","P2P","0x02152f4624596602dcbb8b8ead2988ad44edc865"],[988,"usdt0","USDT0","0x8d77d35604a9f37f488e41d1d916b2a0088f82dd"],[26514,"layerzero-labs","LayerZero Labs","0x282b3386571f7f794450d5789911a9804fa346b4"],[151,"layerzero-labs","LayerZero Labs","0x282b3386571f7f794450d5789911a9804fa346b4"],[4114,"layerzero-labs","LayerZero Labs","0x6788f52439aca6bff597d3eec2dc9a44b8fee842"],[5464,"layerzero-labs","LayerZero Labs","0xcccdd23e11f3f47c37fc0a7c3be505901912c6cc"],[728126428,"brale","Brale","0x61c6487a06d8e1994d4053b2b274204aba4b38f1"],[728126428,"deutsche-telekom","Deutsche Telekom","0xd7131c377da0b87a5f69197461570cf61ccf3912"],[728126428,"frax","Frax","0xd3b10cdc51157ed54f74796659b9aaf324973900"],[728126428,"horizen-labs","Horizen","0xfee824cc7ced4f2ba7a0e72e5cfe20fd2197cd53"],[728126428,"layerzero-labs","LayerZero Labs","0x8bc1d368036ee5e726d230beb685294be191a24e"],[728126428,"nansen","Nansen","0xaca0e85588ae161b15e953eeab105c1b73c60f54"],[728126428,"nethermind","Nethermind","0xfd952ea14b87fb18d4a1119be0be45064e448f45"],[728126428,"stakingcabin","StakingCabin","0x73763eb00879c9f7ee111ab8fabafb40e78ed4b8"],[728126428,"usdt0","USDT0","0xe13b0667fce48d12773ead95d87dc9d1c58544df"],[null,"horizen-labs","Horizen","0xcefb342d62280f06a3d5673abe82f49675b6cd5c86211b2adc0c93e56fa388f5"],[null,"layerzero-labs","LayerZero Labs","0xa560697328ccb5dc3f3f8e8a2c41e282827060da7a29971d933e9aa405c2ba7f"],[null,"luganodes","Luganodes","0x02f42267433102ff09d5111fbedd375204bda05e6afe19e38e137fa97fc7dbfd"],[null,"nethermind","Nethermind","0x50e159c13f1222f7eea85c718f67b20146ef2485f844b23ffa15719adc97080a"],[null,"usdt0","USDT0","0x1f4fa24418593ee8087cb62203c7405e7cb7234edc42494aeface57c1f42eeac"]]]');
  const DVN_ABI = {
    getFee: {
      "inputs": [{
        "internalType": "uint32",
        "name": "_dstEid",
        "type": "uint32"
      }, {
        "internalType": "uint64",
        "name": "_confirmations",
        "type": "uint64"
      }, {
        "internalType": "address",
        "name": "_sender",
        "type": "address"
      }, {
        "internalType": "bytes",
        "name": "_options",
        "type": "bytes"
      }],
      "name": "getFee",
      "outputs": [{
        "internalType": "uint256",
        "name": "fee",
        "type": "uint256"
      }],
      "stateMutability": "view",
      "type": "function"
    },
    dstConfig: {
      "inputs": [{
        "internalType": "uint32",
        "name": "_dstEid",
        "type": "uint32"
      }],
      "name": "dstConfig",
      "outputs": [{
        "components": [{
          "internalType": "uint64",
          "name": "gas",
          "type": "uint64"
        }, {
          "internalType": "uint16",
          "name": "multiplierBps",
          "type": "uint16"
        }, {
          "internalType": "uint128",
          "name": "floorMarginUSD",
          "type": "uint128"
        }],
        "internalType": "struct IDVN.DstConfig",
        "name": "",
        "type": "tuple"
      }],
      "stateMutability": "view",
      "type": "function"
    }
  };
  const FALLBACK_RPCS = {
    1: 'https://rpc.ankr.com/eth',
    56: 'https://rpc.ankr.com/bsc',
    137: 'https://rpc.ankr.com/polygon',
    42161: 'https://rpc.ankr.com/arbitrum',
    10: 'https://rpc.ankr.com/optimism',
    8453: 'https://rpc.ankr.com/base',
    43114: 'https://rpc.ankr.com/avalanche',
    250: 'https://rpc.ankr.com/fantom',
    324: 'https://mainnet.era.zksync.io',
    59144: 'https://rpc.linea.build',
    5000: 'https://rpc.mantle.xyz',
    534352: 'https://rpc.ankr.com/scroll',
    81457: 'https://rpc.ankr.com/blast',
    42220: 'https://rpc.ankr.com/celo',
    100: 'https://rpc.ankr.com/gnosis',
    252: 'https://rpc.frax.com',
    1101: 'https://rpc.ankr.com/polygon_zkevm',
    34443: 'https://mainnet.mode.network',
    7777777: 'https://rpc.zora.energy',
    288: 'https://mainnet.boba.network',
    1284: 'https://rpc.ankr.com/moonbeam',
    1285: 'https://rpc.moonriver.moonbeam.network',
    42170: 'https://nova.arbitrum.io/rpc',
    1088: 'https://andromeda.metis.io/?owner=1088',
    167000: 'https://rpc.ankr.com/taiko',
    169: 'https://pacific-rpc.manta.network/http',
    7560: 'https://cyber.alt.technology/',
    1116: 'https://rpc.coredao.org',
    25: 'https://evm.cronos.org',
    122: 'https://rpc.fuse.io',
    592: 'https://evm.astar.network',
    1313161554: 'https://mainnet.aurora.dev',
    4337: 'https://build.onbeam.com/rpc',
    7700: 'https://canto.slingshot.finance',
    1030: 'https://evm.confluxrpc.com',
    666666666: 'https://rpc.degen.tips',
    41923: 'https://rpc.edu-chain.raas.gelato.cloud',
    14: 'https://flare-api.flare.network/ext/C/rpc',
    295: 'https://mainnet.hashio.io/api',
    8822: 'https://json-rpc.evm.iotaledger.net',
    57073: 'https://rpc-gel.inkonchain.com',
    1329: 'https://evm-rpc.sei-apis.com',
    196: 'https://rpc.xlayer.tech',
    7979: 'https://main.doschain.com',
    388: 'https://mainnet.zkevm.cronos.org',
    33139: 'https://rpc.apechain.com/http',
    2741: 'https://api.mainnet.abs.xyz',
    60808: 'https://rpc.gobob.xyz',
    200901: 'https://rpc.bitlayer.org',
    6001: 'https://fullnode-mainnet.bouncebitapi.com',
    53935: 'https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc',
    747: 'https://mainnet.evm.nodes.onflow.org',
    42793: 'https://node.mainnet.etherlink.com',
    1625: 'https://rpc.gravity.xyz',
    19011: 'https://rpc.mainnet.oasys.homeverse.games',
    999: 'https://api.hyperliquid.xyz/evm',
    16661: 'https://evmrpc.0g.ai',
    146: 'https://rpc.soniclabs.com',
    2222: 'https://evm.kava.io',
    1135: 'https://rpc.api.lisk.com',
    2818: 'https://rpc.morphl2.io',
    480: 'https://worldchain-mainnet.g.alchemy.com/public',
    130: 'https://mainnet.unichain.org',
    80094: 'https://rpc.berachain.com',
    1868: 'https://rpc.soneium.org',
    1514: 'https://mainnet.storyrpc.io',
    232: 'https://rpc.lens.xyz',
    40: 'https://mainnet.telos.net/evm',
    204: 'https://opbnb-mainnet-rpc.bnbchain.org',
    148: 'https://json-rpc.evm.shimmer.network',
    82: 'https://rpc.meter.io',
    30: 'https://public-node.rsk.co',
    50: 'https://rpc.xinfin.network',
    8217: 'https://public-en.node.kaia.io',
    1666600000: 'https://api.harmony.one',
    2046399126: 'https://mainnet.skalenodes.com/v1/elated-tan-skat',
    660279: 'https://xai-chain.net/rpc',
    48900: 'https://zircuit1-mainnet.p2pify.com',
    1890: 'https://replicator.phoenix.lightlink.io/rpc/v1',
    957: 'https://rpc.lyra.finance',
    1729: 'https://rpc.reya.network',
    11501: 'https://rpc-mainnet-1.bevm.io',
    43111: 'https://rpc.hemi.network/rpc',
    21000000: 'https://mainnet.corn-rpc.com',
    1923: 'https://swell-mainnet.alt.technology',
    50104: 'https://rpc.sophon.xyz',
    6900: 'https://evm-rpc.nibiru.fi',
    43419: 'https://rpc.gunzchain.io',
    5165: 'https://rpc1.bahamut.io',
    728126428: 'https://api.trongrid.io/jsonrpc'
  };
  const embeddedChains = useMemo(() => {
    const chainMap = {};
    DVN_DATA[0].forEach(([chainId, chainKey, chainDisplayName]) => {
      chainMap[chainId] = {
        chainKey,
        chainDisplayName
      };
    });
    return chainMap;
  }, []);
  const embeddedDvns = useMemo(() => {
    return DVN_DATA[1].map(([chainId, id, dvnDisplayName, dvnAddress]) => {
      const chain = embeddedChains[chainId] || ({});
      return {
        nativeChainId: chainId,
        chainKey: chain.chainKey,
        chainDisplayName: chain.chainDisplayName,
        id,
        dvnDisplayName,
        dvnAddress
      };
    });
  }, [embeddedChains]);
  const isLoadingDVNs = false;
  const dvnDeployments = embeddedDvns;
  const [isDark, setIsDark] = useState(true);
  useEffect(() => {
    if (typeof document !== 'undefined') {
      const checkDark = () => document.documentElement.classList.contains('dark');
      setIsDark(checkDark());
      const observer = new MutationObserver(() => setIsDark(checkDark()));
      observer.observe(document.documentElement, {
        attributes: true,
        attributeFilter: ['class']
      });
      return () => observer.disconnect();
    }
  }, []);
  const [selectedChain, setSelectedChain] = useState(1);
  const [selectedDVN, setSelectedDVN] = useState(null);
  const [isExpanded, setIsExpanded] = useState(false);
  const [isChainDropdownOpen, setIsChainDropdownOpen] = useState(false);
  const [isDVNDropdownOpen, setIsDVNDropdownOpen] = useState(false);
  const [chainSearchTerm, setChainSearchTerm] = useState('');
  const [dvnSearchTerm, setDvnSearchTerm] = useState('');
  const [inputs, setInputs] = useState({});
  const [result, setResult] = useState(null);
  const [loading, setLoading] = useState(false);
  const [error, setError] = useState(null);
  const [ethersLib, setEthersLib] = useState(null);
  const [iconErrors, setIconErrors] = useState({});
  const chainDropdownRef = useRef(null);
  const dvnDropdownRef = useRef(null);
  const functionAbi = DVN_ABI[functionName];
  useEffect(() => {
    if (typeof window === 'undefined') return;
    if (window.ethers) {
      setEthersLib(window.ethers);
      return;
    }
    const existingScript = document.querySelector('script[src*="ethers"]');
    if (existingScript) {
      const checkEthers = setInterval(() => {
        if (window.ethers) {
          setEthersLib(window.ethers);
          clearInterval(checkEthers);
        }
      }, 100);
      return () => clearInterval(checkEthers);
    }
    const script = document.createElement('script');
    script.src = 'https://cdnjs.cloudflare.com/ajax/libs/ethers/5.7.2/ethers.umd.min.js';
    script.async = true;
    script.onload = () => {
      if (window.ethers) {
        setEthersLib(window.ethers);
      }
    };
    script.onerror = () => {
      console.error('Failed to load ethers from CDN');
      setError('Failed to load ethers library');
    };
    document.head.appendChild(script);
    const timeout = setTimeout(() => {
      if (!window.ethers) {
        setError('Ethers library load timeout. Check your internet connection.');
      }
    }, 10000);
    return () => clearTimeout(timeout);
  }, []);
  const availableChains = useMemo(() => {
    const chainMap = new Map();
    dvnDeployments.forEach(dvn => {
      if (dvn.nativeChainId && dvn.chainDisplayName && dvn.chainKey) {
        if (!chainMap.has(dvn.nativeChainId)) {
          chainMap.set(dvn.nativeChainId, {
            chainId: dvn.nativeChainId,
            name: dvn.chainDisplayName,
            chainKey: dvn.chainKey,
            rpc: FALLBACK_RPCS[dvn.nativeChainId] || null
          });
        }
      }
    });
    return Array.from(chainMap.values()).sort((a, b) => a.name.localeCompare(b.name));
  }, [dvnDeployments]);
  const currentChain = useMemo(() => {
    return availableChains.find(c => c.chainId === selectedChain);
  }, [availableChains, selectedChain]);
  useEffect(() => {
    if (availableChains.length > 0 && !currentChain) {
      const eth = availableChains.find(c => c.chainId === 1);
      setSelectedChain(eth ? eth.chainId : availableChains[0].chainId);
    }
  }, [availableChains, currentChain]);
  const availableDVNs = useMemo(() => {
    return dvnDeployments.filter(dvn => dvn.nativeChainId === selectedChain).filter(dvn => dvn.dvnDisplayName.toLowerCase().includes(dvnSearchTerm.toLowerCase())).sort((a, b) => a.dvnDisplayName.localeCompare(b.dvnDisplayName));
  }, [dvnDeployments, selectedChain, dvnSearchTerm]);
  useEffect(() => {
    if (availableDVNs.length > 0) {
      const lzDVN = availableDVNs.find(dvn => dvn.id === 'layerzero-labs');
      setSelectedDVN(lzDVN || availableDVNs[0]);
    } else {
      setSelectedDVN(null);
    }
  }, [availableDVNs, selectedChain]);
  const filteredChains = useMemo(() => {
    if (!chainSearchTerm) return availableChains;
    return availableChains.filter(chain => chain.name.toLowerCase().includes(chainSearchTerm.toLowerCase()));
  }, [availableChains, chainSearchTerm]);
  useEffect(() => {
    function handleClickOutside(event) {
      if (chainDropdownRef.current && !chainDropdownRef.current.contains(event.target)) {
        setIsChainDropdownOpen(false);
        setChainSearchTerm('');
      }
      if (dvnDropdownRef.current && !dvnDropdownRef.current.contains(event.target)) {
        setIsDVNDropdownOpen(false);
        setDvnSearchTerm('');
      }
    }
    document.addEventListener('mousedown', handleClickOutside);
    return () => document.removeEventListener('mousedown', handleClickOutside);
  }, []);
  const NetworkIcon = ({chainKey, size = 20}) => {
    const hasError = iconErrors['network-' + chainKey];
    const iconUrl = hasError ? 'https://icons-ckg.pages.dev/lz-scan/networks/default.svg' : 'https://icons-ckg.pages.dev/lz-scan/networks/' + chainKey + '.svg';
    return <span style={{
      display: 'inline-block',
      width: size,
      height: size,
      flexShrink: 0,
      backgroundImage: 'url(' + iconUrl + ')',
      backgroundSize: 'contain',
      backgroundRepeat: 'no-repeat',
      backgroundPosition: 'center',
      borderRadius: 4
    }} className={isDark ? '' : 'invert brightness-110 contrast-100'} />;
  };
  const DVNIcon = ({dvnKey, size = 20}) => {
    const hasError = iconErrors['dvn-' + dvnKey];
    const iconUrl = hasError ? 'https://icons-ckg.pages.dev/lz-scan/dvns/default.svg' : 'https://icons-ckg.pages.dev/lz-scan/dvns/' + dvnKey + '.svg';
    return <span style={{
      display: 'inline-block',
      width: size,
      height: size,
      flexShrink: 0,
      backgroundImage: 'url(' + iconUrl + ')',
      backgroundSize: 'contain',
      backgroundRepeat: 'no-repeat',
      backgroundPosition: 'center',
      borderRadius: 4
    }} />;
  };
  const getPlaceholderForType = type => {
    if (type.includes('address')) return '0x...';
    if (type.includes('uint32')) return 'e.g. 30101';
    if (type.includes('uint64')) return 'e.g. 15';
    if (type.includes('uint')) return '0';
    if (type.includes('bytes')) return '0x';
    return 'value';
  };
  const handleInputChange = (paramName, value) => {
    setInputs(prev => ({
      ...prev,
      [paramName]: value
    }));
  };
  const executeFunction = async () => {
    if (!ethersLib) {
      setError('Ethers library not loaded yet. Please wait...');
      return;
    }
    if (!selectedDVN) {
      setError('Please select a DVN');
      return;
    }
    if (!functionAbi) {
      setError('Function ABI not found for: ' + functionName);
      return;
    }
    if (!currentChain) {
      setError('Please select a chain');
      return;
    }
    if (!currentChain.rpc) {
      setError('No RPC available for ' + currentChain.name + '. This chain cannot be queried.');
      return;
    }
    setLoading(true);
    setError(null);
    setResult(null);
    try {
      const provider = new ethersLib.providers.JsonRpcProvider(currentChain.rpc);
      const contract = new ethersLib.Contract(selectedDVN.dvnAddress, [functionAbi], provider);
      const args = functionAbi.inputs.map(input => {
        const value = inputs[input.name];
        if (!value || value === '') {
          if (input.type === 'address') return ethersLib.constants.AddressZero;
          if (input.type === 'bytes') return '0x';
          if (input.type.includes('uint') || input.type.includes('int')) return '0';
          return value;
        }
        return value;
      });
      const txResult = await contract[functionName](...args);
      if (functionName === 'getFee') {
        const formatted = {
          fee: ethersLib.utils.formatEther(txResult) + ' ETH',
          feeWei: txResult.toString()
        };
        setResult({
          type: 'read',
          formatted
        });
      } else if (functionName === 'dstConfig') {
        const formatted = {
          gas: txResult[0].toString(),
          multiplierBps: txResult[1].toString() + ' (' + (parseInt(txResult[1].toString()) / 100).toFixed(2) + '%)',
          floorMarginUSD: '$' + (parseInt(txResult[2].toString()) / 1e18).toFixed(6)
        };
        setResult({
          type: 'read',
          formatted
        });
      } else {
        setResult({
          type: 'read',
          formatted: txResult
        });
      }
    } catch (err) {
      console.error('Function execution error:', err);
      setError(err.reason || err.message || 'Transaction failed');
    } finally {
      setLoading(false);
    }
  };
  const getReturnTypes = () => {
    if (functionName === 'dstConfig') {
      return 'gas: uint64\nmultiplierBps: uint16\nfloorMarginUSD: uint128';
    }
    if (functionName === 'getFee') {
      return 'fee: uint256';
    }
    return null;
  };
  return <div className="rounded-xl border overflow-hidden mb-4" style={{
    borderColor: isDark ? '#3f3f46' : '#e4e4e7',
    backgroundColor: isDark ? '#18181b' : '#ffffff'
  }}>
      {}
      <div className="flex items-center justify-between p-3 cursor-pointer transition-colors" style={{
    backgroundColor: isDark ? '#27272a' : '#f4f4f5'
  }} onClick={() => setIsExpanded(!isExpanded)}>
        <div className="flex items-center gap-3 flex-1 min-w-0">
          <span className="px-2 py-1 rounded text-xs font-semibold" style={{
    backgroundColor: '#6366f1',
    color: '#ffffff'
  }}>
            CALL
          </span>
          <div className="font-mono text-sm truncate" style={{
    color: isDark ? '#e4e4e7' : '#27272a'
  }}>
            <span style={{
    color: isDark ? '#60a5fa' : '#2563eb'
  }}>{functionName}</span>
            <span style={{
    color: isDark ? '#a1a1aa' : '#71717a'
  }}>(</span>
            {functionAbi?.inputs?.map((input, index) => <span key={index}>
                {index > 0 && <span style={{
    color: isDark ? '#a1a1aa' : '#71717a'
  }}>, </span>}
                <span style={{
    color: isDark ? '#a1a1aa' : '#71717a'
  }}>{input.name}: </span>
                <span style={{
    color: isDark ? '#4ade80' : '#16a34a'
  }}>{input.type}</span>
              </span>)}
            <span style={{
    color: isDark ? '#a1a1aa' : '#71717a'
  }}>)</span>
          </div>
        </div>
        <svg width="20" height="20" viewBox="0 0 24 24" fill="none" style={{
    color: isDark ? '#71717a' : '#a1a1aa',
    transform: isExpanded ? 'rotate(180deg)' : 'rotate(0deg)',
    transition: 'transform 0.2s'
  }}>
          <path d="M6 9L12 15L18 9" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
        </svg>
      </div>

      {}
      {isExpanded && <div className="p-4 space-y-4" style={{
    backgroundColor: isDark ? '#18181b' : '#ffffff'
  }}>
          {}
          {description && <div className="text-sm" style={{
    color: isDark ? '#a1a1aa' : '#71717a'
  }}>
              {description}
            </div>}

          {}
          {isLoadingDVNs && <div className="text-sm text-center py-4" style={{
    color: isDark ? '#a1a1aa' : '#71717a'
  }}>
              Loading DVN data...
            </div>}

          {}
          {!isLoadingDVNs && <>
          <div>
            <label className={'block text-xs font-semibold uppercase tracking-wide mb-2 ' + (isDark ? 'text-zinc-500' : 'text-zinc-400')}>
              CHAIN
            </label>
            <div className="relative" ref={chainDropdownRef}>
              <div className="flex items-center justify-between p-3 rounded-lg cursor-pointer border" style={{
    backgroundColor: isDark ? '#27272a' : '#f4f4f5',
    borderColor: isDark ? '#3f3f46' : '#d4d4d8'
  }} onClick={() => setIsChainDropdownOpen(!isChainDropdownOpen)}>
                <div className="flex items-center gap-2">
                  {currentChain && <NetworkIcon chainKey={currentChain.chainKey} size={20} />}
                  <span style={{
    color: isDark ? '#e4e4e7' : '#27272a'
  }}>
                    {currentChain?.name || 'Select Chain'}
                  </span>
                </div>
                <svg width="10" height="6" viewBox="0 0 10 6" fill="none" style={{
    color: isDark ? '#71717a' : '#a1a1aa'
  }}>
                  <path d="M1 1L5 5L9 1" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" />
                </svg>
              </div>

              {isChainDropdownOpen && <div className="absolute z-50 w-full mt-1 rounded-lg border shadow-lg" style={{
    backgroundColor: isDark ? '#27272a' : '#ffffff',
    borderColor: isDark ? '#3f3f46' : '#d4d4d8'
  }}>
                  <input type="text" placeholder="Search chains..." value={chainSearchTerm} onChange={e => setChainSearchTerm(e.target.value)} onClick={e => e.stopPropagation()} className="w-full p-2 text-sm border-b outline-none" style={{
    backgroundColor: isDark ? '#27272a' : '#ffffff',
    borderColor: isDark ? '#3f3f46' : '#d4d4d8',
    color: isDark ? '#e4e4e7' : '#27272a'
  }} />
                  <div style={{
    maxHeight: '240px',
    overflowY: 'auto',
    backgroundColor: isDark ? '#27272a' : '#ffffff'
  }}>
                    {filteredChains.map(chain => <div key={chain.chainId} className="flex items-center gap-2 p-2 cursor-pointer transition-colors" style={{
    backgroundColor: chain.chainId === selectedChain ? isDark ? '#3f3f46' : '#e4e4e7' : 'transparent'
  }} onClick={() => {
    setSelectedChain(chain.chainId);
    setIsChainDropdownOpen(false);
    setChainSearchTerm('');
  }} onMouseEnter={e => {
    if (chain.chainId !== selectedChain) {
      e.currentTarget.style.backgroundColor = isDark ? '#3f3f46' : '#f4f4f5';
    }
  }} onMouseLeave={e => {
    if (chain.chainId !== selectedChain) {
      e.currentTarget.style.backgroundColor = 'transparent';
    }
  }}>
                        <NetworkIcon chainKey={chain.chainKey} size={20} />
                        <span style={{
    color: isDark ? '#e4e4e7' : '#27272a'
  }}>{chain.name}</span>
                      </div>)}
                  </div>
                </div>}
            </div>
          </div>

          {}
          <div>
            <label className={'block text-xs font-semibold uppercase tracking-wide mb-2 ' + (isDark ? 'text-zinc-500' : 'text-zinc-400')}>
              DVN
            </label>
            <div className="relative" ref={dvnDropdownRef}>
              <div className="flex items-center justify-between p-3 rounded-lg cursor-pointer border" style={{
    backgroundColor: isDark ? '#27272a' : '#f4f4f5',
    borderColor: isDark ? '#3f3f46' : '#d4d4d8'
  }} onClick={() => setIsDVNDropdownOpen(!isDVNDropdownOpen)}>
                <div className="flex items-center gap-2">
                  {selectedDVN && <DVNIcon dvnKey={selectedDVN.id} size={20} />}
                  <span style={{
    color: isDark ? '#e4e4e7' : '#27272a'
  }}>
                    {selectedDVN?.dvnDisplayName || 'Select DVN'}
                  </span>
                </div>
                <svg width="10" height="6" viewBox="0 0 10 6" fill="none" style={{
    color: isDark ? '#71717a' : '#a1a1aa'
  }}>
                  <path d="M1 1L5 5L9 1" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" />
                </svg>
              </div>

              {isDVNDropdownOpen && availableDVNs.length > 0 && <div className="absolute z-50 w-full mt-1 rounded-lg border shadow-lg" style={{
    backgroundColor: isDark ? '#27272a' : '#ffffff',
    borderColor: isDark ? '#3f3f46' : '#d4d4d8'
  }}>
                  <input type="text" placeholder="Search DVNs..." value={dvnSearchTerm} onChange={e => setDvnSearchTerm(e.target.value)} onClick={e => e.stopPropagation()} className="w-full p-2 text-sm border-b outline-none" style={{
    backgroundColor: isDark ? '#27272a' : '#ffffff',
    borderColor: isDark ? '#3f3f46' : '#d4d4d8',
    color: isDark ? '#e4e4e7' : '#27272a'
  }} />
                  <div style={{
    maxHeight: '240px',
    overflowY: 'auto',
    backgroundColor: isDark ? '#27272a' : '#ffffff'
  }}>
                    {availableDVNs.map(dvn => <div key={dvn.id + '-' + dvn.dvnAddress} className="flex items-center gap-2 p-2 cursor-pointer transition-colors" style={{
    backgroundColor: selectedDVN?.dvnAddress === dvn.dvnAddress ? isDark ? '#3f3f46' : '#e4e4e7' : 'transparent'
  }} onClick={() => {
    setSelectedDVN(dvn);
    setIsDVNDropdownOpen(false);
    setDvnSearchTerm('');
  }} onMouseEnter={e => {
    if (selectedDVN?.dvnAddress !== dvn.dvnAddress) {
      e.currentTarget.style.backgroundColor = isDark ? '#3f3f46' : '#f4f4f5';
    }
  }} onMouseLeave={e => {
    if (selectedDVN?.dvnAddress !== dvn.dvnAddress) {
      e.currentTarget.style.backgroundColor = 'transparent';
    }
  }}>
                        <DVNIcon dvnKey={dvn.id} size={20} />
                        <span style={{
    color: isDark ? '#e4e4e7' : '#27272a'
  }}>{dvn.dvnDisplayName}</span>
                      </div>)}
                  </div>
                </div>}
            </div>
          </div>

          {}
          {selectedDVN && <div>
              <label className={'block text-xs font-semibold uppercase tracking-wide mb-2 ' + (isDark ? 'text-zinc-500' : 'text-zinc-400')}>
                CONTRACT
              </label>
              <div className="p-3 rounded-lg font-mono text-sm break-all" style={{
    backgroundColor: isDark ? '#27272a' : '#f4f4f5',
    color: isDark ? '#a1a1aa' : '#71717a'
  }}>
                {selectedDVN.dvnAddress}
              </div>
            </div>}

          {}
          {selectedDVN && functionAbi?.inputs?.length > 0 && <div>
              <div className={'text-xs font-semibold uppercase tracking-wide mb-2 ' + (isDark ? 'text-zinc-500' : 'text-zinc-400')}>
                PARAMETERS
              </div>
              <div className="space-y-3">
                {functionAbi.inputs.map((input, index) => <div key={index}>
                    <label className="block text-sm mb-1" style={{
    color: isDark ? '#e4e4e7' : '#27272a'
  }}>
                      {input.name}
                      <span className="ml-1" style={{
    color: isDark ? '#71717a' : '#a1a1aa'
  }}>({input.type})</span>
                    </label>
                    <input type="text" placeholder={getPlaceholderForType(input.type)} value={inputs[input.name] || ''} onChange={e => handleInputChange(input.name, e.target.value)} className="w-full p-2 rounded-lg border text-sm outline-none focus:ring-2 focus:ring-blue-500" style={{
    backgroundColor: isDark ? '#27272a' : '#ffffff',
    borderColor: isDark ? '#3f3f46' : '#d4d4d8',
    color: isDark ? '#e4e4e7' : '#27272a'
  }} />
                  </div>)}
              </div>
            </div>}

          {}
          {selectedDVN && getReturnTypes() && <div>
              <div className={'text-xs font-semibold uppercase tracking-wide mb-2 ' + (isDark ? 'text-zinc-500' : 'text-zinc-400')}>
                RETURNS
              </div>
              <pre className="p-3 rounded-lg text-sm font-mono overflow-x-auto" style={{
    backgroundColor: isDark ? '#27272a' : '#f4f4f5',
    color: isDark ? '#a1a1aa' : '#71717a'
  }}>
                {getReturnTypes()}
              </pre>
            </div>}

          {}
          {selectedDVN && <button onClick={executeFunction} disabled={loading || !selectedDVN || !ethersLib} className="w-full py-2 px-4 rounded-lg font-semibold text-white transition-colors disabled:opacity-50" style={{
    backgroundColor: '#6cadf5'
  }}>
              {loading ? 'Processing...' : !ethersLib ? 'Loading...' : 'Send Request'}
            </button>}

          {}
          {error && <div className="p-3 rounded-lg text-sm" style={{
    backgroundColor: isDark ? '#7f1d1d' : '#fef2f2',
    color: isDark ? '#fca5a5' : '#dc2626'
  }}>
              {error}
            </div>}

          {}
          {result && <div>
              <div className={'text-xs font-semibold uppercase tracking-wide mb-2 ' + (isDark ? 'text-zinc-500' : 'text-zinc-400')}>
                RESPONSE
              </div>
              <pre className="p-3 rounded-lg text-sm font-mono overflow-x-auto" style={{
    backgroundColor: isDark ? '#27272a' : '#f4f4f5',
    color: isDark ? '#4ade80' : '#16a34a'
  }}>
                {JSON.stringify(result.formatted, null, 2)}
              </pre>
            </div>}
          </>}
        </div>}
    </div>;
};

export const ContractInterface = ({contractName, interfaceType, interfaceName, abi: abiProp, description = null}) => {
  const {useState, useMemo, useEffect} = React;
  const [isDark, setIsDark] = useState(true);
  useEffect(() => {
    if (typeof window === 'undefined') return;
    const checkTheme = () => setIsDark(document.documentElement.classList.contains('dark'));
    checkTheme();
    const observer = new MutationObserver(checkTheme);
    observer.observe(document.documentElement, {
      attributes: true,
      attributeFilter: ['class']
    });
    return () => observer.disconnect();
  }, []);
  const EMBEDDED_ABIS = {
    EndpointV2: [{
      "anonymous": false,
      "inputs": [{
        "indexed": false,
        "internalType": "address",
        "name": "from",
        "type": "address"
      }, {
        "indexed": false,
        "internalType": "address",
        "name": "to",
        "type": "address"
      }, {
        "indexed": false,
        "internalType": "bytes32",
        "name": "guid",
        "type": "bytes32"
      }, {
        "indexed": false,
        "internalType": "uint16",
        "name": "index",
        "type": "uint16"
      }],
      "name": "ComposeDelivered",
      "type": "event"
    }, {
      "anonymous": false,
      "inputs": [{
        "indexed": false,
        "internalType": "address",
        "name": "from",
        "type": "address"
      }, {
        "indexed": false,
        "internalType": "address",
        "name": "to",
        "type": "address"
      }, {
        "indexed": false,
        "internalType": "bytes32",
        "name": "guid",
        "type": "bytes32"
      }, {
        "indexed": false,
        "internalType": "uint16",
        "name": "index",
        "type": "uint16"
      }, {
        "indexed": false,
        "internalType": "bytes",
        "name": "message",
        "type": "bytes"
      }],
      "name": "ComposeSent",
      "type": "event"
    }, {
      "anonymous": false,
      "inputs": [{
        "indexed": false,
        "internalType": "uint32",
        "name": "eid",
        "type": "uint32"
      }, {
        "indexed": false,
        "internalType": "address",
        "name": "newLib",
        "type": "address"
      }],
      "name": "DefaultReceiveLibrarySet",
      "type": "event"
    }, {
      "anonymous": false,
      "inputs": [{
        "indexed": false,
        "internalType": "uint32",
        "name": "eid",
        "type": "uint32"
      }, {
        "indexed": false,
        "internalType": "address",
        "name": "oldLib",
        "type": "address"
      }, {
        "indexed": false,
        "internalType": "uint256",
        "name": "expiry",
        "type": "uint256"
      }],
      "name": "DefaultReceiveLibraryTimeoutSet",
      "type": "event"
    }, {
      "anonymous": false,
      "inputs": [{
        "indexed": false,
        "internalType": "uint32",
        "name": "eid",
        "type": "uint32"
      }, {
        "indexed": false,
        "internalType": "address",
        "name": "newLib",
        "type": "address"
      }],
      "name": "DefaultSendLibrarySet",
      "type": "event"
    }, {
      "anonymous": false,
      "inputs": [{
        "indexed": false,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      }, {
        "indexed": false,
        "internalType": "address",
        "name": "delegate",
        "type": "address"
      }],
      "name": "DelegateSet",
      "type": "event"
    }, {
      "anonymous": false,
      "inputs": [{
        "indexed": false,
        "internalType": "uint32",
        "name": "srcEid",
        "type": "uint32"
      }, {
        "indexed": false,
        "internalType": "bytes32",
        "name": "sender",
        "type": "bytes32"
      }, {
        "indexed": false,
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      }, {
        "indexed": false,
        "internalType": "uint64",
        "name": "nonce",
        "type": "uint64"
      }],
      "name": "InboundNonceSkipped",
      "type": "event"
    }, {
      "anonymous": false,
      "inputs": [{
        "indexed": false,
        "internalType": "address",
        "name": "newLib",
        "type": "address"
      }],
      "name": "LibraryRegistered",
      "type": "event"
    }, {
      "anonymous": false,
      "inputs": [{
        "indexed": true,
        "internalType": "address",
        "name": "executor",
        "type": "address"
      }, {
        "indexed": true,
        "internalType": "address",
        "name": "from",
        "type": "address"
      }, {
        "indexed": false,
        "internalType": "address",
        "name": "to",
        "type": "address"
      }, {
        "indexed": false,
        "internalType": "bytes32",
        "name": "guid",
        "type": "bytes32"
      }, {
        "indexed": false,
        "internalType": "uint16",
        "name": "index",
        "type": "uint16"
      }, {
        "indexed": false,
        "internalType": "uint256",
        "name": "gas",
        "type": "uint256"
      }, {
        "indexed": false,
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }, {
        "indexed": false,
        "internalType": "bytes",
        "name": "message",
        "type": "bytes"
      }, {
        "indexed": false,
        "internalType": "bytes",
        "name": "extraData",
        "type": "bytes"
      }, {
        "indexed": false,
        "internalType": "bytes",
        "name": "reason",
        "type": "bytes"
      }],
      "name": "LzComposeAlert",
      "type": "event"
    }, {
      "anonymous": false,
      "inputs": [{
        "indexed": true,
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      }, {
        "indexed": true,
        "internalType": "address",
        "name": "executor",
        "type": "address"
      }, {
        "components": [{
          "internalType": "uint32",
          "name": "srcEid",
          "type": "uint32"
        }, {
          "internalType": "bytes32",
          "name": "sender",
          "type": "bytes32"
        }, {
          "internalType": "uint64",
          "name": "nonce",
          "type": "uint64"
        }],
        "indexed": false,
        "internalType": "struct Origin",
        "name": "origin",
        "type": "tuple"
      }, {
        "indexed": false,
        "internalType": "bytes32",
        "name": "guid",
        "type": "bytes32"
      }, {
        "indexed": false,
        "internalType": "uint256",
        "name": "gas",
        "type": "uint256"
      }, {
        "indexed": false,
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }, {
        "indexed": false,
        "internalType": "bytes",
        "name": "message",
        "type": "bytes"
      }, {
        "indexed": false,
        "internalType": "bytes",
        "name": "extraData",
        "type": "bytes"
      }, {
        "indexed": false,
        "internalType": "bytes",
        "name": "reason",
        "type": "bytes"
      }],
      "name": "LzReceiveAlert",
      "type": "event"
    }, {
      "anonymous": false,
      "inputs": [{
        "indexed": false,
        "internalType": "address",
        "name": "token",
        "type": "address"
      }],
      "name": "LzTokenSet",
      "type": "event"
    }, {
      "anonymous": false,
      "inputs": [{
        "indexed": false,
        "internalType": "uint32",
        "name": "srcEid",
        "type": "uint32"
      }, {
        "indexed": false,
        "internalType": "bytes32",
        "name": "sender",
        "type": "bytes32"
      }, {
        "indexed": false,
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      }, {
        "indexed": false,
        "internalType": "uint64",
        "name": "nonce",
        "type": "uint64"
      }, {
        "indexed": false,
        "internalType": "bytes32",
        "name": "payloadHash",
        "type": "bytes32"
      }],
      "name": "PacketBurnt",
      "type": "event"
    }, {
      "anonymous": false,
      "inputs": [{
        "components": [{
          "internalType": "uint32",
          "name": "srcEid",
          "type": "uint32"
        }, {
          "internalType": "bytes32",
          "name": "sender",
          "type": "bytes32"
        }, {
          "internalType": "uint64",
          "name": "nonce",
          "type": "uint64"
        }],
        "indexed": false,
        "internalType": "struct Origin",
        "name": "origin",
        "type": "tuple"
      }, {
        "indexed": false,
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      }],
      "name": "PacketDelivered",
      "type": "event"
    }, {
      "anonymous": false,
      "inputs": [{
        "indexed": false,
        "internalType": "uint32",
        "name": "srcEid",
        "type": "uint32"
      }, {
        "indexed": false,
        "internalType": "bytes32",
        "name": "sender",
        "type": "bytes32"
      }, {
        "indexed": false,
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      }, {
        "indexed": false,
        "internalType": "uint64",
        "name": "nonce",
        "type": "uint64"
      }, {
        "indexed": false,
        "internalType": "bytes32",
        "name": "payloadHash",
        "type": "bytes32"
      }],
      "name": "PacketNilified",
      "type": "event"
    }, {
      "anonymous": false,
      "inputs": [{
        "indexed": false,
        "internalType": "bytes",
        "name": "encodedPayload",
        "type": "bytes"
      }, {
        "indexed": false,
        "internalType": "bytes",
        "name": "options",
        "type": "bytes"
      }, {
        "indexed": false,
        "internalType": "address",
        "name": "sendLibrary",
        "type": "address"
      }],
      "name": "PacketSent",
      "type": "event"
    }, {
      "anonymous": false,
      "inputs": [{
        "components": [{
          "internalType": "uint32",
          "name": "srcEid",
          "type": "uint32"
        }, {
          "internalType": "bytes32",
          "name": "sender",
          "type": "bytes32"
        }, {
          "internalType": "uint64",
          "name": "nonce",
          "type": "uint64"
        }],
        "indexed": false,
        "internalType": "struct Origin",
        "name": "origin",
        "type": "tuple"
      }, {
        "indexed": false,
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      }, {
        "indexed": false,
        "internalType": "bytes32",
        "name": "payloadHash",
        "type": "bytes32"
      }],
      "name": "PacketVerified",
      "type": "event"
    }, {
      "anonymous": false,
      "inputs": [{
        "indexed": false,
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      }, {
        "indexed": false,
        "internalType": "uint32",
        "name": "eid",
        "type": "uint32"
      }, {
        "indexed": false,
        "internalType": "address",
        "name": "newLib",
        "type": "address"
      }],
      "name": "ReceiveLibrarySet",
      "type": "event"
    }, {
      "anonymous": false,
      "inputs": [{
        "indexed": false,
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      }, {
        "indexed": false,
        "internalType": "uint32",
        "name": "eid",
        "type": "uint32"
      }, {
        "indexed": false,
        "internalType": "address",
        "name": "oldLib",
        "type": "address"
      }, {
        "indexed": false,
        "internalType": "uint256",
        "name": "expiry",
        "type": "uint256"
      }],
      "name": "ReceiveLibraryTimeoutSet",
      "type": "event"
    }, {
      "anonymous": false,
      "inputs": [{
        "indexed": false,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      }, {
        "indexed": false,
        "internalType": "uint32",
        "name": "eid",
        "type": "uint32"
      }, {
        "indexed": false,
        "internalType": "address",
        "name": "newLib",
        "type": "address"
      }],
      "name": "SendLibrarySet",
      "type": "event"
    }, {
      "inputs": [],
      "name": "LZ_AlreadyRegistered",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_ComposeExists",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_ComposeNotFound",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "bytes32",
        "name": "expected",
        "type": "bytes32"
      }, {
        "internalType": "bytes32",
        "name": "actual",
        "type": "bytes32"
      }],
      "name": "LZ_DefaultReceiveLibraryUnavailable",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_DefaultSendLibraryUnavailable",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_IncompletePath",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "uint256",
        "name": "required",
        "type": "uint256"
      }, {
        "internalType": "uint256",
        "name": "supplied",
        "type": "uint256"
      }],
      "name": "LZ_InsufficientFee",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_InvalidExpiry",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_InvalidNonce",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "uint64",
        "name": "nonce",
        "type": "uint64"
      }],
      "name": "LZ_InvalidPayloadHash",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_InvalidReceiveLibrary",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_LzTokenUnavailable",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_NotRegisteredLibrary",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_OnlyAltToken",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_OnlyNonDefaultLibrary",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_OnlyReceiveLibrary",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_OnlyRegisteredLibrary",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_OnlyRegisteredOrDefaultLibrary",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_OnlySendLibrary",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_PathNotInitializable",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_PathNotVerifiable",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      }],
      "name": "LZ_ReceiveReentrantCall",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_SameValue",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_SendReentrancy",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_Unauthorized",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_UnsupportedEid",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_UnsupportedInterface",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_ZeroLzTokenFee",
      "type": "error"
    }],
    OApp: [{
      "inputs": [],
      "name": "InvalidDelegate",
      "type": "error"
    }, {
      "inputs": [],
      "name": "InvalidEndpointCall",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LzTokenUnavailable",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "eid",
        "type": "uint32"
      }],
      "name": "NoPeer",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "uint256",
        "name": "msgValue",
        "type": "uint256"
      }],
      "name": "NotEnoughNative",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "addr",
        "type": "address"
      }],
      "name": "OnlyEndpoint",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "eid",
        "type": "uint32"
      }, {
        "internalType": "bytes32",
        "name": "sender",
        "type": "bytes32"
      }],
      "name": "OnlyPeer",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }],
      "name": "OwnableInvalidOwner",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "account",
        "type": "address"
      }],
      "name": "OwnableUnauthorizedAccount",
      "type": "error"
    }, {
      "anonymous": false,
      "inputs": [{
        "indexed": true,
        "internalType": "address",
        "name": "previousOwner",
        "type": "address"
      }, {
        "indexed": true,
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }],
      "name": "OwnershipTransferred",
      "type": "event"
    }, {
      "anonymous": false,
      "inputs": [{
        "indexed": false,
        "internalType": "uint32",
        "name": "eid",
        "type": "uint32"
      }, {
        "indexed": false,
        "internalType": "bytes32",
        "name": "peer",
        "type": "bytes32"
      }],
      "name": "PeerSet",
      "type": "event"
    }],
    OFT: [{
      "inputs": [{
        "internalType": "uint256",
        "name": "amountSD",
        "type": "uint256"
      }],
      "name": "AmountSDOverflowed",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "spender",
        "type": "address"
      }, {
        "internalType": "uint256",
        "name": "allowance",
        "type": "uint256"
      }, {
        "internalType": "uint256",
        "name": "needed",
        "type": "uint256"
      }],
      "name": "ERC20InsufficientAllowance",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "sender",
        "type": "address"
      }, {
        "internalType": "uint256",
        "name": "balance",
        "type": "uint256"
      }, {
        "internalType": "uint256",
        "name": "needed",
        "type": "uint256"
      }],
      "name": "ERC20InsufficientBalance",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "approver",
        "type": "address"
      }],
      "name": "ERC20InvalidApprover",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      }],
      "name": "ERC20InvalidReceiver",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "sender",
        "type": "address"
      }],
      "name": "ERC20InvalidSender",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "spender",
        "type": "address"
      }],
      "name": "ERC20InvalidSpender",
      "type": "error"
    }, {
      "inputs": [],
      "name": "InvalidDelegate",
      "type": "error"
    }, {
      "inputs": [],
      "name": "InvalidEndpointCall",
      "type": "error"
    }, {
      "inputs": [],
      "name": "InvalidLocalDecimals",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "bytes",
        "name": "options",
        "type": "bytes"
      }],
      "name": "InvalidOptions",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LzTokenUnavailable",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "eid",
        "type": "uint32"
      }],
      "name": "NoPeer",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "uint256",
        "name": "msgValue",
        "type": "uint256"
      }],
      "name": "NotEnoughNative",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "addr",
        "type": "address"
      }],
      "name": "OnlyEndpoint",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "eid",
        "type": "uint32"
      }, {
        "internalType": "bytes32",
        "name": "sender",
        "type": "bytes32"
      }],
      "name": "OnlyPeer",
      "type": "error"
    }, {
      "inputs": [],
      "name": "OnlySelf",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }],
      "name": "OwnableInvalidOwner",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "account",
        "type": "address"
      }],
      "name": "OwnableUnauthorizedAccount",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "uint256",
        "name": "amountLD",
        "type": "uint256"
      }, {
        "internalType": "uint256",
        "name": "minAmountLD",
        "type": "uint256"
      }],
      "name": "SlippageExceeded",
      "type": "error"
    }, {
      "anonymous": false,
      "inputs": [{
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }, {
        "indexed": true,
        "internalType": "address",
        "name": "spender",
        "type": "address"
      }, {
        "indexed": false,
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }],
      "name": "Approval",
      "type": "event"
    }, {
      "anonymous": false,
      "inputs": [{
        "indexed": false,
        "internalType": "struct EnforcedOptionParam[]",
        "name": "_enforcedOptions",
        "type": "tuple[]"
      }],
      "name": "EnforcedOptionSet",
      "type": "event"
    }, {
      "anonymous": false,
      "inputs": [{
        "indexed": false,
        "internalType": "address",
        "name": "inspector",
        "type": "address"
      }],
      "name": "MsgInspectorSet",
      "type": "event"
    }, {
      "anonymous": false,
      "inputs": [{
        "indexed": true,
        "internalType": "bytes32",
        "name": "guid",
        "type": "bytes32"
      }, {
        "indexed": false,
        "internalType": "uint32",
        "name": "srcEid",
        "type": "uint32"
      }, {
        "indexed": true,
        "internalType": "address",
        "name": "toAddress",
        "type": "address"
      }, {
        "indexed": false,
        "internalType": "uint256",
        "name": "amountReceivedLD",
        "type": "uint256"
      }],
      "name": "OFTReceived",
      "type": "event"
    }, {
      "anonymous": false,
      "inputs": [{
        "indexed": true,
        "internalType": "bytes32",
        "name": "guid",
        "type": "bytes32"
      }, {
        "indexed": false,
        "internalType": "uint32",
        "name": "dstEid",
        "type": "uint32"
      }, {
        "indexed": true,
        "internalType": "address",
        "name": "fromAddress",
        "type": "address"
      }, {
        "indexed": false,
        "internalType": "uint256",
        "name": "amountSentLD",
        "type": "uint256"
      }, {
        "indexed": false,
        "internalType": "uint256",
        "name": "amountReceivedLD",
        "type": "uint256"
      }],
      "name": "OFTSent",
      "type": "event"
    }, {
      "anonymous": false,
      "inputs": [{
        "indexed": true,
        "internalType": "address",
        "name": "previousOwner",
        "type": "address"
      }, {
        "indexed": true,
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }],
      "name": "OwnershipTransferred",
      "type": "event"
    }, {
      "anonymous": false,
      "inputs": [{
        "indexed": false,
        "internalType": "uint32",
        "name": "eid",
        "type": "uint32"
      }, {
        "indexed": false,
        "internalType": "bytes32",
        "name": "peer",
        "type": "bytes32"
      }],
      "name": "PeerSet",
      "type": "event"
    }, {
      "anonymous": false,
      "inputs": [{
        "indexed": false,
        "internalType": "address",
        "name": "preCrimeAddress",
        "type": "address"
      }],
      "name": "PreCrimeSet",
      "type": "event"
    }, {
      "anonymous": false,
      "inputs": [{
        "indexed": true,
        "internalType": "address",
        "name": "from",
        "type": "address"
      }, {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      }, {
        "indexed": false,
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }],
      "name": "Transfer",
      "type": "event"
    }],
    SendUln302: [{
      "inputs": [{
        "internalType": "uint32",
        "name": "configType",
        "type": "uint32"
      }],
      "name": "LZ_ULN_InvalidConfigType",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_ULN_InvalidRequiredDVNCount",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_ULN_InvalidOptionalDVNCount",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_ULN_InvalidOptionalDVNThreshold",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_ULN_AtLeastOneDVN",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_ULN_InvalidConfirmations",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_ULN_Unsorted",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "uint8",
        "name": "workerId",
        "type": "uint8"
      }],
      "name": "LZ_ULN_InvalidWorkerId",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "uint256",
        "name": "cursor",
        "type": "uint256"
      }],
      "name": "LZ_ULN_InvalidWorkerOptions",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "uint8",
        "name": "optionType",
        "type": "uint8"
      }],
      "name": "LZ_ULN_UnsupportedOptionType",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_ULN_InvalidLegacyType1Option",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_ULN_InvalidLegacyType2Option",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "eid",
        "type": "uint32"
      }],
      "name": "LZ_ULN_UnsupportedEid",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "uint256",
        "name": "requested",
        "type": "uint256"
      }, {
        "internalType": "uint256",
        "name": "available",
        "type": "uint256"
      }],
      "name": "LZ_MessageLib_InvalidAmount",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_MessageLib_TransferFailed",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_MessageLib_OnlyEndpoint",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_MessageLib_InvalidExecutor",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_MessageLib_NotTreasury",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_MessageLib_CannotWithdrawAltToken",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "uint256",
        "name": "actual",
        "type": "uint256"
      }, {
        "internalType": "uint256",
        "name": "max",
        "type": "uint256"
      }],
      "name": "LZ_MessageLib_InvalidMessageSize",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_MessageLib_ZeroMessageSize",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "uint256",
        "name": "cursor",
        "type": "uint256"
      }],
      "name": "DVN_InvalidDVNOptions",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "uint256",
        "name": "dvnIdx",
        "type": "uint256"
      }],
      "name": "DVN_InvalidDVNIdx",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "to",
        "type": "address"
      }, {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }],
      "name": "Transfer_NativeFailed",
      "type": "error"
    }, {
      "inputs": [],
      "name": "Transfer_ToAddressIsZero",
      "type": "error"
    }, {
      "anonymous": false,
      "inputs": [{
        "indexed": false,
        "internalType": "address[]",
        "name": "requiredDVNs",
        "type": "address[]"
      }, {
        "indexed": false,
        "internalType": "address[]",
        "name": "optionalDVNs",
        "type": "address[]"
      }, {
        "indexed": false,
        "internalType": "uint256[]",
        "name": "fees",
        "type": "uint256[]"
      }],
      "name": "DVNFeePaid",
      "type": "event"
    }],
    ReceiveUln302: [{
      "inputs": [],
      "name": "LZ_ULN_InvalidPacketHeader",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_ULN_InvalidPacketVersion",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_ULN_InvalidEid",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "configType",
        "type": "uint32"
      }],
      "name": "LZ_ULN_InvalidConfigType",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_ULN_InvalidRequiredDVNCount",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_ULN_InvalidOptionalDVNCount",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_ULN_InvalidOptionalDVNThreshold",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_ULN_AtLeastOneDVN",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_ULN_InvalidConfirmations",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_ULN_Unsorted",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "eid",
        "type": "uint32"
      }],
      "name": "LZ_ULN_UnsupportedEid",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_ULN_Verifying",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_MessageLib_OnlyEndpoint",
      "type": "error"
    }],
    ReadLib1002: [{
      "inputs": [{
        "internalType": "uint32",
        "name": "configType",
        "type": "uint32"
      }],
      "name": "LZ_RL_InvalidConfigType",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_RL_InvalidRequiredDVNCount",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_RL_InvalidOptionalDVNCount",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_RL_InvalidOptionalDVNThreshold",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_RL_InvalidPacketHeader",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_RL_InvalidPacketVersion",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_RL_InvalidCmdHash",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_RL_InvalidReceiver",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "uint256",
        "name": "requested",
        "type": "uint256"
      }, {
        "internalType": "uint256",
        "name": "available",
        "type": "uint256"
      }],
      "name": "LZ_RL_InvalidAmount",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_RL_Verifying",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_RL_InvalidEid",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_RL_AtLeastOneDVN",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_RL_Unsorted",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "eid",
        "type": "uint32"
      }],
      "name": "LZ_RL_UnsupportedEid",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_MessageLib_OnlyEndpoint",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_RL_InvalidExecutor",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_RL_NotTreasury",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_RL_CannotWithdrawAltToken",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "uint8",
        "name": "workerId",
        "type": "uint8"
      }],
      "name": "LZ_ULN_InvalidWorkerId",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "uint256",
        "name": "cursor",
        "type": "uint256"
      }],
      "name": "LZ_ULN_InvalidWorkerOptions",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "uint8",
        "name": "optionType",
        "type": "uint8"
      }],
      "name": "LZ_ULN_UnsupportedOptionType",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_ULN_InvalidLegacyType1Option",
      "type": "error"
    }, {
      "inputs": [],
      "name": "LZ_ULN_InvalidLegacyType2Option",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "uint256",
        "name": "cursor",
        "type": "uint256"
      }],
      "name": "DVN_InvalidDVNOptions",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "uint256",
        "name": "dvnIdx",
        "type": "uint256"
      }],
      "name": "DVN_InvalidDVNIdx",
      "type": "error"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "to",
        "type": "address"
      }, {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }],
      "name": "Transfer_NativeFailed",
      "type": "error"
    }, {
      "inputs": [],
      "name": "Transfer_ToAddressIsZero",
      "type": "error"
    }]
  };
  const [isExpanded, setIsExpanded] = useState(false);
  const abi = abiProp || EMBEDDED_ABIS[contractName] || [];
  const interfaceAbi = useMemo(() => {
    return abi.find(item => item.type === interfaceType && item.name === interfaceName);
  }, [abi, interfaceType, interfaceName]);
  const KNOWN_HASHES = {
    'Transfer(address,address,uint256)': '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',
    'Approval(address,address,uint256)': '0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925',
    'OwnershipTransferred(address,address)': '0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0',
    'PeerSet(uint32,bytes32)': '0x238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b',
    'OFTSent(bytes32,uint32,address,uint256,uint256)': '0x85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a',
    'OFTReceived(bytes32,uint32,address,uint256)': '0xefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c',
    'EnforcedOptionSet(tuple[])': '0xabfcc23fe004d3dcb13c3ca8a2f9d46fe40d605bffb52d6f15c835e4e63077df',
    'MsgInspectorSet(address)': '0xf0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197',
    'PreCrimeSet(address)': '0xd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c2427760',
    'ComposeDelivered(address,address,bytes32,uint16)': '0x0036c98efcf9e6641dfbc9051f66f405253e8e0c2ab4a24dccda15595b7378c8',
    'ComposeSent(address,address,bytes32,uint16,bytes)': '0x3d52ff888d033fd3dd1d8057da59e850c91d91a72c41dfa445b247dfedeb6dc1',
    'DefaultReceiveLibrarySet(uint32,address)': '0xc16891855cffb4a5ac51ac11864a3f3c96ba816cc45fe686c987ae36277de5ec',
    'DefaultReceiveLibraryTimeoutSet(uint32,address,uint256)': '0x55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f8',
    'DefaultSendLibrarySet(uint32,address)': '0x16aa0f528038ab41019e95bae5b418a50ba8532c5800e3b7ea2f517d3fa625f5',
    'DelegateSet(address,address)': '0x6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d7983981',
    'InboundNonceSkipped(uint32,bytes32,address,uint64)': '0x28f40053783033ef755556a0c3315379141f51a33aed8334174ffbadd90bde48',
    'LibraryRegistered(address)': '0x6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5',
    'LzComposeAlert(address,address,address,bytes32,uint16,uint256,uint256,bytes,bytes,bytes)': '0x8a0b1dce321c5c5fb42349bce46d18087c04140de520917661fb923e44a904b9',
    'LzReceiveAlert(address,address,tuple,bytes32,uint256,uint256,bytes,bytes,bytes)': '0x21f5530e549466b2a729a41e89261ce02761174ed179437d4bdf38654775bb28',
    'LzTokenSet(address)': '0xd476ec5ec1ac11cec3714d41e7ea49419471aceb9bd0dff1becfc3e363a62396',
    'PacketBurnt(uint32,bytes32,address,uint64,bytes32)': '0x7f68a37a6e69a0de35024a234558f9efe4b33b58657753d21eaaa82d51c3510e',
    'PacketDelivered(tuple,address)': '0x4c3d7720f9df83b50eb0d3aa6b66b40170d50fafd31b6faa27fe71e33e7758f4',
    'PacketNilified(uint32,bytes32,address,uint64,bytes32)': '0xaf0450c392c4f702515a457a362328c8aa21916048ca6d0419e248b30cb55292',
    'PacketSent(bytes,bytes,address)': '0x1ab700d4ced0c005b164c0f789fd09fcbb0156d4c2041b8a3bfbcd961cd1567f',
    'PacketVerified(tuple,address,bytes32)': '0x548eaf10ee96d1fd0c1c9f8862b83d33af264f6ddb110beb29560b414abf54c6',
    'ReceiveLibrarySet(address,uint32,address)': '0xcd6f92f5ac6185a5acfa02c92090746cec64d777269cbcd0ed031e396657a1c2',
    'ReceiveLibraryTimeoutSet(address,uint32,address,uint256)': '0x4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928',
    'SendLibrarySet(address,uint32,address)': '0x4cff966ebee29a156dcb34cf72c1d06231fb1777f6bdf6e8089819232f002b1c',
    'DVNFeePaid(address[],address[],uint256[])': '0x07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db24644'
  };
  const KNOWN_ERROR_SELECTORS = {
    'LZ_AlreadyRegistered()': '0x8aea2fe6',
    'LZ_ComposeExists()': '0x15082194',
    'LZ_ComposeNotFound()': '0x1b662763',
    'LZ_DefaultReceiveLibraryUnavailable(bytes32,bytes32)': '0xc9a6dd88',
    'LZ_DefaultSendLibraryUnavailable()': '0xd586961a',
    'LZ_IncompletePath()': '0xf6ad1b1e',
    'LZ_InsufficientFee(uint256,uint256)': '0xd247c105',
    'LZ_InvalidExpiry()': '0x05df9f22',
    'LZ_InvalidNonce()': '0xff76c58a',
    'LZ_InvalidPayloadHash(uint64)': '0x1e53a72a',
    'LZ_InvalidReceiveLibrary()': '0x4fa6ecac',
    'LZ_LzTokenUnavailable()': '0x5af6d2aa',
    'LZ_NotRegisteredLibrary()': '0xb79784d5',
    'LZ_OnlyAltToken()': '0x9a317a52',
    'LZ_OnlyNonDefaultLibrary()': '0x379052a0',
    'LZ_OnlyReceiveLibrary()': '0xa455bbce',
    'LZ_OnlyRegisteredLibrary()': '0x3bb77a06',
    'LZ_OnlyRegisteredOrDefaultLibrary()': '0xfe85efd0',
    'LZ_OnlySendLibrary()': '0x35e31cfd',
    'LZ_PathNotInitializable()': '0x751cb20f',
    'LZ_PathNotVerifiable()': '0x0177e1ca',
    'LZ_ReceiveReentrantCall(address)': '0x30d14180',
    'LZ_SameValue()': '0xd0ecb66b',
    'LZ_SendReentrancy()': '0xee120b09',
    'LZ_Unauthorized()': '0xc4c52593',
    'LZ_UnsupportedEid()': '0x391daaa4',
    'LZ_UnsupportedInterface()': '0xeb64f35d',
    'LZ_ZeroLzTokenFee()': '0x17751237',
    'LZ_ULN_InvalidConfigType(uint32)': '0xba97c1fa',
    'LZ_ULN_InvalidRequiredDVNCount()': '0x83aa17da',
    'LZ_ULN_InvalidOptionalDVNCount()': '0x42211366',
    'LZ_ULN_InvalidOptionalDVNThreshold()': '0x38682fa9',
    'LZ_ULN_AtLeastOneDVN()': '0xce2c3751',
    'LZ_ULN_InvalidConfirmations()': '0x503667ae',
    'LZ_ULN_Unsorted()': '0x447516e1',
    'LZ_ULN_InvalidWorkerId(uint8)': '0x6780cfaf',
    'LZ_ULN_InvalidWorkerOptions(uint256)': '0x6592671c',
    'LZ_ULN_UnsupportedOptionType(uint8)': '0x496926ad',
    'LZ_ULN_InvalidLegacyType1Option()': '0x0dc652a8',
    'LZ_ULN_InvalidLegacyType2Option()': '0xc0927c56',
    'LZ_ULN_UnsupportedEid(uint32)': '0xf0c10d04',
    'LZ_ULN_InvalidPacketHeader()': '0xc9bf37b7',
    'LZ_ULN_InvalidPacketVersion()': '0x3a9ae7b9',
    'LZ_ULN_InvalidEid()': '0x42d2c97e',
    'LZ_ULN_Verifying()': '0x4c3118d4',
    'LZ_MessageLib_InvalidAmount(uint256,uint256)': '0x34084fb8',
    'LZ_MessageLib_TransferFailed()': '0xde5999a0',
    'LZ_MessageLib_OnlyEndpoint()': '0x467409c3',
    'LZ_MessageLib_InvalidExecutor()': '0x20e9d05a',
    'LZ_MessageLib_NotTreasury()': '0x885762a7',
    'LZ_MessageLib_CannotWithdrawAltToken()': '0xe695d044',
    'LZ_MessageLib_InvalidMessageSize(uint256,uint256)': '0xc667af3e',
    'LZ_MessageLib_ZeroMessageSize()': '0x49cfac43',
    'LZ_RL_InvalidConfigType(uint32)': '0x0cb84e82',
    'LZ_RL_InvalidRequiredDVNCount()': '0x55a01c02',
    'LZ_RL_InvalidOptionalDVNCount()': '0xe35436c6',
    'LZ_RL_InvalidOptionalDVNThreshold()': '0xf92940be',
    'LZ_RL_InvalidPacketHeader()': '0x864d08b3',
    'LZ_RL_InvalidPacketVersion()': '0x7952a82f',
    'LZ_RL_InvalidCmdHash()': '0x660e96ee',
    'LZ_RL_InvalidReceiver()': '0xa4884a59',
    'LZ_RL_InvalidAmount(uint256,uint256)': '0xb79d1263',
    'LZ_RL_Verifying()': '0x28ca4b51',
    'LZ_RL_InvalidEid()': '0x3e96df16',
    'LZ_RL_AtLeastOneDVN()': '0x9b5f9f7a',
    'LZ_RL_Unsorted()': '0xc0762a5d',
    'LZ_RL_UnsupportedEid(uint32)': '0x0ff03e54',
    'LZ_RL_InvalidExecutor()': '0x76df55a6',
    'LZ_RL_NotTreasury()': '0x96830d1e',
    'LZ_RL_CannotWithdrawAltToken()': '0xb77f5044',
    'DVN_InvalidDVNOptions(uint256)': '0x04eb6e0c',
    'DVN_InvalidDVNIdx(uint256)': '0xfc4f2308',
    'Transfer_NativeFailed(address,uint256)': '0x465bc834',
    'Transfer_ToAddressIsZero()': '0x6b7a9310',
    'SlippageExceeded(uint256,uint256)': '0x71c4efed',
    'AmountSDOverflowed(uint256)': '0xe2ce9413',
    'InvalidLocalDecimals()': '0x1e9714b0',
    'InvalidOptions(bytes)': '0x9a6d49cd',
    'OnlySelf()': '0x14d4a4e8',
    'OnlyPeer(uint32,bytes32)': '0xc26bebcc',
    'NoPeer(uint32)': '0xf6ff4fb7',
    'InvalidEndpointCall()': '0x0fbdec0a',
    'InvalidDelegate()': '0xb5863604',
    'NotEnoughNative(uint256)': '0x9f704120',
    'OnlyEndpoint(address)': '0x91ac5e4f',
    'LzTokenUnavailable()': '0x5373352a',
    'ERC20InsufficientAllowance(address,uint256,uint256)': '0xfb8f41b2',
    'ERC20InsufficientBalance(address,uint256,uint256)': '0xe450d38c',
    'ERC20InvalidApprover(address)': '0xe602df05',
    'ERC20InvalidReceiver(address)': '0xec442f05',
    'ERC20InvalidSender(address)': '0x96c6fd1e',
    'ERC20InvalidSpender(address)': '0x94280d62',
    'OwnableInvalidOwner(address)': '0x1e4fbdf7',
    'OwnableUnauthorizedAccount(address)': '0x118cdaa7'
  };
  const getCanonicalSignature = () => {
    if (!interfaceAbi) return null;
    const paramTypes = interfaceAbi.inputs?.map(input => input.type).join(',') || '';
    return `${interfaceName}(${paramTypes})`;
  };
  const getFullSignature = () => {
    if (!interfaceAbi) return null;
    const params = interfaceAbi.inputs?.map(input => {
      const indexed = interfaceType === 'event' && input.indexed ? ' indexed' : '';
      const name = input.name ? ` ${input.name}` : '';
      return `${input.type}${indexed}${name}`;
    }).join(', ') || '';
    return `${interfaceName}(${params})`;
  };
  const getTopicHash = () => {
    const sig = getCanonicalSignature();
    return KNOWN_HASHES[sig] || null;
  };
  const getErrorSelector = () => {
    const sig = getCanonicalSignature();
    return KNOWN_ERROR_SELECTORS[sig] || null;
  };
  if (!interfaceAbi) {
    return <div className="rounded-xl border overflow-hidden mb-4" style={{
      borderColor: isDark ? '#3f3f46' : '#e4e4e7',
      backgroundColor: isDark ? '#18181b' : '#ffffff'
    }}>
        <div className="p-4 text-sm" style={{
      color: isDark ? '#ef4444' : '#dc2626'
    }}>
          {interfaceType} "{interfaceName}" not found in {contractName} ABI
        </div>
      </div>;
  }
  const isEvent = interfaceType === 'event';
  const isError = interfaceType === 'error';
  return <div className="rounded-xl border overflow-hidden mb-4" style={{
    borderColor: isDark ? '#3f3f46' : '#e4e4e7',
    backgroundColor: isDark ? '#18181b' : '#ffffff'
  }}>
      {}
      <div className="flex items-center justify-between p-3 cursor-pointer transition-colors" style={{
    backgroundColor: isDark ? '#27272a' : '#f4f4f5'
  }} onClick={() => setIsExpanded(!isExpanded)}>
        <div className="flex items-center gap-3 flex-1 min-w-0">
          {}
          <span className="px-2 py-1 rounded text-xs font-semibold" style={{
    backgroundColor: isEvent ? '#8b5cf6' : '#ef4444',
    color: '#ffffff'
  }}>
            {interfaceType.toUpperCase()}
          </span>

          {}
          {isError && getErrorSelector() && <code className="px-2 py-1 rounded text-xs font-mono border" style={{
    backgroundColor: isDark ? '#1d1d1d' : '#e7e0e0',
    color: isDark ? '#fca5a5' : '#dc2626',
    borderColor: isDark ? '#2d2d2d' : '#d4cdcd'
  }}>
              {getErrorSelector()}
            </code>}

          {}
          <div className="font-mono text-sm truncate" style={{
    color: isDark ? '#e4e4e7' : '#27272a'
  }}>
            <span style={{
    color: isDark ? '#60a5fa' : '#2563eb'
  }}>{interfaceName}</span>
            <span style={{
    color: isDark ? '#a1a1aa' : '#71717a'
  }}>(</span>
            {interfaceAbi.inputs && interfaceAbi.inputs.map((input, index) => <span key={index}>
                {isEvent && input.indexed && <span style={{
    color: '#f59e0b'
  }}>indexed </span>}
                <span style={{
    color: isDark ? '#4ade80' : '#16a34a'
  }}>{input.type}</span>
                {input.name && <span style={{
    color: isDark ? '#a1a1aa' : '#71717a'
  }}> {input.name}</span>}
                {index < interfaceAbi.inputs.length - 1 && <span style={{
    color: isDark ? '#a1a1aa' : '#71717a'
  }}>, </span>}
              </span>)}
            <span style={{
    color: isDark ? '#a1a1aa' : '#71717a'
  }}>)</span>
          </div>
        </div>

        {}
        <svg width="20" height="20" viewBox="0 0 24 24" fill="none" style={{
    color: isDark ? '#71717a' : '#a1a1aa',
    transform: isExpanded ? 'rotate(180deg)' : 'rotate(0deg)',
    transition: 'transform 0.2s'
  }}>
          <path d="M6 9L12 15L18 9" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
        </svg>
      </div>

      {}
      {isExpanded && <div className="p-4" style={{
    backgroundColor: isDark ? '#18181b' : '#ffffff'
  }}>
          {}
          {description && <div className="mb-4 text-sm" style={{
    color: isDark ? '#a1a1aa' : '#71717a'
  }}>
              {description}
            </div>}

          {}
          {interfaceAbi.inputs && interfaceAbi.inputs.length > 0 && <div className="mb-4">
              <div className="text-xs font-semibold uppercase tracking-wide mb-2" style={{
    color: isDark ? '#71717a' : '#a1a1aa'
  }}>
                PARAMETERS
              </div>
              <div className="rounded-lg p-3 space-y-2" style={{
    backgroundColor: isDark ? '#27272a' : '#f4f4f5'
  }}>
                {interfaceAbi.inputs.map((input, index) => <div key={index} className="flex items-start gap-2">
                    <span className="font-mono text-sm" style={{
    color: isDark ? '#60a5fa' : '#2563eb'
  }}>
                      {input.name || 'param' + index}
                    </span>
                    <span className="font-mono text-sm" style={{
    color: isDark ? '#4ade80' : '#16a34a'
  }}>
                      {input.type}
                    </span>
                    {isEvent && input.indexed && <span className="px-1.5 py-0.5 rounded text-xs" style={{
    backgroundColor: isDark ? '#78350f' : '#fef3c7',
    color: isDark ? '#fbbf24' : '#92400e'
  }}>
                        indexed
                      </span>}
                    {}
                    {input.type === 'tuple' && input.components && <div className="ml-4 mt-1 pl-3 border-l-2 space-y-1" style={{
    borderColor: isDark ? '#3f3f46' : '#e4e4e7'
  }}>
                        {input.components.map((comp, compIndex) => <div key={compIndex} className="flex items-center gap-2 text-sm font-mono">
                            <span style={{
    color: isDark ? '#a1a1aa' : '#71717a'
  }}>{comp.name}</span>
                            <span style={{
    color: isDark ? '#4ade80' : '#16a34a'
  }}>{comp.type}</span>
                          </div>)}
                      </div>}
                  </div>)}
              </div>
            </div>}

          {}
          <div>
            <div className="text-xs font-semibold uppercase tracking-wide mb-2" style={{
    color: isDark ? '#71717a' : '#a1a1aa'
  }}>
              SIGNATURE
            </div>
            <div className="rounded-lg p-3 font-mono text-sm overflow-x-auto" style={{
    backgroundColor: isDark ? '#27272a' : '#f4f4f5',
    color: isDark ? '#e4e4e7' : '#27272a'
  }}>
              <code>{getFullSignature()}</code>
            </div>
            {isError && <div className="mt-2 text-xs" style={{
    color: isDark ? '#71717a' : '#a1a1aa'
  }}>
                <span>4-byte selector: </span>
                <code className="px-1.5 py-0.5 rounded" style={{
    backgroundColor: isDark ? '#27272a' : '#f4f4f5'
  }}>
                  {getErrorSelector() || `keccak256("${getCanonicalSignature()}")[0:4]`}
                </code>
              </div>}
            {isEvent && <div className="mt-2 text-xs" style={{
    color: isDark ? '#71717a' : '#a1a1aa'
  }}>
                <span>Topic hash: </span>
                <code className="px-1.5 py-0.5 rounded break-all" style={{
    backgroundColor: isDark ? '#27272a' : '#f4f4f5'
  }}>
                  {getTopicHash() || `keccak256("${getCanonicalSignature()}")`}
                </code>
              </div>}
          </div>
        </div>}
    </div>;
};

export const InteractiveContract = ({contractName, functionName, abi: abiProp, description = null, showDeployments = true, disableChainSelection = true}) => {
  const {useState, useEffect, useRef, useMemo} = React;
  const EMBEDDED_ABIS = {
    EndpointV2: [{
      "inputs": [{
        "internalType": "address",
        "name": "_oapp",
        "type": "address"
      }, {
        "internalType": "uint32",
        "name": "_srcEid",
        "type": "uint32"
      }, {
        "internalType": "bytes32",
        "name": "_sender",
        "type": "bytes32"
      }, {
        "internalType": "uint64",
        "name": "_nonce",
        "type": "uint64"
      }, {
        "internalType": "bytes32",
        "name": "_payloadHash",
        "type": "bytes32"
      }],
      "name": "burn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_oapp",
        "type": "address"
      }, {
        "components": [{
          "internalType": "uint32",
          "name": "srcEid",
          "type": "uint32"
        }, {
          "internalType": "bytes32",
          "name": "sender",
          "type": "bytes32"
        }, {
          "internalType": "uint64",
          "name": "nonce",
          "type": "uint64"
        }],
        "internalType": "struct Origin",
        "name": "_origin",
        "type": "tuple"
      }, {
        "internalType": "bytes32",
        "name": "_guid",
        "type": "bytes32"
      }, {
        "internalType": "bytes",
        "name": "_message",
        "type": "bytes"
      }],
      "name": "clear",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_from",
        "type": "address"
      }, {
        "internalType": "address",
        "name": "_to",
        "type": "address"
      }, {
        "internalType": "bytes32",
        "name": "_guid",
        "type": "bytes32"
      }, {
        "internalType": "uint16",
        "name": "_index",
        "type": "uint16"
      }],
      "name": "composeQueue",
      "outputs": [{
        "internalType": "bytes32",
        "name": "messageHash",
        "type": "bytes32"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "_eid",
        "type": "uint32"
      }],
      "name": "defaultReceiveLibrary",
      "outputs": [{
        "internalType": "address",
        "name": "",
        "type": "address"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "_eid",
        "type": "uint32"
      }],
      "name": "defaultReceiveLibraryTimeout",
      "outputs": [{
        "internalType": "address",
        "name": "lib",
        "type": "address"
      }, {
        "internalType": "uint256",
        "name": "expiry",
        "type": "uint256"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "_eid",
        "type": "uint32"
      }],
      "name": "defaultSendLibrary",
      "outputs": [{
        "internalType": "address",
        "name": "",
        "type": "address"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "oapp",
        "type": "address"
      }],
      "name": "delegates",
      "outputs": [{
        "internalType": "address",
        "name": "",
        "type": "address"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "eid",
      "outputs": [{
        "internalType": "uint32",
        "name": "",
        "type": "uint32"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_oapp",
        "type": "address"
      }, {
        "internalType": "address",
        "name": "_lib",
        "type": "address"
      }, {
        "internalType": "uint32",
        "name": "_eid",
        "type": "uint32"
      }, {
        "internalType": "uint32",
        "name": "_configType",
        "type": "uint32"
      }],
      "name": "getConfig",
      "outputs": [{
        "internalType": "bytes",
        "name": "config",
        "type": "bytes"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_receiver",
        "type": "address"
      }, {
        "internalType": "uint32",
        "name": "_eid",
        "type": "uint32"
      }],
      "name": "getReceiveLibrary",
      "outputs": [{
        "internalType": "address",
        "name": "lib",
        "type": "address"
      }, {
        "internalType": "bool",
        "name": "isDefault",
        "type": "bool"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "getRegisteredLibraries",
      "outputs": [{
        "internalType": "address[]",
        "name": "",
        "type": "address[]"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "getSendContext",
      "outputs": [{
        "internalType": "uint32",
        "name": "dstEid",
        "type": "uint32"
      }, {
        "internalType": "address",
        "name": "sender",
        "type": "address"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_sender",
        "type": "address"
      }, {
        "internalType": "uint32",
        "name": "_eid",
        "type": "uint32"
      }],
      "name": "getSendLibrary",
      "outputs": [{
        "internalType": "address",
        "name": "lib",
        "type": "address"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_receiver",
        "type": "address"
      }, {
        "internalType": "uint32",
        "name": "_srcEid",
        "type": "uint32"
      }, {
        "internalType": "bytes32",
        "name": "_sender",
        "type": "bytes32"
      }],
      "name": "inboundNonce",
      "outputs": [{
        "internalType": "uint64",
        "name": "",
        "type": "uint64"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_receiver",
        "type": "address"
      }, {
        "internalType": "uint32",
        "name": "_srcEid",
        "type": "uint32"
      }, {
        "internalType": "bytes32",
        "name": "_sender",
        "type": "bytes32"
      }, {
        "internalType": "uint64",
        "name": "_nonce",
        "type": "uint64"
      }],
      "name": "inboundPayloadHash",
      "outputs": [{
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "components": [{
          "internalType": "uint32",
          "name": "srcEid",
          "type": "uint32"
        }, {
          "internalType": "bytes32",
          "name": "sender",
          "type": "bytes32"
        }, {
          "internalType": "uint64",
          "name": "nonce",
          "type": "uint64"
        }],
        "internalType": "struct Origin",
        "name": "_origin",
        "type": "tuple"
      }, {
        "internalType": "address",
        "name": "_receiver",
        "type": "address"
      }],
      "name": "initializable",
      "outputs": [{
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_sender",
        "type": "address"
      }, {
        "internalType": "uint32",
        "name": "_eid",
        "type": "uint32"
      }],
      "name": "isDefaultSendLibrary",
      "outputs": [{
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_lib",
        "type": "address"
      }],
      "name": "isRegisteredLibrary",
      "outputs": [{
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "isSendingMessage",
      "outputs": [{
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "_eid",
        "type": "uint32"
      }],
      "name": "isSupportedEid",
      "outputs": [{
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_receiver",
        "type": "address"
      }, {
        "internalType": "uint32",
        "name": "_eid",
        "type": "uint32"
      }, {
        "internalType": "address",
        "name": "_lib",
        "type": "address"
      }],
      "name": "isValidReceiveLibrary",
      "outputs": [{
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_receiver",
        "type": "address"
      }, {
        "internalType": "uint32",
        "name": "_srcEid",
        "type": "uint32"
      }, {
        "internalType": "bytes32",
        "name": "_sender",
        "type": "bytes32"
      }],
      "name": "lazyInboundNonce",
      "outputs": [{
        "internalType": "uint64",
        "name": "",
        "type": "uint64"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_from",
        "type": "address"
      }, {
        "internalType": "address",
        "name": "_to",
        "type": "address"
      }, {
        "internalType": "bytes32",
        "name": "_guid",
        "type": "bytes32"
      }, {
        "internalType": "uint16",
        "name": "_index",
        "type": "uint16"
      }, {
        "internalType": "bytes",
        "name": "_message",
        "type": "bytes"
      }, {
        "internalType": "bytes",
        "name": "_extraData",
        "type": "bytes"
      }],
      "name": "lzCompose",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    }, {
      "inputs": [{
        "components": [{
          "internalType": "uint32",
          "name": "srcEid",
          "type": "uint32"
        }, {
          "internalType": "bytes32",
          "name": "sender",
          "type": "bytes32"
        }, {
          "internalType": "uint64",
          "name": "nonce",
          "type": "uint64"
        }],
        "internalType": "struct Origin",
        "name": "_origin",
        "type": "tuple"
      }, {
        "internalType": "address",
        "name": "_receiver",
        "type": "address"
      }, {
        "internalType": "bytes32",
        "name": "_guid",
        "type": "bytes32"
      }, {
        "internalType": "bytes",
        "name": "_message",
        "type": "bytes"
      }, {
        "internalType": "bytes",
        "name": "_extraData",
        "type": "bytes"
      }],
      "name": "lzReceive",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    }, {
      "inputs": [],
      "name": "lzToken",
      "outputs": [{
        "internalType": "address",
        "name": "",
        "type": "address"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "nativeToken",
      "outputs": [{
        "internalType": "address",
        "name": "",
        "type": "address"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_sender",
        "type": "address"
      }, {
        "internalType": "uint32",
        "name": "_dstEid",
        "type": "uint32"
      }, {
        "internalType": "bytes32",
        "name": "_receiver",
        "type": "bytes32"
      }],
      "name": "nextGuid",
      "outputs": [{
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_oapp",
        "type": "address"
      }, {
        "internalType": "uint32",
        "name": "_srcEid",
        "type": "uint32"
      }, {
        "internalType": "bytes32",
        "name": "_sender",
        "type": "bytes32"
      }, {
        "internalType": "uint64",
        "name": "_nonce",
        "type": "uint64"
      }, {
        "internalType": "bytes32",
        "name": "_payloadHash",
        "type": "bytes32"
      }],
      "name": "nilify",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_sender",
        "type": "address"
      }, {
        "internalType": "uint32",
        "name": "_dstEid",
        "type": "uint32"
      }, {
        "internalType": "bytes32",
        "name": "_receiver",
        "type": "bytes32"
      }],
      "name": "outboundNonce",
      "outputs": [{
        "internalType": "uint64",
        "name": "",
        "type": "uint64"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "components": [{
          "internalType": "uint32",
          "name": "dstEid",
          "type": "uint32"
        }, {
          "internalType": "bytes32",
          "name": "receiver",
          "type": "bytes32"
        }, {
          "internalType": "bytes",
          "name": "message",
          "type": "bytes"
        }, {
          "internalType": "bytes",
          "name": "options",
          "type": "bytes"
        }, {
          "internalType": "bool",
          "name": "payInLzToken",
          "type": "bool"
        }],
        "internalType": "struct MessagingParams",
        "name": "_params",
        "type": "tuple"
      }, {
        "internalType": "address",
        "name": "_sender",
        "type": "address"
      }],
      "name": "quote",
      "outputs": [{
        "components": [{
          "internalType": "uint256",
          "name": "nativeFee",
          "type": "uint256"
        }, {
          "internalType": "uint256",
          "name": "lzTokenFee",
          "type": "uint256"
        }],
        "internalType": "struct MessagingFee",
        "name": "",
        "type": "tuple"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_receiver",
        "type": "address"
      }, {
        "internalType": "uint32",
        "name": "_eid",
        "type": "uint32"
      }],
      "name": "receiveLibraryTimeout",
      "outputs": [{
        "internalType": "address",
        "name": "lib",
        "type": "address"
      }, {
        "internalType": "uint256",
        "name": "expiry",
        "type": "uint256"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_lib",
        "type": "address"
      }],
      "name": "registerLibrary",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "components": [{
          "internalType": "uint32",
          "name": "dstEid",
          "type": "uint32"
        }, {
          "internalType": "bytes32",
          "name": "receiver",
          "type": "bytes32"
        }, {
          "internalType": "bytes",
          "name": "message",
          "type": "bytes"
        }, {
          "internalType": "bytes",
          "name": "options",
          "type": "bytes"
        }, {
          "internalType": "bool",
          "name": "payInLzToken",
          "type": "bool"
        }],
        "internalType": "struct MessagingParams",
        "name": "_params",
        "type": "tuple"
      }, {
        "internalType": "address",
        "name": "_refundAddress",
        "type": "address"
      }],
      "name": "send",
      "outputs": [{
        "components": [{
          "internalType": "bytes32",
          "name": "guid",
          "type": "bytes32"
        }, {
          "internalType": "uint64",
          "name": "nonce",
          "type": "uint64"
        }, {
          "components": [{
            "internalType": "uint256",
            "name": "nativeFee",
            "type": "uint256"
          }, {
            "internalType": "uint256",
            "name": "lzTokenFee",
            "type": "uint256"
          }],
          "internalType": "struct MessagingFee",
          "name": "fee",
          "type": "tuple"
        }],
        "internalType": "struct MessagingReceipt",
        "name": "",
        "type": "tuple"
      }],
      "stateMutability": "payable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_to",
        "type": "address"
      }, {
        "internalType": "bytes32",
        "name": "_guid",
        "type": "bytes32"
      }, {
        "internalType": "uint16",
        "name": "_index",
        "type": "uint16"
      }, {
        "internalType": "bytes",
        "name": "_message",
        "type": "bytes"
      }],
      "name": "sendCompose",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_oapp",
        "type": "address"
      }, {
        "internalType": "address",
        "name": "_lib",
        "type": "address"
      }, {
        "components": [{
          "internalType": "uint32",
          "name": "eid",
          "type": "uint32"
        }, {
          "internalType": "uint32",
          "name": "configType",
          "type": "uint32"
        }, {
          "internalType": "bytes",
          "name": "config",
          "type": "bytes"
        }],
        "internalType": "struct SetConfigParam[]",
        "name": "_params",
        "type": "tuple[]"
      }],
      "name": "setConfig",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "_eid",
        "type": "uint32"
      }, {
        "internalType": "address",
        "name": "_newLib",
        "type": "address"
      }, {
        "internalType": "uint256",
        "name": "_gracePeriod",
        "type": "uint256"
      }],
      "name": "setDefaultReceiveLibrary",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "_eid",
        "type": "uint32"
      }, {
        "internalType": "address",
        "name": "_lib",
        "type": "address"
      }, {
        "internalType": "uint256",
        "name": "_expiry",
        "type": "uint256"
      }],
      "name": "setDefaultReceiveLibraryTimeout",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "_eid",
        "type": "uint32"
      }, {
        "internalType": "address",
        "name": "_newLib",
        "type": "address"
      }],
      "name": "setDefaultSendLibrary",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_delegate",
        "type": "address"
      }],
      "name": "setDelegate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_lzToken",
        "type": "address"
      }],
      "name": "setLzToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_oapp",
        "type": "address"
      }, {
        "internalType": "uint32",
        "name": "_eid",
        "type": "uint32"
      }, {
        "internalType": "address",
        "name": "_newLib",
        "type": "address"
      }, {
        "internalType": "uint256",
        "name": "_gracePeriod",
        "type": "uint256"
      }],
      "name": "setReceiveLibrary",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_oapp",
        "type": "address"
      }, {
        "internalType": "uint32",
        "name": "_eid",
        "type": "uint32"
      }, {
        "internalType": "address",
        "name": "_lib",
        "type": "address"
      }, {
        "internalType": "uint256",
        "name": "_expiry",
        "type": "uint256"
      }],
      "name": "setReceiveLibraryTimeout",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_oapp",
        "type": "address"
      }, {
        "internalType": "uint32",
        "name": "_eid",
        "type": "uint32"
      }, {
        "internalType": "address",
        "name": "_newLib",
        "type": "address"
      }],
      "name": "setSendLibrary",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_oapp",
        "type": "address"
      }, {
        "internalType": "uint32",
        "name": "_srcEid",
        "type": "uint32"
      }, {
        "internalType": "bytes32",
        "name": "_sender",
        "type": "bytes32"
      }, {
        "internalType": "uint64",
        "name": "_nonce",
        "type": "uint64"
      }],
      "name": "skip",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "components": [{
          "internalType": "uint32",
          "name": "srcEid",
          "type": "uint32"
        }, {
          "internalType": "bytes32",
          "name": "sender",
          "type": "bytes32"
        }, {
          "internalType": "uint64",
          "name": "nonce",
          "type": "uint64"
        }],
        "internalType": "struct Origin",
        "name": "_origin",
        "type": "tuple"
      }, {
        "internalType": "address",
        "name": "_receiver",
        "type": "address"
      }],
      "name": "verifiable",
      "outputs": [{
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "components": [{
          "internalType": "uint32",
          "name": "srcEid",
          "type": "uint32"
        }, {
          "internalType": "bytes32",
          "name": "sender",
          "type": "bytes32"
        }, {
          "internalType": "uint64",
          "name": "nonce",
          "type": "uint64"
        }],
        "internalType": "struct Origin",
        "name": "_origin",
        "type": "tuple"
      }, {
        "internalType": "address",
        "name": "_receiver",
        "type": "address"
      }, {
        "internalType": "bytes32",
        "name": "_payloadHash",
        "type": "bytes32"
      }],
      "name": "verify",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }],
    OApp: [{
      "inputs": [{
        "components": [{
          "internalType": "uint32",
          "name": "srcEid",
          "type": "uint32"
        }, {
          "internalType": "bytes32",
          "name": "sender",
          "type": "bytes32"
        }, {
          "internalType": "uint64",
          "name": "nonce",
          "type": "uint64"
        }],
        "internalType": "struct Origin",
        "name": "origin",
        "type": "tuple"
      }],
      "name": "allowInitializePath",
      "outputs": [{
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "endpoint",
      "outputs": [{
        "internalType": "contract ILayerZeroEndpointV2",
        "name": "",
        "type": "address"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "components": [{
          "internalType": "uint32",
          "name": "srcEid",
          "type": "uint32"
        }, {
          "internalType": "bytes32",
          "name": "sender",
          "type": "bytes32"
        }, {
          "internalType": "uint64",
          "name": "nonce",
          "type": "uint64"
        }],
        "internalType": "struct Origin",
        "name": "",
        "type": "tuple"
      }, {
        "internalType": "bytes",
        "name": "",
        "type": "bytes"
      }, {
        "internalType": "address",
        "name": "_sender",
        "type": "address"
      }],
      "name": "isComposeMsgSender",
      "outputs": [{
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "components": [{
          "internalType": "uint32",
          "name": "srcEid",
          "type": "uint32"
        }, {
          "internalType": "bytes32",
          "name": "sender",
          "type": "bytes32"
        }, {
          "internalType": "uint64",
          "name": "nonce",
          "type": "uint64"
        }],
        "internalType": "struct Origin",
        "name": "_origin",
        "type": "tuple"
      }, {
        "internalType": "bytes32",
        "name": "_guid",
        "type": "bytes32"
      }, {
        "internalType": "bytes",
        "name": "_message",
        "type": "bytes"
      }, {
        "internalType": "address",
        "name": "_executor",
        "type": "address"
      }, {
        "internalType": "bytes",
        "name": "_extraData",
        "type": "bytes"
      }],
      "name": "lzReceive",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "",
        "type": "uint32"
      }, {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }],
      "name": "nextNonce",
      "outputs": [{
        "internalType": "uint64",
        "name": "nonce",
        "type": "uint64"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "oAppVersion",
      "outputs": [{
        "internalType": "uint64",
        "name": "senderVersion",
        "type": "uint64"
      }, {
        "internalType": "uint64",
        "name": "receiverVersion",
        "type": "uint64"
      }],
      "stateMutability": "pure",
      "type": "function"
    }, {
      "inputs": [],
      "name": "owner",
      "outputs": [{
        "internalType": "address",
        "name": "",
        "type": "address"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "eid",
        "type": "uint32"
      }],
      "name": "peers",
      "outputs": [{
        "internalType": "bytes32",
        "name": "peer",
        "type": "bytes32"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_delegate",
        "type": "address"
      }],
      "name": "setDelegate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "_eid",
        "type": "uint32"
      }, {
        "internalType": "bytes32",
        "name": "_peer",
        "type": "bytes32"
      }],
      "name": "setPeer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }],
    OAppRead: [{
      "inputs": [{
        "components": [{
          "internalType": "uint32",
          "name": "srcEid",
          "type": "uint32"
        }, {
          "internalType": "bytes32",
          "name": "sender",
          "type": "bytes32"
        }, {
          "internalType": "uint64",
          "name": "nonce",
          "type": "uint64"
        }],
        "internalType": "struct Origin",
        "name": "origin",
        "type": "tuple"
      }],
      "name": "allowInitializePath",
      "outputs": [{
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "endpoint",
      "outputs": [{
        "internalType": "contract ILayerZeroEndpointV2",
        "name": "",
        "type": "address"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "components": [{
          "internalType": "uint32",
          "name": "srcEid",
          "type": "uint32"
        }, {
          "internalType": "bytes32",
          "name": "sender",
          "type": "bytes32"
        }, {
          "internalType": "uint64",
          "name": "nonce",
          "type": "uint64"
        }],
        "internalType": "struct Origin",
        "name": "",
        "type": "tuple"
      }, {
        "internalType": "bytes",
        "name": "",
        "type": "bytes"
      }, {
        "internalType": "address",
        "name": "_sender",
        "type": "address"
      }],
      "name": "isComposeMsgSender",
      "outputs": [{
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "components": [{
          "internalType": "uint32",
          "name": "srcEid",
          "type": "uint32"
        }, {
          "internalType": "bytes32",
          "name": "sender",
          "type": "bytes32"
        }, {
          "internalType": "uint64",
          "name": "nonce",
          "type": "uint64"
        }],
        "internalType": "struct Origin",
        "name": "_origin",
        "type": "tuple"
      }, {
        "internalType": "bytes32",
        "name": "_guid",
        "type": "bytes32"
      }, {
        "internalType": "bytes",
        "name": "_message",
        "type": "bytes"
      }, {
        "internalType": "address",
        "name": "_executor",
        "type": "address"
      }, {
        "internalType": "bytes",
        "name": "_extraData",
        "type": "bytes"
      }],
      "name": "lzReceive",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "",
        "type": "uint32"
      }, {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }],
      "name": "nextNonce",
      "outputs": [{
        "internalType": "uint64",
        "name": "nonce",
        "type": "uint64"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "oAppVersion",
      "outputs": [{
        "internalType": "uint64",
        "name": "senderVersion",
        "type": "uint64"
      }, {
        "internalType": "uint64",
        "name": "receiverVersion",
        "type": "uint64"
      }],
      "stateMutability": "pure",
      "type": "function"
    }, {
      "inputs": [],
      "name": "owner",
      "outputs": [{
        "internalType": "address",
        "name": "",
        "type": "address"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "eid",
        "type": "uint32"
      }],
      "name": "peers",
      "outputs": [{
        "internalType": "bytes32",
        "name": "peer",
        "type": "bytes32"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_delegate",
        "type": "address"
      }],
      "name": "setDelegate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "_eid",
        "type": "uint32"
      }, {
        "internalType": "bytes32",
        "name": "_peer",
        "type": "bytes32"
      }],
      "name": "setPeer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "_channelId",
        "type": "uint32"
      }, {
        "internalType": "bool",
        "name": "_active",
        "type": "bool"
      }],
      "name": "setReadChannel",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }],
    OFT: [{
      "inputs": [],
      "name": "SEND",
      "outputs": [{
        "internalType": "uint16",
        "name": "",
        "type": "uint16"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "SEND_AND_CALL",
      "outputs": [{
        "internalType": "uint16",
        "name": "",
        "type": "uint16"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "components": [{
          "internalType": "uint32",
          "name": "srcEid",
          "type": "uint32"
        }, {
          "internalType": "bytes32",
          "name": "sender",
          "type": "bytes32"
        }, {
          "internalType": "uint64",
          "name": "nonce",
          "type": "uint64"
        }],
        "internalType": "struct Origin",
        "name": "origin",
        "type": "tuple"
      }],
      "name": "allowInitializePath",
      "outputs": [{
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }, {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      }],
      "name": "allowance",
      "outputs": [{
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "approvalRequired",
      "outputs": [{
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }],
      "stateMutability": "pure",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "spender",
        "type": "address"
      }, {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }],
      "name": "approve",
      "outputs": [{
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "account",
        "type": "address"
      }],
      "name": "balanceOf",
      "outputs": [{
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "_eid",
        "type": "uint32"
      }, {
        "internalType": "uint16",
        "name": "_msgType",
        "type": "uint16"
      }, {
        "internalType": "bytes",
        "name": "_extraOptions",
        "type": "bytes"
      }],
      "name": "combineOptions",
      "outputs": [{
        "internalType": "bytes",
        "name": "",
        "type": "bytes"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "decimalConversionRate",
      "outputs": [{
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "decimals",
      "outputs": [{
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "endpoint",
      "outputs": [{
        "internalType": "contract ILayerZeroEndpointV2",
        "name": "",
        "type": "address"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "eid",
        "type": "uint32"
      }, {
        "internalType": "uint16",
        "name": "msgType",
        "type": "uint16"
      }],
      "name": "enforcedOptions",
      "outputs": [{
        "internalType": "bytes",
        "name": "enforcedOption",
        "type": "bytes"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "components": [{
          "internalType": "uint32",
          "name": "srcEid",
          "type": "uint32"
        }, {
          "internalType": "bytes32",
          "name": "sender",
          "type": "bytes32"
        }, {
          "internalType": "uint64",
          "name": "nonce",
          "type": "uint64"
        }],
        "internalType": "struct Origin",
        "name": "",
        "type": "tuple"
      }, {
        "internalType": "bytes",
        "name": "",
        "type": "bytes"
      }, {
        "internalType": "address",
        "name": "_sender",
        "type": "address"
      }],
      "name": "isComposeMsgSender",
      "outputs": [{
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "_eid",
        "type": "uint32"
      }, {
        "internalType": "bytes32",
        "name": "_peer",
        "type": "bytes32"
      }],
      "name": "isPeer",
      "outputs": [{
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "components": [{
          "internalType": "uint32",
          "name": "srcEid",
          "type": "uint32"
        }, {
          "internalType": "bytes32",
          "name": "sender",
          "type": "bytes32"
        }, {
          "internalType": "uint64",
          "name": "nonce",
          "type": "uint64"
        }],
        "internalType": "struct Origin",
        "name": "_origin",
        "type": "tuple"
      }, {
        "internalType": "bytes32",
        "name": "_guid",
        "type": "bytes32"
      }, {
        "internalType": "bytes",
        "name": "_message",
        "type": "bytes"
      }, {
        "internalType": "address",
        "name": "_executor",
        "type": "address"
      }, {
        "internalType": "bytes",
        "name": "_extraData",
        "type": "bytes"
      }],
      "name": "lzReceive",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    }, {
      "inputs": [{
        "components": [{
          "components": [{
            "internalType": "uint32",
            "name": "srcEid",
            "type": "uint32"
          }, {
            "internalType": "bytes32",
            "name": "sender",
            "type": "bytes32"
          }, {
            "internalType": "uint64",
            "name": "nonce",
            "type": "uint64"
          }],
          "internalType": "struct Origin",
          "name": "origin",
          "type": "tuple"
        }, {
          "internalType": "uint32",
          "name": "dstEid",
          "type": "uint32"
        }, {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }, {
          "internalType": "bytes32",
          "name": "guid",
          "type": "bytes32"
        }, {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }, {
          "internalType": "address",
          "name": "executor",
          "type": "address"
        }, {
          "internalType": "bytes",
          "name": "message",
          "type": "bytes"
        }, {
          "internalType": "bytes",
          "name": "extraData",
          "type": "bytes"
        }],
        "internalType": "struct InboundPacket[]",
        "name": "_packets",
        "type": "tuple[]"
      }],
      "name": "lzReceiveAndRevert",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    }, {
      "inputs": [{
        "components": [{
          "internalType": "uint32",
          "name": "srcEid",
          "type": "uint32"
        }, {
          "internalType": "bytes32",
          "name": "sender",
          "type": "bytes32"
        }, {
          "internalType": "uint64",
          "name": "nonce",
          "type": "uint64"
        }],
        "internalType": "struct Origin",
        "name": "_origin",
        "type": "tuple"
      }, {
        "internalType": "bytes32",
        "name": "_guid",
        "type": "bytes32"
      }, {
        "internalType": "bytes",
        "name": "_message",
        "type": "bytes"
      }, {
        "internalType": "address",
        "name": "_executor",
        "type": "address"
      }, {
        "internalType": "bytes",
        "name": "_extraData",
        "type": "bytes"
      }],
      "name": "lzReceiveSimulate",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    }, {
      "inputs": [],
      "name": "msgInspector",
      "outputs": [{
        "internalType": "address",
        "name": "",
        "type": "address"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "name",
      "outputs": [{
        "internalType": "string",
        "name": "",
        "type": "string"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "",
        "type": "uint32"
      }, {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }],
      "name": "nextNonce",
      "outputs": [{
        "internalType": "uint64",
        "name": "nonce",
        "type": "uint64"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "oApp",
      "outputs": [{
        "internalType": "address",
        "name": "",
        "type": "address"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "oAppVersion",
      "outputs": [{
        "internalType": "uint64",
        "name": "senderVersion",
        "type": "uint64"
      }, {
        "internalType": "uint64",
        "name": "receiverVersion",
        "type": "uint64"
      }],
      "stateMutability": "pure",
      "type": "function"
    }, {
      "inputs": [],
      "name": "oftVersion",
      "outputs": [{
        "internalType": "bytes4",
        "name": "interfaceId",
        "type": "bytes4"
      }, {
        "internalType": "uint64",
        "name": "version",
        "type": "uint64"
      }],
      "stateMutability": "pure",
      "type": "function"
    }, {
      "inputs": [],
      "name": "owner",
      "outputs": [{
        "internalType": "address",
        "name": "",
        "type": "address"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "eid",
        "type": "uint32"
      }],
      "name": "peers",
      "outputs": [{
        "internalType": "bytes32",
        "name": "peer",
        "type": "bytes32"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "preCrime",
      "outputs": [{
        "internalType": "address",
        "name": "",
        "type": "address"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "components": [{
          "internalType": "uint32",
          "name": "dstEid",
          "type": "uint32"
        }, {
          "internalType": "bytes32",
          "name": "to",
          "type": "bytes32"
        }, {
          "internalType": "uint256",
          "name": "amountLD",
          "type": "uint256"
        }, {
          "internalType": "uint256",
          "name": "minAmountLD",
          "type": "uint256"
        }, {
          "internalType": "bytes",
          "name": "extraOptions",
          "type": "bytes"
        }, {
          "internalType": "bytes",
          "name": "composeMsg",
          "type": "bytes"
        }, {
          "internalType": "bytes",
          "name": "oftCmd",
          "type": "bytes"
        }],
        "internalType": "struct SendParam",
        "name": "_sendParam",
        "type": "tuple"
      }],
      "name": "quoteOFT",
      "outputs": [{
        "components": [{
          "internalType": "uint256",
          "name": "minAmountLD",
          "type": "uint256"
        }, {
          "internalType": "uint256",
          "name": "maxAmountLD",
          "type": "uint256"
        }],
        "internalType": "struct OFTLimit",
        "name": "oftLimit",
        "type": "tuple"
      }, {
        "components": [{
          "internalType": "int256",
          "name": "feeAmountLD",
          "type": "int256"
        }, {
          "internalType": "string",
          "name": "description",
          "type": "string"
        }],
        "internalType": "struct OFTFeeDetail[]",
        "name": "oftFeeDetails",
        "type": "tuple[]"
      }, {
        "components": [{
          "internalType": "uint256",
          "name": "amountSentLD",
          "type": "uint256"
        }, {
          "internalType": "uint256",
          "name": "amountReceivedLD",
          "type": "uint256"
        }],
        "internalType": "struct OFTReceipt",
        "name": "oftReceipt",
        "type": "tuple"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "components": [{
          "internalType": "uint32",
          "name": "dstEid",
          "type": "uint32"
        }, {
          "internalType": "bytes32",
          "name": "to",
          "type": "bytes32"
        }, {
          "internalType": "uint256",
          "name": "amountLD",
          "type": "uint256"
        }, {
          "internalType": "uint256",
          "name": "minAmountLD",
          "type": "uint256"
        }, {
          "internalType": "bytes",
          "name": "extraOptions",
          "type": "bytes"
        }, {
          "internalType": "bytes",
          "name": "composeMsg",
          "type": "bytes"
        }, {
          "internalType": "bytes",
          "name": "oftCmd",
          "type": "bytes"
        }],
        "internalType": "struct SendParam",
        "name": "_sendParam",
        "type": "tuple"
      }, {
        "internalType": "bool",
        "name": "_payInLzToken",
        "type": "bool"
      }],
      "name": "quoteSend",
      "outputs": [{
        "components": [{
          "internalType": "uint256",
          "name": "nativeFee",
          "type": "uint256"
        }, {
          "internalType": "uint256",
          "name": "lzTokenFee",
          "type": "uint256"
        }],
        "internalType": "struct MessagingFee",
        "name": "msgFee",
        "type": "tuple"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "components": [{
          "internalType": "uint32",
          "name": "dstEid",
          "type": "uint32"
        }, {
          "internalType": "bytes32",
          "name": "to",
          "type": "bytes32"
        }, {
          "internalType": "uint256",
          "name": "amountLD",
          "type": "uint256"
        }, {
          "internalType": "uint256",
          "name": "minAmountLD",
          "type": "uint256"
        }, {
          "internalType": "bytes",
          "name": "extraOptions",
          "type": "bytes"
        }, {
          "internalType": "bytes",
          "name": "composeMsg",
          "type": "bytes"
        }, {
          "internalType": "bytes",
          "name": "oftCmd",
          "type": "bytes"
        }],
        "internalType": "struct SendParam",
        "name": "_sendParam",
        "type": "tuple"
      }, {
        "components": [{
          "internalType": "uint256",
          "name": "nativeFee",
          "type": "uint256"
        }, {
          "internalType": "uint256",
          "name": "lzTokenFee",
          "type": "uint256"
        }],
        "internalType": "struct MessagingFee",
        "name": "_fee",
        "type": "tuple"
      }, {
        "internalType": "address",
        "name": "_refundAddress",
        "type": "address"
      }],
      "name": "send",
      "outputs": [{
        "components": [{
          "internalType": "bytes32",
          "name": "guid",
          "type": "bytes32"
        }, {
          "internalType": "uint64",
          "name": "nonce",
          "type": "uint64"
        }, {
          "components": [{
            "internalType": "uint256",
            "name": "nativeFee",
            "type": "uint256"
          }, {
            "internalType": "uint256",
            "name": "lzTokenFee",
            "type": "uint256"
          }],
          "internalType": "struct MessagingFee",
          "name": "fee",
          "type": "tuple"
        }],
        "internalType": "struct MessagingReceipt",
        "name": "msgReceipt",
        "type": "tuple"
      }, {
        "components": [{
          "internalType": "uint256",
          "name": "amountSentLD",
          "type": "uint256"
        }, {
          "internalType": "uint256",
          "name": "amountReceivedLD",
          "type": "uint256"
        }],
        "internalType": "struct OFTReceipt",
        "name": "oftReceipt",
        "type": "tuple"
      }],
      "stateMutability": "payable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_delegate",
        "type": "address"
      }],
      "name": "setDelegate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "components": [{
          "internalType": "uint32",
          "name": "eid",
          "type": "uint32"
        }, {
          "internalType": "uint16",
          "name": "msgType",
          "type": "uint16"
        }, {
          "internalType": "bytes",
          "name": "options",
          "type": "bytes"
        }],
        "internalType": "struct EnforcedOptionParam[]",
        "name": "_enforcedOptions",
        "type": "tuple[]"
      }],
      "name": "setEnforcedOptions",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_msgInspector",
        "type": "address"
      }],
      "name": "setMsgInspector",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "_eid",
        "type": "uint32"
      }, {
        "internalType": "bytes32",
        "name": "_peer",
        "type": "bytes32"
      }],
      "name": "setPeer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_preCrime",
        "type": "address"
      }],
      "name": "setPreCrime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [],
      "name": "sharedDecimals",
      "outputs": [{
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "symbol",
      "outputs": [{
        "internalType": "string",
        "name": "",
        "type": "string"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "token",
      "outputs": [{
        "internalType": "address",
        "name": "",
        "type": "address"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [{
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "to",
        "type": "address"
      }, {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }],
      "name": "transfer",
      "outputs": [{
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "from",
        "type": "address"
      }, {
        "internalType": "address",
        "name": "to",
        "type": "address"
      }, {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }],
      "name": "transferFrom",
      "outputs": [{
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }],
    OFTAdapter: [{
      "inputs": [],
      "name": "SEND",
      "outputs": [{
        "internalType": "uint16",
        "name": "",
        "type": "uint16"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "SEND_AND_CALL",
      "outputs": [{
        "internalType": "uint16",
        "name": "",
        "type": "uint16"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "components": [{
          "internalType": "uint32",
          "name": "srcEid",
          "type": "uint32"
        }, {
          "internalType": "bytes32",
          "name": "sender",
          "type": "bytes32"
        }, {
          "internalType": "uint64",
          "name": "nonce",
          "type": "uint64"
        }],
        "internalType": "struct Origin",
        "name": "origin",
        "type": "tuple"
      }],
      "name": "allowInitializePath",
      "outputs": [{
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "approvalRequired",
      "outputs": [{
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }],
      "stateMutability": "pure",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "_eid",
        "type": "uint32"
      }, {
        "internalType": "uint16",
        "name": "_msgType",
        "type": "uint16"
      }, {
        "internalType": "bytes",
        "name": "_extraOptions",
        "type": "bytes"
      }],
      "name": "combineOptions",
      "outputs": [{
        "internalType": "bytes",
        "name": "",
        "type": "bytes"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "decimalConversionRate",
      "outputs": [{
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "endpoint",
      "outputs": [{
        "internalType": "contract ILayerZeroEndpointV2",
        "name": "",
        "type": "address"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "eid",
        "type": "uint32"
      }, {
        "internalType": "uint16",
        "name": "msgType",
        "type": "uint16"
      }],
      "name": "enforcedOptions",
      "outputs": [{
        "internalType": "bytes",
        "name": "enforcedOption",
        "type": "bytes"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "components": [{
          "internalType": "uint32",
          "name": "srcEid",
          "type": "uint32"
        }, {
          "internalType": "bytes32",
          "name": "sender",
          "type": "bytes32"
        }, {
          "internalType": "uint64",
          "name": "nonce",
          "type": "uint64"
        }],
        "internalType": "struct Origin",
        "name": "",
        "type": "tuple"
      }, {
        "internalType": "bytes",
        "name": "",
        "type": "bytes"
      }, {
        "internalType": "address",
        "name": "_sender",
        "type": "address"
      }],
      "name": "isComposeMsgSender",
      "outputs": [{
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "_eid",
        "type": "uint32"
      }, {
        "internalType": "bytes32",
        "name": "_peer",
        "type": "bytes32"
      }],
      "name": "isPeer",
      "outputs": [{
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "components": [{
          "internalType": "uint32",
          "name": "srcEid",
          "type": "uint32"
        }, {
          "internalType": "bytes32",
          "name": "sender",
          "type": "bytes32"
        }, {
          "internalType": "uint64",
          "name": "nonce",
          "type": "uint64"
        }],
        "internalType": "struct Origin",
        "name": "_origin",
        "type": "tuple"
      }, {
        "internalType": "bytes32",
        "name": "_guid",
        "type": "bytes32"
      }, {
        "internalType": "bytes",
        "name": "_message",
        "type": "bytes"
      }, {
        "internalType": "address",
        "name": "_executor",
        "type": "address"
      }, {
        "internalType": "bytes",
        "name": "_extraData",
        "type": "bytes"
      }],
      "name": "lzReceive",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    }, {
      "inputs": [{
        "components": [{
          "components": [{
            "internalType": "uint32",
            "name": "srcEid",
            "type": "uint32"
          }, {
            "internalType": "bytes32",
            "name": "sender",
            "type": "bytes32"
          }, {
            "internalType": "uint64",
            "name": "nonce",
            "type": "uint64"
          }],
          "internalType": "struct Origin",
          "name": "origin",
          "type": "tuple"
        }, {
          "internalType": "uint32",
          "name": "dstEid",
          "type": "uint32"
        }, {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }, {
          "internalType": "bytes32",
          "name": "guid",
          "type": "bytes32"
        }, {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }, {
          "internalType": "address",
          "name": "executor",
          "type": "address"
        }, {
          "internalType": "bytes",
          "name": "message",
          "type": "bytes"
        }, {
          "internalType": "bytes",
          "name": "extraData",
          "type": "bytes"
        }],
        "internalType": "struct InboundPacket[]",
        "name": "_packets",
        "type": "tuple[]"
      }],
      "name": "lzReceiveAndRevert",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    }, {
      "inputs": [{
        "components": [{
          "internalType": "uint32",
          "name": "srcEid",
          "type": "uint32"
        }, {
          "internalType": "bytes32",
          "name": "sender",
          "type": "bytes32"
        }, {
          "internalType": "uint64",
          "name": "nonce",
          "type": "uint64"
        }],
        "internalType": "struct Origin",
        "name": "_origin",
        "type": "tuple"
      }, {
        "internalType": "bytes32",
        "name": "_guid",
        "type": "bytes32"
      }, {
        "internalType": "bytes",
        "name": "_message",
        "type": "bytes"
      }, {
        "internalType": "address",
        "name": "_executor",
        "type": "address"
      }, {
        "internalType": "bytes",
        "name": "_extraData",
        "type": "bytes"
      }],
      "name": "lzReceiveSimulate",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    }, {
      "inputs": [],
      "name": "msgInspector",
      "outputs": [{
        "internalType": "address",
        "name": "",
        "type": "address"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "",
        "type": "uint32"
      }, {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }],
      "name": "nextNonce",
      "outputs": [{
        "internalType": "uint64",
        "name": "nonce",
        "type": "uint64"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "oApp",
      "outputs": [{
        "internalType": "address",
        "name": "",
        "type": "address"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "oAppVersion",
      "outputs": [{
        "internalType": "uint64",
        "name": "senderVersion",
        "type": "uint64"
      }, {
        "internalType": "uint64",
        "name": "receiverVersion",
        "type": "uint64"
      }],
      "stateMutability": "pure",
      "type": "function"
    }, {
      "inputs": [],
      "name": "oftVersion",
      "outputs": [{
        "internalType": "bytes4",
        "name": "interfaceId",
        "type": "bytes4"
      }, {
        "internalType": "uint64",
        "name": "version",
        "type": "uint64"
      }],
      "stateMutability": "pure",
      "type": "function"
    }, {
      "inputs": [],
      "name": "owner",
      "outputs": [{
        "internalType": "address",
        "name": "",
        "type": "address"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "eid",
        "type": "uint32"
      }],
      "name": "peers",
      "outputs": [{
        "internalType": "bytes32",
        "name": "peer",
        "type": "bytes32"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "preCrime",
      "outputs": [{
        "internalType": "address",
        "name": "",
        "type": "address"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "components": [{
          "internalType": "uint32",
          "name": "dstEid",
          "type": "uint32"
        }, {
          "internalType": "bytes32",
          "name": "to",
          "type": "bytes32"
        }, {
          "internalType": "uint256",
          "name": "amountLD",
          "type": "uint256"
        }, {
          "internalType": "uint256",
          "name": "minAmountLD",
          "type": "uint256"
        }, {
          "internalType": "bytes",
          "name": "extraOptions",
          "type": "bytes"
        }, {
          "internalType": "bytes",
          "name": "composeMsg",
          "type": "bytes"
        }, {
          "internalType": "bytes",
          "name": "oftCmd",
          "type": "bytes"
        }],
        "internalType": "struct SendParam",
        "name": "_sendParam",
        "type": "tuple"
      }],
      "name": "quoteOFT",
      "outputs": [{
        "components": [{
          "internalType": "uint256",
          "name": "minAmountLD",
          "type": "uint256"
        }, {
          "internalType": "uint256",
          "name": "maxAmountLD",
          "type": "uint256"
        }],
        "internalType": "struct OFTLimit",
        "name": "oftLimit",
        "type": "tuple"
      }, {
        "components": [{
          "internalType": "int256",
          "name": "feeAmountLD",
          "type": "int256"
        }, {
          "internalType": "string",
          "name": "description",
          "type": "string"
        }],
        "internalType": "struct OFTFeeDetail[]",
        "name": "oftFeeDetails",
        "type": "tuple[]"
      }, {
        "components": [{
          "internalType": "uint256",
          "name": "amountSentLD",
          "type": "uint256"
        }, {
          "internalType": "uint256",
          "name": "amountReceivedLD",
          "type": "uint256"
        }],
        "internalType": "struct OFTReceipt",
        "name": "oftReceipt",
        "type": "tuple"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "components": [{
          "internalType": "uint32",
          "name": "dstEid",
          "type": "uint32"
        }, {
          "internalType": "bytes32",
          "name": "to",
          "type": "bytes32"
        }, {
          "internalType": "uint256",
          "name": "amountLD",
          "type": "uint256"
        }, {
          "internalType": "uint256",
          "name": "minAmountLD",
          "type": "uint256"
        }, {
          "internalType": "bytes",
          "name": "extraOptions",
          "type": "bytes"
        }, {
          "internalType": "bytes",
          "name": "composeMsg",
          "type": "bytes"
        }, {
          "internalType": "bytes",
          "name": "oftCmd",
          "type": "bytes"
        }],
        "internalType": "struct SendParam",
        "name": "_sendParam",
        "type": "tuple"
      }, {
        "internalType": "bool",
        "name": "_payInLzToken",
        "type": "bool"
      }],
      "name": "quoteSend",
      "outputs": [{
        "components": [{
          "internalType": "uint256",
          "name": "nativeFee",
          "type": "uint256"
        }, {
          "internalType": "uint256",
          "name": "lzTokenFee",
          "type": "uint256"
        }],
        "internalType": "struct MessagingFee",
        "name": "msgFee",
        "type": "tuple"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "components": [{
          "internalType": "uint32",
          "name": "dstEid",
          "type": "uint32"
        }, {
          "internalType": "bytes32",
          "name": "to",
          "type": "bytes32"
        }, {
          "internalType": "uint256",
          "name": "amountLD",
          "type": "uint256"
        }, {
          "internalType": "uint256",
          "name": "minAmountLD",
          "type": "uint256"
        }, {
          "internalType": "bytes",
          "name": "extraOptions",
          "type": "bytes"
        }, {
          "internalType": "bytes",
          "name": "composeMsg",
          "type": "bytes"
        }, {
          "internalType": "bytes",
          "name": "oftCmd",
          "type": "bytes"
        }],
        "internalType": "struct SendParam",
        "name": "_sendParam",
        "type": "tuple"
      }, {
        "components": [{
          "internalType": "uint256",
          "name": "nativeFee",
          "type": "uint256"
        }, {
          "internalType": "uint256",
          "name": "lzTokenFee",
          "type": "uint256"
        }],
        "internalType": "struct MessagingFee",
        "name": "_fee",
        "type": "tuple"
      }, {
        "internalType": "address",
        "name": "_refundAddress",
        "type": "address"
      }],
      "name": "send",
      "outputs": [{
        "components": [{
          "internalType": "bytes32",
          "name": "guid",
          "type": "bytes32"
        }, {
          "internalType": "uint64",
          "name": "nonce",
          "type": "uint64"
        }, {
          "components": [{
            "internalType": "uint256",
            "name": "nativeFee",
            "type": "uint256"
          }, {
            "internalType": "uint256",
            "name": "lzTokenFee",
            "type": "uint256"
          }],
          "internalType": "struct MessagingFee",
          "name": "fee",
          "type": "tuple"
        }],
        "internalType": "struct MessagingReceipt",
        "name": "msgReceipt",
        "type": "tuple"
      }, {
        "components": [{
          "internalType": "uint256",
          "name": "amountSentLD",
          "type": "uint256"
        }, {
          "internalType": "uint256",
          "name": "amountReceivedLD",
          "type": "uint256"
        }],
        "internalType": "struct OFTReceipt",
        "name": "oftReceipt",
        "type": "tuple"
      }],
      "stateMutability": "payable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_delegate",
        "type": "address"
      }],
      "name": "setDelegate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "components": [{
          "internalType": "uint32",
          "name": "eid",
          "type": "uint32"
        }, {
          "internalType": "uint16",
          "name": "msgType",
          "type": "uint16"
        }, {
          "internalType": "bytes",
          "name": "options",
          "type": "bytes"
        }],
        "internalType": "struct EnforcedOptionParam[]",
        "name": "_enforcedOptions",
        "type": "tuple[]"
      }],
      "name": "setEnforcedOptions",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_msgInspector",
        "type": "address"
      }],
      "name": "setMsgInspector",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "_eid",
        "type": "uint32"
      }, {
        "internalType": "bytes32",
        "name": "_peer",
        "type": "bytes32"
      }],
      "name": "setPeer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "_preCrime",
        "type": "address"
      }],
      "name": "setPreCrime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }, {
      "inputs": [],
      "name": "sharedDecimals",
      "outputs": [{
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [],
      "name": "token",
      "outputs": [{
        "internalType": "address",
        "name": "",
        "type": "address"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }],
    Executor: [{
      "inputs": [{
        "internalType": "uint32",
        "name": "_dstEid",
        "type": "uint32"
      }, {
        "internalType": "address",
        "name": "_sender",
        "type": "address"
      }, {
        "internalType": "uint256",
        "name": "_calldataSize",
        "type": "uint256"
      }, {
        "internalType": "bytes",
        "name": "_options",
        "type": "bytes"
      }],
      "name": "getFee",
      "outputs": [{
        "internalType": "uint256",
        "name": "fee",
        "type": "uint256"
      }],
      "stateMutability": "view",
      "type": "function"
    }, {
      "inputs": [{
        "internalType": "uint32",
        "name": "_dstEid",
        "type": "uint32"
      }],
      "name": "dstConfig",
      "outputs": [{
        "components": [{
          "internalType": "uint64",
          "name": "baseGas",
          "type": "uint64"
        }, {
          "internalType": "uint16",
          "name": "multiplierBps",
          "type": "uint16"
        }, {
          "internalType": "uint128",
          "name": "floorMarginUSD",
          "type": "uint128"
        }, {
          "internalType": "uint128",
          "name": "nativeCap",
          "type": "uint128"
        }],
        "internalType": "struct IExecutor.DstConfig",
        "name": "",
        "type": "tuple"
      }],
      "stateMutability": "view",
      "type": "function"
    }]
  };
  const EMBEDDED_CHAINS = [{
    chainId: 1,
    name: 'Ethereum',
    chainKey: 'ethereum',
    rpc: 'https://eth.llamarpc.com',
    endpointV2: '0x1a44076050125825900e736c501f859c50fE728c'
  }, {
    chainId: 56,
    name: 'BNB Chain',
    chainKey: 'bsc',
    rpc: 'https://bsc-dataseed.binance.org',
    endpointV2: '0x1a44076050125825900e736c501f859c50fE728c'
  }, {
    chainId: 137,
    name: 'Polygon',
    chainKey: 'polygon',
    rpc: 'https://polygon-rpc.com',
    endpointV2: '0x1a44076050125825900e736c501f859c50fE728c'
  }, {
    chainId: 42161,
    name: 'Arbitrum One',
    chainKey: 'arbitrum',
    rpc: 'https://arb1.arbitrum.io/rpc',
    endpointV2: '0x1a44076050125825900e736c501f859c50fE728c'
  }, {
    chainId: 10,
    name: 'Optimism',
    chainKey: 'optimism',
    rpc: 'https://mainnet.optimism.io',
    endpointV2: '0x1a44076050125825900e736c501f859c50fE728c'
  }, {
    chainId: 8453,
    name: 'Base',
    chainKey: 'base',
    rpc: 'https://mainnet.base.org',
    endpointV2: '0x1a44076050125825900e736c501f859c50fE728c'
  }, {
    chainId: 43114,
    name: 'Avalanche',
    chainKey: 'avalanche',
    rpc: 'https://api.avax.network/ext/bc/C/rpc',
    endpointV2: '0x1a44076050125825900e736c501f859c50fE728c'
  }, {
    chainId: 250,
    name: 'Fantom',
    chainKey: 'fantom',
    rpc: 'https://rpc.ftm.tools',
    endpointV2: '0x1a44076050125825900e736c501f859c50fE728c'
  }, {
    chainId: 324,
    name: 'zkSync Era',
    chainKey: 'zksync',
    rpc: 'https://mainnet.era.zksync.io',
    endpointV2: '0xd07C30aF3Ff30D96BDc9c6044958230Eb797DDBF'
  }, {
    chainId: 59144,
    name: 'Linea',
    chainKey: 'linea',
    rpc: 'https://rpc.linea.build',
    endpointV2: '0x1a44076050125825900e736c501f859c50fE728c'
  }, {
    chainId: 5000,
    name: 'Mantle',
    chainKey: 'mantle',
    rpc: 'https://rpc.mantle.xyz',
    endpointV2: '0x1a44076050125825900e736c501f859c50fE728c'
  }, {
    chainId: 534352,
    name: 'Scroll',
    chainKey: 'scroll',
    rpc: 'https://rpc.scroll.io',
    endpointV2: '0x1a44076050125825900e736c501f859c50fE728c'
  }, {
    chainId: 1101,
    name: 'Polygon zkEVM',
    chainKey: 'polygon-zkevm',
    rpc: 'https://zkevm-rpc.com',
    endpointV2: '0x1a44076050125825900e736c501f859c50fE728c'
  }, {
    chainId: 81457,
    name: 'Blast',
    chainKey: 'blast',
    rpc: 'https://rpc.blast.io',
    endpointV2: '0x1a44076050125825900e736c501f859c50fE728c'
  }, {
    chainId: 34443,
    name: 'Mode',
    chainKey: 'mode',
    rpc: 'https://mainnet.mode.network',
    endpointV2: '0x1a44076050125825900e736c501f859c50fE728c'
  }];
  const contractDeployments = {
    OApp: [{
      chainId: 1,
      address: '0x6985884c4392d348587b19cb9eaaf157f13271cd',
      name: 'ZRO Token'
    }, {
      chainId: 10,
      address: '0x6985884c4392d348587b19cb9eaaf157f13271cd',
      name: 'ZRO Token'
    }, {
      chainId: 56,
      address: '0x6985884c4392d348587b19cb9eaaf157f13271cd',
      name: 'ZRO Token'
    }, {
      chainId: 137,
      address: '0x6985884c4392d348587b19cb9eaaf157f13271cd',
      name: 'ZRO Token'
    }, {
      chainId: 8453,
      address: '0x6985884c4392d348587b19cb9eaaf157f13271cd',
      name: 'ZRO Token'
    }, {
      chainId: 42161,
      address: '0x6985884c4392d348587b19cb9eaaf157f13271cd',
      name: 'ZRO Token'
    }, {
      chainId: 43114,
      address: '0x6985884c4392d348587b19cb9eaaf157f13271cd',
      name: 'ZRO Token'
    }],
    OAppRead: [],
    OFT: [{
      chainId: 1,
      address: '0x6985884c4392d348587b19cb9eaaf157f13271cd',
      name: 'ZRO Token'
    }, {
      chainId: 10,
      address: '0x6985884c4392d348587b19cb9eaaf157f13271cd',
      name: 'ZRO Token'
    }, {
      chainId: 56,
      address: '0x6985884c4392d348587b19cb9eaaf157f13271cd',
      name: 'ZRO Token'
    }, {
      chainId: 137,
      address: '0x6985884c4392d348587b19cb9eaaf157f13271cd',
      name: 'ZRO Token'
    }, {
      chainId: 8453,
      address: '0x6985884c4392d348587b19cb9eaaf157f13271cd',
      name: 'ZRO Token'
    }, {
      chainId: 42161,
      address: '0x6985884c4392d348587b19cb9eaaf157f13271cd',
      name: 'ZRO Token'
    }, {
      chainId: 43114,
      address: '0x6985884c4392d348587b19cb9eaaf157f13271cd',
      name: 'ZRO Token'
    }],
    OFTAdapter: [],
    EndpointV2: [{
      chainId: 1,
      address: '0x1a44076050125825900e736c501f859c50fE728c',
      name: 'Endpoint V2'
    }, {
      chainId: 56,
      address: '0x1a44076050125825900e736c501f859c50fE728c',
      name: 'Endpoint V2'
    }, {
      chainId: 42161,
      address: '0x1a44076050125825900e736c501f859c50fE728c',
      name: 'Endpoint V2'
    }, {
      chainId: 10,
      address: '0x1a44076050125825900e736c501f859c50fE728c',
      name: 'Endpoint V2'
    }, {
      chainId: 137,
      address: '0x1a44076050125825900e736c501f859c50fE728c',
      name: 'Endpoint V2'
    }, {
      chainId: 8453,
      address: '0x1a44076050125825900e736c501f859c50fE728c',
      name: 'Endpoint V2'
    }],
    Executor: [{
      chainId: 1,
      address: '0x173272739Bd7Aa6e4e214714048a9fE699453059',
      name: 'LZ Executor'
    }, {
      chainId: 56,
      address: '0x173272739Bd7Aa6e4e214714048a9fE699453059',
      name: 'LZ Executor'
    }, {
      chainId: 42161,
      address: '0x173272739Bd7Aa6e4e214714048a9fE699453059',
      name: 'LZ Executor'
    }, {
      chainId: 10,
      address: '0x173272739Bd7Aa6e4e214714048a9fE699453059',
      name: 'LZ Executor'
    }, {
      chainId: 137,
      address: '0x173272739Bd7Aa6e4e214714048a9fE699453059',
      name: 'LZ Executor'
    }, {
      chainId: 8453,
      address: '0x173272739Bd7Aa6e4e214714048a9fE699453059',
      name: 'LZ Executor'
    }]
  };
  const getPlaceholderForType = type => {
    if (type.includes('address')) return '0x...';
    if (type.includes('uint')) return '0';
    if (type.includes('int')) return '0';
    if (type.includes('bool')) return 'true or false';
    if (type.includes('bytes32')) return '0x... (32 bytes)';
    if (type.includes('bytes')) return '0x...';
    if (type.includes('string')) return 'text';
    return 'value';
  };
  const [isDark, setIsDark] = useState(true);
  const [selectedChain, setSelectedChain] = useState(disableChainSelection ? null : 1);
  const [contract, setContract] = useState(null);
  const [inputs, setInputs] = useState({});
  const [result, setResult] = useState(null);
  const [loading, setLoading] = useState(false);
  const [error, setError] = useState(null);
  const [walletConnected, setWalletConnected] = useState(false);
  const [isExpanded, setIsExpanded] = useState(false);
  const [isChainDropdownOpen, setIsChainDropdownOpen] = useState(false);
  const [chainSearchTerm, setChainSearchTerm] = useState('');
  const [customAddress, setCustomAddress] = useState('');
  const [isTruncated, setIsTruncated] = useState(false);
  const [ethersLib, setEthersLib] = useState(null);
  const [isLoadingData, setIsLoadingData] = useState(false);
  const [iconErrors, setIconErrors] = useState({});
  const [loadedAbi, setLoadedAbi] = useState(null);
  const [signer, setSigner] = useState(null);
  const abi = abiProp || loadedAbi;
  const chainDropdownRef = useRef(null);
  const codeRef = useRef(null);
  useEffect(() => {
    if (typeof window === 'undefined') return;
    const checkTheme = () => setIsDark(document.documentElement.classList.contains('dark'));
    checkTheme();
    const observer = new MutationObserver(checkTheme);
    observer.observe(document.documentElement, {
      attributes: true,
      attributeFilter: ['class']
    });
    return () => observer.disconnect();
  }, []);
  useEffect(() => {
    if (typeof window === 'undefined') return;
    if (window.ethers) {
      setEthersLib(window.ethers);
      return;
    }
    const script = document.createElement('script');
    script.src = 'https://cdnjs.cloudflare.com/ajax/libs/ethers/5.7.2/ethers.umd.min.js';
    script.async = true;
    script.onload = () => {
      if (window.ethers) {
        setEthersLib(window.ethers);
      }
    };
    document.head.appendChild(script);
  }, []);
  useEffect(() => {
    if (abiProp) return;
    const embeddedAbi = EMBEDDED_ABIS[contractName];
    if (embeddedAbi) {
      setLoadedAbi(embeddedAbi);
    } else {
      setError('No ABI available for ' + contractName);
    }
  }, [contractName, abiProp]);
  const availableChains = useMemo(() => {
    if (disableChainSelection) return [];
    return EMBEDDED_CHAINS.slice().sort((a, b) => a.name.localeCompare(b.name));
  }, [disableChainSelection]);
  const currentChain = availableChains.find(chain => chain.chainId === selectedChain);
  const chainDisplayName = currentChain?.name || 'Select Chain';
  const chainKey = currentChain?.chainKey || 'default';
  const functionAbi = abi?.find(item => item.type === 'function' && item.name === functionName);
  const getDeploymentAddress = () => {
    if (contractName === 'EndpointV2') {
      const chain = EMBEDDED_CHAINS.find(c => c.chainId === selectedChain);
      return chain?.endpointV2;
    }
    const deployments = contractDeployments[contractName] || [];
    const dep = deployments.find(d => d.chainId === selectedChain);
    return dep?.address;
  };
  const defaultDeploymentAddress = getDeploymentAddress();
  const deploymentAddress = defaultDeploymentAddress || customAddress;
  useEffect(() => {
    if (availableChains.length > 0 && !currentChain) {
      setSelectedChain(availableChains[0].chainId);
    }
  }, [availableChains, currentChain]);
  useEffect(() => {
    if (defaultDeploymentAddress) setCustomAddress('');
  }, [selectedChain, defaultDeploymentAddress]);
  useEffect(() => {
    const checkTruncation = () => {
      if (codeRef.current) {
        setIsTruncated(codeRef.current.scrollWidth > codeRef.current.clientWidth);
      }
    };
    checkTruncation();
    const timeout = setTimeout(checkTruncation, 100);
    return () => clearTimeout(timeout);
  }, [functionAbi, isExpanded]);
  const isReadOnly = functionAbi && (functionAbi.stateMutability === 'view' || functionAbi.stateMutability === 'pure');
  const NetworkIcon = ({chainKey, size = 20}) => {
    const hasError = iconErrors['network-' + chainKey];
    const iconUrl = hasError ? 'https://icons-ckg.pages.dev/lz-scan/networks/default.svg' : 'https://icons-ckg.pages.dev/lz-scan/networks/' + chainKey + '.svg';
    return <span style={{
      display: 'inline-block',
      width: size,
      height: size,
      flexShrink: 0,
      backgroundImage: 'url(' + iconUrl + ')',
      backgroundSize: 'contain',
      backgroundRepeat: 'no-repeat',
      backgroundPosition: 'center',
      borderRadius: 4
    }} className={isDark ? '' : 'invert brightness-110 contrast-100'} />;
  };
  const connectWallet = async () => {
    if (!ethersLib) {
      setError('Ethers library not loaded yet');
      return;
    }
    try {
      if (!window.ethereum) {
        setError('Please install MetaMask or another Web3 wallet');
        return;
      }
      const accounts = await window.ethereum.request({
        method: 'eth_requestAccounts'
      });
      if (accounts.length > 0) {
        try {
          await window.ethereum.request({
            method: 'wallet_switchEthereumChain',
            params: [{
              chainId: '0x' + selectedChain.toString(16)
            }]
          });
        } catch (switchError) {
          if (switchError.code === 4902 && currentChain) {
            const chainRpcData = chainlistRPCs.find(c => c.chainId === selectedChain);
            await window.ethereum.request({
              method: 'wallet_addEthereumChain',
              params: [{
                chainId: '0x' + selectedChain.toString(16),
                chainName: currentChain.name,
                rpcUrls: [currentChain.rpc],
                nativeCurrency: chainRpcData?.nativeCurrency,
                blockExplorerUrls: chainRpcData?.explorers?.map(e => e.url) || []
              }]
            });
          }
        }
        const web3Provider = new ethersLib.providers.Web3Provider(window.ethereum);
        const web3Signer = web3Provider.getSigner();
        setSigner(web3Signer);
        setWalletConnected(true);
        setError(null);
      }
    } catch (err) {
      setError(err.message);
    }
  };
  useEffect(() => {
    if (!ethersLib || !deploymentAddress || !currentChain || !currentChain.rpc || !abi) return;
    try {
      if (signer) {
        const contractInstance = new ethersLib.Contract(deploymentAddress, abi, signer);
        setContract(contractInstance);
      } else if (isReadOnly) {
        const readProvider = new ethersLib.providers.JsonRpcProvider(currentChain.rpc);
        const contractInstance = new ethersLib.Contract(deploymentAddress, abi, readProvider);
        setContract(contractInstance);
      }
    } catch (err) {
      console.error('Error initializing contract:', err);
    }
  }, [ethersLib, signer, deploymentAddress, abi, currentChain, isReadOnly]);
  useEffect(() => {
    const handleClickOutside = event => {
      if (chainDropdownRef.current && !chainDropdownRef.current.contains(event.target)) {
        setIsChainDropdownOpen(false);
        setChainSearchTerm('');
      }
    };
    if (isChainDropdownOpen) {
      document.addEventListener('mousedown', handleClickOutside);
    }
    return () => document.removeEventListener('mousedown', handleClickOutside);
  }, [isChainDropdownOpen]);
  const handleInputChange = (paramPath, value) => {
    setInputs(prev => ({
      ...prev,
      [paramPath]: value
    }));
  };
  const parseValue = (value, type) => {
    const val = (value || '').trim();
    if (type.endsWith('[]')) {
      if (!val || val === '[]') return [];
      try {
        return JSON.parse(val);
      } catch {
        return val.split(',').map(v => parseValue(v.trim(), type.slice(0, -2)));
      }
    }
    if (type === 'bool') {
      return val.toLowerCase() === 'true' || val === '1';
    }
    if (type.startsWith('uint') || type.startsWith('int')) {
      return val || '0';
    }
    if (type === 'address') {
      return val || '0x0000000000000000000000000000000000000000';
    }
    if (type === 'bytes32') {
      return val || '0x0000000000000000000000000000000000000000000000000000000000000000';
    }
    if (type.match(/^bytes\d+$/)) {
      const size = parseInt(type.slice(5));
      return val || '0x' + ('00').repeat(size);
    }
    if (type === 'bytes') {
      return val || '0x';
    }
    return val;
  };
  const prepareArguments = () => {
    const args = [];
    functionAbi.inputs.forEach((input, index) => {
      if (input.type.startsWith('tuple')) {
        const tupleValues = [];
        if (input.components) {
          input.components.forEach((component, compIndex) => {
            const path = (input.name || index) + '.' + (component.name || compIndex);
            tupleValues.push(parseValue(inputs[path], component.type));
          });
        }
        args.push(tupleValues);
      } else {
        const path = input.name || index.toString();
        args.push(parseValue(inputs[path], input.type));
      }
    });
    return args;
  };
  const executeFunction = async () => {
    if (!functionAbi) return;
    if (!isReadOnly && !walletConnected) {
      setError('Please connect your wallet to send transactions');
      return;
    }
    if (!contract) {
      setError('Contract not initialized. Please check the network connection.');
      return;
    }
    setLoading(true);
    setError(null);
    setResult(null);
    try {
      const args = prepareArguments();
      let tx;
      if (isReadOnly) {
        tx = await contract[functionName](...args);
        setResult({
          type: 'read',
          data: tx,
          formatted: formatResult(tx)
        });
      } else {
        tx = await contract[functionName](...args);
        setResult({
          type: 'write',
          hash: tx.hash,
          status: 'pending'
        });
        const receipt = await tx.wait();
        setResult({
          type: 'write',
          hash: tx.hash,
          status: 'confirmed',
          blockNumber: receipt.blockNumber
        });
      }
    } catch (err) {
      setError(err.message);
    } finally {
      setLoading(false);
    }
  };
  const formatResult = data => {
    if (data === null || data === undefined) return 'null';
    if (typeof data === 'object' && data._isBigNumber) return data.toString();
    if (Array.isArray(data)) return data.map(formatResult);
    if (typeof data === 'object') {
      const result = {};
      Object.keys(data).forEach(key => {
        if (isNaN(parseInt(key))) result[key] = formatResult(data[key]);
      });
      return result;
    }
    return data;
  };
  const renderOutputType = (output, depth = 0) => {
    if (output.type.startsWith('tuple') && output.components) {
      return <div key={output.name || 'tuple-' + depth} style={{
        marginLeft: depth * 16
      }}>
          <span className={isDark ? 'text-purple-400' : 'text-purple-600'}>
            {output.name && output.name + ': '}{'struct {'}
          </span>
          {output.components.map((comp, idx) => renderOutputType(comp, depth + 1))}
          <div style={{
        marginLeft: depth * 16
      }}>
            <span className={isDark ? 'text-purple-400' : 'text-purple-600'}>{'}'}</span>
            {output.type.endsWith('[]') && <span className={isDark ? 'text-zinc-400' : 'text-zinc-500'}>[]</span>}
          </div>
        </div>;
    }
    return <div key={output.name || 'field-' + depth} style={{
      marginLeft: depth * 16
    }}>
        {output.name && <span className={isDark ? 'text-zinc-300' : 'text-zinc-600'}>{output.name}: </span>}
        <span style={{
      color: isDark ? '#f1df38' : '#e36209'
    }}>{output.type}</span>
      </div>;
  };
  if (typeof window === 'undefined') {
    return <div className="p-4 text-center text-zinc-500">Loading...</div>;
  }
  if (error && !abi) {
    return <div className="p-4 rounded-lg border border-red-200 dark:border-red-800 bg-red-50 dark:bg-red-900/20 text-red-600 dark:text-red-400 mb-4">
        <div className="font-medium mb-1">Error loading {contractName}</div>
        <div className="text-sm">{error}</div>
      </div>;
  }
  if (isLoadingData) {
    return <div className="p-4 rounded-lg border border-zinc-200 dark:border-zinc-700 bg-white dark:bg-zinc-900 mb-4">
        <div className="text-center text-zinc-500">Loading chain data...</div>
      </div>;
  }
  if (!abi) {
    return <div className="p-4 rounded-lg border border-zinc-200 dark:border-zinc-700 bg-white dark:bg-zinc-900 mb-4">
        <div className="text-center text-zinc-500">Loading {contractName} ABI...</div>
      </div>;
  }
  if (!functionAbi) {
    return <div className="p-4 rounded-lg border border-red-200 dark:border-red-800 bg-red-50 dark:bg-red-900/20 text-red-600 dark:text-red-400 mb-4">
        Function {functionName} not found in {contractName} ABI
      </div>;
  }
  const renderInputFields = () => {
    const fields = [];
    functionAbi.inputs.forEach((input, index) => {
      if (input.type.startsWith('tuple') && input.components) {
        fields.push(<div key={'tuple-' + index} className="mb-4">
            <div className={'text-xs font-semibold uppercase tracking-wide mb-2 ' + (isDark ? 'text-purple-400' : 'text-purple-600')}>
              {input.name || 'Param ' + index} (tuple)
            </div>
            <div className={'pl-4 border-l-2 ' + (isDark ? 'border-purple-500/30' : 'border-purple-300')}>
              {input.components.map((component, compIndex) => {
          const path = (input.name || index) + '.' + (component.name || compIndex);
          return <div key={path} className="mb-3">
                    <label className={'flex items-center gap-2 text-sm mb-1 ' + (isDark ? 'text-zinc-300' : 'text-zinc-700')}>
                      {component.name || 'field' + compIndex}
                      <span className={'text-xs ' + (isDark ? 'text-zinc-500' : 'text-zinc-400')}>({component.type})</span>
                    </label>
                    <input type="text" placeholder={getPlaceholderForType(component.type)} value={inputs[path] || ''} onChange={e => handleInputChange(path, e.target.value)} className={'w-full px-3 py-2 rounded-lg border text-sm font-mono focus:outline-none focus:ring-1 focus:ring-blue-500 ' + (isDark ? 'bg-zinc-800 border-zinc-700 text-white placeholder-zinc-500' : 'bg-white border-zinc-300 text-zinc-900 placeholder-zinc-400')} />
                  </div>;
        })}
            </div>
          </div>);
      } else {
        const path = input.name || index.toString();
        fields.push(<div key={path} className="mb-3">
            <label className={'flex items-center gap-2 text-sm mb-1 ' + (isDark ? 'text-zinc-300' : 'text-zinc-700')}>
              {input.name || 'param' + index}
              <span className={'text-xs ' + (isDark ? 'text-zinc-500' : 'text-zinc-400')}>({input.type})</span>
            </label>
            <input type="text" placeholder={getPlaceholderForType(input.type)} value={inputs[path] || ''} onChange={e => handleInputChange(path, e.target.value)} className={'w-full px-3 py-2 rounded-lg border text-sm font-mono focus:outline-none focus:ring-1 focus:ring-blue-500 ' + (isDark ? 'bg-zinc-800 border-zinc-700 text-white placeholder-zinc-500' : 'bg-white border-zinc-300 text-zinc-900 placeholder-zinc-400')} />
          </div>);
      }
    });
    return fields;
  };
  return <div className="rounded-xl border border-zinc-200 dark:border-zinc-700 bg-white dark:bg-zinc-900 overflow-hidden mb-4">
      {}
      <div className={'flex items-center justify-between p-3 cursor-pointer transition-colors ' + (isDark ? 'bg-zinc-800 hover:bg-zinc-700' : 'bg-zinc-100 hover:bg-zinc-200')} onClick={() => setIsExpanded(!isExpanded)}>
        <div className="flex items-center gap-3 flex-1 min-w-0">
          <span className="px-2 py-1 rounded text-xs font-semibold text-white" style={{
    backgroundColor: isReadOnly ? '#6366f1' : '#22c55e'
  }}>
            {isReadOnly ? 'CALL' : 'SEND'}
          </span>
          <code ref={codeRef} className={'text-sm truncate ' + (isDark ? 'text-zinc-200' : 'text-zinc-800')} title={functionName + '(' + functionAbi.inputs.map(i => i.name + ': ' + i.type).join(', ') + ')'}>
            <span style={{
    color: '#6cadf5'
  }}>{functionName}</span>
            <span className={isDark ? 'text-zinc-500' : 'text-zinc-400'}>(</span>
            {functionAbi.inputs.map((input, idx) => <span key={idx}>
                <span className={isDark ? 'text-zinc-300' : 'text-zinc-600'}>{input.name}</span>
                <span className={isDark ? 'text-zinc-500' : 'text-zinc-400'}>: </span>
                <span style={{
    color: isDark ? '#f1df38' : '#e36209'
  }}>{input.type}</span>
                {idx < functionAbi.inputs.length - 1 && <span className={isDark ? 'text-zinc-500' : 'text-zinc-400'}>, </span>}
              </span>)}
            <span className={isDark ? 'text-zinc-500' : 'text-zinc-400'}>)</span>
          </code>
        </div>
        <div className={'transition-transform ' + (isExpanded ? 'rotate-180' : '')} style={{
    color: isDark ? '#71717a' : '#a1a1aa'
  }}>
          <svg viewBox="0 0 24 24" fill="none" width="20" height="20">
            <path d="M6 9L12 15L18 9" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
          </svg>
        </div>
      </div>

      {}
      {isExpanded && <div className="p-4">
          {description && <div className={'text-sm mb-4 pb-4 border-b ' + (isDark ? 'text-zinc-400 border-zinc-800' : 'text-zinc-600 border-zinc-200')}>
              {description}
            </div>}

          {}
          <div className="mb-4">
            <label className={'text-xs font-semibold uppercase tracking-wide mb-2 block ' + (isDark ? 'text-zinc-500' : 'text-zinc-400')}>CHAIN</label>
            <div ref={chainDropdownRef} className="relative">
              <div onClick={() => setIsChainDropdownOpen(!isChainDropdownOpen)} className={'flex items-center justify-between px-3 py-2 rounded-lg border cursor-pointer ' + (isDark ? 'bg-zinc-800 border-zinc-700 hover:border-zinc-600' : 'bg-white border-zinc-300 hover:border-zinc-400')}>
                <div className="flex items-center gap-2">
                  {currentChain && <NetworkIcon chainKey={chainKey} size={20} />}
                  <span className={isDark ? 'text-white' : 'text-zinc-900'}>{chainDisplayName}</span>
                </div>
                <svg width="10" height="6" viewBox="0 0 10 6" fill="none" className={isDark ? 'text-zinc-400' : 'text-zinc-500'}>
                  <path d="M1 1L5 5L9 1" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" />
                </svg>
              </div>

              {isChainDropdownOpen && <div className="absolute z-50 w-full mt-1 rounded-lg border shadow-lg" style={{
    backgroundColor: isDark ? '#27272a' : '#ffffff',
    borderColor: isDark ? '#3f3f46' : '#d4d4d8'
  }}>
                  <input type="text" placeholder="Search chains..." value={chainSearchTerm} onChange={e => setChainSearchTerm(e.target.value)} onClick={e => e.stopPropagation()} autoFocus className={'w-full px-3 py-2 text-sm border-b focus:outline-none ' + (isDark ? 'bg-transparent border-zinc-700 text-white placeholder-zinc-500' : 'bg-transparent border-zinc-200 text-zinc-900 placeholder-zinc-400')} />
                  <div style={{
    maxHeight: '240px',
    overflowY: 'auto',
    backgroundColor: isDark ? '#27272a' : '#ffffff'
  }}>
                    {availableChains.length === 0 ? <div className={'px-3 py-4 text-sm text-center ' + (isDark ? 'text-zinc-500' : 'text-zinc-400')}>
                        No chains available
                      </div> : availableChains.filter(chain => chain.name.toLowerCase().includes(chainSearchTerm.toLowerCase())).map(chain => <div key={chain.chainId} onClick={() => {
    setSelectedChain(chain.chainId);
    setIsChainDropdownOpen(false);
    setChainSearchTerm('');
  }} className={'flex items-center gap-2 px-3 py-2 cursor-pointer ' + (selectedChain === chain.chainId ? isDark ? 'bg-blue-600/20 text-blue-400' : 'bg-blue-50 text-blue-600' : isDark ? 'hover:bg-zinc-700 text-white' : 'hover:bg-zinc-100 text-zinc-900')}>
                            <NetworkIcon chainKey={chain.chainKey} size={16} />
                            <span className="text-sm">{chain.name}</span>
                          </div>)}
                  </div>
                </div>}
            </div>
          </div>

          {}
          {showDeployments && <div className="mb-4">
              <label className={'text-xs font-semibold uppercase tracking-wide mb-2 block ' + (isDark ? 'text-zinc-500' : 'text-zinc-400')}>
                {defaultDeploymentAddress ? 'CONTRACT' : 'CONTRACT ADDRESS'}
              </label>
              {defaultDeploymentAddress ? <div className={'px-3 py-2 rounded-lg text-sm font-mono ' + (isDark ? 'bg-zinc-800 text-zinc-300' : 'bg-zinc-100 text-zinc-700')}>
                  {defaultDeploymentAddress}
                </div> : <>
                  <input type="text" placeholder="0x..." value={customAddress} onChange={e => setCustomAddress(e.target.value)} className={'w-full px-3 py-2 rounded-lg border text-sm font-mono focus:outline-none focus:ring-1 focus:ring-blue-500 ' + (isDark ? 'bg-zinc-800 border-zinc-700 text-white placeholder-zinc-500' : 'bg-white border-zinc-300 text-zinc-900 placeholder-zinc-400')} />
                  <div className={'text-xs mt-1 ' + (isDark ? 'text-zinc-500' : 'text-zinc-400')}>
                    Enter your {contractName} contract address
                  </div>
                </>}
            </div>}

          {}
          {functionAbi.inputs.length > 0 && <div className="mb-4">
              <div className={'text-xs font-semibold uppercase tracking-wide mb-3 ' + (isDark ? 'text-zinc-500' : 'text-zinc-400')}>PARAMETERS</div>
              {renderInputFields()}
            </div>}

          {}
          {functionAbi.outputs && functionAbi.outputs.length > 0 && <div className="mb-4">
              <div className={'text-xs font-semibold uppercase tracking-wide mb-2 ' + (isDark ? 'text-zinc-500' : 'text-zinc-400')}>RETURNS</div>
              <div className={'p-3 rounded-lg text-sm font-mono ' + (isDark ? 'bg-zinc-800' : 'bg-zinc-100')}>
                {functionAbi.outputs.map((output, idx) => renderOutputType(output, 0))}
              </div>
            </div>}

          {}
          <div className="mb-4">
            {!walletConnected && !isReadOnly ? <button onClick={connectWallet} className="w-full px-4 py-2 rounded-lg font-medium text-sm bg-blue-600 hover:bg-blue-700 text-white transition-colors">
                Connect Wallet
              </button> : <button onClick={executeFunction} disabled={loading || !deploymentAddress} className="w-full px-4 py-2 rounded-lg font-medium text-sm transition-colors text-white disabled:opacity-50 disabled:cursor-not-allowed" style={{
    backgroundColor: loading || !deploymentAddress ? '#52525b' : '#6cadf5'
  }}>
                {loading ? 'Processing...' : isReadOnly ? 'Send Request' : 'Send Transaction'}
              </button>}
          </div>

          {}
          {error && <div className={'p-3 rounded-lg text-sm mb-4 ' + (isDark ? 'bg-red-900/20 text-red-400' : 'bg-red-50 text-red-600')}>
              {error}
            </div>}

          {}
          {result && <div className="mb-4">
              <div className={'text-xs font-semibold uppercase tracking-wide mb-2 ' + (isDark ? 'text-zinc-500' : 'text-zinc-400')}>RESPONSE</div>
              <div className={'p-3 rounded-lg text-sm font-mono overflow-auto ' + (isDark ? 'bg-zinc-800' : 'bg-zinc-100')}>
                {result.type === 'read' ? <pre style={{
    margin: 0,
    whiteSpace: 'pre-wrap',
    color: isDark ? '#9EFC7E' : '#166534'
  }}>
                    {JSON.stringify(result.formatted, null, 2)}
                  </pre> : <div className={isDark ? 'text-zinc-300' : 'text-zinc-700'}>
                    <div>Tx: {result.hash}</div>
                    <div>Status: <span className={result.status === 'confirmed' ? 'text-green-500' : 'text-yellow-500'}>{result.status}</span></div>
                    {result.blockNumber && <div>Block: {result.blockNumber}</div>}
                  </div>}
              </div>
            </div>}

          {}
          {!deploymentAddress && <div className={'p-3 rounded-lg text-sm ' + (isDark ? 'bg-yellow-900/20 text-yellow-400' : 'bg-yellow-50 text-yellow-700')}>
              No deployment found for {contractName} on {chainDisplayName}
            </div>}
        </div>}
    </div>;
};

Test LayerZero contracts directly from your browser. No coding required. Explore key application functions for message fee calculation, sending, receiving, configuration, and state management. This page focuses on methods relevant to building applications and does not include worker-related functions.

<Tip>
  ### Real Onchain Methods

  All functions shown in this playground are **real methods** available in the LayerZero contracts today:

  * **Endpoint Contract**: [Source Code](https://github.com/LayerZero-Labs/LayerZero-v2/tree/main/packages/layerzero-v2/evm/protocol/contracts)
  * **OFT Contract**: [Source Code](https://github.com/LayerZero-Labs/devtools/tree/main/packages/oft-evm)

  We only document OApp-relevant instructions, excluding admin-only functions. State variables are clearly marked as direct account data reads, not instructions.
</Tip>

## LayerZero EndpointV2

The main entry point for all crosschain messaging operations. This contract handles message routing, fee calculation, and configuration management.

### Message Routing

Core functions for sending and receiving messages between smart contracts.

#### quote() - Get Fee Estimates

<InteractiveContract contractName="EndpointV2" functionName="quote" description="Provides a quote for the LayerZero messaging fees required to send a crosschain message. Use this before calling send() to determine the exact fees needed." />

#### send() - Send Messages

<InteractiveContract contractName="EndpointV2" functionName="send" description="Sends a crosschain message to a destination endpoint. Requires the exact fee amount obtained from quote(). The message will be delivered to the recipient contract on the destination chain." />

#### lzReceive() - Receive Messages

<InteractiveContract contractName="EndpointV2" functionName="lzReceive" description="Receives a crosschain message from a source endpoint. The message will be delivered to the recipient contract implementing ILayerZeroReceiver.lzReceive." />

#### sendCompose() - Send Compose Messages

<InteractiveContract contractName="EndpointV2" functionName="sendCompose" description="Queues a compose message to be sent after the main message execution. This enables multi-step crosschain workflows where an OApp can trigger follow-up actions. The compose message is authenticated by the original message GUID." />

#### lzCompose() - Execute Compose Messages

<InteractiveContract contractName="EndpointV2" functionName="lzCompose" description="Executes a previously queued compose message. Called by the executor to deliver compose messages to contracts implementing ILayerZeroComposer. This enables complex multi-contract interactions within a single crosschain transaction." />

### Configuration Management

Functions for setting custom verification, execution, and pathway management.

#### eid() - Get Endpoint ID

<InteractiveContract contractName="EndpointV2" functionName="eid" description="Returns the endpoint ID (EID) of the current chain. Each blockchain in the LayerZero network has a unique endpoint ID used for routing crosschain messages." />

#### isRegisteredLibrary() - Check Library Registration

<InteractiveContract contractName="EndpointV2" functionName="isRegisteredLibrary" description="Checks if a messaging library address is registered and approved for use in the endpoint. Returns true if the library is registered, false otherwise. Only registered libraries can be used for sending and receiving messages." />

#### receiveLibraryTimeout() - Get Library Timeout

<InteractiveContract contractName="EndpointV2" functionName="receiveLibraryTimeout" description="Returns the timeout configuration for a receive library upgrade. Shows the previous library address and the block number when it expires. This grace period allows in-flight messages to be processed with the old library during transitions." />

#### setDelegate() - Set Delegate Address

<InteractiveContract contractName="EndpointV2" functionName="setDelegate" description="Sets the delegate address that can configure messaging libraries and other settings on behalf of the OApp. Only the OApp owner or current delegate can call this function." />

#### setSendLibrary() - Configure Send Library

<InteractiveContract contractName="EndpointV2" functionName="setSendLibrary" description="Sets the messaging library to use for sending messages to a specific destination endpoint. Allows OApps to choose between different library implementations for optimal performance or features." />

#### setReceiveLibrary() - Configure Receive Library

<InteractiveContract contractName="EndpointV2" functionName="setReceiveLibrary" description="Sets the messaging library to use for receiving messages from a specific source endpoint. Must be configured to match the send library on the source chain." />

#### setConfig() - Set Configuration Parameters

<InteractiveContract contractName="EndpointV2" functionName="setConfig" description="Configures security and execution parameters for a specific library and endpoint ID. Common configs include verification settings, execution configurations, and finality." />

### Message Recovery & Security

Functions for handling message exceptions, security threats, and recovery scenarios.

#### clear() - Clear Stored Message

<InteractiveContract contractName="EndpointV2" functionName="clear" description="Clears a stored message payload and updates the lazy inbound nonce. Used to remove messages that have been verified but not executed. The OApp must know the original payload to clear it." />

#### burn() - Permanently Block Message

<InteractiveContract contractName="EndpointV2" functionName="burn" description="Permanently marks a message as unexecutable and un-verifiable. This irreversible action prevents the message from ever being executed. Used to block messages when malicious DVNs attempt to hide payloads." />

#### skip() - Skip Message Nonce

<InteractiveContract contractName="EndpointV2" functionName="skip" description="Skips a specific nonce to prevent the message from being verified or executed. Useful in race conditions or when a message is flagged as malicious by PreCrime. Updates the lazy inbound nonce after skipping." />

#### nilify() - Mark Message as Nil

<InteractiveContract contractName="EndpointV2" functionName="nilify" description="Marks a verified packet as nil (0xFFFFFF...), preventing execution until re-verified. Provides a recovery mechanism from disruptions caused by malicious DVNs. The message can be resubmitted through MessageLib for recovery." />

### Status Checks

Functions for querying current configuration settings, library assignments, nonce tracking, and message states.

#### getConfig() - Check Configuration

<InteractiveContract contractName="EndpointV2" functionName="getConfig" description="Retrieves the current configuration for a specific OApp, library, endpoint ID, and config type. Use this to verify your configuration changes or debug message routing." />

#### delegates() - Check Delegate Address

<InteractiveContract contractName="EndpointV2" functionName="delegates" description="Returns the delegate address for a specific OApp. The delegate has permission to configure libraries and settings on behalf of the OApp." />

#### getSendLibrary() - Get Send Library

<InteractiveContract contractName="EndpointV2" functionName="getSendLibrary" description="Returns the address of the messaging library currently configured for sending messages from a specific OApp to a destination endpoint. If no custom library is set, returns the default." />

#### getReceiveLibrary() - Get Receive Library

<InteractiveContract contractName="EndpointV2" functionName="getReceiveLibrary" description="Returns the address of the messaging library currently configured for receiving messages from a specific source endpoint to an OApp. Used to verify library configurations match across chains." />

#### inboundNonce() - Get Processed Nonce

<InteractiveContract contractName="EndpointV2" functionName="inboundNonce" description="Returns the highest continuously processed nonce for messages from a specific source. All messages up to this nonce have been fully executed or cleared." />

#### lazyInboundNonce() - Get Lazy Nonce

<InteractiveContract contractName="EndpointV2" functionName="lazyInboundNonce" description="Returns the highest nonce that has been verified or skipped, including gaps. This may be higher than inboundNonce if there are unexecuted messages in the queue." />

#### initializable() - Check Message Initialization

<InteractiveContract contractName="EndpointV2" functionName="initializable" description="Checks whether a message from a specific origin can be initialized for delivery to the receiver. Returns true if the message is ready to be processed based on the lazy inbound nonce and path initialization settings (ILayerZeroReceiver.allowInitializePath)." />

#### verifiable() - Check Message Verification

<InteractiveContract contractName="EndpointV2" functionName="verifiable" description="Checks whether a message from a given origin is verifiable for the receiver. Returns true if the message payload has been received and validated by the DVN configuration, and has not been committed yet (payload hash is not empty)." />

#### inboundPayloadHash() - Get Message Payload Hash

<InteractiveContract contractName="EndpointV2" functionName="inboundPayloadHash" description="Returns the payload hash for a specific inbound message. A non-empty hash indicates the message has been verified and is waiting for execution. An empty hash means either the message hasn't been verified yet or has already been executed." />

#### nextGuid() - Get Next Message GUID

<InteractiveContract contractName="EndpointV2" functionName="nextGuid" description="Returns the next globally unique identifier (GUID) that will be assigned to an outbound message. Useful for predicting the GUID of a message before sending it, which can help with tracking and debugging." />

#### composeQueue() - Check Compose Message Queue

<InteractiveContract contractName="EndpointV2" functionName="composeQueue" description="Returns the hash of a compose message in the queue. Compose messages are follow-up messages that can be sent after the main message execution. Use this to check if a compose message is pending delivery." />

#### isSendingMessage() - Check Send State

<InteractiveContract contractName="EndpointV2" functionName="isSendingMessage" description="Returns true if the endpoint is currently in the process of sending a message. This helps prevent reentrant calls and ensures message processing integrity during crosschain operations." />

#### getSendContext() - Get Current Send Context

<InteractiveContract contractName="EndpointV2" functionName="getSendContext" description="Returns the current send context containing the destination endpoint ID and sender address. Returns (0, 0x0) if no message is being sent. Useful for debugging and tracking active message sends." />

### Events

Key events emitted by the EndpointV2 contract.

#### PacketSent - Message Sent Event

<ContractInterface contractName="EndpointV2" interfaceType="event" interfaceName="PacketSent" description="Emitted when a packet is sent through the endpoint. Contains the encoded packet data and execution options for tracking crosschain messages." />

#### PacketVerified - Message Verified Event

<ContractInterface contractName="EndpointV2" interfaceType="event" interfaceName="PacketVerified" description="Emitted when a packet has been verified by the receive library and is ready for delivery. Contains the origin chain, sender, receiver, and nonce information." />

#### PacketDelivered - Message Delivered Event

<ContractInterface contractName="EndpointV2" interfaceType="event" interfaceName="PacketDelivered" description="Emitted when a packet is successfully delivered to the receiver OApp. Indicates the message has been executed on the destination chain." />

#### ComposeSent - Compose Message Queued Event

<ContractInterface contractName="EndpointV2" interfaceType="event" interfaceName="ComposeSent" description="Emitted when an OApp queues a composed message via sendCompose(). This occurs when an OApp wants to send a follow-up message after processing an incoming crosschain message, enabling horizontal composability." />

#### ComposeDelivered - Compose Message Delivered Event

<ContractInterface contractName="EndpointV2" interfaceType="event" interfaceName="ComposeDelivered" description="Emitted when a composed message is successfully delivered to the target composer contract via lzCompose(). Indicates the composed message has been executed, completing the horizontal composability flow." />

#### DelegateSet - Delegate Configuration Event

<ContractInterface contractName="EndpointV2" interfaceType="event" interfaceName="DelegateSet" description="Emitted when a delegate is set for a sender. Delegates can configure messaging parameters on behalf of the sender, enabling easier management of crosschain configurations." />

#### SendLibrarySet - Send Library Configuration Event

<ContractInterface contractName="EndpointV2" interfaceType="event" interfaceName="SendLibrarySet" description="Emitted when a send library is configured for an OApp on a specific endpoint. Send libraries handle the outbound message packaging and transmission logic." />

#### ReceiveLibrarySet - Receive Library Configuration Event

<ContractInterface contractName="EndpointV2" interfaceType="event" interfaceName="ReceiveLibrarySet" description="Emitted when a receive library is configured for an OApp on a specific endpoint. Receive libraries handle the verification and processing of inbound messages." />

#### ReceiveLibraryTimeoutSet - Library Timeout Configuration Event

<ContractInterface contractName="EndpointV2" interfaceType="event" interfaceName="ReceiveLibraryTimeoutSet" description="Emitted when a timeout is set for transitioning from an old receive library to a new one. This grace period ensures smooth library migrations without message loss." />

#### InboundNonceSkipped - Nonce Skip Event

<ContractInterface contractName="EndpointV2" interfaceType="event" interfaceName="InboundNonceSkipped" description="Emitted when inbound message nonces are skipped to handle out-of-order message delivery. This allows for more flexible message ordering when required by the application." />

#### PacketNilified - Message Nilified Event

<ContractInterface contractName="EndpointV2" interfaceType="event" interfaceName="PacketNilified" description="Emitted when a packet is nilified (marked as processed without execution). This acknowledges receipt while preventing execution, useful for handling invalid or unwanted messages." />

#### PacketBurnt - Message Burnt Event

<ContractInterface contractName="EndpointV2" interfaceType="event" interfaceName="PacketBurnt" description="Emitted when a packet is permanently burnt from the message queue. This removes the message entirely, typically used for cleanup of undeliverable or expired messages." />

### Errors

#### LZ\_InsufficientFee - Insufficient Fee

<ContractInterface contractName="EndpointV2" interfaceType="error" interfaceName="LZ_InsufficientFee" description="Thrown when the provided fee is insufficient to cover the crosschain messaging costs. Always call quote() first to get the exact fee required." />

#### LZ\_InvalidNonce - Invalid Nonce

<ContractInterface contractName="EndpointV2" interfaceType="error" interfaceName="LZ_InvalidNonce" description="Thrown when attempting to process a message with an invalid nonce. This ensures messages are processed in the correct order." />

#### LZ\_Unauthorized - Unauthorized Access

<ContractInterface contractName="EndpointV2" interfaceType="error" interfaceName="LZ_Unauthorized" description="Thrown when an unauthorized address attempts to perform a restricted operation. Only authorized contracts and delegates can perform certain actions." />

#### LZ\_SendReentrancy - Send Reentrancy Detected

<ContractInterface contractName="EndpointV2" interfaceType="error" interfaceName="LZ_SendReentrancy" description="Thrown when a reentrant call is detected during message sending. This protects against reentrancy attacks during crosschain operations." />

#### Key Functions to Try:

* **Messaging Operations:**
  * `quote()` - Get fee estimates for crosschain messages
  * `send()` - Send messages to other chains
  * `lzReceive()` - Receive messages from other chains
  * `sendCompose()` - Queue compose messages
  * `lzCompose()` - Execute compose messages
* **Configuration Management:**
  * `setDelegate()` - Assign configuration permissions
  * `setSendLibrary()` - Choose send message library
  * `setReceiveLibrary()` - Choose receive message library
  * `setConfig()` - Set library-specific parameters
* **Message Recovery & Security:**
  * `burn()` - Permanently block malicious messages
  * `skip()` - Skip flagged message nonces
  * `nilify()` - Mark messages for re-verification
  * `clear()` - Clear verified but unexecuted messages
* **Status Checks:**
  * `getConfig()` - Check current configurations
  * `delegates()` - View current delegate address
  * `getSendLibrary()` - Check send library for endpoint
  * `getReceiveLibrary()` - Check receive library for endpoint
  * `inboundNonce()` - Get highest processed message nonce
  * `lazyInboundNonce()` - Get highest verified/skipped nonce
  * `nextGuid()` - Get next message GUID
  * `composeQueue()` - Check compose queue
  * `isSendingMessage()` - Check send state
  * `getSendContext()` - Get send context

## LayerZero Message Libraries

Message Libraries handle the core verification and execution logic for LayerZero messages. While developers don't interact with these contracts directly, understanding their error codes and events is crucial for debugging failed transactions.

### Current Message Libraries

* **SendUln302**: Handles outbound message verification setup
* **ReceiveUln302**: Processes inbound message verification and execution
* **ReadLib1002**: Manages crosschain read operations

> **When You'll See These**: These errors appear when calling Endpoint methods like `send()` or `lzReceive()`. The Endpoint delegates to these libraries internally, so their errors bubble up through your Endpoint transactions.

### SendUln302 - Outbound Message Library

The SendUln302 library manages the configuration and verification setup for outbound messages. It coordinates with DVNs (Decentralized Verifier Networks) and handles fee calculations for message transmission.

### Errors

Configuration & Setup Errors

#### LZ\_ULN\_InvalidConfigType - Invalid Configuration Type

<ContractInterface contractName="SendUln302" interfaceType="error" interfaceName="LZ_ULN_InvalidConfigType" description="Thrown when attempting to set an invalid configuration type. Valid types are CONFIG_TYPE_ULN (2) for ULN config and CONFIG_TYPE_EXECUTOR (1) for executor config." />

#### LZ\_ULN\_InvalidRequiredDVNCount - Invalid DVN Count

<ContractInterface contractName="SendUln302" interfaceType="error" interfaceName="LZ_ULN_InvalidRequiredDVNCount" description="Thrown when the required DVN count is invalid. Must have at least one required DVN and cannot exceed the maximum allowed DVNs." />

#### LZ\_ULN\_InvalidOptionalDVNCount - Invalid Optional DVN Count

<ContractInterface contractName="SendUln302" interfaceType="error" interfaceName="LZ_ULN_InvalidOptionalDVNCount" description="Thrown when the optional DVN count configuration is invalid. Optional DVNs must be properly configured with a threshold." />

#### LZ\_ULN\_InvalidOptionalDVNThreshold - Invalid DVN Threshold

<ContractInterface contractName="SendUln302" interfaceType="error" interfaceName="LZ_ULN_InvalidOptionalDVNThreshold" description="Thrown when the optional DVN threshold is invalid. The threshold must be greater than 0 and less than or equal to the number of optional DVNs." />

#### LZ\_ULN\_AtLeastOneDVN - At Least One DVN Required

<ContractInterface contractName="SendUln302" interfaceType="error" interfaceName="LZ_ULN_AtLeastOneDVN" description="Thrown when attempting to configure a path without any DVNs. At least one DVN must be specified for message verification." />

#### LZ\_ULN\_InvalidConfirmations - Invalid Confirmations

<ContractInterface contractName="SendUln302" interfaceType="error" interfaceName="LZ_ULN_InvalidConfirmations" description="Thrown when the confirmation count is invalid. Confirmations must be within acceptable range for the destination chain." />

#### LZ\_ULN\_Unsorted - DVNs Not Sorted

<ContractInterface contractName="SendUln302" interfaceType="error" interfaceName="LZ_ULN_Unsorted" description="Thrown when DVN addresses are not provided in sorted order. DVN addresses must be sorted in ascending order." />

Worker & Option Errors

#### LZ\_ULN\_InvalidWorkerId - Invalid Worker ID

<ContractInterface contractName="SendUln302" interfaceType="error" interfaceName="LZ_ULN_InvalidWorkerId" description="Thrown when an invalid worker ID is provided. Valid worker IDs are 1 for DVN and 2 for Executor." />

#### LZ\_ULN\_InvalidWorkerOptions - Invalid Worker Options

<ContractInterface contractName="SendUln302" interfaceType="error" interfaceName="LZ_ULN_InvalidWorkerOptions" description="Thrown when worker options are malformed or contain invalid parameters. The cursor parameter indicates where in the options the error was found." />

#### LZ\_ULN\_UnsupportedOptionType - Unsupported Option Type

<ContractInterface contractName="SendUln302" interfaceType="error" interfaceName="LZ_ULN_UnsupportedOptionType" description="Thrown when an unsupported option type is provided. Check the supported option types for your message library version." />

#### LZ\_ULN\_InvalidLegacyType1Option - Invalid Legacy Type 1 Option

<ContractInterface contractName="SendUln302" interfaceType="error" interfaceName="LZ_ULN_InvalidLegacyType1Option" description="Thrown when legacy type 1 options are invalid or incorrectly formatted." />

#### LZ\_ULN\_InvalidLegacyType2Option - Invalid Legacy Type 2 Option

<ContractInterface contractName="SendUln302" interfaceType="error" interfaceName="LZ_ULN_InvalidLegacyType2Option" description="Thrown when legacy type 2 options are invalid or incorrectly formatted." />

#### LZ\_ULN\_UnsupportedEid - Unsupported Endpoint ID

<ContractInterface contractName="SendUln302" interfaceType="error" interfaceName="LZ_ULN_UnsupportedEid" description="Thrown when attempting to send to an unsupported or invalid endpoint ID." />

Fee & Payment Errors

#### LZ\_MessageLib\_InvalidAmount - Invalid Fee Amount

<ContractInterface contractName="SendUln302" interfaceType="error" interfaceName="LZ_MessageLib_InvalidAmount" description="Thrown when the provided fee amount doesn't match the required amount. The error returns both the requested amount and the available amount. Always use quote() to get the exact fee required." />

#### LZ\_MessageLib\_TransferFailed - Fee Transfer Failed

<ContractInterface contractName="SendUln302" interfaceType="error" interfaceName="LZ_MessageLib_TransferFailed" description="Thrown when the native token transfer for fees fails. This can occur if the contract doesn't have sufficient balance or if the transfer is blocked." />

Library Access Errors

#### LZ\_MessageLib\_OnlyEndpoint - Only Endpoint Allowed

<ContractInterface contractName="SendUln302" interfaceType="error" interfaceName="LZ_MessageLib_OnlyEndpoint" description="Thrown when a function is called by an address other than the LayerZero endpoint. Only the endpoint can call library functions." />

#### LZ\_MessageLib\_InvalidExecutor - Invalid Executor

<ContractInterface contractName="SendUln302" interfaceType="error" interfaceName="LZ_MessageLib_InvalidExecutor" description="Thrown when an invalid executor address is provided or the executor is not authorized." />

#### LZ\_MessageLib\_NotTreasury - Not Treasury

<ContractInterface contractName="SendUln302" interfaceType="error" interfaceName="LZ_MessageLib_NotTreasury" description="Thrown when a treasury-only function is called by a non-treasury address." />

#### LZ\_MessageLib\_CannotWithdrawAltToken - Cannot Withdraw Alt Token

<ContractInterface contractName="SendUln302" interfaceType="error" interfaceName="LZ_MessageLib_CannotWithdrawAltToken" description="Thrown when attempting to withdraw alternative tokens that cannot be withdrawn from the library." />

Message Validation Errors

#### LZ\_MessageLib\_InvalidMessageSize - Message Too Large

<ContractInterface contractName="SendUln302" interfaceType="error" interfaceName="LZ_MessageLib_InvalidMessageSize" description="Thrown when the message size exceeds the maximum allowed size. Returns both the actual size and the maximum allowed size. Consider breaking large messages into smaller chunks." />

#### LZ\_MessageLib\_ZeroMessageSize - Zero Message Size

<ContractInterface contractName="SendUln302" interfaceType="error" interfaceName="LZ_MessageLib_ZeroMessageSize" description="Thrown when attempting to send a message with zero size. Messages must contain data." />

#### DVN\_InvalidDVNOptions - Invalid DVN Options

<ContractInterface contractName="SendUln302" interfaceType="error" interfaceName="DVN_InvalidDVNOptions" description="Thrown when DVN options are malformed or contain invalid parameters. The cursor parameter indicates where in the options the error was found." />

#### DVN\_InvalidDVNIdx - Invalid DVN Index

<ContractInterface contractName="SendUln302" interfaceType="error" interfaceName="DVN_InvalidDVNIdx" description="Thrown when an invalid DVN index is provided. The index must be within the range of configured DVNs." />

Transfer Errors

#### Transfer\_NativeFailed - Native Transfer Failed

<ContractInterface contractName="SendUln302" interfaceType="error" interfaceName="Transfer_NativeFailed" description="Thrown when a native token transfer fails. Returns the recipient address and amount that failed to transfer." />

#### Transfer\_ToAddressIsZero - Transfer to Zero Address

<ContractInterface contractName="SendUln302" interfaceType="error" interfaceName="Transfer_ToAddressIsZero" description="Thrown when attempting to transfer to the zero address. Transfers must be to valid addresses." />

### Events

#### DVNFeePaid - DVN Fee Payment

<ContractInterface contractName="SendUln302" interfaceType="event" interfaceName="DVNFeePaid" description="Emitted when fees are paid to DVNs for message verification. Contains the DVN addresses and fee amounts for tracking payment distribution." />

### ReceiveUln302 - Inbound Message Library

The ReceiveUln302 library handles the verification and execution of inbound messages. It validates DVN signatures, manages message ordering, and ensures secure message delivery.

### Errors

Verification Errors

#### LZ\_ULN\_InvalidPacketHeader - Invalid Packet Header

<ContractInterface contractName="ReceiveUln302" interfaceType="error" interfaceName="LZ_ULN_InvalidPacketHeader" description="Thrown when the packet header is malformed or contains invalid data. This typically indicates corruption or tampering with the message." />

#### LZ\_ULN\_InvalidPacketVersion - Wrong Packet Version

<ContractInterface contractName="ReceiveUln302" interfaceType="error" interfaceName="LZ_ULN_InvalidPacketVersion" description="Thrown when the packet version doesn't match the expected version. This library expects packet version 1." />

#### LZ\_ULN\_InvalidEid - Invalid Endpoint ID

<ContractInterface contractName="ReceiveUln302" interfaceType="error" interfaceName="LZ_ULN_InvalidEid" description="Thrown when the endpoint ID in the packet doesn't match the expected source or destination. This prevents message routing errors." />

Configuration Errors

#### LZ\_ULN\_InvalidConfigType - Invalid Configuration Type

<ContractInterface contractName="ReceiveUln302" interfaceType="error" interfaceName="LZ_ULN_InvalidConfigType" description="Thrown when attempting to set an invalid configuration type. Valid types are CONFIG_TYPE_ULN (2) for ULN config." />

#### LZ\_ULN\_InvalidRequiredDVNCount - Invalid DVN Count

<ContractInterface contractName="ReceiveUln302" interfaceType="error" interfaceName="LZ_ULN_InvalidRequiredDVNCount" description="Thrown when the required DVN count is invalid. Must have at least one required DVN and cannot exceed the maximum allowed DVNs." />

#### LZ\_ULN\_InvalidOptionalDVNCount - Invalid Optional DVN Count

<ContractInterface contractName="ReceiveUln302" interfaceType="error" interfaceName="LZ_ULN_InvalidOptionalDVNCount" description="Thrown when the optional DVN count configuration is invalid. Optional DVNs must be properly configured with a threshold." />

#### LZ\_ULN\_InvalidOptionalDVNThreshold - Invalid DVN Threshold

<ContractInterface contractName="ReceiveUln302" interfaceType="error" interfaceName="LZ_ULN_InvalidOptionalDVNThreshold" description="Thrown when the optional DVN threshold is invalid. The threshold must be greater than 0 and less than or equal to the number of optional DVNs." />

#### LZ\_ULN\_AtLeastOneDVN - At Least One DVN Required

<ContractInterface contractName="ReceiveUln302" interfaceType="error" interfaceName="LZ_ULN_AtLeastOneDVN" description="Thrown when attempting to configure a path without any DVNs. At least one DVN must be specified for message verification." />

#### LZ\_ULN\_InvalidConfirmations - Invalid Confirmations

<ContractInterface contractName="ReceiveUln302" interfaceType="error" interfaceName="LZ_ULN_InvalidConfirmations" description="Thrown when the confirmation count is invalid. Confirmations must be within acceptable range for the source chain." />

#### LZ\_ULN\_Unsorted - DVNs Not Sorted

<ContractInterface contractName="ReceiveUln302" interfaceType="error" interfaceName="LZ_ULN_Unsorted" description="Thrown when DVN addresses are not provided in sorted order. DVN addresses must be sorted in ascending order." />

#### LZ\_ULN\_UnsupportedEid - Unsupported Endpoint ID

<ContractInterface contractName="ReceiveUln302" interfaceType="error" interfaceName="LZ_ULN_UnsupportedEid" description="Thrown when receiving from an unsupported or invalid endpoint ID." />

#### LZ\_ULN\_Verifying - Already Verifying

<ContractInterface contractName="ReceiveUln302" interfaceType="error" interfaceName="LZ_ULN_Verifying" description="Thrown when attempting to verify a packet that is already being verified. Wait for the current verification to complete." />

#### LZ\_MessageLib\_OnlyEndpoint - Only Endpoint Allowed

<ContractInterface contractName="ReceiveUln302" interfaceType="error" interfaceName="LZ_MessageLib_OnlyEndpoint" description="Thrown when a function is called by an address other than the LayerZero endpoint. Only the endpoint can call library functions." />

### ReadLib1002 - Crosschain Read Library

The ReadLib1002 library enables crosschain data reading without state changes. It manages read channels, handles request/response cycles, and ensures data integrity.

### Errors

Configuration Errors

#### LZ\_RL\_InvalidConfigType - Invalid Configuration Type

<ContractInterface contractName="ReadLib1002" interfaceType="error" interfaceName="LZ_RL_InvalidConfigType" description="Thrown when attempting to set an invalid configuration type. Valid types are CONFIG_TYPE_ULN for read library config and CONFIG_TYPE_EXECUTOR for executor config." />

#### LZ\_RL\_InvalidRequiredDVNCount - Invalid DVN Count

<ContractInterface contractName="ReadLib1002" interfaceType="error" interfaceName="LZ_RL_InvalidRequiredDVNCount" description="Thrown when the required DVN count is invalid for read operations. Must have at least one required DVN." />

#### LZ\_RL\_InvalidOptionalDVNCount - Invalid Optional DVN Count

<ContractInterface contractName="ReadLib1002" interfaceType="error" interfaceName="LZ_RL_InvalidOptionalDVNCount" description="Thrown when the optional DVN count configuration is invalid for read operations." />

#### LZ\_RL\_InvalidOptionalDVNThreshold - Invalid DVN Threshold

<ContractInterface contractName="ReadLib1002" interfaceType="error" interfaceName="LZ_RL_InvalidOptionalDVNThreshold" description="Thrown when the optional DVN threshold is invalid. The threshold must be greater than 0 and less than or equal to the number of optional DVNs." />

Validation Errors

#### LZ\_RL\_InvalidPacketHeader - Invalid Packet Header

<ContractInterface contractName="ReadLib1002" interfaceType="error" interfaceName="LZ_RL_InvalidPacketHeader" description="Thrown when the read packet header is malformed or contains invalid data." />

#### LZ\_RL\_InvalidPacketVersion - Wrong Packet Version

<ContractInterface contractName="ReadLib1002" interfaceType="error" interfaceName="LZ_RL_InvalidPacketVersion" description="Thrown when the read packet version doesn't match the expected version." />

#### LZ\_RL\_InvalidCmdHash - Invalid Command Hash

<ContractInterface contractName="ReadLib1002" interfaceType="error" interfaceName="LZ_RL_InvalidCmdHash" description="Thrown when the command hash doesn't match the expected value, indicating potential tampering or corruption." />

#### LZ\_RL\_InvalidReceiver - Invalid Receiver

<ContractInterface contractName="ReadLib1002" interfaceType="error" interfaceName="LZ_RL_InvalidReceiver" description="Thrown when the receiver address for the read response is invalid or not authorized." />

#### LZ\_RL\_InvalidAmount - Invalid Fee Amount

<ContractInterface contractName="ReadLib1002" interfaceType="error" interfaceName="LZ_RL_InvalidAmount" description="Thrown when the provided fee amount doesn't match the required amount for the read operation." />

#### LZ\_RL\_Verifying - Already Verifying

<ContractInterface contractName="ReadLib1002" interfaceType="error" interfaceName="LZ_RL_Verifying" description="Thrown when attempting to verify a read response that is already being verified." />

#### LZ\_RL\_InvalidEid - Invalid Endpoint ID

<ContractInterface contractName="ReadLib1002" interfaceType="error" interfaceName="LZ_RL_InvalidEid" description="Thrown when the endpoint ID in the read packet doesn't match the expected source or destination." />

#### LZ\_RL\_AtLeastOneDVN - At Least One DVN Required

<ContractInterface contractName="ReadLib1002" interfaceType="error" interfaceName="LZ_RL_AtLeastOneDVN" description="Thrown when attempting to configure a read path without any DVNs." />

#### LZ\_RL\_Unsorted - DVNs Not Sorted

<ContractInterface contractName="ReadLib1002" interfaceType="error" interfaceName="LZ_RL_Unsorted" description="Thrown when DVN addresses are not provided in sorted order for read operations." />

#### LZ\_RL\_UnsupportedEid - Unsupported Endpoint ID

<ContractInterface contractName="ReadLib1002" interfaceType="error" interfaceName="LZ_RL_UnsupportedEid" description="Thrown when attempting to read from an unsupported or invalid endpoint ID." />

Library Access Errors

#### LZ\_MessageLib\_OnlyEndpoint - Only Endpoint Allowed

<ContractInterface contractName="ReadLib1002" interfaceType="error" interfaceName="LZ_MessageLib_OnlyEndpoint" description="Thrown when a function is called by an address other than the LayerZero endpoint." />

#### LZ\_RL\_InvalidExecutor - Invalid Executor

<ContractInterface contractName="ReadLib1002" interfaceType="error" interfaceName="LZ_RL_InvalidExecutor" description="Thrown when an invalid executor address is provided for read operations." />

#### LZ\_RL\_NotTreasury - Not Treasury

<ContractInterface contractName="ReadLib1002" interfaceType="error" interfaceName="LZ_RL_NotTreasury" description="Thrown when a treasury-only function is called by a non-treasury address." />

#### LZ\_RL\_CannotWithdrawAltToken - Cannot Withdraw Alt Token

<ContractInterface contractName="ReadLib1002" interfaceType="error" interfaceName="LZ_RL_CannotWithdrawAltToken" description="Thrown when attempting to withdraw alternative tokens that cannot be withdrawn from the read library." />

Worker & Option Errors

#### LZ\_ULN\_InvalidWorkerId - Invalid Worker ID

<ContractInterface contractName="ReadLib1002" interfaceType="error" interfaceName="LZ_ULN_InvalidWorkerId" description="Thrown when an invalid worker ID is provided for read operations." />

#### LZ\_ULN\_InvalidWorkerOptions - Invalid Worker Options

<ContractInterface contractName="ReadLib1002" interfaceType="error" interfaceName="LZ_ULN_InvalidWorkerOptions" description="Thrown when worker options are malformed for read operations." />

#### LZ\_ULN\_UnsupportedOptionType - Unsupported Option Type

<ContractInterface contractName="ReadLib1002" interfaceType="error" interfaceName="LZ_ULN_UnsupportedOptionType" description="Thrown when an unsupported option type is provided for read operations." />

#### LZ\_ULN\_InvalidLegacyType1Option - Invalid Legacy Type 1 Option

<ContractInterface contractName="ReadLib1002" interfaceType="error" interfaceName="LZ_ULN_InvalidLegacyType1Option" description="Thrown when legacy type 1 options are invalid for read operations." />

#### LZ\_ULN\_InvalidLegacyType2Option - Invalid Legacy Type 2 Option

<ContractInterface contractName="ReadLib1002" interfaceType="error" interfaceName="LZ_ULN_InvalidLegacyType2Option" description="Thrown when legacy type 2 options are invalid for read operations." />

DVN Errors

#### DVN\_InvalidDVNOptions - Invalid DVN Options

<ContractInterface contractName="ReadLib1002" interfaceType="error" interfaceName="DVN_InvalidDVNOptions" description="Thrown when DVN options are malformed for read operations." />

#### DVN\_InvalidDVNIdx - Invalid DVN Index

<ContractInterface contractName="ReadLib1002" interfaceType="error" interfaceName="DVN_InvalidDVNIdx" description="Thrown when an invalid DVN index is provided for read operations." />

Transfer Errors

#### Transfer\_NativeFailed - Native Transfer Failed

<ContractInterface contractName="ReadLib1002" interfaceType="error" interfaceName="Transfer_NativeFailed" description="Thrown when a native token transfer fails in read operations." />

#### Transfer\_ToAddressIsZero - Transfer to Zero Address

<ContractInterface contractName="ReadLib1002" interfaceType="error" interfaceName="Transfer_ToAddressIsZero" description="Thrown when attempting to transfer to the zero address in read operations." />

### Troubleshooting Common Library Errors

#### Fee-Related Issues

* **LZ\_MessageLib\_InvalidAmount**: Always use `quote()` before `send()` to get exact fees
* **LZ\_MessageLib\_TransferFailed**: Ensure contract has sufficient ETH balance
* **LZ\_RL\_InvalidAmount**: Ensure correct fee for read operations
* **DVN\_InvalidDVNOptions**: Check DVN option encoding and parameters

#### Configuration Issues

* **LZ\_ULN\_InvalidRequiredDVNCount**: Must have at least 1 required DVN
* **LZ\_ULN\_InvalidOptionalDVNThreshold**: Threshold must be ≤ optional DVN count
* **LZ\_ULN\_InvalidConfigType**: Use correct config type (ULN=2, Executor=1)
* **LZ\_RL\_InvalidConfigType**: Use correct config type for read library

#### Verification Issues

* **LZ\_ULN\_Verifying**: Message already being verified, wait for completion
* **LZ\_RL\_Verifying**: Read response already being verified
* **LZ\_ULN\_InvalidPacketHeader**: Possible message corruption or tampering
* **LZ\_RL\_InvalidPacketHeader**: Read packet header malformed
* **LZ\_ULN\_InvalidPacketVersion**: Wrong packet version for message library
* **LZ\_RL\_InvalidPacketVersion**: Wrong packet version for read library

For detailed troubleshooting guides, see [LayerZero Troubleshooting](/v2/developers/evm/troubleshooting/debugging-messages).

## Omnichain Application (OApp)

The foundation for building any crosschain application. **OApp** provides the core messaging infrastructure for a smart contract interacting with the **EndpointV2**.

### Core Information

#### oAppVersion() - Get OApp Version

<InteractiveContract contractName="OApp" functionName="oAppVersion" description="Returns the OApp version information including both sender and receiver version numbers. This helps identify the OApp implementation version for compatibility and feature support." />

#### endpoint() - Get Endpoint Address

<InteractiveContract contractName="OApp" functionName="endpoint" description="Returns the LayerZero endpoint address that this OApp is connected to. The endpoint handles all crosschain message routing and security for your application." />

### Peer Configuration

#### peers() - Get Remote Peer Address

<InteractiveContract contractName="OApp" functionName="peers" description="Returns the trusted peer address for a given endpoint ID (remote chain). Returns bytes32(0) if no peer is set. Use setPeer() to establish peer relationships." />

#### setPeer() - Connect Remote Chains

<InteractiveContract contractName="OApp" functionName="setPeer" description="Establishes a trusted connection between your OApp on this chain and its counterpart on a remote chain. This peer relationship must be set before crosschain messaging can occur." />

#### setDelegate() - Set Configuration Delegate

<InteractiveContract contractName="OApp" functionName="setDelegate" description="Sets a delegate address that can configure the OApp on behalf of the owner. Useful for delegating configuration management to another account or contract. Only the owner can set the delegate." />

### Message Reception

#### allowInitializePath() - Check Path Initialization

<InteractiveContract contractName="OApp" functionName="allowInitializePath" description="Determines if path initialization is allowed based on the provided origin. This controls whether lazy path initialization can occur for receiving messages from new source chains." />

#### nextNonce() - Get Next Message Nonce

<InteractiveContract contractName="OApp" functionName="nextNonce" description="Returns the next expected nonce for messages from a specific source endpoint and sender. Useful for tracking message sequencing and debugging out-of-order message delivery." />

#### lzReceive() - Receive Crosschain Messages

<InteractiveContract contractName="OApp" functionName="lzReceive" description="The main entry point called by the LayerZero endpoint to deliver crosschain messages to your OApp. Only the endpoint can call this function. Override _lzReceive in your contract to handle incoming messages." />

### Composability

#### isComposeMsgSender() - Verify Compose Sender

<InteractiveContract contractName="OApp" functionName="isComposeMsgSender" description="Checks whether an address is an approved compose message sender to the endpoint. This validation ensures only authorized contracts can send compose messages for multi-step crosschain workflows." />

### Events and Errors

Key events and errors emitted by the OApp contract.

#### Events

#### PeerSet - Peer Configuration Updated

<ContractInterface contractName="OApp" interfaceType="event" interfaceName="PeerSet" description="Emitted when a peer address is configured for a destination chain. Contains the endpoint ID (eid) and the peer address (bytes32). This establishes the trusted relationship between OApp contracts on different chains." />

#### Errors

#### OnlyPeer - Unauthorized Peer Message

<ContractInterface contractName="OApp" interfaceType="error" interfaceName="OnlyPeer" description="Thrown when receiving a message from an address that is not a configured peer for the source chain. Only messages from trusted peer contracts are accepted." />

#### NoPeer - Missing Peer Configuration

<ContractInterface contractName="OApp" interfaceType="error" interfaceName="NoPeer" description="Thrown when attempting to send a message to a destination chain where no peer contract has been configured. Use setPeer() to configure the peer address first." />

#### InvalidEndpointCall - Invalid Endpoint Call

<ContractInterface contractName="OApp" interfaceType="error" interfaceName="InvalidEndpointCall" description="Thrown when the endpoint call doesn't meet the required conditions or format. This typically occurs when the call parameters or context are invalid." />

#### InvalidDelegate - Invalid Delegate Configuration

<ContractInterface contractName="OApp" interfaceType="error" interfaceName="InvalidDelegate" description="Thrown when attempting to set an invalid delegate address. Delegates must be valid addresses that can configure messaging parameters on behalf of the OApp." />

#### NotEnoughNative - Insufficient Native Fee

<ContractInterface contractName="OApp" interfaceType="error" interfaceName="NotEnoughNative" description="Thrown when msg.value is insufficient to cover the native fee for sending a crosschain message. Always call quote() first to get the exact fee required, then send that amount as msg.value." />

#### OnlyEndpoint - Unauthorized Endpoint Call

<ContractInterface contractName="OApp" interfaceType="error" interfaceName="OnlyEndpoint" description="Thrown when a function restricted to the LayerZero endpoint is called by an unauthorized address. Functions like lzReceive() can only be called by the trusted endpoint contract." />

#### LzTokenUnavailable - LayerZero Token Not Available

<ContractInterface contractName="OApp" interfaceType="error" interfaceName="LzTokenUnavailable" description="Thrown when attempting to pay fees with LayerZero token but the LZ token is not available or not configured for the current endpoint. Use native token payment instead." />

#### Key Functions to Try:

* **Core Information:**
  * `oAppVersion()` - Get OApp version information
  * `endpoint()` - Get connected endpoint address
* **Peer Configuration:**
  * `setPeer()` - Connect to remote chains
  * `peers()` - Check connected chains
  * `setDelegate()` - Set configuration delegate
* **Message Reception:**
  * `lzReceive()` - Receive crosschain messages
  * `allowInitializePath()` - Check path initialization
  * `nextNonce()` - Get message ordering info
* **Composability:**
  * `isComposeMsgSender()` - Verify compose sender

#### Tips:

* Peers must be set before messaging
* Nonces ensure ordered delivery
* Options control execution parameters

## Omnichain Application Read (OAppRead)

**OAppRead** extends the standard **OApp** with LayerZero Read functionality, enabling crosschain data reading capabilities. It includes all standard methods plus the read channel configuration.

#### setReadChannel() - Configure Read Channel

<InteractiveContract contractName="OAppRead" functionName="setReadChannel" description="Activates or deactivates a LayerZero read channel for crosschain data reading. Set _active to true to enable the channel or false to disable it. Only the owner can configure read channels." />

#### Key Functions to Try:

* `setReadChannel()` - Configure read channel for crosschain data reading
* Plus all standard OApp functions listed above

## Omnichain Fungible Token (OFT)

**OFT** inherits from **OApp**, providing all crosschain messaging capabilities plus token-specific functionality. Create tokens that work seamlessly across multiple blockchains while maintaining a unified supply.

### Send Tokens

#### quoteSend() - Get Transfer Fees

<InteractiveContract contractName="OFT" functionName="quoteSend" description="Provides a quote for the send() operation. Returns the messaging fees required to transfer tokens crosschain, including both native and LayerZero token fee options." />

#### quoteOFT() - Get Detailed Transfer Quote

<InteractiveContract contractName="OFT" functionName="quoteOFT" description="Provides comprehensive quote information including transfer limits, fee breakdowns, and expected receive amounts. Use this for detailed fee analysis and to check transfer limits. Unused in the default implementation." />

#### send() - Transfer Tokens

<InteractiveContract contractName="OFT" functionName="send" description="Executes the crosschain token transfer. Deducts tokens from the sender on the source chain and mints/transfers them to the recipient on the destination chain." />

### Token Details

#### sharedDecimals() - Get Shared Decimals

<InteractiveContract contractName="OFT" functionName="sharedDecimals" description="Returns the shared decimal precision used for crosschain transfers. This is typically 6 or 8 decimals to ensure compatibility across different chains, regardless of the token's local decimals." />

#### approvalRequired() - Check Approval Requirement

<InteractiveContract contractName="OFT" functionName="approvalRequired" description="Returns whether the OFT requires approval before sending tokens. Returns true for OFTAdapter (which wraps existing tokens) and false for standard OFT (which has built-in transfer logic)." />

#### oftVersion() - Get OFT Version

<InteractiveContract contractName="OFT" functionName="oftVersion" description="Returns the OFT interface ID and version number. This helps identify the OFT implementation version for compatibility and feature support." />

#### token() - Get Underlying Token Address

<InteractiveContract contractName="OFT" functionName="token" description="Returns the address of the underlying ERC20 token that the OFT uses. Returns address(this) if standard OFT otherwise returns the actual token contract." />

#### decimalConversionRate() - Get Decimal Conversion Factor

<InteractiveContract contractName="OFT" functionName="decimalConversionRate" description="Returns the conversion rate between local decimals and shared decimals (10^(localDecimals - sharedDecimals)). This rate is used to normalize token amounts for crosschain transfers, ensuring consistent value representation across chains with different decimal precisions." />

### Management Functions

#### owner() - Get Current Owner

<InteractiveContract contractName="OFT" functionName="owner" description="Returns the current owner address of the OFT contract. The owner has administrative privileges including setting configurations and transferring ownership." />

#### transferOwnership() - Transfer Contract Ownership

<InteractiveContract contractName="OFT" functionName="transferOwnership" description="Transfers ownership of the OFT contract to a new address. Only the current owner can execute this function. Critical for contract administration and security." />

#### renounceOwnership() - Renounce Ownership

<InteractiveContract contractName="OFT" functionName="renounceOwnership" description="Permanently removes the owner, leaving the contract without an owner. WARNING: This action is irreversible and will prevent any owner-only functions from being called." />

#### setPeer() - Connect to Remote OFTs

<InteractiveContract contractName="OFT" functionName="setPeer" description="Connects this OFT to its counterpart on another chain by setting the peer address. This establishes the trusted relationship required for crosschain token transfers. Only the owner can set peers." />

#### setEnforcedOptions() - Configure Message Options

<InteractiveContract contractName="OFT" functionName="setEnforcedOptions" description="Sets enforced options for specific message types and destination chains. This ensures minimum gas limits and security parameters for crosschain transfers. Only the owner can configure these options." />

#### setMsgInspector() - Set Message Inspector

<InteractiveContract contractName="OFT" functionName="setMsgInspector" description="Sets an optional message inspector contract that can examine and validate incoming LayerZero messages before processing. The inspector can add custom validation logic and revert invalid messages. Only the owner can set the inspector." />

### Events

Key events emitted by the OFT contract.

#### OFTSent - Token Transfer Sent

<ContractInterface contractName="OFT" interfaceType="event" interfaceName="OFTSent" description="Emitted when tokens are sent crosschain. Contains the message GUID, destination endpoint ID, sender and recipient addresses, and the amount sent in both shared and local decimals." />

#### OFTReceived - Token Transfer Received

<ContractInterface contractName="OFT" interfaceType="event" interfaceName="OFTReceived" description="Emitted when tokens are received from another chain. Includes the message GUID, source endpoint ID, recipient address, and the amount received in both shared and local decimals." />

#### Transfer - Standard ERC20 Transfer

<ContractInterface contractName="OFT" interfaceType="event" interfaceName="Transfer" description="Standard ERC20 Transfer event emitted when tokens are transferred, minted, or burned. Essential for tracking token movements and wallet balances." />

### Errors

#### InvalidLocalDecimals - Invalid Decimal Configuration

<ContractInterface contractName="OFT" interfaceType="error" interfaceName="InvalidLocalDecimals" description="Thrown when the local decimal configuration is invalid. OFT requires proper decimal setup to handle crosschain conversions between different token decimal standards." />

#### SlippageExceeded - Transfer Slippage Too High

<ContractInterface contractName="OFT" interfaceType="error" interfaceName="SlippageExceeded" description="Thrown when the actual amount received after crosschain transfer falls below the minimum acceptable amount due to decimal conversions. Use quoteSend() to get accurate amounts and set appropriate minimums." />

#### AmountSDOverflowed - Shared Decimal Overflow

<ContractInterface contractName="OFT" interfaceType="error" interfaceName="AmountSDOverflowed" description="Thrown when converting token amounts to shared decimals results in an overflow. This typically occurs with very large token amounts that exceed the maximum value in the shared decimal representation." />

#### Key Functions to Try:

* **Transfer Operations:**
  * `quoteSend()` - Get transfer fee estimates
  * `send()` - Transfer tokens crosschain
  * `quoteOFT()` - Get comprehensive transfer quotes
* **Token Information:**
  * `sharedDecimals()` - Check decimal configuration
  * `approvalRequired()` - Check if approval is needed
  * `oftVersion()` - Get OFT implementation version
  * `token()` - Get underlying token address
  * `decimalConversionRate()` - Get decimal conversion factor
* **Management Functions:**
  * `owner()` - Check current contract owner
  * `setPeer()` - Connect to OFTs on other chains
  * `setEnforcedOptions()` - Configure security parameters
  * `setMsgInspector()` - Set message inspector
  * `transferOwnership()` - Transfer contract ownership
  * `renounceOwnership()` - Permanently remove ownership

#### Tips:

* Always call `quoteSend()` before `send()` to get accurate fees
* The `minAmountLD` parameter provides slippage protection
* Shared decimals (typically 6-8) may differ from local decimals (e.g., 18 for most ERC20s)
* `approvalRequired()` returns false for OFT and true for OFTAdapter
* Use `quoteOFT()` for detailed information including transfer limits and fee breakdowns
* OFTAdapter requires approval on the underlying token before sending
* Must call `setPeer()` to connect OFTs on different chains before transfers
* Only the contract owner can call management functions
* Use `setEnforcedOptions()` to enforce minimum gas limits for security
* `renounceOwnership()` is irreversible - use with extreme caution

For complete contract documentation including all functions, events, and technical details:

* [Contract Standards Overview](/v2/developers/evm/overview)
* [OApp Technical Reference](/v2/concepts/technical-reference/oapp-reference)
* [OFT Technical Reference](/v2/concepts/technical-reference/oft-reference)
* [Protocol Contracts](/v2/developers/evm/protocol-contracts-overview)

## Decentralized Verifier Network (DVN)

DVNs provide independent verification of crosschain messages. Each DVN can set custom pricing and confirmation requirements for different destination chains.

### getFee() - Get DVN Verification Fee

InteractiveDVN temporarily disabled.

<InteractiveDVN functionName="getFee" description="Get the fee required for DVN verification services to a specific destination chain. Different DVNs may have different pricing models and confirmation requirements." />

### dstConfig() - Get DVN Configuration

InteractiveDVN temporarily disabled.

<InteractiveDVN functionName="dstConfig" description="Retrieve the DVN configuration for a specific destination chain including gas settings, pricing multipliers, and floor margins." />

## Executor

Executors handle the final delivery of verified messages on destination chains. They manage gas pricing, execution parameters, and delivery guarantees.

### getFee() - Get Execution Fee

<InteractiveContract contractName="Executor" functionName="getFee" description="Get the fee required for message execution on the destination chain. Fees depend on gas requirements, destination chain costs, and execution options." defaultContractAddress="0x173272739Bd7Aa6e4e214714048a9fE699453059" />

### dstConfig() - Get Destination Configuration

<InteractiveContract contractName="Executor" functionName="dstConfig" description="Retrieve the execution configuration for a specific destination chain including base gas amounts, pricing multipliers, floor margins, native token caps, and compose gas settings." defaultContractAddress="0x173272739Bd7Aa6e4e214714048a9fE699453059" />

<Info>
  Contract ABIs shown here are from the latest deployment. Always verify addresses and ABIs for your specific use case.
</Info>
