diff --git a/.gitignore b/.gitignore index fbd735af..d0689a51 100644 --- a/.gitignore +++ b/.gitignore @@ -50,5 +50,4 @@ setup/plugin/config/keys/ecdsa.json libnear_da_rpc_sys.* # Ignore configuration for DVN or Executor -**/config_dvn.toml -**/config_executor.toml +#offchain/workers_config.toml diff --git a/Cargo.lock b/Cargo.lock index 3c5f370e..d4e162bc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6387,6 +6387,31 @@ dependencies = [ "memchr", ] +[[package]] +name = "offchain" +version = "0.1.0" +dependencies = [ + "alloy", + "axum 0.7.7", + "blsful", + "bytes", + "config", + "eyre", + "futures", + "http-body-util", + "log", + "project-root", + "reqwest 0.12.8", + "serde", + "serde_json", + "tempfile", + "tokio", + "tokio-tungstenite", + "tracing", + "tracing-subscriber", + "wiremock", +] + [[package]] name = "oid-registry" version = "0.7.1" @@ -7200,6 +7225,12 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "project-root" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bccbff07d5ed689c4087d20d7307a52ab6141edeedf487c3876a55b86cf63df" + [[package]] name = "prometheus" version = "0.13.4" @@ -10611,29 +10642,6 @@ dependencies = [ "url", ] -[[package]] -name = "workers" -version = "0.1.0" -dependencies = [ - "alloy", - "axum 0.7.7", - "blsful", - "bytes", - "config", - "eyre", - "futures", - "http-body-util", - "log", - "reqwest 0.12.8", - "serde", - "serde_json", - "tokio", - "tokio-tungstenite", - "tracing", - "tracing-subscriber", - "wiremock", -] - [[package]] name = "ws_stream_wasm" version = "0.7.4" diff --git a/Cargo.toml b/Cargo.toml index 37c03770..0c8fbf85 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,7 +5,7 @@ resolver = "2" members = [ "indexer", "contracts/evm/test/ffi/bls-utils", - "workers", + "offchain", ] [workspace.package] diff --git a/contracts/evm/broadcast/Deploy.s.sol/17000/run-1730888078.json b/contracts/evm/broadcast/Deploy.s.sol/17000/run-1730888078.json new file mode 100644 index 00000000..2ffe41aa --- /dev/null +++ b/contracts/evm/broadcast/Deploy.s.sol/17000/run-1730888078.json @@ -0,0 +1,86 @@ +{ + "transactions": [ + { + "hash": "0x3646019478a29994380a2ee951979a4f29392a9ba967686b9f63be1d3ea008b2", + "transactionType": "CREATE", + "contractName": "NuffDVN", + "contractAddress": "0x80a89e8a3ee76beebd18385454b3d0c673549294", + "function": null, + "arguments": [ + "(43422602000654003794166594118896270938274456917320287136348177775059116555611, 43911695177077596177168849814887191381998507378543697126231287973246954175835)", + "0x57600080FD5B61152382611cDb565B6020808252", + "58351025432238646178330714650301419928504078201169389854785315381325929546849", + "10615813171099985437706700642927767781866039008183019139114519040961561002753", + "0x1B57565B1660408301526001600160801b03611D", + "0x6083015260809283019290910190600101611D20" + ], + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x26aa1e", + "value": "0x0", + "input": "0x60a060405234801561001057600080fd5b506040516122d03803806122d083398101604081905261002f91610254565b85516003556020808701516004908155600180546001600160a01b0319166001600160a01b0389169081179091556040805163416ecebf60e01b81529051919363416ecebf938281019391928290030181865afa158015610094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b89190610312565b63ffffffff1660805260058054600160a01b600160f01b031916600160a01b61ffff871602600160b01b600160f01b03191617600160b01b6001600160401b03861602179055600680546001600160a01b03199081166001600160a01b03858116919091179092556007805490911691831691909117905561013b600033610170565b6101657fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610170565b50505050505061033f565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1661020b576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556101ca3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b80516001600160a01b038116811461022657600080fd5b919050565b805161ffff8116811461022657600080fd5b80516001600160401b038116811461022657600080fd5b60008060008060008086880360e081121561026e57600080fd5b604081121561027c57600080fd5b50604080519081016001600160401b03811182821017156102ad57634e487b7160e01b600052604160045260246000fd5b6040908152885182526020808a0151908301529096506102ce90880161020f565b94506102dc6060880161022b565b93506102ea6080880161023d565b92506102f860a0880161020f565b915061030660c0880161020f565b90509295509295509295565b60006020828403121561032457600080fd5b815163ffffffff8116811461033857600080fd5b9392505050565b608051611f68610368600039600081816104f8015281816112a801526112e80152611f686000f3fe6080604052600436106101e95760003560e01c8063724e78da11610113578063b3129896116100ab578063d547741f1161006f578063d547741f1461072a578063f3acc68d1461074a578063f48ab8f21461076a578063f49ef505146107a5578063fbd9b28b146107d557600080fd5b8063b31298961461068a578063bb37d00c146106aa578063c358de0a146106ca578063c5fdf39c146106ea578063cd88b9031461070a57600080fd5b8063724e78da146104c657806372607537146104e6578063741bef1a1461052f57806375b238fc1461056757806391d148541461058957806395d376d7146105a95780639e944965146105bc578063a217fddf14610641578063a98586e11461065657600080fd5b8063296817001161018657806329681700146103995780632f2ff15d146103c957806330bb3aac146103e957806336568abe1461041057806351cc784f1461043057806352d3b8711461044657806354093c65146104665780635580c07d146104865780635b4c2500146104a657600080fd5b8062bf2e80146101ee57806301ffc9a7146102285780631095b6d7146102585780631703a0181461027a578063180aedf3146102b95780631fad0b4c146102ee57806320ac2ece1461030e578063248a9ca31461032e57806326e67a371461036c575b600080fd5b3480156101fa57600080fd5b5060055461021090600160a01b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561023457600080fd5b506102486102433660046115e8565b610807565b604051901515815260200161021f565b34801561026457600080fd5b5061027861027336600461162e565b61083e565b005b34801561028657600080fd5b506005546102a190600160b01b90046001600160401b031681565b6040516001600160401b03909116815260200161021f565b3480156102c557600080fd5b506102d96102d436600461166b565b610973565b60405161021f999897969594939291906116d4565b3480156102fa57600080fd5b5061027861030936600461175d565b610afc565b34801561031a57600080fd5b5061027861032936600461175d565b610b37565b34801561033a57600080fd5b5061035e61034936600461166b565b60009081526020819052604090206001015490565b60405190815260200161021f565b34801561037857600080fd5b5061038c61038736600461178c565b610b72565b60405161021f91906117a7565b3480156103a557600080fd5b506102486103b436600461178c565b60096020526000908152604090205460ff1681565b3480156103d557600080fd5b506102786103e43660046117ed565b610bf9565b3480156103f557600080fd5b5061035e610404366004611878565b50612710949350505050565b34801561041c57600080fd5b5061027861042b3660046117ed565b610c23565b34801561043c57600080fd5b5061035e60025481565b34801561045257600080fd5b506102786104613660046118ed565b610ca1565b34801561047257600080fd5b506102786104813660046119a8565b610e11565b34801561049257600080fd5b506102786104a13660046119f8565b610e38565b3480156104b257600080fd5b506102786104c136600461175d565b610fc0565b3480156104d257600080fd5b506102786104e136600461175d565b610ffb565b3480156104f257600080fd5b5061051a7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161021f565b34801561053b57600080fd5b5060065461054f906001600160a01b031681565b6040516001600160a01b03909116815260200161021f565b34801561057357600080fd5b5061035e600080516020611f1383398151915281565b34801561059557600080fd5b506102486105a43660046117ed565b611036565b61035e6105b7366004611ae6565b61105f565b3480156105c857600080fd5b506106106105d736600461178c565b600a602052600090815260409020546001600160401b03811690600160401b810461ffff1690600160501b90046001600160801b031683565b604080516001600160401b03909416845261ffff90921660208401526001600160801b03169082015260600161021f565b34801561064d57600080fd5b5061035e600081565b34801561066257600080fd5b5061035e7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de81565b34801561069657600080fd5b5060015461054f906001600160a01b031681565b3480156106b657600080fd5b5060075461054f906001600160a01b031681565b3480156106d657600080fd5b506102786106e5366004611b69565b61109d565b3480156106f657600080fd5b5060055461054f906001600160a01b031681565b34801561071657600080fd5b50610278610725366004611b84565b6110d8565b34801561073657600080fd5b506102786107453660046117ed565b6110fe565b34801561075657600080fd5b50610278610765366004611c0a565b611123565b34801561077657600080fd5b50610248610785366004611c46565b600b60209081526000928352604080842090915290825290205460ff1681565b3480156107b157600080fd5b506003546004546107c0919082565b6040805192835260208301919091520161021f565b3480156107e157600080fd5b506107f56107f0366004611c46565b611164565b60405160ff909116815260200161021f565b60006001600160e01b03198216637965db0b60e01b148061083857506301ffc9a760e01b6001600160e01b03198316145b92915050565b600080516020611f13833981519152610856816111a7565b6108807f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de85611036565b6108bf5760405162461bcd60e51b815260206004820152600b60248201526a24b73b30b634b2103634b160a91b60448201526064015b60405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b15801561090957600080fd5b505af115801561091d573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b600860205260009081526040902080546001820180546001600160a01b0383169363ffffffff600160a01b8504811694600160c01b9004169290916109b790611c70565b80601f01602080910402602001604051908101604052809291908181526020018280546109e390611c70565b8015610a305780601f10610a0557610100808354040283529160200191610a30565b820191906000526020600020905b815481529060010190602001808311610a1357829003601f168201915b50505050600283015460038401546004850154600586018054959693956001600160401b0384169550600160401b9093046001600160a01b0390811694921692610a7990611c70565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa590611c70565b8015610af25780601f10610ac757610100808354040283529160200191610af2565b820191906000526020600020905b815481529060010190602001808311610ad557829003601f168201915b5050505050905089565b600080516020611f13833981519152610b14816111a7565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020611f13833981519152610b4f816111a7565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b63ffffffff81166000908152600c6020908152604091829020805483518184028101840190945280845260609392830182828015610bed57602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610bbe5790505b50505050509050919050565b600082815260208190526040902060010154610c14816111a7565b610c1e83836111b4565b505050565b6001600160a01b0381163314610c935760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016108b6565b610c9d8282611238565b5050565b600080516020611f13833981519152610cb9816111a7565b60005b82811015610dd25736848483818110610cd757610cd7611caa565b90506080020190506040518060600160405280826020016020810190610cfd9190611cc0565b6001600160401b03168152602001610d1b6060840160408501611b69565b61ffff168152602001610d346080840160608501611cf2565b6001600160801b03169052600a6000610d50602085018561178c565b63ffffffff1681526020808201929092526040908101600020835181549385015194909201516001600160801b0316600160501b02600160501b600160d01b031961ffff909516600160401b0269ffffffffffffffffffff199094166001600160401b0390931692909217929092179290921691909117905550600101610cbc565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051610e04929190611d0d565b60405180910390a1505050565b600080516020611f13833981519152610e29816111a7565b50805160035560200151600455565b3068929eee149b4bd212685403610e575763ab143c066000526004601cfd5b3068929eee149b4bd2126855610e6c8661129d565b610ea95760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908191cdd115a5960921b60448201526064016108b6565b63ffffffff87166000908152600b6020908152604080832088845290915290205460ff1615610f1a5760405162461bcd60e51b815260206004820152601d60248201527f737263206a6f62496420697320616c726561647920766572696669656400000060448201526064016108b6565b63ffffffff87166000908152600b60209081526040808320888452825291829020805460ff191660011790559051610f6091899189918991899189918991899101611d9e565b60408051808303601f1901905281815263ffffffff89168252602082018790527f33d9faf7f95795c8d5bd00585df49c5e70f8c4c8b9b11ed439fb144db238e5c7910160405180910390a13868929eee149b4bd212685550505050505050565b600080516020611f13833981519152610fd8816111a7565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020611f13833981519152611013816111a7565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b604051612710808252907f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a19392505050565b600080516020611f138339815191526110b5816111a7565b506005805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b63ffffffff83166000908152600c602052604090206110f890838361152a565b50505050565b600082815260208190526040902060010154611119816111a7565b610c1e8383611238565b600080516020611f1383398151915261113b816111a7565b5063ffffffff919091166000908152600960205260409020805460ff1916911515919091179055565b600c602052816000526040600020818154811061118057600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b6111b18133611324565b50565b6111be8282611036565b610c9d576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556111f43390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6112428282611036565b15610c9d576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16148061130f57506112e082617530611e33565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16145b1561131c57506001919050565b506000919050565b61132e8282611036565b610c9d57611346816001600160a01b03166014611388565b611351836020611388565b604051602001611362929190611e4f565b60408051601f198184030181529082905262461bcd60e51b82526108b691600401611ebe565b60606000611397836002611ed1565b6113a2906002611ee8565b6001600160401b038111156113b9576113b9611962565b6040519080825280601f01601f1916602001820160405280156113e3576020820181803683370190505b509050600360fc1b816000815181106113fe576113fe611caa565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061142d5761142d611caa565b60200101906001600160f81b031916908160001a9053506000611451846002611ed1565b61145c906001611ee8565b90505b60018111156114d4576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061149057611490611caa565b1a60f81b8282815181106114a6576114a6611caa565b60200101906001600160f81b031916908160001a90535060049490941c936114cd81611efb565b905061145f565b5083156115235760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108b6565b9392505050565b82805482825590600052602060002090601f016020900481019282156115c35791602002820160005b8382111561159457833560ff1683826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302611553565b80156115c15782816101000a81549060ff0219169055600101602081600001049283019260010302611594565b505b506115cf9291506115d3565b5090565b5b808211156115cf57600081556001016115d4565b6000602082840312156115fa57600080fd5b81356001600160e01b03198116811461152357600080fd5b80356001600160a01b038116811461162957600080fd5b919050565b60008060006060848603121561164357600080fd5b61164c84611612565b925061165a60208501611612565b929592945050506040919091013590565b60006020828403121561167d57600080fd5b5035919050565b60005b8381101561169f578181015183820152602001611687565b50506000910152565b600081518084526116c0816020860160208601611684565b601f01601f19169290920160200192915050565b6001600160a01b038a16815263ffffffff8981166020830152881660408201526101206060820181905260009061170d908301896116a8565b608083018890526001600160401b03871660a08401526001600160a01b0386811660c0850152851660e084015282810361010084015261174d81856116a8565b9c9b505050505050505050505050565b60006020828403121561176f57600080fd5b61152382611612565b803563ffffffff8116811461162957600080fd5b60006020828403121561179e57600080fd5b61152382611778565b602080825282518282018190526000918401906040840190835b818110156117e257835160ff168352602093840193909201916001016117c1565b509095945050505050565b6000806040838503121561180057600080fd5b8235915061181060208401611612565b90509250929050565b80356001600160401b038116811461162957600080fd5b60008083601f84011261184257600080fd5b5081356001600160401b0381111561185957600080fd5b60208301915083602082850101111561187157600080fd5b9250929050565b60008060008060006080868803121561189057600080fd5b61189986611778565b94506118a760208701611819565b93506118b560408701611612565b925060608601356001600160401b038111156118d057600080fd5b6118dc88828901611830565b969995985093965092949392505050565b6000806020838503121561190057600080fd5b82356001600160401b0381111561191657600080fd5b8301601f8101851361192757600080fd5b80356001600160401b0381111561193d57600080fd5b8560208260071b840101111561195257600080fd5b6020919091019590945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156119a0576119a0611962565b604052919050565b600060408284031280156119bb57600080fd5b50604080519081016001600160401b03811182821017156119de576119de611962565b604052823581526020928301359281019290925250919050565b600080600080600080600060e0888a031215611a1357600080fd5b611a1c88611778565b9650611a2a60208901611778565b95506040880135945060608801356001600160401b03811115611a4c57600080fd5b8801601f81018a13611a5d57600080fd5b80356001600160401b03811115611a7657611a76611962565b611a89601f8201601f1916602001611978565b8181528b6020838501011115611a9e57600080fd5b8160208401602083013760009181016020019190915294505060808801359250611aca60a08901611819565b9150611ad860c08901611612565b905092959891949750929550565b600080600060408486031215611afb57600080fd5b83356001600160401b03811115611b1157600080fd5b840160a08187031215611b2357600080fd5b925060208401356001600160401b03811115611b3e57600080fd5b611b4a86828701611830565b9497909650939450505050565b803561ffff8116811461162957600080fd5b600060208284031215611b7b57600080fd5b61152382611b57565b600080600060408486031215611b9957600080fd5b611ba284611778565b925060208401356001600160401b03811115611bbd57600080fd5b8401601f81018613611bce57600080fd5b80356001600160401b03811115611be457600080fd5b8660208260051b8401011115611bf957600080fd5b939660209190910195509293505050565b60008060408385031215611c1d57600080fd5b611c2683611778565b915060208301358015158114611c3b57600080fd5b809150509250929050565b60008060408385031215611c5957600080fd5b611c6283611778565b946020939093013593505050565b600181811c90821680611c8457607f821691505b602082108103611ca457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611cd257600080fd5b61152382611819565b80356001600160801b038116811461162957600080fd5b600060208284031215611d0457600080fd5b61152382611cdb565b6020808252810182905260008360408301825b85811015611d945763ffffffff611d3684611778565b1682526001600160401b03611d4d60208501611819565b16602083015261ffff611d6260408501611b57565b1660408301526001600160801b03611d7c60608501611cdb565b16606083015260809283019290910190600101611d20565b5095945050505050565b63ffffffff60e01b8860e01b16815263ffffffff60e01b8760e01b16600482015285600882015260008551611dda816028850160208a01611684565b602892019182019490945260c09290921b6001600160c01b031916604883015260601b6bffffffffffffffffffffffff1916605082015260640195945050505050565b634e487b7160e01b600052601160045260246000fd5b63ffffffff818116838216019081111561083857610838611e1d565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351611e81816017850160208801611684565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611eb2816028840160208801611684565b01602801949350505050565b60208152600061152360208301846116a8565b808202811582820484141761083857610838611e1d565b8082018082111561083857610838611e1d565b600081611f0a57611f0a611e1d565b50600019019056fea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220fb7e3966b5bbc954adf3f02b88d3f7737dad89527bfe4789f7c1c2892040afbd64736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006edce65403992e310a62460808c4b910d972f10f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c03f31fd86a9077785b7bcf6598ce3598fa91113000000000000000000000000b3e790273f0a89e53d2c20dd4dfe82aa00bbf91b", + "nonce": "0x24", + "chainId": "0x4268" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x7df7dc", + "logs": [ + { + "address": "0x80a89e8a3ee76beebd18385454b3d0c673549294", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x0a13702304b833e74b4175c04ea477dc21e9f958cc5cc0e94223706abc8e2ce8", + "blockNumber": "0x28f465", + "transactionHash": "0x3646019478a29994380a2ee951979a4f29392a9ba967686b9f63be1d3ea008b2", + "transactionIndex": "0x17", + "logIndex": "0x62", + "removed": false + }, + { + "address": "0x80a89e8a3ee76beebd18385454b3d0c673549294", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0xa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x0a13702304b833e74b4175c04ea477dc21e9f958cc5cc0e94223706abc8e2ce8", + "blockNumber": "0x28f465", + "transactionHash": "0x3646019478a29994380a2ee951979a4f29392a9ba967686b9f63be1d3ea008b2", + "transactionIndex": "0x17", + "logIndex": "0x63", + "removed": false + } + ], + "logsBloom": "0x00000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000020000800000000000000800001000000000000800000000000000000000200000000000000000000000004000000000000000000000000000000000000000000000000000000000000000080000000000000000001000000000000000000000000000000000000000000000000000000000400100000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x3646019478a29994380a2ee951979a4f29392a9ba967686b9f63be1d3ea008b2", + "transactionIndex": "0x17", + "blockHash": "0x0a13702304b833e74b4175c04ea477dc21e9f958cc5cc0e94223706abc8e2ce8", + "blockNumber": "0x28f465", + "gasUsed": "0x1dc02c", + "effectiveGasPrice": "0x2777726b", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0x80a89e8a3ee76beebd18385454b3d0c673549294" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730888078, + "chain": 17000, + "commit": "b36a744" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/Deploy.s.sol/17000/run-1730892940.json b/contracts/evm/broadcast/Deploy.s.sol/17000/run-1730892940.json new file mode 100644 index 00000000..260817dc --- /dev/null +++ b/contracts/evm/broadcast/Deploy.s.sol/17000/run-1730892940.json @@ -0,0 +1,86 @@ +{ + "transactions": [ + { + "hash": "0x2d31ea0bc2f9e0f4d8e2e9ce449cda4d3188f2b06069e4d1962287cc08315218", + "transactionType": "CREATE", + "contractName": "NuffDVN", + "contractAddress": "0x6bc36c779da22c0c88861b805bda0920b54f3639", + "function": null, + "arguments": [ + "(0, 0)", + "0x6EDCE65403992e310A62460808c4b910D972f10f", + "1", + "1", + "0xC03f31fD86a9077785b7bCf6598Ce3598Fa91113", + "0xb3e790273f0A89e53d2C20dD4dFe82AA00bbf91b" + ], + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x2e603a", + "value": "0x0", + "input": "0x60a060405234801561001057600080fd5b506040516129e03803806129e083398101604081905261002f91610254565b85516003556020808701516004908155600180546001600160a01b0319166001600160a01b0389169081179091556040805163416ecebf60e01b81529051919363416ecebf938281019391928290030181865afa158015610094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b89190610312565b63ffffffff1660805260058054600160a01b600160f01b031916600160a01b61ffff871602600160b01b600160f01b03191617600160b01b6001600160401b03861602179055600680546001600160a01b03199081166001600160a01b03858116919091179092556007805490911691831691909117905561013b600033610170565b6101657fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610170565b50505050505061033f565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1661020b576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556101ca3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b80516001600160a01b038116811461022657600080fd5b919050565b805161ffff8116811461022657600080fd5b80516001600160401b038116811461022657600080fd5b60008060008060008086880360e081121561026e57600080fd5b604081121561027c57600080fd5b50604080519081016001600160401b03811182821017156102ad57634e487b7160e01b600052604160045260246000fd5b6040908152885182526020808a0151908301529096506102ce90880161020f565b94506102dc6060880161022b565b93506102ea6080880161023d565b92506102f860a0880161020f565b915061030660c0880161020f565b90509295509295509295565b60006020828403121561032457600080fd5b815163ffffffff8116811461033857600080fd5b9392505050565b60805161267161036f600039600081816104f1015281816111e5015281816116e5015261172501526126716000f3fe6080604052600436106101e95760003560e01c8063724e78da11610113578063b3129896116100ab578063d547741f1161006f578063d547741f14610723578063f3acc68d14610743578063f48ab8f214610763578063f49ef5051461079e578063fbd9b28b146107ce57600080fd5b8063b312989614610683578063bb37d00c146106a3578063c358de0a146106c3578063c5fdf39c146106e3578063cd88b9031461070357600080fd5b8063724e78da146104bf57806372607537146104df578063741bef1a1461052857806375b238fc1461056057806391d148541461058257806395d376d7146105a25780639e944965146105b5578063a217fddf1461063a578063a98586e11461064f57600080fd5b8063296817001161018657806329681700146103995780632f2ff15d146103c957806330bb3aac146103e957806336568abe1461040957806351cc784f1461042957806352d3b8711461043f57806354093c651461045f5780635580c07d1461047f5780635b4c25001461049f57600080fd5b8062bf2e80146101ee57806301ffc9a7146102285780631095b6d7146102585780631703a0181461027a578063180aedf3146102b95780631fad0b4c146102ee57806320ac2ece1461030e578063248a9ca31461032e57806326e67a371461036c575b600080fd5b3480156101fa57600080fd5b5060055461021090600160a01b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561023457600080fd5b50610248610243366004611a3e565b610800565b604051901515815260200161021f565b34801561026457600080fd5b50610278610273366004611a84565b610837565b005b34801561028657600080fd5b506005546102a190600160b01b90046001600160401b031681565b6040516001600160401b03909116815260200161021f565b3480156102c557600080fd5b506102d96102d4366004611ac1565b61096c565b60405161021f99989796959493929190611b2a565b3480156102fa57600080fd5b50610278610309366004611bb3565b610af5565b34801561031a57600080fd5b50610278610329366004611bb3565b610b30565b34801561033a57600080fd5b5061035e610349366004611ac1565b60009081526020819052604090206001015490565b60405190815260200161021f565b34801561037857600080fd5b5061038c610387366004611be2565b610b6b565b60405161021f9190611bfd565b3480156103a557600080fd5b506102486103b4366004611be2565b60096020526000908152604090205460ff1681565b3480156103d557600080fd5b506102786103e4366004611c43565b610bf2565b3480156103f557600080fd5b5061035e610404366004611cce565b610c1c565b34801561041557600080fd5b50610278610424366004611c43565b610d03565b34801561043557600080fd5b5061035e60025481565b34801561044b57600080fd5b5061027861045a366004611d43565b610d81565b34801561046b57600080fd5b5061027861047a366004611dfe565b610ef1565b34801561048b57600080fd5b5061027861049a366004611e4e565b610f18565b3480156104ab57600080fd5b506102786104ba366004611bb3565b6110a0565b3480156104cb57600080fd5b506102786104da366004611bb3565b6110db565b3480156104eb57600080fd5b506105137f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161021f565b34801561053457600080fd5b50600654610548906001600160a01b031681565b6040516001600160a01b03909116815260200161021f565b34801561056c57600080fd5b5061035e60008051602061261c83398151915281565b34801561058e57600080fd5b5061024861059d366004611c43565b611116565b61035e6105b0366004611f3c565b61113f565b3480156105c157600080fd5b506106096105d0366004611be2565b600a602052600090815260409020546001600160401b03811690600160401b810461ffff1690600160501b90046001600160801b031683565b604080516001600160401b03909416845261ffff90921660208401526001600160801b03169082015260600161021f565b34801561064657600080fd5b5061035e600081565b34801561065b57600080fd5b5061035e7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de81565b34801561068f57600080fd5b50600154610548906001600160a01b031681565b3480156106af57600080fd5b50600754610548906001600160a01b031681565b3480156106cf57600080fd5b506102786106de366004611fbf565b6114da565b3480156106ef57600080fd5b50600554610548906001600160a01b031681565b34801561070f57600080fd5b5061027861071e366004611fda565b611515565b34801561072f57600080fd5b5061027861073e366004611c43565b61153b565b34801561074f57600080fd5b5061027861075e366004612060565b611560565b34801561076f57600080fd5b5061024861077e36600461209c565b600b60209081526000928352604080842090915290825290205460ff1681565b3480156107aa57600080fd5b506003546004546107b9919082565b6040805192835260208301919091520161021f565b3480156107da57600080fd5b506107ee6107e936600461209c565b6115a1565b60405160ff909116815260200161021f565b60006001600160e01b03198216637965db0b60e01b148061083157506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008051602061261c83398151915261084f816115e4565b6108797f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de85611116565b6108b85760405162461bcd60e51b815260206004820152600b60248201526a24b73b30b634b2103634b160a91b60448201526064015b60405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b15801561090257600080fd5b505af1158015610916573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b600860205260009081526040902080546001820180546001600160a01b0383169363ffffffff600160a01b8504811694600160c01b9004169290916109b0906120c6565b80601f01602080910402602001604051908101604052809291908181526020018280546109dc906120c6565b8015610a295780601f106109fe57610100808354040283529160200191610a29565b820191906000526020600020905b815481529060010190602001808311610a0c57829003601f168201915b50505050600283015460038401546004850154600586018054959693956001600160401b0384169550600160401b9093046001600160a01b0390811694921692610a72906120c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9e906120c6565b8015610aeb5780601f10610ac057610100808354040283529160200191610aeb565b820191906000526020600020905b815481529060010190602001808311610ace57829003601f168201915b5050505050905089565b60008051602061261c833981519152610b0d816115e4565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b60008051602061261c833981519152610b48816115e4565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b63ffffffff81166000908152600c6020908152604091829020805483518184028101840190945280845260609392830182828015610be657602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610bb75790505b50505050509050919050565b600082815260208190526040902060010154610c0d816115e4565b610c1783836115f1565b505050565b6040805160c0810182526006546001600160a01b03908116825263ffffffff881660208084018290526001600160401b03898116858701528884166060860152600554600160b01b81049091166080860152600160a01b900461ffff1660a08501526007546000928352600a9091528482209451637bfa20a960e01b81529194921691637bfa20a991610cb791859189908990600401612129565b602060405180830381865afa158015610cd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf891906121e6565b979650505050505050565b6001600160a01b0381163314610d735760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016108af565b610d7d8282611675565b5050565b60008051602061261c833981519152610d99816115e4565b60005b82811015610eb25736848483818110610db757610db76121ff565b90506080020190506040518060600160405280826020016020810190610ddd9190612215565b6001600160401b03168152602001610dfb6060840160408501611fbf565b61ffff168152602001610e146080840160608501612247565b6001600160801b03169052600a6000610e306020850185611be2565b63ffffffff1681526020808201929092526040908101600020835181549385015194909201516001600160801b0316600160501b02600160501b600160d01b031961ffff909516600160401b0269ffffffffffffffffffff199094166001600160401b0390931692909217929092179290921691909117905550600101610d9c565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051610ee4929190612262565b60405180910390a1505050565b60008051602061261c833981519152610f09816115e4565b50805160035560200151600455565b3068929eee149b4bd212685403610f375763ab143c066000526004601cfd5b3068929eee149b4bd2126855610f4c866116da565b610f895760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908191cdd115a5960921b60448201526064016108af565b63ffffffff87166000908152600b6020908152604080832088845290915290205460ff1615610ffa5760405162461bcd60e51b815260206004820152601d60248201527f737263206a6f62496420697320616c726561647920766572696669656400000060448201526064016108af565b63ffffffff87166000908152600b60209081526040808320888452825291829020805460ff191660011790559051611040918991899189918991899189918991016122f3565b60408051808303601f1901905281815263ffffffff89168252602082018790527f33d9faf7f95795c8d5bd00585df49c5e70f8c4c8b9b11ed439fb144db238e5c7910160405180910390a13868929eee149b4bd212685550505050505050565b60008051602061261c8339815191526110b8816115e4565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008051602061261c8339815191526110f3816115e4565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60008060026000815461115190612388565b9182905550600081815260086020526040812091925061117760a0880160808901611bb3565b6001600160a01b0316036111c65760405162461bcd60e51b8152602060048201526016602482015275496e76616c69642073656e646572206164647265737360501b60448201526064016108af565b80546001600160c01b0319163363ffffffff60a01b191617600160a01b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff160217815561121b6020870187611be2565b815463ffffffff91909116600160c01b0263ffffffff60c01b1990911617815561124860208701876123a1565b6001830191611258919083612435565b50604086013560028201556112736080870160608801612215565b60038201805467ffffffffffffffff19166001600160401b03929092169190911790556112a660a0870160808801611bb3565b6003820180546001600160a01b0392909216600160401b02600160401b600160e01b03199092169190911790556112e86112e360208801886123a1565b611761565b6004820180546001600160a01b0319166001600160a01b039290921691909117905560058101611319858783612435565b506040805160c081019091526006546001600160a01b03168152600090602080820190611348908a018a611be2565b63ffffffff16815260200161136360808a0160608b01612215565b6001600160401b0316815260200161138160a08a0160808b01611bb3565b6001600160a01b039081168252600554600160b01b81046001600160401b0316602080850191909152600160a01b90910461ffff16604090930192909252600754929350919091169063df2b057e908390600a906000906113e4908d018d611be2565b63ffffffff1663ffffffff16815260200190815260200160002089896040518563ffffffff1660e01b815260040161141f9493929190612129565b6020604051808303816000875af115801561143e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146291906121e6565b93507fa34614e1f25aade4e7abdcc77ae23ea2ea54c27f927e9060a39d5efe3f71adeb8360405161149591815260200190565b60405180910390a16040518481527f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a15050509392505050565b60008051602061261c8339815191526114f2816115e4565b506005805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b63ffffffff83166000908152600c60205260409020611535908383611980565b50505050565b600082815260208190526040902060010154611556816115e4565b610c178383611675565b60008051602061261c833981519152611578816115e4565b5063ffffffff919091166000908152600960205260409020805460ff1916911515919091179055565b600c60205281600052604060002081815481106115bd57600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b6115ee8133611781565b50565b6115fb8282611116565b610d7d576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556116313390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61167f8282611116565b15610d7d576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16148061174c575061171d826175306124f4565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16145b1561175957506001919050565b506000919050565b6000611771605160318486612510565b61177a9161253a565b9392505050565b61178b8282611116565b610d7d576117a3816001600160a01b031660146117e5565b6117ae8360206117e5565b6040516020016117bf929190612558565b60408051601f198184030181529082905262461bcd60e51b82526108af916004016125c7565b606060006117f48360026125da565b6117ff9060026125f1565b6001600160401b0381111561181657611816611db8565b6040519080825280601f01601f191660200182016040528015611840576020820181803683370190505b509050600360fc1b8160008151811061185b5761185b6121ff565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061188a5761188a6121ff565b60200101906001600160f81b031916908160001a90535060006118ae8460026125da565b6118b99060016125f1565b90505b6001811115611931576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106118ed576118ed6121ff565b1a60f81b828281518110611903576119036121ff565b60200101906001600160f81b031916908160001a90535060049490941c9361192a81612604565b90506118bc565b50831561177a5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108af565b82805482825590600052602060002090601f01602090048101928215611a195791602002820160005b838211156119ea57833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026119a9565b8015611a175782816101000a81549060ff02191690556001016020816000010492830192600103026119ea565b505b50611a25929150611a29565b5090565b5b80821115611a255760008155600101611a2a565b600060208284031215611a5057600080fd5b81356001600160e01b03198116811461177a57600080fd5b80356001600160a01b0381168114611a7f57600080fd5b919050565b600080600060608486031215611a9957600080fd5b611aa284611a68565b9250611ab060208501611a68565b929592945050506040919091013590565b600060208284031215611ad357600080fd5b5035919050565b60005b83811015611af5578181015183820152602001611add565b50506000910152565b60008151808452611b16816020860160208601611ada565b601f01601f19169290920160200192915050565b6001600160a01b038a16815263ffffffff89811660208301528816604082015261012060608201819052600090611b6390830189611afe565b608083018890526001600160401b03871660a08401526001600160a01b0386811660c0850152851660e0840152828103610100840152611ba38185611afe565b9c9b505050505050505050505050565b600060208284031215611bc557600080fd5b61177a82611a68565b803563ffffffff81168114611a7f57600080fd5b600060208284031215611bf457600080fd5b61177a82611bce565b602080825282518282018190526000918401906040840190835b81811015611c3857835160ff16835260209384019390920191600101611c17565b509095945050505050565b60008060408385031215611c5657600080fd5b82359150611c6660208401611a68565b90509250929050565b80356001600160401b0381168114611a7f57600080fd5b60008083601f840112611c9857600080fd5b5081356001600160401b03811115611caf57600080fd5b602083019150836020828501011115611cc757600080fd5b9250929050565b600080600080600060808688031215611ce657600080fd5b611cef86611bce565b9450611cfd60208701611c6f565b9350611d0b60408701611a68565b925060608601356001600160401b03811115611d2657600080fd5b611d3288828901611c86565b969995985093965092949392505050565b60008060208385031215611d5657600080fd5b82356001600160401b03811115611d6c57600080fd5b8301601f81018513611d7d57600080fd5b80356001600160401b03811115611d9357600080fd5b8560208260071b8401011115611da857600080fd5b6020919091019590945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611df657611df6611db8565b604052919050565b60006040828403128015611e1157600080fd5b50604080519081016001600160401b0381118282101715611e3457611e34611db8565b604052823581526020928301359281019290925250919050565b600080600080600080600060e0888a031215611e6957600080fd5b611e7288611bce565b9650611e8060208901611bce565b95506040880135945060608801356001600160401b03811115611ea257600080fd5b8801601f81018a13611eb357600080fd5b80356001600160401b03811115611ecc57611ecc611db8565b611edf601f8201601f1916602001611dce565b8181528b6020838501011115611ef457600080fd5b8160208401602083013760009181016020019190915294505060808801359250611f2060a08901611c6f565b9150611f2e60c08901611a68565b905092959891949750929550565b600080600060408486031215611f5157600080fd5b83356001600160401b03811115611f6757600080fd5b840160a08187031215611f7957600080fd5b925060208401356001600160401b03811115611f9457600080fd5b611fa086828701611c86565b9497909650939450505050565b803561ffff81168114611a7f57600080fd5b600060208284031215611fd157600080fd5b61177a82611fad565b600080600060408486031215611fef57600080fd5b611ff884611bce565b925060208401356001600160401b0381111561201357600080fd5b8401601f8101861361202457600080fd5b80356001600160401b0381111561203a57600080fd5b8660208260051b840101111561204f57600080fd5b939660209190910195509293505050565b6000806040838503121561207357600080fd5b61207c83611bce565b91506020830135801515811461209157600080fd5b809150509250929050565b600080604083850312156120af57600080fd5b6120b883611bce565b946020939093013593505050565b600181811c908216806120da57607f821691505b6020821081036120fa57634e487b7160e01b600052602260045260246000fd5b50919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b03855116815263ffffffff60208601511660208201526001600160401b03604086015116604082015260018060a01b0360608601511660608201526001600160401b03608086015116608082015261ffff60a08601511660a08201526121c260c0820185546001600160401b0381168252604081811c61ffff16602084015260509190911c6001600160801b0316910152565b61014061012082015260006121dc61014083018486612100565b9695505050505050565b6000602082840312156121f857600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561222757600080fd5b61177a82611c6f565b80356001600160801b0381168114611a7f57600080fd5b60006020828403121561225957600080fd5b61177a82612230565b6020808252810182905260008360408301825b858110156122e95763ffffffff61228b84611bce565b1682526001600160401b036122a260208501611c6f565b16602083015261ffff6122b760408501611fad565b1660408301526001600160801b036122d160608501612230565b16606083015260809283019290910190600101612275565b5095945050505050565b63ffffffff60e01b8860e01b16815263ffffffff60e01b8760e01b1660048201528560088201526000855161232f816028850160208a01611ada565b602892019182019490945260c09290921b6001600160c01b031916604883015260601b6bffffffffffffffffffffffff1916605082015260640195945050505050565b634e487b7160e01b600052601160045260246000fd5b60006001820161239a5761239a612372565b5060010190565b6000808335601e198436030181126123b857600080fd5b8301803591506001600160401b038211156123d257600080fd5b602001915036819003821315611cc757600080fd5b601f821115610c1757806000526020600020601f840160051c8101602085101561240e5750805b601f840160051c820191505b8181101561242e576000815560010161241a565b5050505050565b6001600160401b0383111561244c5761244c611db8565b6124608361245a83546120c6565b836123e7565b6000601f841160018114612494576000851561247c5750838201355b600019600387901b1c1916600186901b17835561242e565b600083815260209020601f19861690835b828110156124c557868501358255602094850194600190920191016124a5565b50868210156124e25760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b63ffffffff818116838216019081111561083157610831612372565b6000808585111561252057600080fd5b8386111561252d57600080fd5b5050820193919092039150565b8035602083101561083157600019602084900360031b1b1692915050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b81526000835161258a816017850160208801611ada565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516125bb816028840160208801611ada565b01602801949350505050565b60208152600061177a6020830184611afe565b808202811582820484141761083157610831612372565b8082018082111561083157610831612372565b60008161261357612613612372565b50600019019056fea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a26469706673582212202e040954c8d9bcd23cde70bd15b44b9913b6bcce860c9a16353345622ad4cf3064736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006edce65403992e310a62460808c4b910d972f10f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c03f31fd86a9077785b7bcf6598ce3598fa91113000000000000000000000000b3e790273f0a89e53d2c20dd4dfe82aa00bbf91b", + "nonce": "0x29", + "chainId": "0x4268" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x51885b", + "logs": [ + { + "address": "0x6bc36c779da22c0c88861b805bda0920b54f3639", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x09fda1ce0ec7babc3cb90c240410406d985d77c3d99dfefff98bbf342535578c", + "blockNumber": "0x28f5e3", + "transactionHash": "0x2d31ea0bc2f9e0f4d8e2e9ce449cda4d3188f2b06069e4d1962287cc08315218", + "transactionIndex": "0xc", + "logIndex": "0x12", + "removed": false + }, + { + "address": "0x6bc36c779da22c0c88861b805bda0920b54f3639", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0xa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x09fda1ce0ec7babc3cb90c240410406d985d77c3d99dfefff98bbf342535578c", + "blockNumber": "0x28f5e3", + "transactionHash": "0x2d31ea0bc2f9e0f4d8e2e9ce449cda4d3188f2b06069e4d1962287cc08315218", + "transactionIndex": "0xc", + "logIndex": "0x13", + "removed": false + } + ], + "logsBloom": "0x00000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000100000020010000000000000000800000000000000000800000000000000000000200000000000000000000000004000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000400100000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x2d31ea0bc2f9e0f4d8e2e9ce449cda4d3188f2b06069e4d1962287cc08315218", + "transactionIndex": "0xc", + "blockHash": "0x09fda1ce0ec7babc3cb90c240410406d985d77c3d99dfefff98bbf342535578c", + "blockNumber": "0x28f5e3", + "gasUsed": "0x23af28", + "effectiveGasPrice": "0x1f37c162", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0x6bc36c779da22c0c88861b805bda0920b54f3639" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730892940, + "chain": 17000, + "commit": "b36a744" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/Deploy.s.sol/17000/run-1730893276.json b/contracts/evm/broadcast/Deploy.s.sol/17000/run-1730893276.json new file mode 100644 index 00000000..34d65d25 --- /dev/null +++ b/contracts/evm/broadcast/Deploy.s.sol/17000/run-1730893276.json @@ -0,0 +1,86 @@ +{ + "transactions": [ + { + "hash": "0x99c5c56a4c433d5bdddb2245c26a126490e88e2e90bf997fd14850872fca330a", + "transactionType": "CREATE", + "contractName": "NuffDVN", + "contractAddress": "0x5d41b8a40d249c65c1174a761bd449625fafae3f", + "function": null, + "arguments": [ + "(0, 0)", + "0x6EDCE65403992e310A62460808c4b910D972f10f", + "1", + "1", + "0xC03f31fD86a9077785b7bCf6598Ce3598Fa91113", + "0xb3e790273f0A89e53d2C20dD4dFe82AA00bbf91b" + ], + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x2ae6ab", + "value": "0x0", + "input": "0x60a060405234801561001057600080fd5b506040516126b53803806126b583398101604081905261002f91610254565b85516003556020808701516004908155600180546001600160a01b0319166001600160a01b0389169081179091556040805163416ecebf60e01b81529051919363416ecebf938281019391928290030181865afa158015610094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b89190610312565b63ffffffff1660805260058054600160a01b600160f01b031916600160a01b61ffff871602600160b01b600160f01b03191617600160b01b6001600160401b03861602179055600680546001600160a01b03199081166001600160a01b03858116919091179092556007805490911691831691909117905561013b600033610170565b6101657fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610170565b50505050505061033f565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1661020b576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556101ca3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b80516001600160a01b038116811461022657600080fd5b919050565b805161ffff8116811461022657600080fd5b80516001600160401b038116811461022657600080fd5b60008060008060008086880360e081121561026e57600080fd5b604081121561027c57600080fd5b50604080519081016001600160401b03811182821017156102ad57634e487b7160e01b600052604160045260246000fd5b6040908152885182526020808a0151908301529096506102ce90880161020f565b94506102dc6060880161022b565b93506102ea6080880161023d565b92506102f860a0880161020f565b915061030660c0880161020f565b90509295509295509295565b60006020828403121561032457600080fd5b815163ffffffff8116811461033857600080fd5b9392505050565b60805161234661036f600039600081816104f801528181611105015281816114b901526114f901526123466000f3fe6080604052600436106101e95760003560e01c8063724e78da11610113578063b3129896116100ab578063d547741f1161006f578063d547741f1461072a578063f3acc68d1461074a578063f48ab8f21461076a578063f49ef505146107a5578063fbd9b28b146107d557600080fd5b8063b31298961461068a578063bb37d00c146106aa578063c358de0a146106ca578063c5fdf39c146106ea578063cd88b9031461070a57600080fd5b8063724e78da146104c657806372607537146104e6578063741bef1a1461052f57806375b238fc1461056757806391d148541461058957806395d376d7146105a95780639e944965146105bc578063a217fddf14610641578063a98586e11461065657600080fd5b8063296817001161018657806329681700146103995780632f2ff15d146103c957806330bb3aac146103e957806336568abe1461041057806351cc784f1461043057806352d3b8711461044657806354093c65146104665780635580c07d146104865780635b4c2500146104a657600080fd5b8062bf2e80146101ee57806301ffc9a7146102285780631095b6d7146102585780631703a0181461027a578063180aedf3146102b95780631fad0b4c146102ee57806320ac2ece1461030e578063248a9ca31461032e57806326e67a371461036c575b600080fd5b3480156101fa57600080fd5b5060055461021090600160a01b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561023457600080fd5b50610248610243366004611812565b610807565b604051901515815260200161021f565b34801561026457600080fd5b50610278610273366004611858565b61083e565b005b34801561028657600080fd5b506005546102a190600160b01b90046001600160401b031681565b6040516001600160401b03909116815260200161021f565b3480156102c557600080fd5b506102d96102d4366004611895565b610973565b60405161021f999897969594939291906118fe565b3480156102fa57600080fd5b50610278610309366004611987565b610afc565b34801561031a57600080fd5b50610278610329366004611987565b610b37565b34801561033a57600080fd5b5061035e610349366004611895565b60009081526020819052604090206001015490565b60405190815260200161021f565b34801561037857600080fd5b5061038c6103873660046119b6565b610b72565b60405161021f91906119d1565b3480156103a557600080fd5b506102486103b43660046119b6565b60096020526000908152604090205460ff1681565b3480156103d557600080fd5b506102786103e4366004611a17565b610bf9565b3480156103f557600080fd5b5061035e610404366004611aa2565b50612710949350505050565b34801561041c57600080fd5b5061027861042b366004611a17565b610c23565b34801561043c57600080fd5b5061035e60025481565b34801561045257600080fd5b50610278610461366004611b17565b610ca1565b34801561047257600080fd5b50610278610481366004611bd2565b610e11565b34801561049257600080fd5b506102786104a1366004611c22565b610e38565b3480156104b257600080fd5b506102786104c1366004611987565b610fc0565b3480156104d257600080fd5b506102786104e1366004611987565b610ffb565b3480156104f257600080fd5b5061051a7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161021f565b34801561053b57600080fd5b5060065461054f906001600160a01b031681565b6040516001600160a01b03909116815260200161021f565b34801561057357600080fd5b5061035e6000805160206122f183398151915281565b34801561059557600080fd5b506102486105a4366004611a17565b611036565b61035e6105b7366004611d10565b61105f565b3480156105c857600080fd5b506106106105d73660046119b6565b600a602052600090815260409020546001600160401b03811690600160401b810461ffff1690600160501b90046001600160801b031683565b604080516001600160401b03909416845261ffff90921660208401526001600160801b03169082015260600161021f565b34801561064d57600080fd5b5061035e600081565b34801561066257600080fd5b5061035e7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de81565b34801561069657600080fd5b5060015461054f906001600160a01b031681565b3480156106b657600080fd5b5060075461054f906001600160a01b031681565b3480156106d657600080fd5b506102786106e5366004611d93565b6112ae565b3480156106f657600080fd5b5060055461054f906001600160a01b031681565b34801561071657600080fd5b50610278610725366004611dae565b6112e9565b34801561073657600080fd5b50610278610745366004611a17565b61130f565b34801561075657600080fd5b50610278610765366004611e34565b611334565b34801561077657600080fd5b50610248610785366004611e70565b600b60209081526000928352604080842090915290825290205460ff1681565b3480156107b157600080fd5b506003546004546107c0919082565b6040805192835260208301919091520161021f565b3480156107e157600080fd5b506107f56107f0366004611e70565b611375565b60405160ff909116815260200161021f565b60006001600160e01b03198216637965db0b60e01b148061083857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000805160206122f1833981519152610856816113b8565b6108807f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de85611036565b6108bf5760405162461bcd60e51b815260206004820152600b60248201526a24b73b30b634b2103634b160a91b60448201526064015b60405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b15801561090957600080fd5b505af115801561091d573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b600860205260009081526040902080546001820180546001600160a01b0383169363ffffffff600160a01b8504811694600160c01b9004169290916109b790611e9a565b80601f01602080910402602001604051908101604052809291908181526020018280546109e390611e9a565b8015610a305780601f10610a0557610100808354040283529160200191610a30565b820191906000526020600020905b815481529060010190602001808311610a1357829003601f168201915b50505050600283015460038401546004850154600586018054959693956001600160401b0384169550600160401b9093046001600160a01b0390811694921692610a7990611e9a565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa590611e9a565b8015610af25780601f10610ac757610100808354040283529160200191610af2565b820191906000526020600020905b815481529060010190602001808311610ad557829003601f168201915b5050505050905089565b6000805160206122f1833981519152610b14816113b8565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000805160206122f1833981519152610b4f816113b8565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b63ffffffff81166000908152600c6020908152604091829020805483518184028101840190945280845260609392830182828015610bed57602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610bbe5790505b50505050509050919050565b600082815260208190526040902060010154610c14816113b8565b610c1e83836113c5565b505050565b6001600160a01b0381163314610c935760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016108b6565b610c9d8282611449565b5050565b6000805160206122f1833981519152610cb9816113b8565b60005b82811015610dd25736848483818110610cd757610cd7611ed4565b90506080020190506040518060600160405280826020016020810190610cfd9190611eea565b6001600160401b03168152602001610d1b6060840160408501611d93565b61ffff168152602001610d346080840160608501611f1c565b6001600160801b03169052600a6000610d5060208501856119b6565b63ffffffff1681526020808201929092526040908101600020835181549385015194909201516001600160801b0316600160501b02600160501b600160d01b031961ffff909516600160401b0269ffffffffffffffffffff199094166001600160401b0390931692909217929092179290921691909117905550600101610cbc565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051610e04929190611f37565b60405180910390a1505050565b6000805160206122f1833981519152610e29816113b8565b50805160035560200151600455565b3068929eee149b4bd212685403610e575763ab143c066000526004601cfd5b3068929eee149b4bd2126855610e6c866114ae565b610ea95760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908191cdd115a5960921b60448201526064016108b6565b63ffffffff87166000908152600b6020908152604080832088845290915290205460ff1615610f1a5760405162461bcd60e51b815260206004820152601d60248201527f737263206a6f62496420697320616c726561647920766572696669656400000060448201526064016108b6565b63ffffffff87166000908152600b60209081526040808320888452825291829020805460ff191660011790559051610f6091899189918991899189918991899101611fc8565b60408051808303601f1901905281815263ffffffff89168252602082018790527f33d9faf7f95795c8d5bd00585df49c5e70f8c4c8b9b11ed439fb144db238e5c7910160405180910390a13868929eee149b4bd212685550505050505050565b6000805160206122f1833981519152610fd8816113b8565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000805160206122f1833981519152611013816113b8565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6000806002600081546110719061205d565b9182905550600081815260086020526040812091925061109760a0880160808901611987565b6001600160a01b0316036110e65760405162461bcd60e51b8152602060048201526016602482015275496e76616c69642073656e646572206164647265737360501b60448201526064016108b6565b80546001600160c01b0319163363ffffffff60a01b191617600160a01b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff160217815561113b60208701876119b6565b815463ffffffff91909116600160c01b0263ffffffff60c01b199091161781556111686020870187612076565b600183019161117891908361210a565b50604086013560028201556111936080870160608801611eea565b60038201805467ffffffffffffffff19166001600160401b03929092169190911790556111c660a0870160808801611987565b6003820180546001600160a01b0392909216600160401b02600160401b600160e01b03199092169190911790556112086112036020880188612076565b611535565b6004820180546001600160a01b0319166001600160a01b03929092169190911790556005810161123985878361210a565b5060405182815261271093507fa34614e1f25aade4e7abdcc77ae23ea2ea54c27f927e9060a39d5efe3f71adeb9060200160405180910390a16040518381527f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a150509392505050565b6000805160206122f18339815191526112c6816113b8565b506005805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b63ffffffff83166000908152600c60205260409020611309908383611754565b50505050565b60008281526020819052604090206001015461132a816113b8565b610c1e8383611449565b6000805160206122f183398151915261134c816113b8565b5063ffffffff919091166000908152600960205260409020805460ff1916911515919091179055565b600c602052816000526040600020818154811061139157600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b6113c28133611555565b50565b6113cf8282611036565b610c9d576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556114053390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6114538282611036565b15610c9d576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16148061152057506114f1826175306121c9565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16145b1561152d57506001919050565b506000919050565b60006115456051603184866121e5565b61154e9161220f565b9392505050565b61155f8282611036565b610c9d57611577816001600160a01b031660146115b9565b6115828360206115b9565b60405160200161159392919061222d565b60408051601f198184030181529082905262461bcd60e51b82526108b69160040161229c565b606060006115c88360026122af565b6115d39060026122c6565b6001600160401b038111156115ea576115ea611b8c565b6040519080825280601f01601f191660200182016040528015611614576020820181803683370190505b509050600360fc1b8160008151811061162f5761162f611ed4565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061165e5761165e611ed4565b60200101906001600160f81b031916908160001a90535060006116828460026122af565b61168d9060016122c6565b90505b6001811115611705576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106116c1576116c1611ed4565b1a60f81b8282815181106116d7576116d7611ed4565b60200101906001600160f81b031916908160001a90535060049490941c936116fe816122d9565b9050611690565b50831561154e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108b6565b82805482825590600052602060002090601f016020900481019282156117ed5791602002820160005b838211156117be57833560ff1683826101000a81548160ff021916908360ff160217905550926020019260010160208160000104928301926001030261177d565b80156117eb5782816101000a81549060ff02191690556001016020816000010492830192600103026117be565b505b506117f99291506117fd565b5090565b5b808211156117f957600081556001016117fe565b60006020828403121561182457600080fd5b81356001600160e01b03198116811461154e57600080fd5b80356001600160a01b038116811461185357600080fd5b919050565b60008060006060848603121561186d57600080fd5b6118768461183c565b92506118846020850161183c565b929592945050506040919091013590565b6000602082840312156118a757600080fd5b5035919050565b60005b838110156118c95781810151838201526020016118b1565b50506000910152565b600081518084526118ea8160208601602086016118ae565b601f01601f19169290920160200192915050565b6001600160a01b038a16815263ffffffff89811660208301528816604082015261012060608201819052600090611937908301896118d2565b608083018890526001600160401b03871660a08401526001600160a01b0386811660c0850152851660e084015282810361010084015261197781856118d2565b9c9b505050505050505050505050565b60006020828403121561199957600080fd5b61154e8261183c565b803563ffffffff8116811461185357600080fd5b6000602082840312156119c857600080fd5b61154e826119a2565b602080825282518282018190526000918401906040840190835b81811015611a0c57835160ff168352602093840193909201916001016119eb565b509095945050505050565b60008060408385031215611a2a57600080fd5b82359150611a3a6020840161183c565b90509250929050565b80356001600160401b038116811461185357600080fd5b60008083601f840112611a6c57600080fd5b5081356001600160401b03811115611a8357600080fd5b602083019150836020828501011115611a9b57600080fd5b9250929050565b600080600080600060808688031215611aba57600080fd5b611ac3866119a2565b9450611ad160208701611a43565b9350611adf6040870161183c565b925060608601356001600160401b03811115611afa57600080fd5b611b0688828901611a5a565b969995985093965092949392505050565b60008060208385031215611b2a57600080fd5b82356001600160401b03811115611b4057600080fd5b8301601f81018513611b5157600080fd5b80356001600160401b03811115611b6757600080fd5b8560208260071b8401011115611b7c57600080fd5b6020919091019590945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611bca57611bca611b8c565b604052919050565b60006040828403128015611be557600080fd5b50604080519081016001600160401b0381118282101715611c0857611c08611b8c565b604052823581526020928301359281019290925250919050565b600080600080600080600060e0888a031215611c3d57600080fd5b611c46886119a2565b9650611c54602089016119a2565b95506040880135945060608801356001600160401b03811115611c7657600080fd5b8801601f81018a13611c8757600080fd5b80356001600160401b03811115611ca057611ca0611b8c565b611cb3601f8201601f1916602001611ba2565b8181528b6020838501011115611cc857600080fd5b8160208401602083013760009181016020019190915294505060808801359250611cf460a08901611a43565b9150611d0260c0890161183c565b905092959891949750929550565b600080600060408486031215611d2557600080fd5b83356001600160401b03811115611d3b57600080fd5b840160a08187031215611d4d57600080fd5b925060208401356001600160401b03811115611d6857600080fd5b611d7486828701611a5a565b9497909650939450505050565b803561ffff8116811461185357600080fd5b600060208284031215611da557600080fd5b61154e82611d81565b600080600060408486031215611dc357600080fd5b611dcc846119a2565b925060208401356001600160401b03811115611de757600080fd5b8401601f81018613611df857600080fd5b80356001600160401b03811115611e0e57600080fd5b8660208260051b8401011115611e2357600080fd5b939660209190910195509293505050565b60008060408385031215611e4757600080fd5b611e50836119a2565b915060208301358015158114611e6557600080fd5b809150509250929050565b60008060408385031215611e8357600080fd5b611e8c836119a2565b946020939093013593505050565b600181811c90821680611eae57607f821691505b602082108103611ece57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611efc57600080fd5b61154e82611a43565b80356001600160801b038116811461185357600080fd5b600060208284031215611f2e57600080fd5b61154e82611f05565b6020808252810182905260008360408301825b85811015611fbe5763ffffffff611f60846119a2565b1682526001600160401b03611f7760208501611a43565b16602083015261ffff611f8c60408501611d81565b1660408301526001600160801b03611fa660608501611f05565b16606083015260809283019290910190600101611f4a565b5095945050505050565b63ffffffff60e01b8860e01b16815263ffffffff60e01b8760e01b16600482015285600882015260008551612004816028850160208a016118ae565b602892019182019490945260c09290921b6001600160c01b031916604883015260601b6bffffffffffffffffffffffff1916605082015260640195945050505050565b634e487b7160e01b600052601160045260246000fd5b60006001820161206f5761206f612047565b5060010190565b6000808335601e1984360301811261208d57600080fd5b8301803591506001600160401b038211156120a757600080fd5b602001915036819003821315611a9b57600080fd5b601f821115610c1e57806000526020600020601f840160051c810160208510156120e35750805b601f840160051c820191505b8181101561210357600081556001016120ef565b5050505050565b6001600160401b0383111561212157612121611b8c565b6121358361212f8354611e9a565b836120bc565b6000601f84116001811461216957600085156121515750838201355b600019600387901b1c1916600186901b178355612103565b600083815260209020601f19861690835b8281101561219a578685013582556020948501946001909201910161217a565b50868210156121b75760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b63ffffffff818116838216019081111561083857610838612047565b600080858511156121f557600080fd5b8386111561220257600080fd5b5050820193919092039150565b8035602083101561083857600019602084900360031b1b1692915050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b81526000835161225f8160178501602088016118ae565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516122908160288401602088016118ae565b01602801949350505050565b60208152600061154e60208301846118d2565b808202811582820484141761083857610838612047565b8082018082111561083857610838612047565b6000816122e8576122e8612047565b50600019019056fea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a264697066735822122004fe6517f12bd8ad1f6098eba91fe2a6c26f541e7899db92ed7ae88a83e0cf7064736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006edce65403992e310a62460808c4b910d972f10f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c03f31fd86a9077785b7bcf6598ce3598fa91113000000000000000000000000b3e790273f0a89e53d2c20dd4dfe82aa00bbf91b", + "nonce": "0x2b", + "chainId": "0x4268" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xde6434", + "logs": [ + { + "address": "0x5d41b8a40d249c65c1174a761bd449625fafae3f", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0xed753f3f989d81e748b1aaa8f98dc934abf3b3582c5040bec049942219b680e5", + "blockNumber": "0x28f5fa", + "transactionHash": "0x99c5c56a4c433d5bdddb2245c26a126490e88e2e90bf997fd14850872fca330a", + "transactionIndex": "0x16", + "logIndex": "0x1a", + "removed": false + }, + { + "address": "0x5d41b8a40d249c65c1174a761bd449625fafae3f", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0xa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0xed753f3f989d81e748b1aaa8f98dc934abf3b3582c5040bec049942219b680e5", + "blockNumber": "0x28f5fa", + "transactionHash": "0x99c5c56a4c433d5bdddb2245c26a126490e88e2e90bf997fd14850872fca330a", + "transactionIndex": "0x16", + "logIndex": "0x1b", + "removed": false + } + ], + "logsBloom": "0x00000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000002000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000020000000000000000000800000040000000000800000000000000000000200000000000000000000000004000000000000000000000000000000000000000000001000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000400100000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x99c5c56a4c433d5bdddb2245c26a126490e88e2e90bf997fd14850872fca330a", + "transactionIndex": "0x16", + "blockHash": "0xed753f3f989d81e748b1aaa8f98dc934abf3b3582c5040bec049942219b680e5", + "blockNumber": "0x28f5fa", + "gasUsed": "0x2102af", + "effectiveGasPrice": "0x1b8f7cf6", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0x5d41b8a40d249c65c1174a761bd449625fafae3f" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730893276, + "chain": 17000, + "commit": "b36a744" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/Deploy.s.sol/17000/run-1730910926.json b/contracts/evm/broadcast/Deploy.s.sol/17000/run-1730910926.json new file mode 100644 index 00000000..59ba91e6 --- /dev/null +++ b/contracts/evm/broadcast/Deploy.s.sol/17000/run-1730910926.json @@ -0,0 +1,86 @@ +{ + "transactions": [ + { + "hash": "0xac0bcf02b5da7b749722a386b0793461473153c52d910fc18c6237dde2c97ca5", + "transactionType": "CREATE", + "contractName": "NuffDVN", + "contractAddress": "0xbe4bad49fe4c887f1ba0adf5287ab2408caad8cf", + "function": null, + "arguments": [ + "(0, 0)", + "0x6EDCE65403992e310A62460808c4b910D972f10f", + "1", + "1", + "0xC03f31fD86a9077785b7bCf6598Ce3598Fa91113", + "0xb3e790273f0A89e53d2C20dD4dFe82AA00bbf91b" + ], + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x2f1c58", + "value": "0x0", + "input": "0x60a060405234801561001057600080fd5b50604051612a8c380380612a8c83398101604081905261002f91610254565b85516003556020808701516004908155600180546001600160a01b0319166001600160a01b0389169081179091556040805163416ecebf60e01b81529051919363416ecebf938281019391928290030181865afa158015610094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b89190610312565b63ffffffff1660805260058054600160a01b600160f01b031916600160a01b61ffff871602600160b01b600160f01b03191617600160b01b6001600160401b03861602179055600680546001600160a01b03199081166001600160a01b03858116919091179092556007805490911691831691909117905561013b600033610170565b6101657fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610170565b50505050505061033f565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1661020b576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556101ca3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b80516001600160a01b038116811461022657600080fd5b919050565b805161ffff8116811461022657600080fd5b80516001600160401b038116811461022657600080fd5b60008060008060008086880360e081121561026e57600080fd5b604081121561027c57600080fd5b50604080519081016001600160401b03811182821017156102ad57634e487b7160e01b600052604160045260246000fd5b6040908152885182526020808a0151908301529096506102ce90880161020f565b94506102dc6060880161022b565b93506102ea6080880161023d565b92506102f860a0880161020f565b915061030660c0880161020f565b90509295509295509295565b60006020828403121561032457600080fd5b815163ffffffff8116811461033857600080fd5b9392505050565b60805161271d61036f600039600081816104f801528181611130015281816114e40152611524015261271d6000f3fe6080604052600436106101e95760003560e01c8063724e78da11610113578063b3129896116100ab578063d547741f1161006f578063d547741f1461072a578063f3acc68d1461074a578063f48ab8f21461076a578063f49ef505146107a5578063fbd9b28b146107d557600080fd5b8063b31298961461068a578063bb37d00c146106aa578063c358de0a146106ca578063c5fdf39c146106ea578063cd88b9031461070a57600080fd5b8063724e78da146104c657806372607537146104e6578063741bef1a1461052f57806375b238fc1461056757806391d148541461058957806395d376d7146105a95780639e944965146105bc578063a217fddf14610641578063a98586e11461065657600080fd5b8063296817001161018657806329681700146103995780632f2ff15d146103c957806330bb3aac146103e957806336568abe146104105780634ce419c31461043057806351cc784f1461045057806352d3b8711461046657806354093c65146104865780635b4c2500146104a657600080fd5b8062bf2e80146101ee57806301ffc9a7146102285780631095b6d7146102585780631703a0181461027a578063180aedf3146102b95780631fad0b4c146102ee57806320ac2ece1461030e578063248a9ca31461032e57806326e67a371461036c575b600080fd5b3480156101fa57600080fd5b5060055461021090600160a01b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561023457600080fd5b50610248610243366004611a5b565b610807565b604051901515815260200161021f565b34801561026457600080fd5b50610278610273366004611aaa565b61083e565b005b34801561028657600080fd5b506005546102a190600160b01b90046001600160401b031681565b6040516001600160401b03909116815260200161021f565b3480156102c557600080fd5b506102d96102d4366004611aeb565b610973565b60405161021f99989796959493929190611b54565b3480156102fa57600080fd5b50610278610309366004611bdd565b610afc565b34801561031a57600080fd5b50610278610329366004611bdd565b610b37565b34801561033a57600080fd5b5061035e610349366004611aeb565b60009081526020819052604090206001015490565b60405190815260200161021f565b34801561037857600080fd5b5061038c610387366004611c0e565b610b72565b60405161021f9190611c29565b3480156103a557600080fd5b506102486103b4366004611c0e565b60096020526000908152604090205460ff1681565b3480156103d557600080fd5b506102786103e4366004611c6f565b610bf9565b3480156103f557600080fd5b5061035e610404366004611cfe565b50612710949350505050565b34801561041c57600080fd5b5061027861042b366004611c6f565b610c23565b34801561043c57600080fd5b5061027861044b366004611dd3565b610ca1565b34801561045c57600080fd5b5061035e60025481565b34801561047257600080fd5b50610278610481366004611f05565b610e54565b34801561049257600080fd5b506102786104a1366004611f7a565b610fc4565b3480156104b257600080fd5b506102786104c1366004611bdd565b610feb565b3480156104d257600080fd5b506102786104e1366004611bdd565b611026565b3480156104f257600080fd5b5061051a7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161021f565b34801561053b57600080fd5b5060065461054f906001600160a01b031681565b6040516001600160a01b03909116815260200161021f565b34801561057357600080fd5b5061035e6000805160206126c883398151915281565b34801561059557600080fd5b506102486105a4366004611c6f565b611061565b61035e6105b7366004611fca565b61108a565b3480156105c857600080fd5b506106106105d7366004611c0e565b600a602052600090815260409020546001600160401b03811690600160401b810461ffff1690600160501b90046001600160801b031683565b604080516001600160401b03909416845261ffff90921660208401526001600160801b03169082015260600161021f565b34801561064d57600080fd5b5061035e600081565b34801561066257600080fd5b5061035e7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de81565b34801561069657600080fd5b5060015461054f906001600160a01b031681565b3480156106b657600080fd5b5060075461054f906001600160a01b031681565b3480156106d657600080fd5b506102786106e536600461204d565b6112d9565b3480156106f657600080fd5b5060055461054f906001600160a01b031681565b34801561071657600080fd5b50610278610725366004612068565b611314565b34801561073657600080fd5b50610278610745366004611c6f565b61133a565b34801561075657600080fd5b506102786107653660046120fc565b61135f565b34801561077657600080fd5b50610248610785366004612128565b600b60209081526000928352604080842090915290825290205460ff1681565b3480156107b157600080fd5b506003546004546107c0919082565b6040805192835260208301919091520161021f565b3480156107e157600080fd5b506107f56107f0366004612128565b6113a0565b60405160ff909116815260200161021f565b60006001600160e01b03198216637965db0b60e01b148061083857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000805160206126c8833981519152610856816113e3565b6108807f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de85611061565b6108bf5760405162461bcd60e51b815260206004820152600b60248201526a24b73b30b634b2103634b160a91b60448201526064015b60405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b15801561090957600080fd5b505af115801561091d573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b600860205260009081526040902080546001820180546001600160a01b0383169363ffffffff600160a01b8504811694600160c01b9004169290916109b790612152565b80601f01602080910402602001604051908101604052809291908181526020018280546109e390612152565b8015610a305780601f10610a0557610100808354040283529160200191610a30565b820191906000526020600020905b815481529060010190602001808311610a1357829003601f168201915b50505050600283015460038401546004850154600586018054959693956001600160401b0384169550600160401b9093046001600160a01b0390811694921692610a7990612152565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa590612152565b8015610af25780601f10610ac757610100808354040283529160200191610af2565b820191906000526020600020905b815481529060010190602001808311610ad557829003601f168201915b5050505050905089565b6000805160206126c8833981519152610b14816113e3565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000805160206126c8833981519152610b4f816113e3565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b63ffffffff81166000908152600c6020908152604091829020805483518184028101840190945280845260609392830182828015610bed57602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610bbe5790505b50505050509050919050565b600082815260208190526040902060010154610c14816113e3565b610c1e83836113f0565b505050565b6001600160a01b0381163314610c935760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016108b6565b610c9d8282611474565b5050565b3068929eee149b4bd212685403610cc05763ab143c066000526004601cfd5b3068929eee149b4bd2126855610cd5896114d9565b610d125760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908191cdd115a5960921b60448201526064016108b6565b63ffffffff8a166000908152600b602090815260408083208b845290915290205460ff1615610d835760405162461bcd60e51b815260206004820152601d60248201527f737263206a6f62496420697320616c726561647920766572696669656400000060448201526064016108b6565b63ffffffff8a166000908152600b602090815260408083208b84528252808320805460ff1916600117905551610dcb91869186918f918f918f918f918f918f918f9101612186565b604051602081830303815290604052805190602001209050610def84848385611560565b610dfc8b8989898961165f565b6040805163ffffffff8d168152602081018b90527f33d9faf7f95795c8d5bd00585df49c5e70f8c4c8b9b11ed439fb144db238e5c7910160405180910390a1503868929eee149b4bd212685550505050505050505050565b6000805160206126c8833981519152610e6c816113e3565b60005b82811015610f855736848483818110610e8a57610e8a61220f565b90506080020190506040518060600160405280826020016020810190610eb09190612225565b6001600160401b03168152602001610ece606084016040850161204d565b61ffff168152602001610ee76080840160608501612257565b6001600160801b03169052600a6000610f036020850185611c0e565b63ffffffff1681526020808201929092526040908101600020835181549385015194909201516001600160801b0316600160501b02600160501b600160d01b031961ffff909516600160401b0269ffffffffffffffffffff199094166001600160401b0390931692909217929092179290921691909117905550600101610e6f565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051610fb7929190612272565b60405180910390a1505050565b6000805160206126c8833981519152610fdc816113e3565b50805160035560200151600455565b6000805160206126c8833981519152611003816113e3565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000805160206126c883398151915261103e816113e3565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60008060026000815461109c90612319565b918290555060008181526008602052604081209192506110c260a0880160808901611bdd565b6001600160a01b0316036111115760405162461bcd60e51b8152602060048201526016602482015275496e76616c69642073656e646572206164647265737360501b60448201526064016108b6565b80546001600160c01b0319163363ffffffff60a01b191617600160a01b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16021781556111666020870187611c0e565b815463ffffffff91909116600160c01b0263ffffffff60c01b199091161781556111936020870187612332565b60018301916111a39190836123c6565b50604086013560028201556111be6080870160608801612225565b60038201805467ffffffffffffffff19166001600160401b03929092169190911790556111f160a0870160808801611bdd565b6003820180546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561123361122e6020880188612332565b61177e565b6004820180546001600160a01b0319166001600160a01b0392909216919091179055600581016112648587836123c6565b5060405182815261271093507fa34614e1f25aade4e7abdcc77ae23ea2ea54c27f927e9060a39d5efe3f71adeb9060200160405180910390a16040518381527f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a150509392505050565b6000805160206126c88339815191526112f1816113e3565b506005805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b63ffffffff83166000908152600c6020526040902061133490838361199d565b50505050565b600082815260208190526040902060010154611355816113e3565b610c1e8383611474565b6000805160206126c8833981519152611377816113e3565b5063ffffffff919091166000908152600960205260409020805460ff1916911515919091179055565b600c60205281600052604060002081815481106113bc57600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b6113ed813361179e565b50565b6113fa8282611061565b610c9d576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556114303390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61147e8282611061565b15610c9d576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16148061154b575061151c82617530612485565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16145b1561155857506001919050565b506000919050565b3068929eee149b4bd21268540361157f5763ab143c066000526004601cfd5b3068929eee149b4bd212685560055460405163a9852b1d60e01b81526000916001600160a01b03169063a9852b1d906115c59088908890889088906003906004016124a1565b6020604051808303816000875af11580156115e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611608919061253e565b90508061164c5760405162461bcd60e51b8152602060048201526012602482015271496e76616c6964207369676e61747572652160701b60448201526064016108b6565b503868929eee149b4bd212685550505050565b3068929eee149b4bd21268540361167e5763ab143c066000526004601cfd5b3068929eee149b4bd2126855600154604051630805f08d60e31b81526001600160a01b03838116600483015263ffffffff88166024830152600092169063402f8468906044016040805180830381865afa1580156116e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611704919061255b565b50604051630111a9b760e11b81529091506001600160a01b03821690630223536e906117389088908890889060040161258a565b600060405180830381600087803b15801561175257600080fd5b505af1158015611766573d6000803e3d6000fd5b50505050503868929eee149b4bd21268555050505050565b600061178e6051603184866125bc565b611797916125e6565b9392505050565b6117a88282611061565b610c9d576117c0816001600160a01b03166014611802565b6117cb836020611802565b6040516020016117dc929190612604565b60408051601f198184030181529082905262461bcd60e51b82526108b691600401612673565b60606000611811836002612686565b61181c90600261269d565b6001600160401b0381111561183357611833611d75565b6040519080825280601f01601f19166020018201604052801561185d576020820181803683370190505b509050600360fc1b816000815181106118785761187861220f565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106118a7576118a761220f565b60200101906001600160f81b031916908160001a90535060006118cb846002612686565b6118d690600161269d565b90505b600181111561194e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061190a5761190a61220f565b1a60f81b8282815181106119205761192061220f565b60200101906001600160f81b031916908160001a90535060049490941c93611947816126b0565b90506118d9565b5083156117975760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108b6565b82805482825590600052602060002090601f01602090048101928215611a365791602002820160005b83821115611a0757833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026119c6565b8015611a345782816101000a81549060ff0219169055600101602081600001049283019260010302611a07565b505b50611a42929150611a46565b5090565b5b80821115611a425760008155600101611a47565b600060208284031215611a6d57600080fd5b81356001600160e01b03198116811461179757600080fd5b6001600160a01b03811681146113ed57600080fd5b8035611aa581611a85565b919050565b600080600060608486031215611abf57600080fd5b8335611aca81611a85565b92506020840135611ada81611a85565b929592945050506040919091013590565b600060208284031215611afd57600080fd5b5035919050565b60005b83811015611b1f578181015183820152602001611b07565b50506000910152565b60008151808452611b40816020860160208601611b04565b601f01601f19169290920160200192915050565b6001600160a01b038a16815263ffffffff89811660208301528816604082015261012060608201819052600090611b8d90830189611b28565b608083018890526001600160401b03871660a08401526001600160a01b0386811660c0850152851660e0840152828103610100840152611bcd8185611b28565b9c9b505050505050505050505050565b600060208284031215611bef57600080fd5b813561179781611a85565b803563ffffffff81168114611aa557600080fd5b600060208284031215611c2057600080fd5b61179782611bfa565b602080825282518282018190526000918401906040840190835b81811015611c6457835160ff16835260209384019390920191600101611c43565b509095945050505050565b60008060408385031215611c8257600080fd5b823591506020830135611c9481611a85565b809150509250929050565b80356001600160401b0381168114611aa557600080fd5b60008083601f840112611cc857600080fd5b5081356001600160401b03811115611cdf57600080fd5b602083019150836020828501011115611cf757600080fd5b9250929050565b600080600080600060808688031215611d1657600080fd5b611d1f86611bfa565b9450611d2d60208701611c9f565b93506040860135611d3d81611a85565b925060608601356001600160401b03811115611d5857600080fd5b611d6488828901611cb6565b969995985093965092949392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611db357611db3611d75565b604052919050565b600060808284031215611dcd57600080fd5b50919050565b6000806000806000806000806000806101808b8d031215611df357600080fd5b611dfc8b611bfa565b9950611e0a60208c01611bfa565b985060408b0135975060608b01356001600160401b03811115611e2c57600080fd5b8b01601f81018d13611e3d57600080fd5b80356001600160401b03811115611e5657611e56611d75565b611e69601f8201601f1916602001611d8b565b8181528e6020838501011115611e7e57600080fd5b8160208401602083013760009181016020019190915297505060808b01359550611eaa60a08c01611c9f565b9450611eb860c08c01611a9a565b935060e08b01356001600160401b03811115611ed357600080fd5b611edf8d828e01611cb6565b9094509250611ef490508c6101008d01611dbb565b90509295989b9194979a5092959850565b60008060208385031215611f1857600080fd5b82356001600160401b03811115611f2e57600080fd5b8301601f81018513611f3f57600080fd5b80356001600160401b03811115611f5557600080fd5b8560208260071b8401011115611f6a57600080fd5b6020919091019590945092505050565b60006040828403128015611f8d57600080fd5b50604080519081016001600160401b0381118282101715611fb057611fb0611d75565b604052823581526020928301359281019290925250919050565b600080600060408486031215611fdf57600080fd5b83356001600160401b03811115611ff557600080fd5b840160a0818703121561200757600080fd5b925060208401356001600160401b0381111561202257600080fd5b61202e86828701611cb6565b9497909650939450505050565b803561ffff81168114611aa557600080fd5b60006020828403121561205f57600080fd5b6117978261203b565b60008060006040848603121561207d57600080fd5b61208684611bfa565b925060208401356001600160401b038111156120a157600080fd5b8401601f810186136120b257600080fd5b80356001600160401b038111156120c857600080fd5b8660208260051b84010111156120dd57600080fd5b939660209190910195509293505050565b80151581146113ed57600080fd5b6000806040838503121561210f57600080fd5b61211883611bfa565b91506020830135611c94816120ee565b6000806040838503121561213b57600080fd5b61214483611bfa565b946020939093013593505050565b600181811c9082168061216657607f821691505b602082108103611dcd57634e487b7160e01b600052602260045260246000fd5b888a8237600089820163ffffffff60e01b8a60e01b16815263ffffffff60e01b8960e01b16600482015287600882015286516121c9816028840160208b01611b04565b6028910190810195909552505060c09190911b6001600160c01b031916604883015260601b6bffffffffffffffffffffffff191660508201526064019695505050505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561223757600080fd5b61179782611c9f565b80356001600160801b0381168114611aa557600080fd5b60006020828403121561226957600080fd5b61179782612240565b6020808252810182905260008360408301825b858110156122f95763ffffffff61229b84611bfa565b1682526001600160401b036122b260208501611c9f565b16602083015261ffff6122c76040850161203b565b1660408301526001600160801b036122e160608501612240565b16606083015260809283019290910190600101612285565b5095945050505050565b634e487b7160e01b600052601160045260246000fd5b60006001820161232b5761232b612303565b5060010190565b6000808335601e1984360301811261234957600080fd5b8301803591506001600160401b0382111561236357600080fd5b602001915036819003821315611cf757600080fd5b601f821115610c1e57806000526020600020601f840160051c8101602085101561239f5750805b601f840160051c820191505b818110156123bf57600081556001016123ab565b5050505050565b6001600160401b038311156123dd576123dd611d75565b6123f1836123eb8354612152565b83612378565b6000601f841160018114612425576000851561240d5750838201355b600019600387901b1c1916600186901b1783556123bf565b600083815260209020601f19861690835b828110156124565786850135825560209485019460019092019101612436565b50868210156124735760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b63ffffffff818116838216019081111561083857610838612303565b6101008152846101008201528486610120830137600061012086830181019190915260208083018690528435604080850191909152908501356060840152601f8701601f19168301909101908401356124f981611a85565b6001600160a01b03166080830152606084013561251581611a85565b6001600160a01b031660a0830152825460c0830152600183015460e08301529695505050505050565b60006020828403121561255057600080fd5b8151611797816120ee565b6000806040838503121561256e57600080fd5b825161257981611a85565b6020840151909250611c94816120ee565b60608152600061259d6060830186611b28565b90508360208301526001600160401b0383166040830152949350505050565b600080858511156125cc57600080fd5b838611156125d957600080fd5b5050820193919092039150565b8035602083101561083857600019602084900360031b1b1692915050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351612636816017850160208801611b04565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612667816028840160208801611b04565b01602801949350505050565b6020815260006117976020830184611b28565b808202811582820484141761083857610838612303565b8082018082111561083857610838612303565b6000816126bf576126bf612303565b50600019019056fea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220d08ee3a9e609f697aa5f4f9eee22905e49d544fe57edb0dd29a675542547d1bd64736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006edce65403992e310a62460808c4b910d972f10f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c03f31fd86a9077785b7bcf6598ce3598fa91113000000000000000000000000b3e790273f0a89e53d2c20dd4dfe82aa00bbf91b", + "nonce": "0x2f", + "chainId": "0x4268" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xddcfab", + "logs": [ + { + "address": "0xbe4bad49fe4c887f1ba0adf5287ab2408caad8cf", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x22615d342dd1bd5386f433f2d318ffa6ff1e80bfae315241683ee0e71f1823b3", + "blockNumber": "0x28fb5d", + "transactionHash": "0xac0bcf02b5da7b749722a386b0793461473153c52d910fc18c6237dde2c97ca5", + "transactionIndex": "0x1a", + "logIndex": "0x2d", + "removed": false + }, + { + "address": "0xbe4bad49fe4c887f1ba0adf5287ab2408caad8cf", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0xa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x22615d342dd1bd5386f433f2d318ffa6ff1e80bfae315241683ee0e71f1823b3", + "blockNumber": "0x28fb5d", + "transactionHash": "0xac0bcf02b5da7b749722a386b0793461473153c52d910fc18c6237dde2c97ca5", + "transactionIndex": "0x1a", + "logIndex": "0x2e", + "removed": false + } + ], + "logsBloom": "0x00000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000020000000000004000000800000000000000000800000000000000000000200000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000002000000000000000400100000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xac0bcf02b5da7b749722a386b0793461473153c52d910fc18c6237dde2c97ca5", + "transactionIndex": "0x1a", + "blockHash": "0x22615d342dd1bd5386f433f2d318ffa6ff1e80bfae315241683ee0e71f1823b3", + "blockNumber": "0x28fb5d", + "gasUsed": "0x243fe8", + "effectiveGasPrice": "0x1a811911", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0xbe4bad49fe4c887f1ba0adf5287ab2408caad8cf" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730910926, + "chain": 17000, + "commit": "4f0aff3" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/Deploy.s.sol/17000/run-latest.json b/contracts/evm/broadcast/Deploy.s.sol/17000/run-latest.json new file mode 100644 index 00000000..59ba91e6 --- /dev/null +++ b/contracts/evm/broadcast/Deploy.s.sol/17000/run-latest.json @@ -0,0 +1,86 @@ +{ + "transactions": [ + { + "hash": "0xac0bcf02b5da7b749722a386b0793461473153c52d910fc18c6237dde2c97ca5", + "transactionType": "CREATE", + "contractName": "NuffDVN", + "contractAddress": "0xbe4bad49fe4c887f1ba0adf5287ab2408caad8cf", + "function": null, + "arguments": [ + "(0, 0)", + "0x6EDCE65403992e310A62460808c4b910D972f10f", + "1", + "1", + "0xC03f31fD86a9077785b7bCf6598Ce3598Fa91113", + "0xb3e790273f0A89e53d2C20dD4dFe82AA00bbf91b" + ], + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x2f1c58", + "value": "0x0", + "input": "0x60a060405234801561001057600080fd5b50604051612a8c380380612a8c83398101604081905261002f91610254565b85516003556020808701516004908155600180546001600160a01b0319166001600160a01b0389169081179091556040805163416ecebf60e01b81529051919363416ecebf938281019391928290030181865afa158015610094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b89190610312565b63ffffffff1660805260058054600160a01b600160f01b031916600160a01b61ffff871602600160b01b600160f01b03191617600160b01b6001600160401b03861602179055600680546001600160a01b03199081166001600160a01b03858116919091179092556007805490911691831691909117905561013b600033610170565b6101657fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610170565b50505050505061033f565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1661020b576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556101ca3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b80516001600160a01b038116811461022657600080fd5b919050565b805161ffff8116811461022657600080fd5b80516001600160401b038116811461022657600080fd5b60008060008060008086880360e081121561026e57600080fd5b604081121561027c57600080fd5b50604080519081016001600160401b03811182821017156102ad57634e487b7160e01b600052604160045260246000fd5b6040908152885182526020808a0151908301529096506102ce90880161020f565b94506102dc6060880161022b565b93506102ea6080880161023d565b92506102f860a0880161020f565b915061030660c0880161020f565b90509295509295509295565b60006020828403121561032457600080fd5b815163ffffffff8116811461033857600080fd5b9392505050565b60805161271d61036f600039600081816104f801528181611130015281816114e40152611524015261271d6000f3fe6080604052600436106101e95760003560e01c8063724e78da11610113578063b3129896116100ab578063d547741f1161006f578063d547741f1461072a578063f3acc68d1461074a578063f48ab8f21461076a578063f49ef505146107a5578063fbd9b28b146107d557600080fd5b8063b31298961461068a578063bb37d00c146106aa578063c358de0a146106ca578063c5fdf39c146106ea578063cd88b9031461070a57600080fd5b8063724e78da146104c657806372607537146104e6578063741bef1a1461052f57806375b238fc1461056757806391d148541461058957806395d376d7146105a95780639e944965146105bc578063a217fddf14610641578063a98586e11461065657600080fd5b8063296817001161018657806329681700146103995780632f2ff15d146103c957806330bb3aac146103e957806336568abe146104105780634ce419c31461043057806351cc784f1461045057806352d3b8711461046657806354093c65146104865780635b4c2500146104a657600080fd5b8062bf2e80146101ee57806301ffc9a7146102285780631095b6d7146102585780631703a0181461027a578063180aedf3146102b95780631fad0b4c146102ee57806320ac2ece1461030e578063248a9ca31461032e57806326e67a371461036c575b600080fd5b3480156101fa57600080fd5b5060055461021090600160a01b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561023457600080fd5b50610248610243366004611a5b565b610807565b604051901515815260200161021f565b34801561026457600080fd5b50610278610273366004611aaa565b61083e565b005b34801561028657600080fd5b506005546102a190600160b01b90046001600160401b031681565b6040516001600160401b03909116815260200161021f565b3480156102c557600080fd5b506102d96102d4366004611aeb565b610973565b60405161021f99989796959493929190611b54565b3480156102fa57600080fd5b50610278610309366004611bdd565b610afc565b34801561031a57600080fd5b50610278610329366004611bdd565b610b37565b34801561033a57600080fd5b5061035e610349366004611aeb565b60009081526020819052604090206001015490565b60405190815260200161021f565b34801561037857600080fd5b5061038c610387366004611c0e565b610b72565b60405161021f9190611c29565b3480156103a557600080fd5b506102486103b4366004611c0e565b60096020526000908152604090205460ff1681565b3480156103d557600080fd5b506102786103e4366004611c6f565b610bf9565b3480156103f557600080fd5b5061035e610404366004611cfe565b50612710949350505050565b34801561041c57600080fd5b5061027861042b366004611c6f565b610c23565b34801561043c57600080fd5b5061027861044b366004611dd3565b610ca1565b34801561045c57600080fd5b5061035e60025481565b34801561047257600080fd5b50610278610481366004611f05565b610e54565b34801561049257600080fd5b506102786104a1366004611f7a565b610fc4565b3480156104b257600080fd5b506102786104c1366004611bdd565b610feb565b3480156104d257600080fd5b506102786104e1366004611bdd565b611026565b3480156104f257600080fd5b5061051a7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161021f565b34801561053b57600080fd5b5060065461054f906001600160a01b031681565b6040516001600160a01b03909116815260200161021f565b34801561057357600080fd5b5061035e6000805160206126c883398151915281565b34801561059557600080fd5b506102486105a4366004611c6f565b611061565b61035e6105b7366004611fca565b61108a565b3480156105c857600080fd5b506106106105d7366004611c0e565b600a602052600090815260409020546001600160401b03811690600160401b810461ffff1690600160501b90046001600160801b031683565b604080516001600160401b03909416845261ffff90921660208401526001600160801b03169082015260600161021f565b34801561064d57600080fd5b5061035e600081565b34801561066257600080fd5b5061035e7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de81565b34801561069657600080fd5b5060015461054f906001600160a01b031681565b3480156106b657600080fd5b5060075461054f906001600160a01b031681565b3480156106d657600080fd5b506102786106e536600461204d565b6112d9565b3480156106f657600080fd5b5060055461054f906001600160a01b031681565b34801561071657600080fd5b50610278610725366004612068565b611314565b34801561073657600080fd5b50610278610745366004611c6f565b61133a565b34801561075657600080fd5b506102786107653660046120fc565b61135f565b34801561077657600080fd5b50610248610785366004612128565b600b60209081526000928352604080842090915290825290205460ff1681565b3480156107b157600080fd5b506003546004546107c0919082565b6040805192835260208301919091520161021f565b3480156107e157600080fd5b506107f56107f0366004612128565b6113a0565b60405160ff909116815260200161021f565b60006001600160e01b03198216637965db0b60e01b148061083857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000805160206126c8833981519152610856816113e3565b6108807f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de85611061565b6108bf5760405162461bcd60e51b815260206004820152600b60248201526a24b73b30b634b2103634b160a91b60448201526064015b60405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b15801561090957600080fd5b505af115801561091d573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b600860205260009081526040902080546001820180546001600160a01b0383169363ffffffff600160a01b8504811694600160c01b9004169290916109b790612152565b80601f01602080910402602001604051908101604052809291908181526020018280546109e390612152565b8015610a305780601f10610a0557610100808354040283529160200191610a30565b820191906000526020600020905b815481529060010190602001808311610a1357829003601f168201915b50505050600283015460038401546004850154600586018054959693956001600160401b0384169550600160401b9093046001600160a01b0390811694921692610a7990612152565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa590612152565b8015610af25780601f10610ac757610100808354040283529160200191610af2565b820191906000526020600020905b815481529060010190602001808311610ad557829003601f168201915b5050505050905089565b6000805160206126c8833981519152610b14816113e3565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000805160206126c8833981519152610b4f816113e3565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b63ffffffff81166000908152600c6020908152604091829020805483518184028101840190945280845260609392830182828015610bed57602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610bbe5790505b50505050509050919050565b600082815260208190526040902060010154610c14816113e3565b610c1e83836113f0565b505050565b6001600160a01b0381163314610c935760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016108b6565b610c9d8282611474565b5050565b3068929eee149b4bd212685403610cc05763ab143c066000526004601cfd5b3068929eee149b4bd2126855610cd5896114d9565b610d125760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908191cdd115a5960921b60448201526064016108b6565b63ffffffff8a166000908152600b602090815260408083208b845290915290205460ff1615610d835760405162461bcd60e51b815260206004820152601d60248201527f737263206a6f62496420697320616c726561647920766572696669656400000060448201526064016108b6565b63ffffffff8a166000908152600b602090815260408083208b84528252808320805460ff1916600117905551610dcb91869186918f918f918f918f918f918f918f9101612186565b604051602081830303815290604052805190602001209050610def84848385611560565b610dfc8b8989898961165f565b6040805163ffffffff8d168152602081018b90527f33d9faf7f95795c8d5bd00585df49c5e70f8c4c8b9b11ed439fb144db238e5c7910160405180910390a1503868929eee149b4bd212685550505050505050505050565b6000805160206126c8833981519152610e6c816113e3565b60005b82811015610f855736848483818110610e8a57610e8a61220f565b90506080020190506040518060600160405280826020016020810190610eb09190612225565b6001600160401b03168152602001610ece606084016040850161204d565b61ffff168152602001610ee76080840160608501612257565b6001600160801b03169052600a6000610f036020850185611c0e565b63ffffffff1681526020808201929092526040908101600020835181549385015194909201516001600160801b0316600160501b02600160501b600160d01b031961ffff909516600160401b0269ffffffffffffffffffff199094166001600160401b0390931692909217929092179290921691909117905550600101610e6f565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051610fb7929190612272565b60405180910390a1505050565b6000805160206126c8833981519152610fdc816113e3565b50805160035560200151600455565b6000805160206126c8833981519152611003816113e3565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000805160206126c883398151915261103e816113e3565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60008060026000815461109c90612319565b918290555060008181526008602052604081209192506110c260a0880160808901611bdd565b6001600160a01b0316036111115760405162461bcd60e51b8152602060048201526016602482015275496e76616c69642073656e646572206164647265737360501b60448201526064016108b6565b80546001600160c01b0319163363ffffffff60a01b191617600160a01b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16021781556111666020870187611c0e565b815463ffffffff91909116600160c01b0263ffffffff60c01b199091161781556111936020870187612332565b60018301916111a39190836123c6565b50604086013560028201556111be6080870160608801612225565b60038201805467ffffffffffffffff19166001600160401b03929092169190911790556111f160a0870160808801611bdd565b6003820180546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561123361122e6020880188612332565b61177e565b6004820180546001600160a01b0319166001600160a01b0392909216919091179055600581016112648587836123c6565b5060405182815261271093507fa34614e1f25aade4e7abdcc77ae23ea2ea54c27f927e9060a39d5efe3f71adeb9060200160405180910390a16040518381527f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a150509392505050565b6000805160206126c88339815191526112f1816113e3565b506005805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b63ffffffff83166000908152600c6020526040902061133490838361199d565b50505050565b600082815260208190526040902060010154611355816113e3565b610c1e8383611474565b6000805160206126c8833981519152611377816113e3565b5063ffffffff919091166000908152600960205260409020805460ff1916911515919091179055565b600c60205281600052604060002081815481106113bc57600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b6113ed813361179e565b50565b6113fa8282611061565b610c9d576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556114303390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61147e8282611061565b15610c9d576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16148061154b575061151c82617530612485565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16145b1561155857506001919050565b506000919050565b3068929eee149b4bd21268540361157f5763ab143c066000526004601cfd5b3068929eee149b4bd212685560055460405163a9852b1d60e01b81526000916001600160a01b03169063a9852b1d906115c59088908890889088906003906004016124a1565b6020604051808303816000875af11580156115e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611608919061253e565b90508061164c5760405162461bcd60e51b8152602060048201526012602482015271496e76616c6964207369676e61747572652160701b60448201526064016108b6565b503868929eee149b4bd212685550505050565b3068929eee149b4bd21268540361167e5763ab143c066000526004601cfd5b3068929eee149b4bd2126855600154604051630805f08d60e31b81526001600160a01b03838116600483015263ffffffff88166024830152600092169063402f8468906044016040805180830381865afa1580156116e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611704919061255b565b50604051630111a9b760e11b81529091506001600160a01b03821690630223536e906117389088908890889060040161258a565b600060405180830381600087803b15801561175257600080fd5b505af1158015611766573d6000803e3d6000fd5b50505050503868929eee149b4bd21268555050505050565b600061178e6051603184866125bc565b611797916125e6565b9392505050565b6117a88282611061565b610c9d576117c0816001600160a01b03166014611802565b6117cb836020611802565b6040516020016117dc929190612604565b60408051601f198184030181529082905262461bcd60e51b82526108b691600401612673565b60606000611811836002612686565b61181c90600261269d565b6001600160401b0381111561183357611833611d75565b6040519080825280601f01601f19166020018201604052801561185d576020820181803683370190505b509050600360fc1b816000815181106118785761187861220f565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106118a7576118a761220f565b60200101906001600160f81b031916908160001a90535060006118cb846002612686565b6118d690600161269d565b90505b600181111561194e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061190a5761190a61220f565b1a60f81b8282815181106119205761192061220f565b60200101906001600160f81b031916908160001a90535060049490941c93611947816126b0565b90506118d9565b5083156117975760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108b6565b82805482825590600052602060002090601f01602090048101928215611a365791602002820160005b83821115611a0757833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026119c6565b8015611a345782816101000a81549060ff0219169055600101602081600001049283019260010302611a07565b505b50611a42929150611a46565b5090565b5b80821115611a425760008155600101611a47565b600060208284031215611a6d57600080fd5b81356001600160e01b03198116811461179757600080fd5b6001600160a01b03811681146113ed57600080fd5b8035611aa581611a85565b919050565b600080600060608486031215611abf57600080fd5b8335611aca81611a85565b92506020840135611ada81611a85565b929592945050506040919091013590565b600060208284031215611afd57600080fd5b5035919050565b60005b83811015611b1f578181015183820152602001611b07565b50506000910152565b60008151808452611b40816020860160208601611b04565b601f01601f19169290920160200192915050565b6001600160a01b038a16815263ffffffff89811660208301528816604082015261012060608201819052600090611b8d90830189611b28565b608083018890526001600160401b03871660a08401526001600160a01b0386811660c0850152851660e0840152828103610100840152611bcd8185611b28565b9c9b505050505050505050505050565b600060208284031215611bef57600080fd5b813561179781611a85565b803563ffffffff81168114611aa557600080fd5b600060208284031215611c2057600080fd5b61179782611bfa565b602080825282518282018190526000918401906040840190835b81811015611c6457835160ff16835260209384019390920191600101611c43565b509095945050505050565b60008060408385031215611c8257600080fd5b823591506020830135611c9481611a85565b809150509250929050565b80356001600160401b0381168114611aa557600080fd5b60008083601f840112611cc857600080fd5b5081356001600160401b03811115611cdf57600080fd5b602083019150836020828501011115611cf757600080fd5b9250929050565b600080600080600060808688031215611d1657600080fd5b611d1f86611bfa565b9450611d2d60208701611c9f565b93506040860135611d3d81611a85565b925060608601356001600160401b03811115611d5857600080fd5b611d6488828901611cb6565b969995985093965092949392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611db357611db3611d75565b604052919050565b600060808284031215611dcd57600080fd5b50919050565b6000806000806000806000806000806101808b8d031215611df357600080fd5b611dfc8b611bfa565b9950611e0a60208c01611bfa565b985060408b0135975060608b01356001600160401b03811115611e2c57600080fd5b8b01601f81018d13611e3d57600080fd5b80356001600160401b03811115611e5657611e56611d75565b611e69601f8201601f1916602001611d8b565b8181528e6020838501011115611e7e57600080fd5b8160208401602083013760009181016020019190915297505060808b01359550611eaa60a08c01611c9f565b9450611eb860c08c01611a9a565b935060e08b01356001600160401b03811115611ed357600080fd5b611edf8d828e01611cb6565b9094509250611ef490508c6101008d01611dbb565b90509295989b9194979a5092959850565b60008060208385031215611f1857600080fd5b82356001600160401b03811115611f2e57600080fd5b8301601f81018513611f3f57600080fd5b80356001600160401b03811115611f5557600080fd5b8560208260071b8401011115611f6a57600080fd5b6020919091019590945092505050565b60006040828403128015611f8d57600080fd5b50604080519081016001600160401b0381118282101715611fb057611fb0611d75565b604052823581526020928301359281019290925250919050565b600080600060408486031215611fdf57600080fd5b83356001600160401b03811115611ff557600080fd5b840160a0818703121561200757600080fd5b925060208401356001600160401b0381111561202257600080fd5b61202e86828701611cb6565b9497909650939450505050565b803561ffff81168114611aa557600080fd5b60006020828403121561205f57600080fd5b6117978261203b565b60008060006040848603121561207d57600080fd5b61208684611bfa565b925060208401356001600160401b038111156120a157600080fd5b8401601f810186136120b257600080fd5b80356001600160401b038111156120c857600080fd5b8660208260051b84010111156120dd57600080fd5b939660209190910195509293505050565b80151581146113ed57600080fd5b6000806040838503121561210f57600080fd5b61211883611bfa565b91506020830135611c94816120ee565b6000806040838503121561213b57600080fd5b61214483611bfa565b946020939093013593505050565b600181811c9082168061216657607f821691505b602082108103611dcd57634e487b7160e01b600052602260045260246000fd5b888a8237600089820163ffffffff60e01b8a60e01b16815263ffffffff60e01b8960e01b16600482015287600882015286516121c9816028840160208b01611b04565b6028910190810195909552505060c09190911b6001600160c01b031916604883015260601b6bffffffffffffffffffffffff191660508201526064019695505050505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561223757600080fd5b61179782611c9f565b80356001600160801b0381168114611aa557600080fd5b60006020828403121561226957600080fd5b61179782612240565b6020808252810182905260008360408301825b858110156122f95763ffffffff61229b84611bfa565b1682526001600160401b036122b260208501611c9f565b16602083015261ffff6122c76040850161203b565b1660408301526001600160801b036122e160608501612240565b16606083015260809283019290910190600101612285565b5095945050505050565b634e487b7160e01b600052601160045260246000fd5b60006001820161232b5761232b612303565b5060010190565b6000808335601e1984360301811261234957600080fd5b8301803591506001600160401b0382111561236357600080fd5b602001915036819003821315611cf757600080fd5b601f821115610c1e57806000526020600020601f840160051c8101602085101561239f5750805b601f840160051c820191505b818110156123bf57600081556001016123ab565b5050505050565b6001600160401b038311156123dd576123dd611d75565b6123f1836123eb8354612152565b83612378565b6000601f841160018114612425576000851561240d5750838201355b600019600387901b1c1916600186901b1783556123bf565b600083815260209020601f19861690835b828110156124565786850135825560209485019460019092019101612436565b50868210156124735760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b63ffffffff818116838216019081111561083857610838612303565b6101008152846101008201528486610120830137600061012086830181019190915260208083018690528435604080850191909152908501356060840152601f8701601f19168301909101908401356124f981611a85565b6001600160a01b03166080830152606084013561251581611a85565b6001600160a01b031660a0830152825460c0830152600183015460e08301529695505050505050565b60006020828403121561255057600080fd5b8151611797816120ee565b6000806040838503121561256e57600080fd5b825161257981611a85565b6020840151909250611c94816120ee565b60608152600061259d6060830186611b28565b90508360208301526001600160401b0383166040830152949350505050565b600080858511156125cc57600080fd5b838611156125d957600080fd5b5050820193919092039150565b8035602083101561083857600019602084900360031b1b1692915050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351612636816017850160208801611b04565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612667816028840160208801611b04565b01602801949350505050565b6020815260006117976020830184611b28565b808202811582820484141761083857610838612303565b8082018082111561083857610838612303565b6000816126bf576126bf612303565b50600019019056fea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220d08ee3a9e609f697aa5f4f9eee22905e49d544fe57edb0dd29a675542547d1bd64736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006edce65403992e310a62460808c4b910d972f10f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c03f31fd86a9077785b7bcf6598ce3598fa91113000000000000000000000000b3e790273f0a89e53d2c20dd4dfe82aa00bbf91b", + "nonce": "0x2f", + "chainId": "0x4268" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xddcfab", + "logs": [ + { + "address": "0xbe4bad49fe4c887f1ba0adf5287ab2408caad8cf", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x22615d342dd1bd5386f433f2d318ffa6ff1e80bfae315241683ee0e71f1823b3", + "blockNumber": "0x28fb5d", + "transactionHash": "0xac0bcf02b5da7b749722a386b0793461473153c52d910fc18c6237dde2c97ca5", + "transactionIndex": "0x1a", + "logIndex": "0x2d", + "removed": false + }, + { + "address": "0xbe4bad49fe4c887f1ba0adf5287ab2408caad8cf", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0xa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x22615d342dd1bd5386f433f2d318ffa6ff1e80bfae315241683ee0e71f1823b3", + "blockNumber": "0x28fb5d", + "transactionHash": "0xac0bcf02b5da7b749722a386b0793461473153c52d910fc18c6237dde2c97ca5", + "transactionIndex": "0x1a", + "logIndex": "0x2e", + "removed": false + } + ], + "logsBloom": "0x00000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000020000000000004000000800000000000000000800000000000000000000200000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000002000000000000000400100000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xac0bcf02b5da7b749722a386b0793461473153c52d910fc18c6237dde2c97ca5", + "transactionIndex": "0x1a", + "blockHash": "0x22615d342dd1bd5386f433f2d318ffa6ff1e80bfae315241683ee0e71f1823b3", + "blockNumber": "0x28fb5d", + "gasUsed": "0x243fe8", + "effectiveGasPrice": "0x1a811911", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0xbe4bad49fe4c887f1ba0adf5287ab2408caad8cf" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730910926, + "chain": 17000, + "commit": "4f0aff3" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/Deploy.s.sol/421614/run-1730911253.json b/contracts/evm/broadcast/Deploy.s.sol/421614/run-1730911253.json new file mode 100644 index 00000000..ef4ff1fa --- /dev/null +++ b/contracts/evm/broadcast/Deploy.s.sol/421614/run-1730911253.json @@ -0,0 +1,88 @@ +{ + "transactions": [ + { + "hash": "0x93daee15453af84f05c146059dba2844fdf9470669d635d7e3ded318a237b966", + "transactionType": "CREATE", + "contractName": "NuffDVN", + "contractAddress": "0x8b1b58883d8a0fdde8cedea4520483e20578c5df", + "function": null, + "arguments": [ + "(0, 0)", + "0x6EDCE65403992e310A62460808c4b910D972f10f", + "1", + "1", + "0xC03f31fD86a9077785b7bCf6598Ce3598Fa91113", + "0xb3e790273f0A89e53d2C20dD4dFe82AA00bbf91b" + ], + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x32e93f", + "value": "0x0", + "input": "0x60a060405234801561001057600080fd5b50604051612a8c380380612a8c83398101604081905261002f91610254565b85516003556020808701516004908155600180546001600160a01b0319166001600160a01b0389169081179091556040805163416ecebf60e01b81529051919363416ecebf938281019391928290030181865afa158015610094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b89190610312565b63ffffffff1660805260058054600160a01b600160f01b031916600160a01b61ffff871602600160b01b600160f01b03191617600160b01b6001600160401b03861602179055600680546001600160a01b03199081166001600160a01b03858116919091179092556007805490911691831691909117905561013b600033610170565b6101657fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610170565b50505050505061033f565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1661020b576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556101ca3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b80516001600160a01b038116811461022657600080fd5b919050565b805161ffff8116811461022657600080fd5b80516001600160401b038116811461022657600080fd5b60008060008060008086880360e081121561026e57600080fd5b604081121561027c57600080fd5b50604080519081016001600160401b03811182821017156102ad57634e487b7160e01b600052604160045260246000fd5b6040908152885182526020808a0151908301529096506102ce90880161020f565b94506102dc6060880161022b565b93506102ea6080880161023d565b92506102f860a0880161020f565b915061030660c0880161020f565b90509295509295509295565b60006020828403121561032457600080fd5b815163ffffffff8116811461033857600080fd5b9392505050565b60805161271d61036f600039600081816104f801528181611130015281816114e40152611524015261271d6000f3fe6080604052600436106101e95760003560e01c8063724e78da11610113578063b3129896116100ab578063d547741f1161006f578063d547741f1461072a578063f3acc68d1461074a578063f48ab8f21461076a578063f49ef505146107a5578063fbd9b28b146107d557600080fd5b8063b31298961461068a578063bb37d00c146106aa578063c358de0a146106ca578063c5fdf39c146106ea578063cd88b9031461070a57600080fd5b8063724e78da146104c657806372607537146104e6578063741bef1a1461052f57806375b238fc1461056757806391d148541461058957806395d376d7146105a95780639e944965146105bc578063a217fddf14610641578063a98586e11461065657600080fd5b8063296817001161018657806329681700146103995780632f2ff15d146103c957806330bb3aac146103e957806336568abe146104105780634ce419c31461043057806351cc784f1461045057806352d3b8711461046657806354093c65146104865780635b4c2500146104a657600080fd5b8062bf2e80146101ee57806301ffc9a7146102285780631095b6d7146102585780631703a0181461027a578063180aedf3146102b95780631fad0b4c146102ee57806320ac2ece1461030e578063248a9ca31461032e57806326e67a371461036c575b600080fd5b3480156101fa57600080fd5b5060055461021090600160a01b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561023457600080fd5b50610248610243366004611a5b565b610807565b604051901515815260200161021f565b34801561026457600080fd5b50610278610273366004611aaa565b61083e565b005b34801561028657600080fd5b506005546102a190600160b01b90046001600160401b031681565b6040516001600160401b03909116815260200161021f565b3480156102c557600080fd5b506102d96102d4366004611aeb565b610973565b60405161021f99989796959493929190611b54565b3480156102fa57600080fd5b50610278610309366004611bdd565b610afc565b34801561031a57600080fd5b50610278610329366004611bdd565b610b37565b34801561033a57600080fd5b5061035e610349366004611aeb565b60009081526020819052604090206001015490565b60405190815260200161021f565b34801561037857600080fd5b5061038c610387366004611c0e565b610b72565b60405161021f9190611c29565b3480156103a557600080fd5b506102486103b4366004611c0e565b60096020526000908152604090205460ff1681565b3480156103d557600080fd5b506102786103e4366004611c6f565b610bf9565b3480156103f557600080fd5b5061035e610404366004611cfe565b50612710949350505050565b34801561041c57600080fd5b5061027861042b366004611c6f565b610c23565b34801561043c57600080fd5b5061027861044b366004611dd3565b610ca1565b34801561045c57600080fd5b5061035e60025481565b34801561047257600080fd5b50610278610481366004611f05565b610e54565b34801561049257600080fd5b506102786104a1366004611f7a565b610fc4565b3480156104b257600080fd5b506102786104c1366004611bdd565b610feb565b3480156104d257600080fd5b506102786104e1366004611bdd565b611026565b3480156104f257600080fd5b5061051a7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161021f565b34801561053b57600080fd5b5060065461054f906001600160a01b031681565b6040516001600160a01b03909116815260200161021f565b34801561057357600080fd5b5061035e6000805160206126c883398151915281565b34801561059557600080fd5b506102486105a4366004611c6f565b611061565b61035e6105b7366004611fca565b61108a565b3480156105c857600080fd5b506106106105d7366004611c0e565b600a602052600090815260409020546001600160401b03811690600160401b810461ffff1690600160501b90046001600160801b031683565b604080516001600160401b03909416845261ffff90921660208401526001600160801b03169082015260600161021f565b34801561064d57600080fd5b5061035e600081565b34801561066257600080fd5b5061035e7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de81565b34801561069657600080fd5b5060015461054f906001600160a01b031681565b3480156106b657600080fd5b5060075461054f906001600160a01b031681565b3480156106d657600080fd5b506102786106e536600461204d565b6112d9565b3480156106f657600080fd5b5060055461054f906001600160a01b031681565b34801561071657600080fd5b50610278610725366004612068565b611314565b34801561073657600080fd5b50610278610745366004611c6f565b61133a565b34801561075657600080fd5b506102786107653660046120fc565b61135f565b34801561077657600080fd5b50610248610785366004612128565b600b60209081526000928352604080842090915290825290205460ff1681565b3480156107b157600080fd5b506003546004546107c0919082565b6040805192835260208301919091520161021f565b3480156107e157600080fd5b506107f56107f0366004612128565b6113a0565b60405160ff909116815260200161021f565b60006001600160e01b03198216637965db0b60e01b148061083857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000805160206126c8833981519152610856816113e3565b6108807f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de85611061565b6108bf5760405162461bcd60e51b815260206004820152600b60248201526a24b73b30b634b2103634b160a91b60448201526064015b60405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b15801561090957600080fd5b505af115801561091d573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b600860205260009081526040902080546001820180546001600160a01b0383169363ffffffff600160a01b8504811694600160c01b9004169290916109b790612152565b80601f01602080910402602001604051908101604052809291908181526020018280546109e390612152565b8015610a305780601f10610a0557610100808354040283529160200191610a30565b820191906000526020600020905b815481529060010190602001808311610a1357829003601f168201915b50505050600283015460038401546004850154600586018054959693956001600160401b0384169550600160401b9093046001600160a01b0390811694921692610a7990612152565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa590612152565b8015610af25780601f10610ac757610100808354040283529160200191610af2565b820191906000526020600020905b815481529060010190602001808311610ad557829003601f168201915b5050505050905089565b6000805160206126c8833981519152610b14816113e3565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000805160206126c8833981519152610b4f816113e3565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b63ffffffff81166000908152600c6020908152604091829020805483518184028101840190945280845260609392830182828015610bed57602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610bbe5790505b50505050509050919050565b600082815260208190526040902060010154610c14816113e3565b610c1e83836113f0565b505050565b6001600160a01b0381163314610c935760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016108b6565b610c9d8282611474565b5050565b3068929eee149b4bd212685403610cc05763ab143c066000526004601cfd5b3068929eee149b4bd2126855610cd5896114d9565b610d125760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908191cdd115a5960921b60448201526064016108b6565b63ffffffff8a166000908152600b602090815260408083208b845290915290205460ff1615610d835760405162461bcd60e51b815260206004820152601d60248201527f737263206a6f62496420697320616c726561647920766572696669656400000060448201526064016108b6565b63ffffffff8a166000908152600b602090815260408083208b84528252808320805460ff1916600117905551610dcb91869186918f918f918f918f918f918f918f9101612186565b604051602081830303815290604052805190602001209050610def84848385611560565b610dfc8b8989898961165f565b6040805163ffffffff8d168152602081018b90527f33d9faf7f95795c8d5bd00585df49c5e70f8c4c8b9b11ed439fb144db238e5c7910160405180910390a1503868929eee149b4bd212685550505050505050505050565b6000805160206126c8833981519152610e6c816113e3565b60005b82811015610f855736848483818110610e8a57610e8a61220f565b90506080020190506040518060600160405280826020016020810190610eb09190612225565b6001600160401b03168152602001610ece606084016040850161204d565b61ffff168152602001610ee76080840160608501612257565b6001600160801b03169052600a6000610f036020850185611c0e565b63ffffffff1681526020808201929092526040908101600020835181549385015194909201516001600160801b0316600160501b02600160501b600160d01b031961ffff909516600160401b0269ffffffffffffffffffff199094166001600160401b0390931692909217929092179290921691909117905550600101610e6f565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051610fb7929190612272565b60405180910390a1505050565b6000805160206126c8833981519152610fdc816113e3565b50805160035560200151600455565b6000805160206126c8833981519152611003816113e3565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000805160206126c883398151915261103e816113e3565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60008060026000815461109c90612319565b918290555060008181526008602052604081209192506110c260a0880160808901611bdd565b6001600160a01b0316036111115760405162461bcd60e51b8152602060048201526016602482015275496e76616c69642073656e646572206164647265737360501b60448201526064016108b6565b80546001600160c01b0319163363ffffffff60a01b191617600160a01b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16021781556111666020870187611c0e565b815463ffffffff91909116600160c01b0263ffffffff60c01b199091161781556111936020870187612332565b60018301916111a39190836123c6565b50604086013560028201556111be6080870160608801612225565b60038201805467ffffffffffffffff19166001600160401b03929092169190911790556111f160a0870160808801611bdd565b6003820180546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561123361122e6020880188612332565b61177e565b6004820180546001600160a01b0319166001600160a01b0392909216919091179055600581016112648587836123c6565b5060405182815261271093507fa34614e1f25aade4e7abdcc77ae23ea2ea54c27f927e9060a39d5efe3f71adeb9060200160405180910390a16040518381527f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a150509392505050565b6000805160206126c88339815191526112f1816113e3565b506005805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b63ffffffff83166000908152600c6020526040902061133490838361199d565b50505050565b600082815260208190526040902060010154611355816113e3565b610c1e8383611474565b6000805160206126c8833981519152611377816113e3565b5063ffffffff919091166000908152600960205260409020805460ff1916911515919091179055565b600c60205281600052604060002081815481106113bc57600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b6113ed813361179e565b50565b6113fa8282611061565b610c9d576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556114303390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61147e8282611061565b15610c9d576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16148061154b575061151c82617530612485565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16145b1561155857506001919050565b506000919050565b3068929eee149b4bd21268540361157f5763ab143c066000526004601cfd5b3068929eee149b4bd212685560055460405163a9852b1d60e01b81526000916001600160a01b03169063a9852b1d906115c59088908890889088906003906004016124a1565b6020604051808303816000875af11580156115e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611608919061253e565b90508061164c5760405162461bcd60e51b8152602060048201526012602482015271496e76616c6964207369676e61747572652160701b60448201526064016108b6565b503868929eee149b4bd212685550505050565b3068929eee149b4bd21268540361167e5763ab143c066000526004601cfd5b3068929eee149b4bd2126855600154604051630805f08d60e31b81526001600160a01b03838116600483015263ffffffff88166024830152600092169063402f8468906044016040805180830381865afa1580156116e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611704919061255b565b50604051630111a9b760e11b81529091506001600160a01b03821690630223536e906117389088908890889060040161258a565b600060405180830381600087803b15801561175257600080fd5b505af1158015611766573d6000803e3d6000fd5b50505050503868929eee149b4bd21268555050505050565b600061178e6051603184866125bc565b611797916125e6565b9392505050565b6117a88282611061565b610c9d576117c0816001600160a01b03166014611802565b6117cb836020611802565b6040516020016117dc929190612604565b60408051601f198184030181529082905262461bcd60e51b82526108b691600401612673565b60606000611811836002612686565b61181c90600261269d565b6001600160401b0381111561183357611833611d75565b6040519080825280601f01601f19166020018201604052801561185d576020820181803683370190505b509050600360fc1b816000815181106118785761187861220f565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106118a7576118a761220f565b60200101906001600160f81b031916908160001a90535060006118cb846002612686565b6118d690600161269d565b90505b600181111561194e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061190a5761190a61220f565b1a60f81b8282815181106119205761192061220f565b60200101906001600160f81b031916908160001a90535060049490941c93611947816126b0565b90506118d9565b5083156117975760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108b6565b82805482825590600052602060002090601f01602090048101928215611a365791602002820160005b83821115611a0757833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026119c6565b8015611a345782816101000a81549060ff0219169055600101602081600001049283019260010302611a07565b505b50611a42929150611a46565b5090565b5b80821115611a425760008155600101611a47565b600060208284031215611a6d57600080fd5b81356001600160e01b03198116811461179757600080fd5b6001600160a01b03811681146113ed57600080fd5b8035611aa581611a85565b919050565b600080600060608486031215611abf57600080fd5b8335611aca81611a85565b92506020840135611ada81611a85565b929592945050506040919091013590565b600060208284031215611afd57600080fd5b5035919050565b60005b83811015611b1f578181015183820152602001611b07565b50506000910152565b60008151808452611b40816020860160208601611b04565b601f01601f19169290920160200192915050565b6001600160a01b038a16815263ffffffff89811660208301528816604082015261012060608201819052600090611b8d90830189611b28565b608083018890526001600160401b03871660a08401526001600160a01b0386811660c0850152851660e0840152828103610100840152611bcd8185611b28565b9c9b505050505050505050505050565b600060208284031215611bef57600080fd5b813561179781611a85565b803563ffffffff81168114611aa557600080fd5b600060208284031215611c2057600080fd5b61179782611bfa565b602080825282518282018190526000918401906040840190835b81811015611c6457835160ff16835260209384019390920191600101611c43565b509095945050505050565b60008060408385031215611c8257600080fd5b823591506020830135611c9481611a85565b809150509250929050565b80356001600160401b0381168114611aa557600080fd5b60008083601f840112611cc857600080fd5b5081356001600160401b03811115611cdf57600080fd5b602083019150836020828501011115611cf757600080fd5b9250929050565b600080600080600060808688031215611d1657600080fd5b611d1f86611bfa565b9450611d2d60208701611c9f565b93506040860135611d3d81611a85565b925060608601356001600160401b03811115611d5857600080fd5b611d6488828901611cb6565b969995985093965092949392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611db357611db3611d75565b604052919050565b600060808284031215611dcd57600080fd5b50919050565b6000806000806000806000806000806101808b8d031215611df357600080fd5b611dfc8b611bfa565b9950611e0a60208c01611bfa565b985060408b0135975060608b01356001600160401b03811115611e2c57600080fd5b8b01601f81018d13611e3d57600080fd5b80356001600160401b03811115611e5657611e56611d75565b611e69601f8201601f1916602001611d8b565b8181528e6020838501011115611e7e57600080fd5b8160208401602083013760009181016020019190915297505060808b01359550611eaa60a08c01611c9f565b9450611eb860c08c01611a9a565b935060e08b01356001600160401b03811115611ed357600080fd5b611edf8d828e01611cb6565b9094509250611ef490508c6101008d01611dbb565b90509295989b9194979a5092959850565b60008060208385031215611f1857600080fd5b82356001600160401b03811115611f2e57600080fd5b8301601f81018513611f3f57600080fd5b80356001600160401b03811115611f5557600080fd5b8560208260071b8401011115611f6a57600080fd5b6020919091019590945092505050565b60006040828403128015611f8d57600080fd5b50604080519081016001600160401b0381118282101715611fb057611fb0611d75565b604052823581526020928301359281019290925250919050565b600080600060408486031215611fdf57600080fd5b83356001600160401b03811115611ff557600080fd5b840160a0818703121561200757600080fd5b925060208401356001600160401b0381111561202257600080fd5b61202e86828701611cb6565b9497909650939450505050565b803561ffff81168114611aa557600080fd5b60006020828403121561205f57600080fd5b6117978261203b565b60008060006040848603121561207d57600080fd5b61208684611bfa565b925060208401356001600160401b038111156120a157600080fd5b8401601f810186136120b257600080fd5b80356001600160401b038111156120c857600080fd5b8660208260051b84010111156120dd57600080fd5b939660209190910195509293505050565b80151581146113ed57600080fd5b6000806040838503121561210f57600080fd5b61211883611bfa565b91506020830135611c94816120ee565b6000806040838503121561213b57600080fd5b61214483611bfa565b946020939093013593505050565b600181811c9082168061216657607f821691505b602082108103611dcd57634e487b7160e01b600052602260045260246000fd5b888a8237600089820163ffffffff60e01b8a60e01b16815263ffffffff60e01b8960e01b16600482015287600882015286516121c9816028840160208b01611b04565b6028910190810195909552505060c09190911b6001600160c01b031916604883015260601b6bffffffffffffffffffffffff191660508201526064019695505050505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561223757600080fd5b61179782611c9f565b80356001600160801b0381168114611aa557600080fd5b60006020828403121561226957600080fd5b61179782612240565b6020808252810182905260008360408301825b858110156122f95763ffffffff61229b84611bfa565b1682526001600160401b036122b260208501611c9f565b16602083015261ffff6122c76040850161203b565b1660408301526001600160801b036122e160608501612240565b16606083015260809283019290910190600101612285565b5095945050505050565b634e487b7160e01b600052601160045260246000fd5b60006001820161232b5761232b612303565b5060010190565b6000808335601e1984360301811261234957600080fd5b8301803591506001600160401b0382111561236357600080fd5b602001915036819003821315611cf757600080fd5b601f821115610c1e57806000526020600020601f840160051c8101602085101561239f5750805b601f840160051c820191505b818110156123bf57600081556001016123ab565b5050505050565b6001600160401b038311156123dd576123dd611d75565b6123f1836123eb8354612152565b83612378565b6000601f841160018114612425576000851561240d5750838201355b600019600387901b1c1916600186901b1783556123bf565b600083815260209020601f19861690835b828110156124565786850135825560209485019460019092019101612436565b50868210156124735760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b63ffffffff818116838216019081111561083857610838612303565b6101008152846101008201528486610120830137600061012086830181019190915260208083018690528435604080850191909152908501356060840152601f8701601f19168301909101908401356124f981611a85565b6001600160a01b03166080830152606084013561251581611a85565b6001600160a01b031660a0830152825460c0830152600183015460e08301529695505050505050565b60006020828403121561255057600080fd5b8151611797816120ee565b6000806040838503121561256e57600080fd5b825161257981611a85565b6020840151909250611c94816120ee565b60608152600061259d6060830186611b28565b90508360208301526001600160401b0383166040830152949350505050565b600080858511156125cc57600080fd5b838611156125d957600080fd5b5050820193919092039150565b8035602083101561083857600019602084900360031b1b1692915050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351612636816017850160208801611b04565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612667816028840160208801611b04565b01602801949350505050565b6020815260006117976020830184611b28565b808202811582820484141761083857610838612303565b8082018082111561083857610838612303565b6000816126bf576126bf612303565b50600019019056fea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220d08ee3a9e609f697aa5f4f9eee22905e49d544fe57edb0dd29a675542547d1bd64736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006edce65403992e310a62460808c4b910d972f10f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c03f31fd86a9077785b7bcf6598ce3598fa91113000000000000000000000000b3e790273f0a89e53d2c20dd4dfe82aa00bbf91b", + "nonce": "0x74", + "chainId": "0x66eee" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x2690d3", + "logs": [ + { + "address": "0x8b1b58883d8a0fdde8cedea4520483e20578c5df", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x70660b63069c06692b5c1b28d0f38263d83c8b96288f11921ee8aec5c89709a0", + "blockNumber": "0x5a8b02e", + "transactionHash": "0x93daee15453af84f05c146059dba2844fdf9470669d635d7e3ded318a237b966", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + }, + { + "address": "0x8b1b58883d8a0fdde8cedea4520483e20578c5df", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0xa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x70660b63069c06692b5c1b28d0f38263d83c8b96288f11921ee8aec5c89709a0", + "blockNumber": "0x5a8b02e", + "transactionHash": "0x93daee15453af84f05c146059dba2844fdf9470669d635d7e3ded318a237b966", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + } + ], + "logsBloom": "0x00000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000020000000000010000000000000000000020000000000000000000800000000000000000800000040000000000000200000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000400100000000000020000000000000000000000000000000001000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x93daee15453af84f05c146059dba2844fdf9470669d635d7e3ded318a237b966", + "transactionIndex": "0x1", + "blockHash": "0x70660b63069c06692b5c1b28d0f38263d83c8b96288f11921ee8aec5c89709a0", + "blockNumber": "0x5a8b02e", + "gasUsed": "0x2690d3", + "effectiveGasPrice": "0x5f5e100", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0x8b1b58883d8a0fdde8cedea4520483e20578c5df", + "gasUsedForL1": "0x250eb", + "l1BlockNumber": "0x6b300f" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730911253, + "chain": 421614, + "commit": "4f0aff3" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/Deploy.s.sol/421614/run-latest.json b/contracts/evm/broadcast/Deploy.s.sol/421614/run-latest.json new file mode 100644 index 00000000..ef4ff1fa --- /dev/null +++ b/contracts/evm/broadcast/Deploy.s.sol/421614/run-latest.json @@ -0,0 +1,88 @@ +{ + "transactions": [ + { + "hash": "0x93daee15453af84f05c146059dba2844fdf9470669d635d7e3ded318a237b966", + "transactionType": "CREATE", + "contractName": "NuffDVN", + "contractAddress": "0x8b1b58883d8a0fdde8cedea4520483e20578c5df", + "function": null, + "arguments": [ + "(0, 0)", + "0x6EDCE65403992e310A62460808c4b910D972f10f", + "1", + "1", + "0xC03f31fD86a9077785b7bCf6598Ce3598Fa91113", + "0xb3e790273f0A89e53d2C20dD4dFe82AA00bbf91b" + ], + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x32e93f", + "value": "0x0", + "input": "0x60a060405234801561001057600080fd5b50604051612a8c380380612a8c83398101604081905261002f91610254565b85516003556020808701516004908155600180546001600160a01b0319166001600160a01b0389169081179091556040805163416ecebf60e01b81529051919363416ecebf938281019391928290030181865afa158015610094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b89190610312565b63ffffffff1660805260058054600160a01b600160f01b031916600160a01b61ffff871602600160b01b600160f01b03191617600160b01b6001600160401b03861602179055600680546001600160a01b03199081166001600160a01b03858116919091179092556007805490911691831691909117905561013b600033610170565b6101657fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610170565b50505050505061033f565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1661020b576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556101ca3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b80516001600160a01b038116811461022657600080fd5b919050565b805161ffff8116811461022657600080fd5b80516001600160401b038116811461022657600080fd5b60008060008060008086880360e081121561026e57600080fd5b604081121561027c57600080fd5b50604080519081016001600160401b03811182821017156102ad57634e487b7160e01b600052604160045260246000fd5b6040908152885182526020808a0151908301529096506102ce90880161020f565b94506102dc6060880161022b565b93506102ea6080880161023d565b92506102f860a0880161020f565b915061030660c0880161020f565b90509295509295509295565b60006020828403121561032457600080fd5b815163ffffffff8116811461033857600080fd5b9392505050565b60805161271d61036f600039600081816104f801528181611130015281816114e40152611524015261271d6000f3fe6080604052600436106101e95760003560e01c8063724e78da11610113578063b3129896116100ab578063d547741f1161006f578063d547741f1461072a578063f3acc68d1461074a578063f48ab8f21461076a578063f49ef505146107a5578063fbd9b28b146107d557600080fd5b8063b31298961461068a578063bb37d00c146106aa578063c358de0a146106ca578063c5fdf39c146106ea578063cd88b9031461070a57600080fd5b8063724e78da146104c657806372607537146104e6578063741bef1a1461052f57806375b238fc1461056757806391d148541461058957806395d376d7146105a95780639e944965146105bc578063a217fddf14610641578063a98586e11461065657600080fd5b8063296817001161018657806329681700146103995780632f2ff15d146103c957806330bb3aac146103e957806336568abe146104105780634ce419c31461043057806351cc784f1461045057806352d3b8711461046657806354093c65146104865780635b4c2500146104a657600080fd5b8062bf2e80146101ee57806301ffc9a7146102285780631095b6d7146102585780631703a0181461027a578063180aedf3146102b95780631fad0b4c146102ee57806320ac2ece1461030e578063248a9ca31461032e57806326e67a371461036c575b600080fd5b3480156101fa57600080fd5b5060055461021090600160a01b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561023457600080fd5b50610248610243366004611a5b565b610807565b604051901515815260200161021f565b34801561026457600080fd5b50610278610273366004611aaa565b61083e565b005b34801561028657600080fd5b506005546102a190600160b01b90046001600160401b031681565b6040516001600160401b03909116815260200161021f565b3480156102c557600080fd5b506102d96102d4366004611aeb565b610973565b60405161021f99989796959493929190611b54565b3480156102fa57600080fd5b50610278610309366004611bdd565b610afc565b34801561031a57600080fd5b50610278610329366004611bdd565b610b37565b34801561033a57600080fd5b5061035e610349366004611aeb565b60009081526020819052604090206001015490565b60405190815260200161021f565b34801561037857600080fd5b5061038c610387366004611c0e565b610b72565b60405161021f9190611c29565b3480156103a557600080fd5b506102486103b4366004611c0e565b60096020526000908152604090205460ff1681565b3480156103d557600080fd5b506102786103e4366004611c6f565b610bf9565b3480156103f557600080fd5b5061035e610404366004611cfe565b50612710949350505050565b34801561041c57600080fd5b5061027861042b366004611c6f565b610c23565b34801561043c57600080fd5b5061027861044b366004611dd3565b610ca1565b34801561045c57600080fd5b5061035e60025481565b34801561047257600080fd5b50610278610481366004611f05565b610e54565b34801561049257600080fd5b506102786104a1366004611f7a565b610fc4565b3480156104b257600080fd5b506102786104c1366004611bdd565b610feb565b3480156104d257600080fd5b506102786104e1366004611bdd565b611026565b3480156104f257600080fd5b5061051a7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161021f565b34801561053b57600080fd5b5060065461054f906001600160a01b031681565b6040516001600160a01b03909116815260200161021f565b34801561057357600080fd5b5061035e6000805160206126c883398151915281565b34801561059557600080fd5b506102486105a4366004611c6f565b611061565b61035e6105b7366004611fca565b61108a565b3480156105c857600080fd5b506106106105d7366004611c0e565b600a602052600090815260409020546001600160401b03811690600160401b810461ffff1690600160501b90046001600160801b031683565b604080516001600160401b03909416845261ffff90921660208401526001600160801b03169082015260600161021f565b34801561064d57600080fd5b5061035e600081565b34801561066257600080fd5b5061035e7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de81565b34801561069657600080fd5b5060015461054f906001600160a01b031681565b3480156106b657600080fd5b5060075461054f906001600160a01b031681565b3480156106d657600080fd5b506102786106e536600461204d565b6112d9565b3480156106f657600080fd5b5060055461054f906001600160a01b031681565b34801561071657600080fd5b50610278610725366004612068565b611314565b34801561073657600080fd5b50610278610745366004611c6f565b61133a565b34801561075657600080fd5b506102786107653660046120fc565b61135f565b34801561077657600080fd5b50610248610785366004612128565b600b60209081526000928352604080842090915290825290205460ff1681565b3480156107b157600080fd5b506003546004546107c0919082565b6040805192835260208301919091520161021f565b3480156107e157600080fd5b506107f56107f0366004612128565b6113a0565b60405160ff909116815260200161021f565b60006001600160e01b03198216637965db0b60e01b148061083857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000805160206126c8833981519152610856816113e3565b6108807f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de85611061565b6108bf5760405162461bcd60e51b815260206004820152600b60248201526a24b73b30b634b2103634b160a91b60448201526064015b60405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b15801561090957600080fd5b505af115801561091d573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b600860205260009081526040902080546001820180546001600160a01b0383169363ffffffff600160a01b8504811694600160c01b9004169290916109b790612152565b80601f01602080910402602001604051908101604052809291908181526020018280546109e390612152565b8015610a305780601f10610a0557610100808354040283529160200191610a30565b820191906000526020600020905b815481529060010190602001808311610a1357829003601f168201915b50505050600283015460038401546004850154600586018054959693956001600160401b0384169550600160401b9093046001600160a01b0390811694921692610a7990612152565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa590612152565b8015610af25780601f10610ac757610100808354040283529160200191610af2565b820191906000526020600020905b815481529060010190602001808311610ad557829003601f168201915b5050505050905089565b6000805160206126c8833981519152610b14816113e3565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000805160206126c8833981519152610b4f816113e3565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b63ffffffff81166000908152600c6020908152604091829020805483518184028101840190945280845260609392830182828015610bed57602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610bbe5790505b50505050509050919050565b600082815260208190526040902060010154610c14816113e3565b610c1e83836113f0565b505050565b6001600160a01b0381163314610c935760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016108b6565b610c9d8282611474565b5050565b3068929eee149b4bd212685403610cc05763ab143c066000526004601cfd5b3068929eee149b4bd2126855610cd5896114d9565b610d125760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908191cdd115a5960921b60448201526064016108b6565b63ffffffff8a166000908152600b602090815260408083208b845290915290205460ff1615610d835760405162461bcd60e51b815260206004820152601d60248201527f737263206a6f62496420697320616c726561647920766572696669656400000060448201526064016108b6565b63ffffffff8a166000908152600b602090815260408083208b84528252808320805460ff1916600117905551610dcb91869186918f918f918f918f918f918f918f9101612186565b604051602081830303815290604052805190602001209050610def84848385611560565b610dfc8b8989898961165f565b6040805163ffffffff8d168152602081018b90527f33d9faf7f95795c8d5bd00585df49c5e70f8c4c8b9b11ed439fb144db238e5c7910160405180910390a1503868929eee149b4bd212685550505050505050505050565b6000805160206126c8833981519152610e6c816113e3565b60005b82811015610f855736848483818110610e8a57610e8a61220f565b90506080020190506040518060600160405280826020016020810190610eb09190612225565b6001600160401b03168152602001610ece606084016040850161204d565b61ffff168152602001610ee76080840160608501612257565b6001600160801b03169052600a6000610f036020850185611c0e565b63ffffffff1681526020808201929092526040908101600020835181549385015194909201516001600160801b0316600160501b02600160501b600160d01b031961ffff909516600160401b0269ffffffffffffffffffff199094166001600160401b0390931692909217929092179290921691909117905550600101610e6f565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051610fb7929190612272565b60405180910390a1505050565b6000805160206126c8833981519152610fdc816113e3565b50805160035560200151600455565b6000805160206126c8833981519152611003816113e3565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000805160206126c883398151915261103e816113e3565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60008060026000815461109c90612319565b918290555060008181526008602052604081209192506110c260a0880160808901611bdd565b6001600160a01b0316036111115760405162461bcd60e51b8152602060048201526016602482015275496e76616c69642073656e646572206164647265737360501b60448201526064016108b6565b80546001600160c01b0319163363ffffffff60a01b191617600160a01b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16021781556111666020870187611c0e565b815463ffffffff91909116600160c01b0263ffffffff60c01b199091161781556111936020870187612332565b60018301916111a39190836123c6565b50604086013560028201556111be6080870160608801612225565b60038201805467ffffffffffffffff19166001600160401b03929092169190911790556111f160a0870160808801611bdd565b6003820180546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561123361122e6020880188612332565b61177e565b6004820180546001600160a01b0319166001600160a01b0392909216919091179055600581016112648587836123c6565b5060405182815261271093507fa34614e1f25aade4e7abdcc77ae23ea2ea54c27f927e9060a39d5efe3f71adeb9060200160405180910390a16040518381527f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a150509392505050565b6000805160206126c88339815191526112f1816113e3565b506005805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b63ffffffff83166000908152600c6020526040902061133490838361199d565b50505050565b600082815260208190526040902060010154611355816113e3565b610c1e8383611474565b6000805160206126c8833981519152611377816113e3565b5063ffffffff919091166000908152600960205260409020805460ff1916911515919091179055565b600c60205281600052604060002081815481106113bc57600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b6113ed813361179e565b50565b6113fa8282611061565b610c9d576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556114303390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61147e8282611061565b15610c9d576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16148061154b575061151c82617530612485565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16145b1561155857506001919050565b506000919050565b3068929eee149b4bd21268540361157f5763ab143c066000526004601cfd5b3068929eee149b4bd212685560055460405163a9852b1d60e01b81526000916001600160a01b03169063a9852b1d906115c59088908890889088906003906004016124a1565b6020604051808303816000875af11580156115e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611608919061253e565b90508061164c5760405162461bcd60e51b8152602060048201526012602482015271496e76616c6964207369676e61747572652160701b60448201526064016108b6565b503868929eee149b4bd212685550505050565b3068929eee149b4bd21268540361167e5763ab143c066000526004601cfd5b3068929eee149b4bd2126855600154604051630805f08d60e31b81526001600160a01b03838116600483015263ffffffff88166024830152600092169063402f8468906044016040805180830381865afa1580156116e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611704919061255b565b50604051630111a9b760e11b81529091506001600160a01b03821690630223536e906117389088908890889060040161258a565b600060405180830381600087803b15801561175257600080fd5b505af1158015611766573d6000803e3d6000fd5b50505050503868929eee149b4bd21268555050505050565b600061178e6051603184866125bc565b611797916125e6565b9392505050565b6117a88282611061565b610c9d576117c0816001600160a01b03166014611802565b6117cb836020611802565b6040516020016117dc929190612604565b60408051601f198184030181529082905262461bcd60e51b82526108b691600401612673565b60606000611811836002612686565b61181c90600261269d565b6001600160401b0381111561183357611833611d75565b6040519080825280601f01601f19166020018201604052801561185d576020820181803683370190505b509050600360fc1b816000815181106118785761187861220f565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106118a7576118a761220f565b60200101906001600160f81b031916908160001a90535060006118cb846002612686565b6118d690600161269d565b90505b600181111561194e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061190a5761190a61220f565b1a60f81b8282815181106119205761192061220f565b60200101906001600160f81b031916908160001a90535060049490941c93611947816126b0565b90506118d9565b5083156117975760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108b6565b82805482825590600052602060002090601f01602090048101928215611a365791602002820160005b83821115611a0757833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026119c6565b8015611a345782816101000a81549060ff0219169055600101602081600001049283019260010302611a07565b505b50611a42929150611a46565b5090565b5b80821115611a425760008155600101611a47565b600060208284031215611a6d57600080fd5b81356001600160e01b03198116811461179757600080fd5b6001600160a01b03811681146113ed57600080fd5b8035611aa581611a85565b919050565b600080600060608486031215611abf57600080fd5b8335611aca81611a85565b92506020840135611ada81611a85565b929592945050506040919091013590565b600060208284031215611afd57600080fd5b5035919050565b60005b83811015611b1f578181015183820152602001611b07565b50506000910152565b60008151808452611b40816020860160208601611b04565b601f01601f19169290920160200192915050565b6001600160a01b038a16815263ffffffff89811660208301528816604082015261012060608201819052600090611b8d90830189611b28565b608083018890526001600160401b03871660a08401526001600160a01b0386811660c0850152851660e0840152828103610100840152611bcd8185611b28565b9c9b505050505050505050505050565b600060208284031215611bef57600080fd5b813561179781611a85565b803563ffffffff81168114611aa557600080fd5b600060208284031215611c2057600080fd5b61179782611bfa565b602080825282518282018190526000918401906040840190835b81811015611c6457835160ff16835260209384019390920191600101611c43565b509095945050505050565b60008060408385031215611c8257600080fd5b823591506020830135611c9481611a85565b809150509250929050565b80356001600160401b0381168114611aa557600080fd5b60008083601f840112611cc857600080fd5b5081356001600160401b03811115611cdf57600080fd5b602083019150836020828501011115611cf757600080fd5b9250929050565b600080600080600060808688031215611d1657600080fd5b611d1f86611bfa565b9450611d2d60208701611c9f565b93506040860135611d3d81611a85565b925060608601356001600160401b03811115611d5857600080fd5b611d6488828901611cb6565b969995985093965092949392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611db357611db3611d75565b604052919050565b600060808284031215611dcd57600080fd5b50919050565b6000806000806000806000806000806101808b8d031215611df357600080fd5b611dfc8b611bfa565b9950611e0a60208c01611bfa565b985060408b0135975060608b01356001600160401b03811115611e2c57600080fd5b8b01601f81018d13611e3d57600080fd5b80356001600160401b03811115611e5657611e56611d75565b611e69601f8201601f1916602001611d8b565b8181528e6020838501011115611e7e57600080fd5b8160208401602083013760009181016020019190915297505060808b01359550611eaa60a08c01611c9f565b9450611eb860c08c01611a9a565b935060e08b01356001600160401b03811115611ed357600080fd5b611edf8d828e01611cb6565b9094509250611ef490508c6101008d01611dbb565b90509295989b9194979a5092959850565b60008060208385031215611f1857600080fd5b82356001600160401b03811115611f2e57600080fd5b8301601f81018513611f3f57600080fd5b80356001600160401b03811115611f5557600080fd5b8560208260071b8401011115611f6a57600080fd5b6020919091019590945092505050565b60006040828403128015611f8d57600080fd5b50604080519081016001600160401b0381118282101715611fb057611fb0611d75565b604052823581526020928301359281019290925250919050565b600080600060408486031215611fdf57600080fd5b83356001600160401b03811115611ff557600080fd5b840160a0818703121561200757600080fd5b925060208401356001600160401b0381111561202257600080fd5b61202e86828701611cb6565b9497909650939450505050565b803561ffff81168114611aa557600080fd5b60006020828403121561205f57600080fd5b6117978261203b565b60008060006040848603121561207d57600080fd5b61208684611bfa565b925060208401356001600160401b038111156120a157600080fd5b8401601f810186136120b257600080fd5b80356001600160401b038111156120c857600080fd5b8660208260051b84010111156120dd57600080fd5b939660209190910195509293505050565b80151581146113ed57600080fd5b6000806040838503121561210f57600080fd5b61211883611bfa565b91506020830135611c94816120ee565b6000806040838503121561213b57600080fd5b61214483611bfa565b946020939093013593505050565b600181811c9082168061216657607f821691505b602082108103611dcd57634e487b7160e01b600052602260045260246000fd5b888a8237600089820163ffffffff60e01b8a60e01b16815263ffffffff60e01b8960e01b16600482015287600882015286516121c9816028840160208b01611b04565b6028910190810195909552505060c09190911b6001600160c01b031916604883015260601b6bffffffffffffffffffffffff191660508201526064019695505050505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561223757600080fd5b61179782611c9f565b80356001600160801b0381168114611aa557600080fd5b60006020828403121561226957600080fd5b61179782612240565b6020808252810182905260008360408301825b858110156122f95763ffffffff61229b84611bfa565b1682526001600160401b036122b260208501611c9f565b16602083015261ffff6122c76040850161203b565b1660408301526001600160801b036122e160608501612240565b16606083015260809283019290910190600101612285565b5095945050505050565b634e487b7160e01b600052601160045260246000fd5b60006001820161232b5761232b612303565b5060010190565b6000808335601e1984360301811261234957600080fd5b8301803591506001600160401b0382111561236357600080fd5b602001915036819003821315611cf757600080fd5b601f821115610c1e57806000526020600020601f840160051c8101602085101561239f5750805b601f840160051c820191505b818110156123bf57600081556001016123ab565b5050505050565b6001600160401b038311156123dd576123dd611d75565b6123f1836123eb8354612152565b83612378565b6000601f841160018114612425576000851561240d5750838201355b600019600387901b1c1916600186901b1783556123bf565b600083815260209020601f19861690835b828110156124565786850135825560209485019460019092019101612436565b50868210156124735760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b63ffffffff818116838216019081111561083857610838612303565b6101008152846101008201528486610120830137600061012086830181019190915260208083018690528435604080850191909152908501356060840152601f8701601f19168301909101908401356124f981611a85565b6001600160a01b03166080830152606084013561251581611a85565b6001600160a01b031660a0830152825460c0830152600183015460e08301529695505050505050565b60006020828403121561255057600080fd5b8151611797816120ee565b6000806040838503121561256e57600080fd5b825161257981611a85565b6020840151909250611c94816120ee565b60608152600061259d6060830186611b28565b90508360208301526001600160401b0383166040830152949350505050565b600080858511156125cc57600080fd5b838611156125d957600080fd5b5050820193919092039150565b8035602083101561083857600019602084900360031b1b1692915050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351612636816017850160208801611b04565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612667816028840160208801611b04565b01602801949350505050565b6020815260006117976020830184611b28565b808202811582820484141761083857610838612303565b8082018082111561083857610838612303565b6000816126bf576126bf612303565b50600019019056fea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220d08ee3a9e609f697aa5f4f9eee22905e49d544fe57edb0dd29a675542547d1bd64736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006edce65403992e310a62460808c4b910d972f10f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c03f31fd86a9077785b7bcf6598ce3598fa91113000000000000000000000000b3e790273f0a89e53d2c20dd4dfe82aa00bbf91b", + "nonce": "0x74", + "chainId": "0x66eee" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x2690d3", + "logs": [ + { + "address": "0x8b1b58883d8a0fdde8cedea4520483e20578c5df", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x70660b63069c06692b5c1b28d0f38263d83c8b96288f11921ee8aec5c89709a0", + "blockNumber": "0x5a8b02e", + "transactionHash": "0x93daee15453af84f05c146059dba2844fdf9470669d635d7e3ded318a237b966", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + }, + { + "address": "0x8b1b58883d8a0fdde8cedea4520483e20578c5df", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0xa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x70660b63069c06692b5c1b28d0f38263d83c8b96288f11921ee8aec5c89709a0", + "blockNumber": "0x5a8b02e", + "transactionHash": "0x93daee15453af84f05c146059dba2844fdf9470669d635d7e3ded318a237b966", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + } + ], + "logsBloom": "0x00000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000020000000000010000000000000000000020000000000000000000800000000000000000800000040000000000000200000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000400100000000000020000000000000000000000000000000001000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x93daee15453af84f05c146059dba2844fdf9470669d635d7e3ded318a237b966", + "transactionIndex": "0x1", + "blockHash": "0x70660b63069c06692b5c1b28d0f38263d83c8b96288f11921ee8aec5c89709a0", + "blockNumber": "0x5a8b02e", + "gasUsed": "0x2690d3", + "effectiveGasPrice": "0x5f5e100", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0x8b1b58883d8a0fdde8cedea4520483e20578c5df", + "gasUsedForL1": "0x250eb", + "l1BlockNumber": "0x6b300f" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730911253, + "chain": 421614, + "commit": "4f0aff3" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/Deploy.s.sol/80002/run-1730911238.json b/contracts/evm/broadcast/Deploy.s.sol/80002/run-1730911238.json new file mode 100644 index 00000000..caa90dd5 --- /dev/null +++ b/contracts/evm/broadcast/Deploy.s.sol/80002/run-1730911238.json @@ -0,0 +1,102 @@ +{ + "transactions": [ + { + "hash": "0x74770fb30963bec7f7e6fa06126ec953e3e910fc1823c969b6d4f857cdefe6a5", + "transactionType": "CREATE", + "contractName": "NuffDVN", + "contractAddress": "0xb1593cfcf8bfce9aa28865c04eb5c30df0f47784", + "function": null, + "arguments": [ + "(0, 0)", + "0x6EDCE65403992e310A62460808c4b910D972f10f", + "1", + "1", + "0xC03f31fD86a9077785b7bCf6598Ce3598Fa91113", + "0xb3e790273f0A89e53d2C20dD4dFe82AA00bbf91b" + ], + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x2f1c58", + "value": "0x0", + "input": "0x60a060405234801561001057600080fd5b50604051612a8c380380612a8c83398101604081905261002f91610254565b85516003556020808701516004908155600180546001600160a01b0319166001600160a01b0389169081179091556040805163416ecebf60e01b81529051919363416ecebf938281019391928290030181865afa158015610094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b89190610312565b63ffffffff1660805260058054600160a01b600160f01b031916600160a01b61ffff871602600160b01b600160f01b03191617600160b01b6001600160401b03861602179055600680546001600160a01b03199081166001600160a01b03858116919091179092556007805490911691831691909117905561013b600033610170565b6101657fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610170565b50505050505061033f565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1661020b576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556101ca3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b80516001600160a01b038116811461022657600080fd5b919050565b805161ffff8116811461022657600080fd5b80516001600160401b038116811461022657600080fd5b60008060008060008086880360e081121561026e57600080fd5b604081121561027c57600080fd5b50604080519081016001600160401b03811182821017156102ad57634e487b7160e01b600052604160045260246000fd5b6040908152885182526020808a0151908301529096506102ce90880161020f565b94506102dc6060880161022b565b93506102ea6080880161023d565b92506102f860a0880161020f565b915061030660c0880161020f565b90509295509295509295565b60006020828403121561032457600080fd5b815163ffffffff8116811461033857600080fd5b9392505050565b60805161271d61036f600039600081816104f801528181611130015281816114e40152611524015261271d6000f3fe6080604052600436106101e95760003560e01c8063724e78da11610113578063b3129896116100ab578063d547741f1161006f578063d547741f1461072a578063f3acc68d1461074a578063f48ab8f21461076a578063f49ef505146107a5578063fbd9b28b146107d557600080fd5b8063b31298961461068a578063bb37d00c146106aa578063c358de0a146106ca578063c5fdf39c146106ea578063cd88b9031461070a57600080fd5b8063724e78da146104c657806372607537146104e6578063741bef1a1461052f57806375b238fc1461056757806391d148541461058957806395d376d7146105a95780639e944965146105bc578063a217fddf14610641578063a98586e11461065657600080fd5b8063296817001161018657806329681700146103995780632f2ff15d146103c957806330bb3aac146103e957806336568abe146104105780634ce419c31461043057806351cc784f1461045057806352d3b8711461046657806354093c65146104865780635b4c2500146104a657600080fd5b8062bf2e80146101ee57806301ffc9a7146102285780631095b6d7146102585780631703a0181461027a578063180aedf3146102b95780631fad0b4c146102ee57806320ac2ece1461030e578063248a9ca31461032e57806326e67a371461036c575b600080fd5b3480156101fa57600080fd5b5060055461021090600160a01b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561023457600080fd5b50610248610243366004611a5b565b610807565b604051901515815260200161021f565b34801561026457600080fd5b50610278610273366004611aaa565b61083e565b005b34801561028657600080fd5b506005546102a190600160b01b90046001600160401b031681565b6040516001600160401b03909116815260200161021f565b3480156102c557600080fd5b506102d96102d4366004611aeb565b610973565b60405161021f99989796959493929190611b54565b3480156102fa57600080fd5b50610278610309366004611bdd565b610afc565b34801561031a57600080fd5b50610278610329366004611bdd565b610b37565b34801561033a57600080fd5b5061035e610349366004611aeb565b60009081526020819052604090206001015490565b60405190815260200161021f565b34801561037857600080fd5b5061038c610387366004611c0e565b610b72565b60405161021f9190611c29565b3480156103a557600080fd5b506102486103b4366004611c0e565b60096020526000908152604090205460ff1681565b3480156103d557600080fd5b506102786103e4366004611c6f565b610bf9565b3480156103f557600080fd5b5061035e610404366004611cfe565b50612710949350505050565b34801561041c57600080fd5b5061027861042b366004611c6f565b610c23565b34801561043c57600080fd5b5061027861044b366004611dd3565b610ca1565b34801561045c57600080fd5b5061035e60025481565b34801561047257600080fd5b50610278610481366004611f05565b610e54565b34801561049257600080fd5b506102786104a1366004611f7a565b610fc4565b3480156104b257600080fd5b506102786104c1366004611bdd565b610feb565b3480156104d257600080fd5b506102786104e1366004611bdd565b611026565b3480156104f257600080fd5b5061051a7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161021f565b34801561053b57600080fd5b5060065461054f906001600160a01b031681565b6040516001600160a01b03909116815260200161021f565b34801561057357600080fd5b5061035e6000805160206126c883398151915281565b34801561059557600080fd5b506102486105a4366004611c6f565b611061565b61035e6105b7366004611fca565b61108a565b3480156105c857600080fd5b506106106105d7366004611c0e565b600a602052600090815260409020546001600160401b03811690600160401b810461ffff1690600160501b90046001600160801b031683565b604080516001600160401b03909416845261ffff90921660208401526001600160801b03169082015260600161021f565b34801561064d57600080fd5b5061035e600081565b34801561066257600080fd5b5061035e7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de81565b34801561069657600080fd5b5060015461054f906001600160a01b031681565b3480156106b657600080fd5b5060075461054f906001600160a01b031681565b3480156106d657600080fd5b506102786106e536600461204d565b6112d9565b3480156106f657600080fd5b5060055461054f906001600160a01b031681565b34801561071657600080fd5b50610278610725366004612068565b611314565b34801561073657600080fd5b50610278610745366004611c6f565b61133a565b34801561075657600080fd5b506102786107653660046120fc565b61135f565b34801561077657600080fd5b50610248610785366004612128565b600b60209081526000928352604080842090915290825290205460ff1681565b3480156107b157600080fd5b506003546004546107c0919082565b6040805192835260208301919091520161021f565b3480156107e157600080fd5b506107f56107f0366004612128565b6113a0565b60405160ff909116815260200161021f565b60006001600160e01b03198216637965db0b60e01b148061083857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000805160206126c8833981519152610856816113e3565b6108807f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de85611061565b6108bf5760405162461bcd60e51b815260206004820152600b60248201526a24b73b30b634b2103634b160a91b60448201526064015b60405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b15801561090957600080fd5b505af115801561091d573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b600860205260009081526040902080546001820180546001600160a01b0383169363ffffffff600160a01b8504811694600160c01b9004169290916109b790612152565b80601f01602080910402602001604051908101604052809291908181526020018280546109e390612152565b8015610a305780601f10610a0557610100808354040283529160200191610a30565b820191906000526020600020905b815481529060010190602001808311610a1357829003601f168201915b50505050600283015460038401546004850154600586018054959693956001600160401b0384169550600160401b9093046001600160a01b0390811694921692610a7990612152565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa590612152565b8015610af25780601f10610ac757610100808354040283529160200191610af2565b820191906000526020600020905b815481529060010190602001808311610ad557829003601f168201915b5050505050905089565b6000805160206126c8833981519152610b14816113e3565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000805160206126c8833981519152610b4f816113e3565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b63ffffffff81166000908152600c6020908152604091829020805483518184028101840190945280845260609392830182828015610bed57602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610bbe5790505b50505050509050919050565b600082815260208190526040902060010154610c14816113e3565b610c1e83836113f0565b505050565b6001600160a01b0381163314610c935760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016108b6565b610c9d8282611474565b5050565b3068929eee149b4bd212685403610cc05763ab143c066000526004601cfd5b3068929eee149b4bd2126855610cd5896114d9565b610d125760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908191cdd115a5960921b60448201526064016108b6565b63ffffffff8a166000908152600b602090815260408083208b845290915290205460ff1615610d835760405162461bcd60e51b815260206004820152601d60248201527f737263206a6f62496420697320616c726561647920766572696669656400000060448201526064016108b6565b63ffffffff8a166000908152600b602090815260408083208b84528252808320805460ff1916600117905551610dcb91869186918f918f918f918f918f918f918f9101612186565b604051602081830303815290604052805190602001209050610def84848385611560565b610dfc8b8989898961165f565b6040805163ffffffff8d168152602081018b90527f33d9faf7f95795c8d5bd00585df49c5e70f8c4c8b9b11ed439fb144db238e5c7910160405180910390a1503868929eee149b4bd212685550505050505050505050565b6000805160206126c8833981519152610e6c816113e3565b60005b82811015610f855736848483818110610e8a57610e8a61220f565b90506080020190506040518060600160405280826020016020810190610eb09190612225565b6001600160401b03168152602001610ece606084016040850161204d565b61ffff168152602001610ee76080840160608501612257565b6001600160801b03169052600a6000610f036020850185611c0e565b63ffffffff1681526020808201929092526040908101600020835181549385015194909201516001600160801b0316600160501b02600160501b600160d01b031961ffff909516600160401b0269ffffffffffffffffffff199094166001600160401b0390931692909217929092179290921691909117905550600101610e6f565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051610fb7929190612272565b60405180910390a1505050565b6000805160206126c8833981519152610fdc816113e3565b50805160035560200151600455565b6000805160206126c8833981519152611003816113e3565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000805160206126c883398151915261103e816113e3565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60008060026000815461109c90612319565b918290555060008181526008602052604081209192506110c260a0880160808901611bdd565b6001600160a01b0316036111115760405162461bcd60e51b8152602060048201526016602482015275496e76616c69642073656e646572206164647265737360501b60448201526064016108b6565b80546001600160c01b0319163363ffffffff60a01b191617600160a01b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16021781556111666020870187611c0e565b815463ffffffff91909116600160c01b0263ffffffff60c01b199091161781556111936020870187612332565b60018301916111a39190836123c6565b50604086013560028201556111be6080870160608801612225565b60038201805467ffffffffffffffff19166001600160401b03929092169190911790556111f160a0870160808801611bdd565b6003820180546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561123361122e6020880188612332565b61177e565b6004820180546001600160a01b0319166001600160a01b0392909216919091179055600581016112648587836123c6565b5060405182815261271093507fa34614e1f25aade4e7abdcc77ae23ea2ea54c27f927e9060a39d5efe3f71adeb9060200160405180910390a16040518381527f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a150509392505050565b6000805160206126c88339815191526112f1816113e3565b506005805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b63ffffffff83166000908152600c6020526040902061133490838361199d565b50505050565b600082815260208190526040902060010154611355816113e3565b610c1e8383611474565b6000805160206126c8833981519152611377816113e3565b5063ffffffff919091166000908152600960205260409020805460ff1916911515919091179055565b600c60205281600052604060002081815481106113bc57600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b6113ed813361179e565b50565b6113fa8282611061565b610c9d576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556114303390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61147e8282611061565b15610c9d576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16148061154b575061151c82617530612485565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16145b1561155857506001919050565b506000919050565b3068929eee149b4bd21268540361157f5763ab143c066000526004601cfd5b3068929eee149b4bd212685560055460405163a9852b1d60e01b81526000916001600160a01b03169063a9852b1d906115c59088908890889088906003906004016124a1565b6020604051808303816000875af11580156115e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611608919061253e565b90508061164c5760405162461bcd60e51b8152602060048201526012602482015271496e76616c6964207369676e61747572652160701b60448201526064016108b6565b503868929eee149b4bd212685550505050565b3068929eee149b4bd21268540361167e5763ab143c066000526004601cfd5b3068929eee149b4bd2126855600154604051630805f08d60e31b81526001600160a01b03838116600483015263ffffffff88166024830152600092169063402f8468906044016040805180830381865afa1580156116e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611704919061255b565b50604051630111a9b760e11b81529091506001600160a01b03821690630223536e906117389088908890889060040161258a565b600060405180830381600087803b15801561175257600080fd5b505af1158015611766573d6000803e3d6000fd5b50505050503868929eee149b4bd21268555050505050565b600061178e6051603184866125bc565b611797916125e6565b9392505050565b6117a88282611061565b610c9d576117c0816001600160a01b03166014611802565b6117cb836020611802565b6040516020016117dc929190612604565b60408051601f198184030181529082905262461bcd60e51b82526108b691600401612673565b60606000611811836002612686565b61181c90600261269d565b6001600160401b0381111561183357611833611d75565b6040519080825280601f01601f19166020018201604052801561185d576020820181803683370190505b509050600360fc1b816000815181106118785761187861220f565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106118a7576118a761220f565b60200101906001600160f81b031916908160001a90535060006118cb846002612686565b6118d690600161269d565b90505b600181111561194e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061190a5761190a61220f565b1a60f81b8282815181106119205761192061220f565b60200101906001600160f81b031916908160001a90535060049490941c93611947816126b0565b90506118d9565b5083156117975760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108b6565b82805482825590600052602060002090601f01602090048101928215611a365791602002820160005b83821115611a0757833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026119c6565b8015611a345782816101000a81549060ff0219169055600101602081600001049283019260010302611a07565b505b50611a42929150611a46565b5090565b5b80821115611a425760008155600101611a47565b600060208284031215611a6d57600080fd5b81356001600160e01b03198116811461179757600080fd5b6001600160a01b03811681146113ed57600080fd5b8035611aa581611a85565b919050565b600080600060608486031215611abf57600080fd5b8335611aca81611a85565b92506020840135611ada81611a85565b929592945050506040919091013590565b600060208284031215611afd57600080fd5b5035919050565b60005b83811015611b1f578181015183820152602001611b07565b50506000910152565b60008151808452611b40816020860160208601611b04565b601f01601f19169290920160200192915050565b6001600160a01b038a16815263ffffffff89811660208301528816604082015261012060608201819052600090611b8d90830189611b28565b608083018890526001600160401b03871660a08401526001600160a01b0386811660c0850152851660e0840152828103610100840152611bcd8185611b28565b9c9b505050505050505050505050565b600060208284031215611bef57600080fd5b813561179781611a85565b803563ffffffff81168114611aa557600080fd5b600060208284031215611c2057600080fd5b61179782611bfa565b602080825282518282018190526000918401906040840190835b81811015611c6457835160ff16835260209384019390920191600101611c43565b509095945050505050565b60008060408385031215611c8257600080fd5b823591506020830135611c9481611a85565b809150509250929050565b80356001600160401b0381168114611aa557600080fd5b60008083601f840112611cc857600080fd5b5081356001600160401b03811115611cdf57600080fd5b602083019150836020828501011115611cf757600080fd5b9250929050565b600080600080600060808688031215611d1657600080fd5b611d1f86611bfa565b9450611d2d60208701611c9f565b93506040860135611d3d81611a85565b925060608601356001600160401b03811115611d5857600080fd5b611d6488828901611cb6565b969995985093965092949392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611db357611db3611d75565b604052919050565b600060808284031215611dcd57600080fd5b50919050565b6000806000806000806000806000806101808b8d031215611df357600080fd5b611dfc8b611bfa565b9950611e0a60208c01611bfa565b985060408b0135975060608b01356001600160401b03811115611e2c57600080fd5b8b01601f81018d13611e3d57600080fd5b80356001600160401b03811115611e5657611e56611d75565b611e69601f8201601f1916602001611d8b565b8181528e6020838501011115611e7e57600080fd5b8160208401602083013760009181016020019190915297505060808b01359550611eaa60a08c01611c9f565b9450611eb860c08c01611a9a565b935060e08b01356001600160401b03811115611ed357600080fd5b611edf8d828e01611cb6565b9094509250611ef490508c6101008d01611dbb565b90509295989b9194979a5092959850565b60008060208385031215611f1857600080fd5b82356001600160401b03811115611f2e57600080fd5b8301601f81018513611f3f57600080fd5b80356001600160401b03811115611f5557600080fd5b8560208260071b8401011115611f6a57600080fd5b6020919091019590945092505050565b60006040828403128015611f8d57600080fd5b50604080519081016001600160401b0381118282101715611fb057611fb0611d75565b604052823581526020928301359281019290925250919050565b600080600060408486031215611fdf57600080fd5b83356001600160401b03811115611ff557600080fd5b840160a0818703121561200757600080fd5b925060208401356001600160401b0381111561202257600080fd5b61202e86828701611cb6565b9497909650939450505050565b803561ffff81168114611aa557600080fd5b60006020828403121561205f57600080fd5b6117978261203b565b60008060006040848603121561207d57600080fd5b61208684611bfa565b925060208401356001600160401b038111156120a157600080fd5b8401601f810186136120b257600080fd5b80356001600160401b038111156120c857600080fd5b8660208260051b84010111156120dd57600080fd5b939660209190910195509293505050565b80151581146113ed57600080fd5b6000806040838503121561210f57600080fd5b61211883611bfa565b91506020830135611c94816120ee565b6000806040838503121561213b57600080fd5b61214483611bfa565b946020939093013593505050565b600181811c9082168061216657607f821691505b602082108103611dcd57634e487b7160e01b600052602260045260246000fd5b888a8237600089820163ffffffff60e01b8a60e01b16815263ffffffff60e01b8960e01b16600482015287600882015286516121c9816028840160208b01611b04565b6028910190810195909552505060c09190911b6001600160c01b031916604883015260601b6bffffffffffffffffffffffff191660508201526064019695505050505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561223757600080fd5b61179782611c9f565b80356001600160801b0381168114611aa557600080fd5b60006020828403121561226957600080fd5b61179782612240565b6020808252810182905260008360408301825b858110156122f95763ffffffff61229b84611bfa565b1682526001600160401b036122b260208501611c9f565b16602083015261ffff6122c76040850161203b565b1660408301526001600160801b036122e160608501612240565b16606083015260809283019290910190600101612285565b5095945050505050565b634e487b7160e01b600052601160045260246000fd5b60006001820161232b5761232b612303565b5060010190565b6000808335601e1984360301811261234957600080fd5b8301803591506001600160401b0382111561236357600080fd5b602001915036819003821315611cf757600080fd5b601f821115610c1e57806000526020600020601f840160051c8101602085101561239f5750805b601f840160051c820191505b818110156123bf57600081556001016123ab565b5050505050565b6001600160401b038311156123dd576123dd611d75565b6123f1836123eb8354612152565b83612378565b6000601f841160018114612425576000851561240d5750838201355b600019600387901b1c1916600186901b1783556123bf565b600083815260209020601f19861690835b828110156124565786850135825560209485019460019092019101612436565b50868210156124735760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b63ffffffff818116838216019081111561083857610838612303565b6101008152846101008201528486610120830137600061012086830181019190915260208083018690528435604080850191909152908501356060840152601f8701601f19168301909101908401356124f981611a85565b6001600160a01b03166080830152606084013561251581611a85565b6001600160a01b031660a0830152825460c0830152600183015460e08301529695505050505050565b60006020828403121561255057600080fd5b8151611797816120ee565b6000806040838503121561256e57600080fd5b825161257981611a85565b6020840151909250611c94816120ee565b60608152600061259d6060830186611b28565b90508360208301526001600160401b0383166040830152949350505050565b600080858511156125cc57600080fd5b838611156125d957600080fd5b5050820193919092039150565b8035602083101561083857600019602084900360031b1b1692915050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351612636816017850160208801611b04565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612667816028840160208801611b04565b01602801949350505050565b6020815260006117976020830184611b28565b808202811582820484141761083857610838612303565b8082018082111561083857610838612303565b6000816126bf576126bf612303565b50600019019056fea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220d08ee3a9e609f697aa5f4f9eee22905e49d544fe57edb0dd29a675542547d1bd64736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006edce65403992e310a62460808c4b910d972f10f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c03f31fd86a9077785b7bcf6598ce3598fa91113000000000000000000000000b3e790273f0a89e53d2c20dd4dfe82aa00bbf91b", + "nonce": "0x3f", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x25c489", + "logs": [ + { + "address": "0xb1593cfcf8bfce9aa28865c04eb5c30df0f47784", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x7f343a25e7dfce3b5344dd69be55db3c10200dc1cd3ae0e7884c62d790612558", + "blockNumber": "0xd7256c", + "transactionHash": "0x74770fb30963bec7f7e6fa06126ec953e3e910fc1823c969b6d4f857cdefe6a5", + "transactionIndex": "0x1", + "logIndex": "0x3", + "removed": false + }, + { + "address": "0xb1593cfcf8bfce9aa28865c04eb5c30df0f47784", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0xa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x7f343a25e7dfce3b5344dd69be55db3c10200dc1cd3ae0e7884c62d790612558", + "blockNumber": "0xd7256c", + "transactionHash": "0x74770fb30963bec7f7e6fa06126ec953e3e910fc1823c969b6d4f857cdefe6a5", + "transactionIndex": "0x1", + "logIndex": "0x4", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x000000000000000000000000915a2284d28bd93de7d6f31173b981204bb666e6" + ], + "data": "0x000000000000000000000000000000000000000000000000010ddb593c90483000000000000000000000000000000000000000000000000078bd6335cd5cdbc90000000000000000000000000000000000000000000004b35a2374254cc18a4600000000000000000000000000000000000000000000000077af87dc90cc93990000000000000000000000000000000000000000000004b35b314f7e8951d276", + "blockHash": "0x7f343a25e7dfce3b5344dd69be55db3c10200dc1cd3ae0e7884c62d790612558", + "blockNumber": "0xd7256c", + "transactionHash": "0x74770fb30963bec7f7e6fa06126ec953e3e910fc1823c969b6d4f857cdefe6a5", + "transactionIndex": "0x1", + "logIndex": "0x5", + "removed": false + } + ], + "logsBloom": "0x0000000400000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000008800000000020000000000100000000000000000000020000000000000000000800000000000000000880000000000000000000200000000000000000000000004000000000000000000000000000000000200400000000000000000000000000000000000000000000001000000000004200000000000000000001000000000000000002000000400100100000000020000000000000000000000000000000000000000000400000000000000000100000", + "type": "0x2", + "transactionHash": "0x74770fb30963bec7f7e6fa06126ec953e3e910fc1823c969b6d4f857cdefe6a5", + "transactionIndex": "0x1", + "blockHash": "0x7f343a25e7dfce3b5344dd69be55db3c10200dc1cd3ae0e7884c62d790612558", + "blockNumber": "0xd7256c", + "gasUsed": "0x243fe8", + "effectiveGasPrice": "0x771c44d0d", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0xb1593cfcf8bfce9aa28865c04eb5c30df0f47784" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730911238, + "chain": 80002, + "commit": "4f0aff3" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/Deploy.s.sol/80002/run-latest.json b/contracts/evm/broadcast/Deploy.s.sol/80002/run-latest.json new file mode 100644 index 00000000..caa90dd5 --- /dev/null +++ b/contracts/evm/broadcast/Deploy.s.sol/80002/run-latest.json @@ -0,0 +1,102 @@ +{ + "transactions": [ + { + "hash": "0x74770fb30963bec7f7e6fa06126ec953e3e910fc1823c969b6d4f857cdefe6a5", + "transactionType": "CREATE", + "contractName": "NuffDVN", + "contractAddress": "0xb1593cfcf8bfce9aa28865c04eb5c30df0f47784", + "function": null, + "arguments": [ + "(0, 0)", + "0x6EDCE65403992e310A62460808c4b910D972f10f", + "1", + "1", + "0xC03f31fD86a9077785b7bCf6598Ce3598Fa91113", + "0xb3e790273f0A89e53d2C20dD4dFe82AA00bbf91b" + ], + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x2f1c58", + "value": "0x0", + "input": "0x60a060405234801561001057600080fd5b50604051612a8c380380612a8c83398101604081905261002f91610254565b85516003556020808701516004908155600180546001600160a01b0319166001600160a01b0389169081179091556040805163416ecebf60e01b81529051919363416ecebf938281019391928290030181865afa158015610094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b89190610312565b63ffffffff1660805260058054600160a01b600160f01b031916600160a01b61ffff871602600160b01b600160f01b03191617600160b01b6001600160401b03861602179055600680546001600160a01b03199081166001600160a01b03858116919091179092556007805490911691831691909117905561013b600033610170565b6101657fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610170565b50505050505061033f565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1661020b576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556101ca3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b80516001600160a01b038116811461022657600080fd5b919050565b805161ffff8116811461022657600080fd5b80516001600160401b038116811461022657600080fd5b60008060008060008086880360e081121561026e57600080fd5b604081121561027c57600080fd5b50604080519081016001600160401b03811182821017156102ad57634e487b7160e01b600052604160045260246000fd5b6040908152885182526020808a0151908301529096506102ce90880161020f565b94506102dc6060880161022b565b93506102ea6080880161023d565b92506102f860a0880161020f565b915061030660c0880161020f565b90509295509295509295565b60006020828403121561032457600080fd5b815163ffffffff8116811461033857600080fd5b9392505050565b60805161271d61036f600039600081816104f801528181611130015281816114e40152611524015261271d6000f3fe6080604052600436106101e95760003560e01c8063724e78da11610113578063b3129896116100ab578063d547741f1161006f578063d547741f1461072a578063f3acc68d1461074a578063f48ab8f21461076a578063f49ef505146107a5578063fbd9b28b146107d557600080fd5b8063b31298961461068a578063bb37d00c146106aa578063c358de0a146106ca578063c5fdf39c146106ea578063cd88b9031461070a57600080fd5b8063724e78da146104c657806372607537146104e6578063741bef1a1461052f57806375b238fc1461056757806391d148541461058957806395d376d7146105a95780639e944965146105bc578063a217fddf14610641578063a98586e11461065657600080fd5b8063296817001161018657806329681700146103995780632f2ff15d146103c957806330bb3aac146103e957806336568abe146104105780634ce419c31461043057806351cc784f1461045057806352d3b8711461046657806354093c65146104865780635b4c2500146104a657600080fd5b8062bf2e80146101ee57806301ffc9a7146102285780631095b6d7146102585780631703a0181461027a578063180aedf3146102b95780631fad0b4c146102ee57806320ac2ece1461030e578063248a9ca31461032e57806326e67a371461036c575b600080fd5b3480156101fa57600080fd5b5060055461021090600160a01b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561023457600080fd5b50610248610243366004611a5b565b610807565b604051901515815260200161021f565b34801561026457600080fd5b50610278610273366004611aaa565b61083e565b005b34801561028657600080fd5b506005546102a190600160b01b90046001600160401b031681565b6040516001600160401b03909116815260200161021f565b3480156102c557600080fd5b506102d96102d4366004611aeb565b610973565b60405161021f99989796959493929190611b54565b3480156102fa57600080fd5b50610278610309366004611bdd565b610afc565b34801561031a57600080fd5b50610278610329366004611bdd565b610b37565b34801561033a57600080fd5b5061035e610349366004611aeb565b60009081526020819052604090206001015490565b60405190815260200161021f565b34801561037857600080fd5b5061038c610387366004611c0e565b610b72565b60405161021f9190611c29565b3480156103a557600080fd5b506102486103b4366004611c0e565b60096020526000908152604090205460ff1681565b3480156103d557600080fd5b506102786103e4366004611c6f565b610bf9565b3480156103f557600080fd5b5061035e610404366004611cfe565b50612710949350505050565b34801561041c57600080fd5b5061027861042b366004611c6f565b610c23565b34801561043c57600080fd5b5061027861044b366004611dd3565b610ca1565b34801561045c57600080fd5b5061035e60025481565b34801561047257600080fd5b50610278610481366004611f05565b610e54565b34801561049257600080fd5b506102786104a1366004611f7a565b610fc4565b3480156104b257600080fd5b506102786104c1366004611bdd565b610feb565b3480156104d257600080fd5b506102786104e1366004611bdd565b611026565b3480156104f257600080fd5b5061051a7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161021f565b34801561053b57600080fd5b5060065461054f906001600160a01b031681565b6040516001600160a01b03909116815260200161021f565b34801561057357600080fd5b5061035e6000805160206126c883398151915281565b34801561059557600080fd5b506102486105a4366004611c6f565b611061565b61035e6105b7366004611fca565b61108a565b3480156105c857600080fd5b506106106105d7366004611c0e565b600a602052600090815260409020546001600160401b03811690600160401b810461ffff1690600160501b90046001600160801b031683565b604080516001600160401b03909416845261ffff90921660208401526001600160801b03169082015260600161021f565b34801561064d57600080fd5b5061035e600081565b34801561066257600080fd5b5061035e7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de81565b34801561069657600080fd5b5060015461054f906001600160a01b031681565b3480156106b657600080fd5b5060075461054f906001600160a01b031681565b3480156106d657600080fd5b506102786106e536600461204d565b6112d9565b3480156106f657600080fd5b5060055461054f906001600160a01b031681565b34801561071657600080fd5b50610278610725366004612068565b611314565b34801561073657600080fd5b50610278610745366004611c6f565b61133a565b34801561075657600080fd5b506102786107653660046120fc565b61135f565b34801561077657600080fd5b50610248610785366004612128565b600b60209081526000928352604080842090915290825290205460ff1681565b3480156107b157600080fd5b506003546004546107c0919082565b6040805192835260208301919091520161021f565b3480156107e157600080fd5b506107f56107f0366004612128565b6113a0565b60405160ff909116815260200161021f565b60006001600160e01b03198216637965db0b60e01b148061083857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000805160206126c8833981519152610856816113e3565b6108807f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de85611061565b6108bf5760405162461bcd60e51b815260206004820152600b60248201526a24b73b30b634b2103634b160a91b60448201526064015b60405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b15801561090957600080fd5b505af115801561091d573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b600860205260009081526040902080546001820180546001600160a01b0383169363ffffffff600160a01b8504811694600160c01b9004169290916109b790612152565b80601f01602080910402602001604051908101604052809291908181526020018280546109e390612152565b8015610a305780601f10610a0557610100808354040283529160200191610a30565b820191906000526020600020905b815481529060010190602001808311610a1357829003601f168201915b50505050600283015460038401546004850154600586018054959693956001600160401b0384169550600160401b9093046001600160a01b0390811694921692610a7990612152565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa590612152565b8015610af25780601f10610ac757610100808354040283529160200191610af2565b820191906000526020600020905b815481529060010190602001808311610ad557829003601f168201915b5050505050905089565b6000805160206126c8833981519152610b14816113e3565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000805160206126c8833981519152610b4f816113e3565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b63ffffffff81166000908152600c6020908152604091829020805483518184028101840190945280845260609392830182828015610bed57602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610bbe5790505b50505050509050919050565b600082815260208190526040902060010154610c14816113e3565b610c1e83836113f0565b505050565b6001600160a01b0381163314610c935760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016108b6565b610c9d8282611474565b5050565b3068929eee149b4bd212685403610cc05763ab143c066000526004601cfd5b3068929eee149b4bd2126855610cd5896114d9565b610d125760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908191cdd115a5960921b60448201526064016108b6565b63ffffffff8a166000908152600b602090815260408083208b845290915290205460ff1615610d835760405162461bcd60e51b815260206004820152601d60248201527f737263206a6f62496420697320616c726561647920766572696669656400000060448201526064016108b6565b63ffffffff8a166000908152600b602090815260408083208b84528252808320805460ff1916600117905551610dcb91869186918f918f918f918f918f918f918f9101612186565b604051602081830303815290604052805190602001209050610def84848385611560565b610dfc8b8989898961165f565b6040805163ffffffff8d168152602081018b90527f33d9faf7f95795c8d5bd00585df49c5e70f8c4c8b9b11ed439fb144db238e5c7910160405180910390a1503868929eee149b4bd212685550505050505050505050565b6000805160206126c8833981519152610e6c816113e3565b60005b82811015610f855736848483818110610e8a57610e8a61220f565b90506080020190506040518060600160405280826020016020810190610eb09190612225565b6001600160401b03168152602001610ece606084016040850161204d565b61ffff168152602001610ee76080840160608501612257565b6001600160801b03169052600a6000610f036020850185611c0e565b63ffffffff1681526020808201929092526040908101600020835181549385015194909201516001600160801b0316600160501b02600160501b600160d01b031961ffff909516600160401b0269ffffffffffffffffffff199094166001600160401b0390931692909217929092179290921691909117905550600101610e6f565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051610fb7929190612272565b60405180910390a1505050565b6000805160206126c8833981519152610fdc816113e3565b50805160035560200151600455565b6000805160206126c8833981519152611003816113e3565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000805160206126c883398151915261103e816113e3565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60008060026000815461109c90612319565b918290555060008181526008602052604081209192506110c260a0880160808901611bdd565b6001600160a01b0316036111115760405162461bcd60e51b8152602060048201526016602482015275496e76616c69642073656e646572206164647265737360501b60448201526064016108b6565b80546001600160c01b0319163363ffffffff60a01b191617600160a01b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16021781556111666020870187611c0e565b815463ffffffff91909116600160c01b0263ffffffff60c01b199091161781556111936020870187612332565b60018301916111a39190836123c6565b50604086013560028201556111be6080870160608801612225565b60038201805467ffffffffffffffff19166001600160401b03929092169190911790556111f160a0870160808801611bdd565b6003820180546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561123361122e6020880188612332565b61177e565b6004820180546001600160a01b0319166001600160a01b0392909216919091179055600581016112648587836123c6565b5060405182815261271093507fa34614e1f25aade4e7abdcc77ae23ea2ea54c27f927e9060a39d5efe3f71adeb9060200160405180910390a16040518381527f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a150509392505050565b6000805160206126c88339815191526112f1816113e3565b506005805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b63ffffffff83166000908152600c6020526040902061133490838361199d565b50505050565b600082815260208190526040902060010154611355816113e3565b610c1e8383611474565b6000805160206126c8833981519152611377816113e3565b5063ffffffff919091166000908152600960205260409020805460ff1916911515919091179055565b600c60205281600052604060002081815481106113bc57600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b6113ed813361179e565b50565b6113fa8282611061565b610c9d576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556114303390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61147e8282611061565b15610c9d576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16148061154b575061151c82617530612485565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16145b1561155857506001919050565b506000919050565b3068929eee149b4bd21268540361157f5763ab143c066000526004601cfd5b3068929eee149b4bd212685560055460405163a9852b1d60e01b81526000916001600160a01b03169063a9852b1d906115c59088908890889088906003906004016124a1565b6020604051808303816000875af11580156115e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611608919061253e565b90508061164c5760405162461bcd60e51b8152602060048201526012602482015271496e76616c6964207369676e61747572652160701b60448201526064016108b6565b503868929eee149b4bd212685550505050565b3068929eee149b4bd21268540361167e5763ab143c066000526004601cfd5b3068929eee149b4bd2126855600154604051630805f08d60e31b81526001600160a01b03838116600483015263ffffffff88166024830152600092169063402f8468906044016040805180830381865afa1580156116e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611704919061255b565b50604051630111a9b760e11b81529091506001600160a01b03821690630223536e906117389088908890889060040161258a565b600060405180830381600087803b15801561175257600080fd5b505af1158015611766573d6000803e3d6000fd5b50505050503868929eee149b4bd21268555050505050565b600061178e6051603184866125bc565b611797916125e6565b9392505050565b6117a88282611061565b610c9d576117c0816001600160a01b03166014611802565b6117cb836020611802565b6040516020016117dc929190612604565b60408051601f198184030181529082905262461bcd60e51b82526108b691600401612673565b60606000611811836002612686565b61181c90600261269d565b6001600160401b0381111561183357611833611d75565b6040519080825280601f01601f19166020018201604052801561185d576020820181803683370190505b509050600360fc1b816000815181106118785761187861220f565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106118a7576118a761220f565b60200101906001600160f81b031916908160001a90535060006118cb846002612686565b6118d690600161269d565b90505b600181111561194e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061190a5761190a61220f565b1a60f81b8282815181106119205761192061220f565b60200101906001600160f81b031916908160001a90535060049490941c93611947816126b0565b90506118d9565b5083156117975760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108b6565b82805482825590600052602060002090601f01602090048101928215611a365791602002820160005b83821115611a0757833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026119c6565b8015611a345782816101000a81549060ff0219169055600101602081600001049283019260010302611a07565b505b50611a42929150611a46565b5090565b5b80821115611a425760008155600101611a47565b600060208284031215611a6d57600080fd5b81356001600160e01b03198116811461179757600080fd5b6001600160a01b03811681146113ed57600080fd5b8035611aa581611a85565b919050565b600080600060608486031215611abf57600080fd5b8335611aca81611a85565b92506020840135611ada81611a85565b929592945050506040919091013590565b600060208284031215611afd57600080fd5b5035919050565b60005b83811015611b1f578181015183820152602001611b07565b50506000910152565b60008151808452611b40816020860160208601611b04565b601f01601f19169290920160200192915050565b6001600160a01b038a16815263ffffffff89811660208301528816604082015261012060608201819052600090611b8d90830189611b28565b608083018890526001600160401b03871660a08401526001600160a01b0386811660c0850152851660e0840152828103610100840152611bcd8185611b28565b9c9b505050505050505050505050565b600060208284031215611bef57600080fd5b813561179781611a85565b803563ffffffff81168114611aa557600080fd5b600060208284031215611c2057600080fd5b61179782611bfa565b602080825282518282018190526000918401906040840190835b81811015611c6457835160ff16835260209384019390920191600101611c43565b509095945050505050565b60008060408385031215611c8257600080fd5b823591506020830135611c9481611a85565b809150509250929050565b80356001600160401b0381168114611aa557600080fd5b60008083601f840112611cc857600080fd5b5081356001600160401b03811115611cdf57600080fd5b602083019150836020828501011115611cf757600080fd5b9250929050565b600080600080600060808688031215611d1657600080fd5b611d1f86611bfa565b9450611d2d60208701611c9f565b93506040860135611d3d81611a85565b925060608601356001600160401b03811115611d5857600080fd5b611d6488828901611cb6565b969995985093965092949392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611db357611db3611d75565b604052919050565b600060808284031215611dcd57600080fd5b50919050565b6000806000806000806000806000806101808b8d031215611df357600080fd5b611dfc8b611bfa565b9950611e0a60208c01611bfa565b985060408b0135975060608b01356001600160401b03811115611e2c57600080fd5b8b01601f81018d13611e3d57600080fd5b80356001600160401b03811115611e5657611e56611d75565b611e69601f8201601f1916602001611d8b565b8181528e6020838501011115611e7e57600080fd5b8160208401602083013760009181016020019190915297505060808b01359550611eaa60a08c01611c9f565b9450611eb860c08c01611a9a565b935060e08b01356001600160401b03811115611ed357600080fd5b611edf8d828e01611cb6565b9094509250611ef490508c6101008d01611dbb565b90509295989b9194979a5092959850565b60008060208385031215611f1857600080fd5b82356001600160401b03811115611f2e57600080fd5b8301601f81018513611f3f57600080fd5b80356001600160401b03811115611f5557600080fd5b8560208260071b8401011115611f6a57600080fd5b6020919091019590945092505050565b60006040828403128015611f8d57600080fd5b50604080519081016001600160401b0381118282101715611fb057611fb0611d75565b604052823581526020928301359281019290925250919050565b600080600060408486031215611fdf57600080fd5b83356001600160401b03811115611ff557600080fd5b840160a0818703121561200757600080fd5b925060208401356001600160401b0381111561202257600080fd5b61202e86828701611cb6565b9497909650939450505050565b803561ffff81168114611aa557600080fd5b60006020828403121561205f57600080fd5b6117978261203b565b60008060006040848603121561207d57600080fd5b61208684611bfa565b925060208401356001600160401b038111156120a157600080fd5b8401601f810186136120b257600080fd5b80356001600160401b038111156120c857600080fd5b8660208260051b84010111156120dd57600080fd5b939660209190910195509293505050565b80151581146113ed57600080fd5b6000806040838503121561210f57600080fd5b61211883611bfa565b91506020830135611c94816120ee565b6000806040838503121561213b57600080fd5b61214483611bfa565b946020939093013593505050565b600181811c9082168061216657607f821691505b602082108103611dcd57634e487b7160e01b600052602260045260246000fd5b888a8237600089820163ffffffff60e01b8a60e01b16815263ffffffff60e01b8960e01b16600482015287600882015286516121c9816028840160208b01611b04565b6028910190810195909552505060c09190911b6001600160c01b031916604883015260601b6bffffffffffffffffffffffff191660508201526064019695505050505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561223757600080fd5b61179782611c9f565b80356001600160801b0381168114611aa557600080fd5b60006020828403121561226957600080fd5b61179782612240565b6020808252810182905260008360408301825b858110156122f95763ffffffff61229b84611bfa565b1682526001600160401b036122b260208501611c9f565b16602083015261ffff6122c76040850161203b565b1660408301526001600160801b036122e160608501612240565b16606083015260809283019290910190600101612285565b5095945050505050565b634e487b7160e01b600052601160045260246000fd5b60006001820161232b5761232b612303565b5060010190565b6000808335601e1984360301811261234957600080fd5b8301803591506001600160401b0382111561236357600080fd5b602001915036819003821315611cf757600080fd5b601f821115610c1e57806000526020600020601f840160051c8101602085101561239f5750805b601f840160051c820191505b818110156123bf57600081556001016123ab565b5050505050565b6001600160401b038311156123dd576123dd611d75565b6123f1836123eb8354612152565b83612378565b6000601f841160018114612425576000851561240d5750838201355b600019600387901b1c1916600186901b1783556123bf565b600083815260209020601f19861690835b828110156124565786850135825560209485019460019092019101612436565b50868210156124735760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b63ffffffff818116838216019081111561083857610838612303565b6101008152846101008201528486610120830137600061012086830181019190915260208083018690528435604080850191909152908501356060840152601f8701601f19168301909101908401356124f981611a85565b6001600160a01b03166080830152606084013561251581611a85565b6001600160a01b031660a0830152825460c0830152600183015460e08301529695505050505050565b60006020828403121561255057600080fd5b8151611797816120ee565b6000806040838503121561256e57600080fd5b825161257981611a85565b6020840151909250611c94816120ee565b60608152600061259d6060830186611b28565b90508360208301526001600160401b0383166040830152949350505050565b600080858511156125cc57600080fd5b838611156125d957600080fd5b5050820193919092039150565b8035602083101561083857600019602084900360031b1b1692915050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351612636816017850160208801611b04565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612667816028840160208801611b04565b01602801949350505050565b6020815260006117976020830184611b28565b808202811582820484141761083857610838612303565b8082018082111561083857610838612303565b6000816126bf576126bf612303565b50600019019056fea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220d08ee3a9e609f697aa5f4f9eee22905e49d544fe57edb0dd29a675542547d1bd64736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006edce65403992e310a62460808c4b910d972f10f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c03f31fd86a9077785b7bcf6598ce3598fa91113000000000000000000000000b3e790273f0a89e53d2c20dd4dfe82aa00bbf91b", + "nonce": "0x3f", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x25c489", + "logs": [ + { + "address": "0xb1593cfcf8bfce9aa28865c04eb5c30df0f47784", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x7f343a25e7dfce3b5344dd69be55db3c10200dc1cd3ae0e7884c62d790612558", + "blockNumber": "0xd7256c", + "transactionHash": "0x74770fb30963bec7f7e6fa06126ec953e3e910fc1823c969b6d4f857cdefe6a5", + "transactionIndex": "0x1", + "logIndex": "0x3", + "removed": false + }, + { + "address": "0xb1593cfcf8bfce9aa28865c04eb5c30df0f47784", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0xa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x7f343a25e7dfce3b5344dd69be55db3c10200dc1cd3ae0e7884c62d790612558", + "blockNumber": "0xd7256c", + "transactionHash": "0x74770fb30963bec7f7e6fa06126ec953e3e910fc1823c969b6d4f857cdefe6a5", + "transactionIndex": "0x1", + "logIndex": "0x4", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x000000000000000000000000915a2284d28bd93de7d6f31173b981204bb666e6" + ], + "data": "0x000000000000000000000000000000000000000000000000010ddb593c90483000000000000000000000000000000000000000000000000078bd6335cd5cdbc90000000000000000000000000000000000000000000004b35a2374254cc18a4600000000000000000000000000000000000000000000000077af87dc90cc93990000000000000000000000000000000000000000000004b35b314f7e8951d276", + "blockHash": "0x7f343a25e7dfce3b5344dd69be55db3c10200dc1cd3ae0e7884c62d790612558", + "blockNumber": "0xd7256c", + "transactionHash": "0x74770fb30963bec7f7e6fa06126ec953e3e910fc1823c969b6d4f857cdefe6a5", + "transactionIndex": "0x1", + "logIndex": "0x5", + "removed": false + } + ], + "logsBloom": "0x0000000400000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000008800000000020000000000100000000000000000000020000000000000000000800000000000000000880000000000000000000200000000000000000000000004000000000000000000000000000000000200400000000000000000000000000000000000000000000001000000000004200000000000000000001000000000000000002000000400100100000000020000000000000000000000000000000000000000000400000000000000000100000", + "type": "0x2", + "transactionHash": "0x74770fb30963bec7f7e6fa06126ec953e3e910fc1823c969b6d4f857cdefe6a5", + "transactionIndex": "0x1", + "blockHash": "0x7f343a25e7dfce3b5344dd69be55db3c10200dc1cd3ae0e7884c62d790612558", + "blockNumber": "0xd7256c", + "gasUsed": "0x243fe8", + "effectiveGasPrice": "0x771c44d0d", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0xb1593cfcf8bfce9aa28865c04eb5c30df0f47784" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730911238, + "chain": 80002, + "commit": "4f0aff3" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeployDvn.s.sol/421614/run-1730458129.json b/contracts/evm/broadcast/DeployDvn.s.sol/421614/run-1730458129.json new file mode 100644 index 00000000..a474da15 --- /dev/null +++ b/contracts/evm/broadcast/DeployDvn.s.sol/421614/run-1730458129.json @@ -0,0 +1,88 @@ +{ + "transactions": [ + { + "hash": "0x9a6c6382a20204728ef16a116ee7a36445ca977c952558e9c8f9fe31e33fa204", + "transactionType": "CREATE", + "contractName": "NuffDVN", + "contractAddress": "0x5b2968ad28cf12417ff1ed5612a6a4e2d9aba7d2", + "function": null, + "arguments": [ + "0", + "0x6EDCE65403992e310A62460808c4b910D972f10f", + "1", + "1", + "0xC03f31fD86a9077785b7bCf6598Ce3598Fa91113", + "0xb3e790273f0A89e53d2C20dD4dFe82AA00bbf91b" + ], + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x29da43", + "value": "0x0", + "input": "0x60a060405234801561001057600080fd5b506040516121b93803806121b983398101604081905261002f91610233565b6003869055600180546001600160a01b0319166001600160a01b0387169081179091556040805163416ecebf60e01b8152905163416ecebf916004808201926020929091908290030181865afa15801561008d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b191906102b8565b63ffffffff1660805260068054600160a01b600160f01b031916600160a01b61ffff871602600160b01b600160f01b03191617600160b01b6001600160401b03861602179055600780546001600160a01b03199081166001600160a01b03858116919091179092556008805490911691831691909117905561013460003361016b565b5061015f7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217753361016b565b505050505050506102e5565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661020d576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101c53390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610211565b5060005b92915050565b80516001600160a01b038116811461022e57600080fd5b919050565b60008060008060008060c0878903121561024c57600080fd5b8651955061025c60208801610217565b9450604087015161ffff8116811461027357600080fd5b60608801519094506001600160401b038116811461029057600080fd5b925061029e60808801610217565b91506102ac60a08801610217565b90509295509295509295565b6000602082840312156102ca57600080fd5b815163ffffffff811681146102de57600080fd5b9392505050565b608051611eb26103076000396000818161054301526110000152611eb26000f3fe60806040526004361061021f5760003560e01c8063724e78da1161012e578063b3129896116100ab578063d547741f1161006f578063d547741f14610783578063f3acc68d146107a3578063f48ab8f2146107c3578063f49ef505146107fe578063fbd9b28b1461082e57600080fd5b8063b3129896146106e3578063bb37d00c14610703578063c358de0a14610723578063c5fdf39c14610743578063cd88b9031461076357600080fd5b806391d14854116100f257806391d14854146105f457806395d376d7146106145780639e94496514610627578063a217fddf146106ac578063a98586e1146106c157600080fd5b8063724e78da146105115780637260753714610531578063741bef1a1461057a57806375b238fc146105b25780638f355c60146105d457600080fd5b806329681700116101bc578063493c7e6411610180578063493c7e641461048557806351cc784f1461049b57806352d3b871146104b157806354093c65146104d15780635b4c2500146104f157600080fd5b806329681700146103cf5780632cf450ee146103ff5780632f2ff15d1461041f57806330bb3aac1461043f57806336568abe1461046557600080fd5b8062bf2e801461022457806301ffc9a71461025e5780631095b6d71461028e5780631703a018146102b0578063180aedf3146102ef5780631fad0b4c1461032457806320ac2ece14610344578063248a9ca31461036457806326e67a37146103a2575b600080fd5b34801561023057600080fd5b5060065461024690600160a01b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561026a57600080fd5b5061027e6102793660046114e0565b610860565b6040519015158152602001610255565b34801561029a57600080fd5b506102ae6102a9366004611526565b610897565b005b3480156102bc57600080fd5b506006546102d790600160b01b90046001600160401b031681565b6040516001600160401b039091168152602001610255565b3480156102fb57600080fd5b5061030f61030a366004611563565b6109ba565b604051610255999897969594939291906115c2565b34801561033057600080fd5b506102ae61033f36600461164b565b610b43565b34801561035057600080fd5b506102ae61035f36600461164b565b610b7e565b34801561037057600080fd5b5061039461037f366004611563565b60009081526020819052604090206001015490565b604051908152602001610255565b3480156103ae57600080fd5b506103c26103bd36600461167a565b610bb9565b6040516102559190611695565b3480156103db57600080fd5b5061027e6103ea36600461167a565b600a6020526000908152604090205460ff1681565b34801561040b57600080fd5b506102ae61041a366004611563565b610c40565b34801561042b57600080fd5b506102ae61043a3660046116db565b610c5e565b34801561044b57600080fd5b5061039461045a366004611766565b506007949350505050565b34801561047157600080fd5b506102ae6104803660046116db565b610c89565b34801561049157600080fd5b5061039460035481565b3480156104a757600080fd5b5061039460025481565b3480156104bd57600080fd5b506102ae6104cc3660046117db565b610cc1565b3480156104dd57600080fd5b506102ae6104ec366004611896565b610e31565b3480156104fd57600080fd5b506102ae61050c36600461164b565b610e58565b34801561051d57600080fd5b506102ae61052c36600461164b565b610e93565b34801561053d57600080fd5b506105657f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610255565b34801561058657600080fd5b5060075461059a906001600160a01b031681565b6040516001600160a01b039091168152602001610255565b3480156105be57600080fd5b50610394600080516020611e5d83398151915281565b3480156105e057600080fd5b506102ae6105ef3660046118e6565b610ece565b34801561060057600080fd5b5061027e61060f3660046116db565b610f4c565b6103946106223660046119c2565b610f75565b34801561063357600080fd5b5061067b61064236600461167a565b600b602052600090815260409020546001600160401b03811690600160401b810461ffff1690600160501b90046001600160801b031683565b604080516001600160401b03909416845261ffff90921660208401526001600160801b031690820152606001610255565b3480156106b857600080fd5b50610394600081565b3480156106cd57600080fd5b50610394600080516020611e3d83398151915281565b3480156106ef57600080fd5b5060015461059a906001600160a01b031681565b34801561070f57600080fd5b5060085461059a906001600160a01b031681565b34801561072f57600080fd5b506102ae61073e366004611a45565b6111b7565b34801561074f57600080fd5b5060065461059a906001600160a01b031681565b34801561076f57600080fd5b506102ae61077e366004611a60565b6111f2565b34801561078f57600080fd5b506102ae61079e3660046116db565b611212565b3480156107af57600080fd5b506102ae6107be366004611ae6565b611237565b3480156107cf57600080fd5b5061027e6107de366004611b22565b600c60209081526000928352604080842090915290825290205460ff1681565b34801561080a57600080fd5b50600454600554610819919082565b60408051928352602083019190915201610255565b34801561083a57600080fd5b5061084e610849366004611b22565b611278565b60405160ff9091168152602001610255565b60006001600160e01b03198216637965db0b60e01b148061089157506301ffc9a760e01b6001600160e01b03198316145b92915050565b600080516020611e5d8339815191526108af816112bb565b6108c7600080516020611e3d83398151915285610f4c565b6109065760405162461bcd60e51b815260206004820152600b60248201526a24b73b30b634b2103634b160a91b60448201526064015b60405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b15801561095057600080fd5b505af1158015610964573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b600960205260009081526040902080546001820180546001600160a01b0383169363ffffffff600160a01b8504811694600160c01b9004169290916109fe90611b4c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2a90611b4c565b8015610a775780601f10610a4c57610100808354040283529160200191610a77565b820191906000526020600020905b815481529060010190602001808311610a5a57829003601f168201915b50505050600283015460038401546004850154600586018054959693956001600160401b0384169550600160401b9093046001600160a01b0390811694921692610ac090611b4c565b80601f0160208091040260200160405190810160405280929190818152602001828054610aec90611b4c565b8015610b395780601f10610b0e57610100808354040283529160200191610b39565b820191906000526020600020905b815481529060010190602001808311610b1c57829003601f168201915b5050505050905089565b600080516020611e5d833981519152610b5b816112bb565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020611e5d833981519152610b96816112bb565b50600880546001600160a01b0319166001600160a01b0392909216919091179055565b63ffffffff81166000908152600d6020908152604091829020805483518184028101840190945280845260609392830182828015610c3457602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610c055790505b50505050509050919050565b600080516020611e5d833981519152610c58816112bb565b50600355565b600082815260208190526040902060010154610c79816112bb565b610c8383836112c8565b50505050565b6001600160a01b0381163314610cb25760405163334bd91960e11b815260040160405180910390fd5b610cbc828261135a565b505050565b600080516020611e5d833981519152610cd9816112bb565b60005b82811015610df25736848483818110610cf757610cf7611b86565b90506080020190506040518060600160405280826020016020810190610d1d9190611b9c565b6001600160401b03168152602001610d3b6060840160408501611a45565b61ffff168152602001610d546080840160608501611bce565b6001600160801b03169052600b6000610d70602085018561167a565b63ffffffff1681526020808201929092526040908101600020835181549385015194909201516001600160801b0316600160501b02600160501b600160d01b031961ffff909516600160401b0269ffffffffffffffffffff199094166001600160401b0390931692909217929092179290921691909117905550600101610cdc565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051610e24929190611be9565b60405180910390a1505050565b600080516020611e5d833981519152610e49816112bb565b50805160045560200151600555565b600080516020611e5d833981519152610e70816112bb565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020611e5d833981519152610eab816112bb565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b3068929eee149b4bd212685403610eed5763ab143c066000526004601cfd5b3068929eee149b4bd21268556040805163ffffffff88168152602081018790527f33d9faf7f95795c8d5bd00585df49c5e70f8c4c8b9b11ed439fb144db238e5c7910160405180910390a13868929eee149b4bd2126855505050505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60003068929eee149b4bd212685403610f965763ab143c066000526004601cfd5b3068929eee149b4bd2126855600080516020611e3d833981519152610fba816112bb565b6000600260008154610fcb90611c7a565b9182905550600081815260096020908152604090912080546001600160c01b0319163363ffffffff60a01b191617600160a01b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16021781559192506110389088018861167a565b815463ffffffff91909116600160c01b0263ffffffff60c01b199091161781556110656020880188611ca1565b6001830191611075919083611d35565b50604087013560028201556110906080880160608901611b9c565b60038201805467ffffffffffffffff19166001600160401b03929092169190911790556110c360a088016080890161164b565b6003820180546001600160a01b0392909216600160401b02600160401b600160e01b03199092169190911790556111056111006020890189611ca1565b6113c5565b6004820180546001600160a01b0319166001600160a01b039290921691909117905560058101611136868883611d35565b50604051828152600b94507fa34614e1f25aade4e7abdcc77ae23ea2ea54c27f927e9060a39d5efe3f71adeb9060200160405180910390a16040518481527f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a15050503868929eee149b4bd21268559392505050565b600080516020611e5d8339815191526111cf816112bb565b506006805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b63ffffffff83166000908152600d60205260409020610c83908383611422565b60008281526020819052604090206001015461122d816112bb565b610c83838361135a565b600080516020611e5d83398151915261124f816112bb565b5063ffffffff919091166000908152600a60205260409020805460ff1916911515919091179055565b600d602052816000526040600020818154811061129457600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b6112c581336113e5565b50565b60006112d48383610f4c565b611352576000838152602081815260408083206001600160a01b03861684529091529020805460ff1916600117905561130a3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610891565b506000610891565b60006113668383610f4c565b15611352576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610891565b60006113d5605160318486611df4565b6113de91611e1e565b9392505050565b6113ef8282610f4c565b61141e5760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016108fd565b5050565b82805482825590600052602060002090601f016020900481019282156114bb5791602002820160005b8382111561148c57833560ff1683826101000a81548160ff021916908360ff160217905550926020019260010160208160000104928301926001030261144b565b80156114b95782816101000a81549060ff021916905560010160208160000104928301926001030261148c565b505b506114c79291506114cb565b5090565b5b808211156114c757600081556001016114cc565b6000602082840312156114f257600080fd5b81356001600160e01b0319811681146113de57600080fd5b80356001600160a01b038116811461152157600080fd5b919050565b60008060006060848603121561153b57600080fd5b6115448461150a565b92506115526020850161150a565b929592945050506040919091013590565b60006020828403121561157557600080fd5b5035919050565b6000815180845260005b818110156115a257602081850181015186830182015201611586565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b038a16815263ffffffff898116602083015288166040820152610120606082018190526000906115fb9083018961157c565b608083018890526001600160401b03871660a08401526001600160a01b0386811660c0850152851660e084015282810361010084015261163b818561157c565b9c9b505050505050505050505050565b60006020828403121561165d57600080fd5b6113de8261150a565b803563ffffffff8116811461152157600080fd5b60006020828403121561168c57600080fd5b6113de82611666565b602080825282518282018190526000918401906040840190835b818110156116d057835160ff168352602093840193909201916001016116af565b509095945050505050565b600080604083850312156116ee57600080fd5b823591506116fe6020840161150a565b90509250929050565b80356001600160401b038116811461152157600080fd5b60008083601f84011261173057600080fd5b5081356001600160401b0381111561174757600080fd5b60208301915083602082850101111561175f57600080fd5b9250929050565b60008060008060006080868803121561177e57600080fd5b61178786611666565b945061179560208701611707565b93506117a36040870161150a565b925060608601356001600160401b038111156117be57600080fd5b6117ca8882890161171e565b969995985093965092949392505050565b600080602083850312156117ee57600080fd5b82356001600160401b0381111561180457600080fd5b8301601f8101851361181557600080fd5b80356001600160401b0381111561182b57600080fd5b8560208260071b840101111561184057600080fd5b6020919091019590945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561188e5761188e611850565b604052919050565b600060408284031280156118a957600080fd5b50604080519081016001600160401b03811182821017156118cc576118cc611850565b604052823581526020928301359281019290925250919050565b60008060008060008060c087890312156118ff57600080fd5b61190887611666565b95506020870135945060408701356001600160401b0381111561192a57600080fd5b8701601f8101891361193b57600080fd5b80356001600160401b0381111561195457611954611850565b611967601f8201601f1916602001611866565b8181528a602083850101111561197c57600080fd5b81602084016020830137600091810160200191909152945050606087013592506119a860808801611707565b91506119b660a0880161150a565b90509295509295509295565b6000806000604084860312156119d757600080fd5b83356001600160401b038111156119ed57600080fd5b840160a081870312156119ff57600080fd5b925060208401356001600160401b03811115611a1a57600080fd5b611a268682870161171e565b9497909650939450505050565b803561ffff8116811461152157600080fd5b600060208284031215611a5757600080fd5b6113de82611a33565b600080600060408486031215611a7557600080fd5b611a7e84611666565b925060208401356001600160401b03811115611a9957600080fd5b8401601f81018613611aaa57600080fd5b80356001600160401b03811115611ac057600080fd5b8660208260051b8401011115611ad557600080fd5b939660209190910195509293505050565b60008060408385031215611af957600080fd5b611b0283611666565b915060208301358015158114611b1757600080fd5b809150509250929050565b60008060408385031215611b3557600080fd5b611b3e83611666565b946020939093013593505050565b600181811c90821680611b6057607f821691505b602082108103611b8057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611bae57600080fd5b6113de82611707565b80356001600160801b038116811461152157600080fd5b600060208284031215611be057600080fd5b6113de82611bb7565b6020808252810182905260008360408301825b85811015611c705763ffffffff611c1284611666565b1682526001600160401b03611c2960208501611707565b16602083015261ffff611c3e60408501611a33565b1660408301526001600160801b03611c5860608501611bb7565b16606083015260809283019290910190600101611bfc565b5095945050505050565b600060018201611c9a57634e487b7160e01b600052601160045260246000fd5b5060010190565b6000808335601e19843603018112611cb857600080fd5b8301803591506001600160401b03821115611cd257600080fd5b60200191503681900382131561175f57600080fd5b601f821115610cbc57806000526020600020601f840160051c81016020851015611d0e5750805b601f840160051c820191505b81811015611d2e5760008155600101611d1a565b5050505050565b6001600160401b03831115611d4c57611d4c611850565b611d6083611d5a8354611b4c565b83611ce7565b6000601f841160018114611d945760008515611d7c5750838201355b600019600387901b1c1916600186901b178355611d2e565b600083815260209020601f19861690835b82811015611dc55786850135825560209485019460019092019101611da5565b5086821015611de25760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60008085851115611e0457600080fd5b83861115611e1157600080fd5b5050820193919092039150565b8035602083101561089157600019602084900360031b1b169291505056fe724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19dea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a26469706673582212207480a3a059a908a83ec12131b36efd2ce41baa2ab0eb8a74d823ce93e550373e64736f6c634300081a003300000000000000000000000000000000000000000000000000000000000000000000000000000000000000006edce65403992e310a62460808c4b910d972f10f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c03f31fd86a9077785b7bcf6598ce3598fa91113000000000000000000000000b3e790273f0a89e53d2c20dd4dfe82aa00bbf91b", + "nonce": "0x23", + "chainId": "0x66eee" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x1fa15c", + "logs": [ + { + "address": "0x5b2968ad28cf12417ff1ed5612a6a4e2d9aba7d2", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x72d03007b8a448c429c8866f90b159485cfdee60c3b153c0fb99e22b983b6c44", + "blockNumber": "0x5927767", + "transactionHash": "0x9a6c6382a20204728ef16a116ee7a36445ca977c952558e9c8f9fe31e33fa204", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + }, + { + "address": "0x5b2968ad28cf12417ff1ed5612a6a4e2d9aba7d2", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0xa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x72d03007b8a448c429c8866f90b159485cfdee60c3b153c0fb99e22b983b6c44", + "blockNumber": "0x5927767", + "transactionHash": "0x9a6c6382a20204728ef16a116ee7a36445ca977c952558e9c8f9fe31e33fa204", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + } + ], + "logsBloom": "0x00000004000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000020000000000000000000800000000000000000800000000000008000000a00000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000400100000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x9a6c6382a20204728ef16a116ee7a36445ca977c952558e9c8f9fe31e33fa204", + "transactionIndex": "0x1", + "blockHash": "0x72d03007b8a448c429c8866f90b159485cfdee60c3b153c0fb99e22b983b6c44", + "blockNumber": "0x5927767", + "gasUsed": "0x1fa15c", + "effectiveGasPrice": "0x5f5e100", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0x5b2968ad28cf12417ff1ed5612a6a4e2d9aba7d2", + "gasUsedForL1": "0x28a24", + "l1BlockNumber": "0x6aa754" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730458129, + "chain": 421614, + "commit": "ac971d2" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeployDvn.s.sol/421614/run-1730796539.json b/contracts/evm/broadcast/DeployDvn.s.sol/421614/run-1730796539.json new file mode 100644 index 00000000..ac04d98d --- /dev/null +++ b/contracts/evm/broadcast/DeployDvn.s.sol/421614/run-1730796539.json @@ -0,0 +1,88 @@ +{ + "transactions": [ + { + "hash": "0x9c557d3a235a5802cf8192434ec8094e48310ab2ea8a1fdc693c5960727cdd35", + "transactionType": "CREATE", + "contractName": "NuffDVN", + "contractAddress": "0xf934fdea4ab0a3ddf29df3f0203131e7d5d7bc7e", + "function": null, + "arguments": [ + "(0, 0)", + "0x6EDCE65403992e310A62460808c4b910D972f10f", + "1", + "1", + "0xC03f31fD86a9077785b7bCf6598Ce3598Fa91113", + "0xb3e790273f0A89e53d2C20dD4dFe82AA00bbf91b" + ], + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x2f02ab", + "value": "0x0", + "input": "0x60a060405234801561001057600080fd5b5060405161272338038061272383398101604081905261002f91610263565b85516003556020808701516004908155600180546001600160a01b0319166001600160a01b0389169081179091556040805163416ecebf60e01b81529051919363416ecebf938281019391928290030181865afa158015610094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b89190610321565b63ffffffff1660805260058054600160a01b600160f01b031916600160a01b61ffff871602600160b01b600160f01b03191617600160b01b6001600160401b03861602179055600680546001600160a01b03199081166001600160a01b03858116919091179092556007805490911691831691909117905561013b600033610172565b506101667fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610172565b5050505050505061034e565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16610214576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101cc3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610218565b5060005b92915050565b80516001600160a01b038116811461023557600080fd5b919050565b805161ffff8116811461023557600080fd5b80516001600160401b038116811461023557600080fd5b60008060008060008086880360e081121561027d57600080fd5b604081121561028b57600080fd5b50604080519081016001600160401b03811182821017156102bc57634e487b7160e01b600052604160045260246000fd5b6040908152885182526020808a0151908301529096506102dd90880161021e565b94506102eb6060880161023a565b93506102f96080880161024c565b925061030760a0880161021e565b915061031560c0880161021e565b90509295509295509295565b60006020828403121561033357600080fd5b815163ffffffff8116811461034757600080fd5b9392505050565b6080516123a561037e600039600081816104f1015281816111610152818161167e01526116be01526123a56000f3fe6080604052600436106101e95760003560e01c8063724e78da11610113578063b3129896116100ab578063d547741f1161006f578063d547741f14610711578063f3acc68d14610731578063f48ab8f214610751578063f49ef5051461078c578063fbd9b28b146107bc57600080fd5b8063b312989614610671578063bb37d00c14610691578063c358de0a146106b1578063c5fdf39c146106d1578063cd88b903146106f157600080fd5b8063724e78da146104bf57806372607537146104df578063741bef1a1461052857806375b238fc1461056057806391d148541461058257806395d376d7146105a25780639e944965146105b5578063a217fddf1461063a578063a98586e11461064f57600080fd5b8063296817001161018657806329681700146103995780632f2ff15d146103c957806330bb3aac146103e957806336568abe1461040957806351cc784f1461042957806352d3b8711461043f57806354093c651461045f5780635580c07d1461047f5780635b4c25001461049f57600080fd5b8062bf2e80146101ee57806301ffc9a7146102285780631095b6d7146102585780631703a0181461027a578063180aedf3146102b95780631fad0b4c146102ee57806320ac2ece1461030e578063248a9ca31461032e57806326e67a371461036c575b600080fd5b3480156101fa57600080fd5b5060055461021090600160a01b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561023457600080fd5b50610248610243366004611815565b6107ee565b604051901515815260200161021f565b34801561026457600080fd5b5061027861027336600461185b565b610825565b005b34801561028657600080fd5b506005546102a190600160b01b90046001600160401b031681565b6040516001600160401b03909116815260200161021f565b3480156102c557600080fd5b506102d96102d4366004611898565b610948565b60405161021f99989796959493929190611901565b3480156102fa57600080fd5b5061027861030936600461198a565b610ad1565b34801561031a57600080fd5b5061027861032936600461198a565b610b0c565b34801561033a57600080fd5b5061035e610349366004611898565b60009081526020819052604090206001015490565b60405190815260200161021f565b34801561037857600080fd5b5061038c6103873660046119b9565b610b47565b60405161021f91906119d4565b3480156103a557600080fd5b506102486103b43660046119b9565b60096020526000908152604090205460ff1681565b3480156103d557600080fd5b506102786103e4366004611a1a565b610bce565b3480156103f557600080fd5b5061035e610404366004611aa5565b610bf9565b34801561041557600080fd5b50610278610424366004611a1a565b610ce0565b34801561043557600080fd5b5061035e60025481565b34801561044b57600080fd5b5061027861045a366004611b1a565b610d18565b34801561046b57600080fd5b5061027861047a366004611bd5565b610e88565b34801561048b57600080fd5b5061027861049a366004611c25565b610eaf565b3480156104ab57600080fd5b506102786104ba36600461198a565b611037565b3480156104cb57600080fd5b506102786104da36600461198a565b611072565b3480156104eb57600080fd5b506105137f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161021f565b34801561053457600080fd5b50600654610548906001600160a01b031681565b6040516001600160a01b03909116815260200161021f565b34801561056c57600080fd5b5061035e60008051602061235083398151915281565b34801561058e57600080fd5b5061024861059d366004611a1a565b6110ad565b61035e6105b0366004611d13565b6110d6565b3480156105c157600080fd5b506106096105d03660046119b9565b600a602052600090815260409020546001600160401b03811690600160401b810461ffff1690600160501b90046001600160801b031683565b604080516001600160401b03909416845261ffff90921660208401526001600160801b03169082015260600161021f565b34801561064657600080fd5b5061035e600081565b34801561065b57600080fd5b5061035e60008051602061233083398151915281565b34801561067d57600080fd5b50600154610548906001600160a01b031681565b34801561069d57600080fd5b50600754610548906001600160a01b031681565b3480156106bd57600080fd5b506102786106cc366004611d96565b611465565b3480156106dd57600080fd5b50600554610548906001600160a01b031681565b3480156106fd57600080fd5b5061027861070c366004611db1565b6114a0565b34801561071d57600080fd5b5061027861072c366004611a1a565b6114c0565b34801561073d57600080fd5b5061027861074c366004611e37565b6114e5565b34801561075d57600080fd5b5061024861076c366004611e73565b600b60209081526000928352604080842090915290825290205460ff1681565b34801561079857600080fd5b506003546004546107a7919082565b6040805192835260208301919091520161021f565b3480156107c857600080fd5b506107dc6107d7366004611e73565b611526565b60405160ff909116815260200161021f565b60006001600160e01b03198216637965db0b60e01b148061081f57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008051602061235083398151915261083d81611569565b610855600080516020612330833981519152856110ad565b6108945760405162461bcd60e51b815260206004820152600b60248201526a24b73b30b634b2103634b160a91b60448201526064015b60405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b1580156108de57600080fd5b505af11580156108f2573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b600860205260009081526040902080546001820180546001600160a01b0383169363ffffffff600160a01b8504811694600160c01b90041692909161098c90611e9d565b80601f01602080910402602001604051908101604052809291908181526020018280546109b890611e9d565b8015610a055780601f106109da57610100808354040283529160200191610a05565b820191906000526020600020905b8154815290600101906020018083116109e857829003601f168201915b50505050600283015460038401546004850154600586018054959693956001600160401b0384169550600160401b9093046001600160a01b0390811694921692610a4e90611e9d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7a90611e9d565b8015610ac75780601f10610a9c57610100808354040283529160200191610ac7565b820191906000526020600020905b815481529060010190602001808311610aaa57829003601f168201915b5050505050905089565b600080516020612350833981519152610ae981611569565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020612350833981519152610b2481611569565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b63ffffffff81166000908152600c6020908152604091829020805483518184028101840190945280845260609392830182828015610bc257602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610b935790505b50505050509050919050565b600082815260208190526040902060010154610be981611569565b610bf38383611576565b50505050565b6040805160c0810182526006546001600160a01b03908116825263ffffffff881660208084018290526001600160401b03898116858701528884166060860152600554600160b01b81049091166080860152600160a01b900461ffff1660a08501526007546000928352600a9091528482209451637bfa20a960e01b81529194921691637bfa20a991610c9491859189908990600401611f00565b602060405180830381865afa158015610cb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd59190611fbd565b979650505050505050565b6001600160a01b0381163314610d095760405163334bd91960e11b815260040160405180910390fd5b610d138282611608565b505050565b600080516020612350833981519152610d3081611569565b60005b82811015610e495736848483818110610d4e57610d4e611fd6565b90506080020190506040518060600160405280826020016020810190610d749190611fec565b6001600160401b03168152602001610d926060840160408501611d96565b61ffff168152602001610dab608084016060850161201e565b6001600160801b03169052600a6000610dc760208501856119b9565b63ffffffff1681526020808201929092526040908101600020835181549385015194909201516001600160801b0316600160501b02600160501b600160d01b031961ffff909516600160401b0269ffffffffffffffffffff199094166001600160401b0390931692909217929092179290921691909117905550600101610d33565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051610e7b929190612039565b60405180910390a1505050565b600080516020612350833981519152610ea081611569565b50805160035560200151600455565b3068929eee149b4bd212685403610ece5763ab143c066000526004601cfd5b3068929eee149b4bd2126855610ee386611673565b610f205760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908191cdd115a5960921b604482015260640161088b565b63ffffffff87166000908152600b6020908152604080832088845290915290205460ff1615610f915760405162461bcd60e51b815260206004820152601d60248201527f737263206a6f62496420697320616c7265616479207665726966696564000000604482015260640161088b565b63ffffffff87166000908152600b60209081526040808320888452825291829020805460ff191660011790559051610fd7918991899189918991899189918991016120ca565b60408051808303601f1901905281815263ffffffff89168252602082018790527f33d9faf7f95795c8d5bd00585df49c5e70f8c4c8b9b11ed439fb144db238e5c7910160405180910390a13868929eee149b4bd212685550505050505050565b60008051602061235083398151915261104f81611569565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008051602061235083398151915261108a81611569565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60003068929eee149b4bd2126854036110f75763ab143c066000526004601cfd5b3068929eee149b4bd212685560008051602061233083398151915261111b81611569565b600060026000815461112c9061215f565b9182905550600081815260086020908152604090912080546001600160c01b0319163363ffffffff60a01b191617600160a01b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff1602178155919250611199908801886119b9565b815463ffffffff91909116600160c01b0263ffffffff60c01b199091161781556111c66020880188612178565b60018301916111d691908361220c565b50604087013560028201556111f16080880160608901611fec565b60038201805467ffffffffffffffff19166001600160401b039290921691909117905561122460a088016080890161198a565b6003820180546001600160a01b0392909216600160401b02600160401b600160e01b03199092169190911790556112666112616020890189612178565b6116fa565b6004820180546001600160a01b0319166001600160a01b03929092169190911790556005810161129786888361220c565b506040805160c081019091526006546001600160a01b031681526000906020808201906112c6908b018b6119b9565b63ffffffff1681526020016112e160808b0160608c01611fec565b6001600160401b031681526020016112ff60a08b0160808c0161198a565b6001600160a01b039081168252600554600160b01b81046001600160401b0316602080850191909152600160a01b90910461ffff16604090930192909252600754929350919091169063df2b057e908390600a90600090611362908e018e6119b9565b63ffffffff1663ffffffff1681526020019081526020016000208a8a6040518563ffffffff1660e01b815260040161139d9493929190611f00565b6020604051808303816000875af11580156113bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e09190611fbd565b94507fa34614e1f25aade4e7abdcc77ae23ea2ea54c27f927e9060a39d5efe3f71adeb8360405161141391815260200190565b60405180910390a16040518581527f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a1505050503868929eee149b4bd21268559392505050565b60008051602061235083398151915261147d81611569565b506005805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b63ffffffff83166000908152600c60205260409020610bf3908383611757565b6000828152602081905260409020600101546114db81611569565b610bf38383611608565b6000805160206123508339815191526114fd81611569565b5063ffffffff919091166000908152600960205260409020805460ff1916911515919091179055565b600c602052816000526040600020818154811061154257600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b611573813361171a565b50565b600061158283836110ad565b611600576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556115b83390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161081f565b50600061081f565b600061161483836110ad565b15611600576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161081f565b60008163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff1614806116e557506116b6826175306122cb565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16145b156116f257506001919050565b506000919050565b600061170a6051603184866122e7565b61171391612311565b9392505050565b61172482826110ad565b6117535760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440161088b565b5050565b82805482825590600052602060002090601f016020900481019282156117f05791602002820160005b838211156117c157833560ff1683826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302611780565b80156117ee5782816101000a81549060ff02191690556001016020816000010492830192600103026117c1565b505b506117fc929150611800565b5090565b5b808211156117fc5760008155600101611801565b60006020828403121561182757600080fd5b81356001600160e01b03198116811461171357600080fd5b80356001600160a01b038116811461185657600080fd5b919050565b60008060006060848603121561187057600080fd5b6118798461183f565b92506118876020850161183f565b929592945050506040919091013590565b6000602082840312156118aa57600080fd5b5035919050565b60005b838110156118cc5781810151838201526020016118b4565b50506000910152565b600081518084526118ed8160208601602086016118b1565b601f01601f19169290920160200192915050565b6001600160a01b038a16815263ffffffff8981166020830152881660408201526101206060820181905260009061193a908301896118d5565b608083018890526001600160401b03871660a08401526001600160a01b0386811660c0850152851660e084015282810361010084015261197a81856118d5565b9c9b505050505050505050505050565b60006020828403121561199c57600080fd5b6117138261183f565b803563ffffffff8116811461185657600080fd5b6000602082840312156119cb57600080fd5b611713826119a5565b602080825282518282018190526000918401906040840190835b81811015611a0f57835160ff168352602093840193909201916001016119ee565b509095945050505050565b60008060408385031215611a2d57600080fd5b82359150611a3d6020840161183f565b90509250929050565b80356001600160401b038116811461185657600080fd5b60008083601f840112611a6f57600080fd5b5081356001600160401b03811115611a8657600080fd5b602083019150836020828501011115611a9e57600080fd5b9250929050565b600080600080600060808688031215611abd57600080fd5b611ac6866119a5565b9450611ad460208701611a46565b9350611ae26040870161183f565b925060608601356001600160401b03811115611afd57600080fd5b611b0988828901611a5d565b969995985093965092949392505050565b60008060208385031215611b2d57600080fd5b82356001600160401b03811115611b4357600080fd5b8301601f81018513611b5457600080fd5b80356001600160401b03811115611b6a57600080fd5b8560208260071b8401011115611b7f57600080fd5b6020919091019590945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611bcd57611bcd611b8f565b604052919050565b60006040828403128015611be857600080fd5b50604080519081016001600160401b0381118282101715611c0b57611c0b611b8f565b604052823581526020928301359281019290925250919050565b600080600080600080600060e0888a031215611c4057600080fd5b611c49886119a5565b9650611c57602089016119a5565b95506040880135945060608801356001600160401b03811115611c7957600080fd5b8801601f81018a13611c8a57600080fd5b80356001600160401b03811115611ca357611ca3611b8f565b611cb6601f8201601f1916602001611ba5565b8181528b6020838501011115611ccb57600080fd5b8160208401602083013760009181016020019190915294505060808801359250611cf760a08901611a46565b9150611d0560c0890161183f565b905092959891949750929550565b600080600060408486031215611d2857600080fd5b83356001600160401b03811115611d3e57600080fd5b840160a08187031215611d5057600080fd5b925060208401356001600160401b03811115611d6b57600080fd5b611d7786828701611a5d565b9497909650939450505050565b803561ffff8116811461185657600080fd5b600060208284031215611da857600080fd5b61171382611d84565b600080600060408486031215611dc657600080fd5b611dcf846119a5565b925060208401356001600160401b03811115611dea57600080fd5b8401601f81018613611dfb57600080fd5b80356001600160401b03811115611e1157600080fd5b8660208260051b8401011115611e2657600080fd5b939660209190910195509293505050565b60008060408385031215611e4a57600080fd5b611e53836119a5565b915060208301358015158114611e6857600080fd5b809150509250929050565b60008060408385031215611e8657600080fd5b611e8f836119a5565b946020939093013593505050565b600181811c90821680611eb157607f821691505b602082108103611ed157634e487b7160e01b600052602260045260246000fd5b50919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b03855116815263ffffffff60208601511660208201526001600160401b03604086015116604082015260018060a01b0360608601511660608201526001600160401b03608086015116608082015261ffff60a08601511660a0820152611f9960c0820185546001600160401b0381168252604081811c61ffff16602084015260509190911c6001600160801b0316910152565b6101406101208201526000611fb361014083018486611ed7565b9695505050505050565b600060208284031215611fcf57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611ffe57600080fd5b61171382611a46565b80356001600160801b038116811461185657600080fd5b60006020828403121561203057600080fd5b61171382612007565b6020808252810182905260008360408301825b858110156120c05763ffffffff612062846119a5565b1682526001600160401b0361207960208501611a46565b16602083015261ffff61208e60408501611d84565b1660408301526001600160801b036120a860608501612007565b1660608301526080928301929091019060010161204c565b5095945050505050565b63ffffffff60e01b8860e01b16815263ffffffff60e01b8760e01b16600482015285600882015260008551612106816028850160208a016118b1565b602892019182019490945260c09290921b6001600160c01b031916604883015260601b6bffffffffffffffffffffffff1916605082015260640195945050505050565b634e487b7160e01b600052601160045260246000fd5b60006001820161217157612171612149565b5060010190565b6000808335601e1984360301811261218f57600080fd5b8301803591506001600160401b038211156121a957600080fd5b602001915036819003821315611a9e57600080fd5b601f821115610d1357806000526020600020601f840160051c810160208510156121e55750805b601f840160051c820191505b8181101561220557600081556001016121f1565b5050505050565b6001600160401b0383111561222357612223611b8f565b612237836122318354611e9d565b836121be565b6000601f84116001811461226b57600085156122535750838201355b600019600387901b1c1916600186901b178355612205565b600083815260209020601f19861690835b8281101561229c578685013582556020948501946001909201910161227c565b50868210156122b95760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b63ffffffff818116838216019081111561081f5761081f612149565b600080858511156122f757600080fd5b8386111561230457600080fd5b5050820193919092039150565b8035602083101561081f57600019602084900360031b1b169291505056fe724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19dea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220fbe5f848742a50c9a41c386d830b9ab6fd6236867ba154c6a61fd4620e82ba2f64736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006edce65403992e310a62460808c4b910d972f10f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c03f31fd86a9077785b7bcf6598ce3598fa91113000000000000000000000000b3e790273f0a89e53d2c20dd4dfe82aa00bbf91b", + "nonce": "0x4d", + "chainId": "0x66eee" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x25500e", + "logs": [ + { + "address": "0xf934fdea4ab0a3ddf29df3f0203131e7d5d7bc7e", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x8d7349383b3839b875741f078175d1d490e0ef7999cd9bc9c418da03289ec59a", + "blockNumber": "0x5a2cbb7", + "transactionHash": "0x9c557d3a235a5802cf8192434ec8094e48310ab2ea8a1fdc693c5960727cdd35", + "transactionIndex": "0x3", + "logIndex": "0x2", + "removed": false + }, + { + "address": "0xf934fdea4ab0a3ddf29df3f0203131e7d5d7bc7e", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0xa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x8d7349383b3839b875741f078175d1d490e0ef7999cd9bc9c418da03289ec59a", + "blockNumber": "0x5a2cbb7", + "transactionHash": "0x9c557d3a235a5802cf8192434ec8094e48310ab2ea8a1fdc693c5960727cdd35", + "transactionIndex": "0x3", + "logIndex": "0x3", + "removed": false + } + ], + "logsBloom": "0x00000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000020000000000000000000000000000000000000000000000000000000000000020000000000000000008000000000000020000000000000000000800000004000000000800000000000000000000200000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000400100000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x9c557d3a235a5802cf8192434ec8094e48310ab2ea8a1fdc693c5960727cdd35", + "transactionIndex": "0x3", + "blockHash": "0x8d7349383b3839b875741f078175d1d490e0ef7999cd9bc9c418da03289ec59a", + "blockNumber": "0x5a2cbb7", + "gasUsed": "0x239662", + "effectiveGasPrice": "0x5f5e100", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0xf934fdea4ab0a3ddf29df3f0203131e7d5d7bc7e", + "gasUsedForL1": "0x2431a", + "l1BlockNumber": "0x6b0d8c" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730796539, + "chain": 421614, + "commit": "d4e1224" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeployDvn.s.sol/421614/run-1730797449.json b/contracts/evm/broadcast/DeployDvn.s.sol/421614/run-1730797449.json new file mode 100644 index 00000000..f355f20d --- /dev/null +++ b/contracts/evm/broadcast/DeployDvn.s.sol/421614/run-1730797449.json @@ -0,0 +1,88 @@ +{ + "transactions": [ + { + "hash": "0xd303f292178a0e953bb0ce93f237de2e4fe1cd837291cfa10e2e0c63cc33f055", + "transactionType": "CREATE", + "contractName": "NuffDVN", + "contractAddress": "0xf1765844e35626e154fb359f4fcc9a12b1b95303", + "function": null, + "arguments": [ + "(0, 0)", + "0x6EDCE65403992e310A62460808c4b910D972f10f", + "1", + "1", + "0xC03f31fD86a9077785b7bCf6598Ce3598Fa91113", + "0xb3e790273f0A89e53d2C20dD4dFe82AA00bbf91b" + ], + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x2ae9fd", + "value": "0x0", + "input": "0x60a060405234801561001057600080fd5b5060405161239538038061239583398101604081905261002f91610263565b85516003556020808701516004908155600180546001600160a01b0319166001600160a01b0389169081179091556040805163416ecebf60e01b81529051919363416ecebf938281019391928290030181865afa158015610094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b89190610321565b63ffffffff1660805260058054600160a01b600160f01b031916600160a01b61ffff871602600160b01b600160f01b03191617600160b01b6001600160401b03861602179055600680546001600160a01b03199081166001600160a01b03858116919091179092556007805490911691831691909117905561013b600033610172565b506101667fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610172565b5050505050505061034e565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16610214576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101cc3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610218565b5060005b92915050565b80516001600160a01b038116811461023557600080fd5b919050565b805161ffff8116811461023557600080fd5b80516001600160401b038116811461023557600080fd5b60008060008060008086880360e081121561027d57600080fd5b604081121561028b57600080fd5b50604080519081016001600160401b03811182821017156102bc57634e487b7160e01b600052604160045260246000fd5b6040908152885182526020808a0151908301529096506102dd90880161021e565b94506102eb6060880161023a565b93506102f96080880161024c565b925061030760a0880161021e565b915061031560c0880161021e565b90509295509295509295565b60006020828403121561033357600080fd5b815163ffffffff8116811461034757600080fd5b9392505050565b60805161201e610377600039600081816104f1015281816114cc015261150c015261201e6000f3fe6080604052600436106101e95760003560e01c8063724e78da11610113578063b3129896116100ab578063d547741f1161006f578063d547741f14610711578063f3acc68d14610731578063f48ab8f214610751578063f49ef5051461078c578063fbd9b28b146107bc57600080fd5b8063b312989614610671578063bb37d00c14610691578063c358de0a146106b1578063c5fdf39c146106d1578063cd88b903146106f157600080fd5b8063724e78da146104bf57806372607537146104df578063741bef1a1461052857806375b238fc1461056057806391d148541461058257806395d376d7146105a25780639e944965146105b5578063a217fddf1461063a578063a98586e11461064f57600080fd5b8063296817001161018657806329681700146103995780632f2ff15d146103c957806330bb3aac146103e957806336568abe1461040957806351cc784f1461042957806352d3b8711461043f57806354093c651461045f5780635580c07d1461047f5780635b4c25001461049f57600080fd5b8062bf2e80146101ee57806301ffc9a7146102285780631095b6d7146102585780631703a0181461027a578063180aedf3146102b95780631fad0b4c146102ee57806320ac2ece1461030e578063248a9ca31461032e57806326e67a371461036c575b600080fd5b3480156101fa57600080fd5b5060055461021090600160a01b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561023457600080fd5b50610248610243366004611643565b6107ee565b604051901515815260200161021f565b34801561026457600080fd5b50610278610273366004611690565b610825565b005b34801561028657600080fd5b506005546102a190600160b01b90046001600160401b031681565b6040516001600160401b03909116815260200161021f565b3480156102c557600080fd5b506102d96102d43660046116cd565b610948565b60405161021f99989796959493929190611736565b3480156102fa57600080fd5b506102786103093660046117bf565b610ad1565b34801561031a57600080fd5b506102786103293660046117bf565b610b0c565b34801561033a57600080fd5b5061035e6103493660046116cd565b60009081526020819052604090206001015490565b60405190815260200161021f565b34801561037857600080fd5b5061038c6103873660046117ee565b610b47565b60405161021f9190611809565b3480156103a557600080fd5b506102486103b43660046117ee565b60096020526000908152604090205460ff1681565b3480156103d557600080fd5b506102786103e436600461184f565b610bce565b3480156103f557600080fd5b5061035e6104043660046118da565b610bf9565b34801561041557600080fd5b5061027861042436600461184f565b610ce0565b34801561043557600080fd5b5061035e60025481565b34801561044b57600080fd5b5061027861045a36600461194f565b610d18565b34801561046b57600080fd5b5061027861047a366004611a0a565b610e88565b34801561048b57600080fd5b5061027861049a366004611a5a565b610eaf565b3480156104ab57600080fd5b506102786104ba3660046117bf565b611037565b3480156104cb57600080fd5b506102786104da3660046117bf565b611072565b3480156104eb57600080fd5b506105137f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161021f565b34801561053457600080fd5b50600654610548906001600160a01b031681565b6040516001600160a01b03909116815260200161021f565b34801561056c57600080fd5b5061035e600080516020611fc983398151915281565b34801561058e57600080fd5b5061024861059d36600461184f565b6110ad565b61035e6105b0366004611b48565b6110d6565b3480156105c157600080fd5b506106096105d03660046117ee565b600a602052600090815260409020546001600160401b03811690600160401b810461ffff1690600160501b90046001600160801b031683565b604080516001600160401b03909416845261ffff90921660208401526001600160801b03169082015260600161021f565b34801561064657600080fd5b5061035e600081565b34801561065b57600080fd5b5061035e600080516020611fa983398151915281565b34801561067d57600080fd5b50600154610548906001600160a01b031681565b34801561069d57600080fd5b50600754610548906001600160a01b031681565b3480156106bd57600080fd5b506102786106cc366004611bcb565b6112b3565b3480156106dd57600080fd5b50600554610548906001600160a01b031681565b3480156106fd57600080fd5b5061027861070c366004611be6565b6112ee565b34801561071d57600080fd5b5061027861072c36600461184f565b61130e565b34801561073d57600080fd5b5061027861074c366004611c6c565b611333565b34801561075d57600080fd5b5061024861076c366004611ca8565b600b60209081526000928352604080842090915290825290205460ff1681565b34801561079857600080fd5b506003546004546107a7919082565b6040805192835260208301919091520161021f565b3480156107c857600080fd5b506107dc6107d7366004611ca8565b611374565b60405160ff909116815260200161021f565b60006001600160e01b03198216637965db0b60e01b148061081f57506301ffc9a760e01b6001600160e01b03198316145b92915050565b600080516020611fc983398151915261083d816113b7565b610855600080516020611fa9833981519152856110ad565b6108945760405162461bcd60e51b815260206004820152600b60248201526a24b73b30b634b2103634b160a91b60448201526064015b60405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b1580156108de57600080fd5b505af11580156108f2573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b600860205260009081526040902080546001820180546001600160a01b0383169363ffffffff600160a01b8504811694600160c01b90041692909161098c90611cd2565b80601f01602080910402602001604051908101604052809291908181526020018280546109b890611cd2565b8015610a055780601f106109da57610100808354040283529160200191610a05565b820191906000526020600020905b8154815290600101906020018083116109e857829003601f168201915b50505050600283015460038401546004850154600586018054959693956001600160401b0384169550600160401b9093046001600160a01b0390811694921692610a4e90611cd2565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7a90611cd2565b8015610ac75780601f10610a9c57610100808354040283529160200191610ac7565b820191906000526020600020905b815481529060010190602001808311610aaa57829003601f168201915b5050505050905089565b600080516020611fc9833981519152610ae9816113b7565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020611fc9833981519152610b24816113b7565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b63ffffffff81166000908152600c6020908152604091829020805483518184028101840190945280845260609392830182828015610bc257602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610b935790505b50505050509050919050565b600082815260208190526040902060010154610be9816113b7565b610bf383836113c4565b50505050565b6040805160c0810182526006546001600160a01b03908116825263ffffffff881660208084018290526001600160401b03898116858701528884166060860152600554600160b01b81049091166080860152600160a01b900461ffff1660a08501526007546000928352600a9091528482209451637bfa20a960e01b81529194921691637bfa20a991610c9491859189908990600401611d35565b602060405180830381865afa158015610cb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd59190611df2565b979650505050505050565b6001600160a01b0381163314610d095760405163334bd91960e11b815260040160405180910390fd5b610d138282611456565b505050565b600080516020611fc9833981519152610d30816113b7565b60005b82811015610e495736848483818110610d4e57610d4e611e0b565b90506080020190506040518060600160405280826020016020810190610d749190611e21565b6001600160401b03168152602001610d926060840160408501611bcb565b61ffff168152602001610dab6080840160608501611e53565b6001600160801b03169052600a6000610dc760208501856117ee565b63ffffffff1681526020808201929092526040908101600020835181549385015194909201516001600160801b0316600160501b02600160501b600160d01b031961ffff909516600160401b0269ffffffffffffffffffff199094166001600160401b0390931692909217929092179290921691909117905550600101610d33565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051610e7b929190611e6e565b60405180910390a1505050565b600080516020611fc9833981519152610ea0816113b7565b50805160035560200151600455565b3068929eee149b4bd212685403610ece5763ab143c066000526004601cfd5b3068929eee149b4bd2126855610ee3866114c1565b610f205760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908191cdd115a5960921b604482015260640161088b565b63ffffffff87166000908152600b6020908152604080832088845290915290205460ff1615610f915760405162461bcd60e51b815260206004820152601d60248201527f737263206a6f62496420697320616c7265616479207665726966696564000000604482015260640161088b565b63ffffffff87166000908152600b60209081526040808320888452825291829020805460ff191660011790559051610fd791899189918991899189918991899101611eff565b60408051808303601f1901905281815263ffffffff89168252602082018790527f33d9faf7f95795c8d5bd00585df49c5e70f8c4c8b9b11ed439fb144db238e5c7910160405180910390a13868929eee149b4bd212685550505050505050565b600080516020611fc983398151915261104f816113b7565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020611fc983398151915261108a816113b7565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60003068929eee149b4bd2126854036110f75763ab143c066000526004601cfd5b3068929eee149b4bd2126855600080516020611fa983398151915261111b816113b7565b6040805160c081019091526006546001600160a01b03168152600090602080820190611149908901896117ee565b63ffffffff1681526020016111646080890160608a01611e21565b6001600160401b0316815260200161118260a0890160808a016117bf565b6001600160a01b039081168252600554600160b01b81046001600160401b0316602080850191909152600160a01b90910461ffff16604090930192909252600754929350919091169063df2b057e908390600a906000906111e5908c018c6117ee565b63ffffffff1663ffffffff16815260200190815260200160002088886040518563ffffffff1660e01b81526004016112209493929190611d35565b6020604051808303816000875af115801561123f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112639190611df2565b92507f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef8360405161129691815260200190565b60405180910390a150503868929eee149b4bd21268559392505050565b600080516020611fc98339815191526112cb816113b7565b506005805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b63ffffffff83166000908152600c60205260409020610bf3908383611585565b600082815260208190526040902060010154611329816113b7565b610bf38383611456565b600080516020611fc983398151915261134b816113b7565b5063ffffffff919091166000908152600960205260409020805460ff1916911515919091179055565b600c602052816000526040600020818154811061139057600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b6113c18133611548565b50565b60006113d083836110ad565b61144e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556114063390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161081f565b50600061081f565b600061146283836110ad565b1561144e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161081f565b60008163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff161480611533575061150482617530611f7e565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16145b1561154057506001919050565b506000919050565b61155282826110ad565b6115815760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440161088b565b5050565b82805482825590600052602060002090601f0160209004810192821561161e5791602002820160005b838211156115ef57833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026115ae565b801561161c5782816101000a81549060ff02191690556001016020816000010492830192600103026115ef565b505b5061162a92915061162e565b5090565b5b8082111561162a576000815560010161162f565b60006020828403121561165557600080fd5b81356001600160e01b03198116811461166d57600080fd5b9392505050565b80356001600160a01b038116811461168b57600080fd5b919050565b6000806000606084860312156116a557600080fd5b6116ae84611674565b92506116bc60208501611674565b929592945050506040919091013590565b6000602082840312156116df57600080fd5b5035919050565b60005b838110156117015781810151838201526020016116e9565b50506000910152565b600081518084526117228160208601602086016116e6565b601f01601f19169290920160200192915050565b6001600160a01b038a16815263ffffffff8981166020830152881660408201526101206060820181905260009061176f9083018961170a565b608083018890526001600160401b03871660a08401526001600160a01b0386811660c0850152851660e08401528281036101008401526117af818561170a565b9c9b505050505050505050505050565b6000602082840312156117d157600080fd5b61166d82611674565b803563ffffffff8116811461168b57600080fd5b60006020828403121561180057600080fd5b61166d826117da565b602080825282518282018190526000918401906040840190835b8181101561184457835160ff16835260209384019390920191600101611823565b509095945050505050565b6000806040838503121561186257600080fd5b8235915061187260208401611674565b90509250929050565b80356001600160401b038116811461168b57600080fd5b60008083601f8401126118a457600080fd5b5081356001600160401b038111156118bb57600080fd5b6020830191508360208285010111156118d357600080fd5b9250929050565b6000806000806000608086880312156118f257600080fd5b6118fb866117da565b94506119096020870161187b565b935061191760408701611674565b925060608601356001600160401b0381111561193257600080fd5b61193e88828901611892565b969995985093965092949392505050565b6000806020838503121561196257600080fd5b82356001600160401b0381111561197857600080fd5b8301601f8101851361198957600080fd5b80356001600160401b0381111561199f57600080fd5b8560208260071b84010111156119b457600080fd5b6020919091019590945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611a0257611a026119c4565b604052919050565b60006040828403128015611a1d57600080fd5b50604080519081016001600160401b0381118282101715611a4057611a406119c4565b604052823581526020928301359281019290925250919050565b600080600080600080600060e0888a031215611a7557600080fd5b611a7e886117da565b9650611a8c602089016117da565b95506040880135945060608801356001600160401b03811115611aae57600080fd5b8801601f81018a13611abf57600080fd5b80356001600160401b03811115611ad857611ad86119c4565b611aeb601f8201601f19166020016119da565b8181528b6020838501011115611b0057600080fd5b8160208401602083013760009181016020019190915294505060808801359250611b2c60a0890161187b565b9150611b3a60c08901611674565b905092959891949750929550565b600080600060408486031215611b5d57600080fd5b83356001600160401b03811115611b7357600080fd5b840160a08187031215611b8557600080fd5b925060208401356001600160401b03811115611ba057600080fd5b611bac86828701611892565b9497909650939450505050565b803561ffff8116811461168b57600080fd5b600060208284031215611bdd57600080fd5b61166d82611bb9565b600080600060408486031215611bfb57600080fd5b611c04846117da565b925060208401356001600160401b03811115611c1f57600080fd5b8401601f81018613611c3057600080fd5b80356001600160401b03811115611c4657600080fd5b8660208260051b8401011115611c5b57600080fd5b939660209190910195509293505050565b60008060408385031215611c7f57600080fd5b611c88836117da565b915060208301358015158114611c9d57600080fd5b809150509250929050565b60008060408385031215611cbb57600080fd5b611cc4836117da565b946020939093013593505050565b600181811c90821680611ce657607f821691505b602082108103611d0657634e487b7160e01b600052602260045260246000fd5b50919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b03855116815263ffffffff60208601511660208201526001600160401b03604086015116604082015260018060a01b0360608601511660608201526001600160401b03608086015116608082015261ffff60a08601511660a0820152611dce60c0820185546001600160401b0381168252604081811c61ffff16602084015260509190911c6001600160801b0316910152565b6101406101208201526000611de861014083018486611d0c565b9695505050505050565b600060208284031215611e0457600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611e3357600080fd5b61166d8261187b565b80356001600160801b038116811461168b57600080fd5b600060208284031215611e6557600080fd5b61166d82611e3c565b6020808252810182905260008360408301825b85811015611ef55763ffffffff611e97846117da565b1682526001600160401b03611eae6020850161187b565b16602083015261ffff611ec360408501611bb9565b1660408301526001600160801b03611edd60608501611e3c565b16606083015260809283019290910190600101611e81565b5095945050505050565b63ffffffff60e01b8860e01b16815263ffffffff60e01b8760e01b16600482015285600882015260008551611f3b816028850160208a016116e6565b602892019182019490945260c09290921b6001600160c01b031916604883015260601b6bffffffffffffffffffffffff1916605082015260640195945050505050565b63ffffffff818116838216019081111561081f57634e487b7160e01b600052601160045260246000fdfe724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19dea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220aa6085295249fea5de77ebb21c14eb4119a069286912c1c8b6a85a2a1b91e75764736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006edce65403992e310a62460808c4b910d972f10f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c03f31fd86a9077785b7bcf6598ce3598fa91113000000000000000000000000b3e790273f0a89e53d2c20dd4dfe82aa00bbf91b", + "nonce": "0x4f", + "chainId": "0x66eee" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x218ce0", + "logs": [ + { + "address": "0xf1765844e35626e154fb359f4fcc9a12b1b95303", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0xd79b2c00e55c335c0d5c9b85b79f69faf90744aeba64e0547a3bbd4770d96ff6", + "blockNumber": "0x5a2d829", + "transactionHash": "0xd303f292178a0e953bb0ce93f237de2e4fe1cd837291cfa10e2e0c63cc33f055", + "transactionIndex": "0x2", + "logIndex": "0x0", + "removed": false + }, + { + "address": "0xf1765844e35626e154fb359f4fcc9a12b1b95303", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0xa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0xd79b2c00e55c335c0d5c9b85b79f69faf90744aeba64e0547a3bbd4770d96ff6", + "blockNumber": "0x5a2d829", + "transactionHash": "0xd303f292178a0e953bb0ce93f237de2e4fe1cd837291cfa10e2e0c63cc33f055", + "transactionIndex": "0x2", + "logIndex": "0x1", + "removed": false + } + ], + "logsBloom": "0x00000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000100000000000000000000000000000000000000000000000000020000000000000000000000000000000020000000000000000000800000000000000000800000000000000000000200000000000000000000000004000000000008000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000400100000000000020000000000000000000000000000000400000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xd303f292178a0e953bb0ce93f237de2e4fe1cd837291cfa10e2e0c63cc33f055", + "transactionIndex": "0x2", + "blockHash": "0xd79b2c00e55c335c0d5c9b85b79f69faf90744aeba64e0547a3bbd4770d96ff6", + "blockNumber": "0x5a2d829", + "gasUsed": "0x207ad4", + "effectiveGasPrice": "0x5f5e100", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0xf1765844e35626e154fb359f4fcc9a12b1b95303", + "gasUsedForL1": "0x22059", + "l1BlockNumber": "0x6b0dce" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730797449, + "chain": 421614, + "commit": "d4e1224" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeployDvn.s.sol/421614/run-1730798313.json b/contracts/evm/broadcast/DeployDvn.s.sol/421614/run-1730798313.json new file mode 100644 index 00000000..4c264d74 --- /dev/null +++ b/contracts/evm/broadcast/DeployDvn.s.sol/421614/run-1730798313.json @@ -0,0 +1,88 @@ +{ + "transactions": [ + { + "hash": "0xf2fcd556647dfd5ca85fbe276e85f4f10eb1f351e9b825d06a0ead2fc7cd0385", + "transactionType": "CREATE", + "contractName": "NuffDVN", + "contractAddress": "0x36ec6ff7fbb82a688f5d060401dc801036dd1530", + "function": null, + "arguments": [ + "(0, 0)", + "0x6EDCE65403992e310A62460808c4b910D972f10f", + "1", + "1", + "0xC03f31fD86a9077785b7bCf6598Ce3598Fa91113", + "0xb3e790273f0A89e53d2C20dD4dFe82AA00bbf91b" + ], + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x297718", + "value": "0x0", + "input": "0x60a060405234801561001057600080fd5b5060405161206a38038061206a83398101604081905261002f91610263565b85516003556020808701516004908155600180546001600160a01b0319166001600160a01b0389169081179091556040805163416ecebf60e01b81529051919363416ecebf938281019391928290030181865afa158015610094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b89190610321565b63ffffffff1660805260058054600160a01b600160f01b031916600160a01b61ffff871602600160b01b600160f01b03191617600160b01b6001600160401b03861602179055600680546001600160a01b03199081166001600160a01b03858116919091179092556007805490911691831691909117905561013b600033610172565b506101667fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610172565b5050505050505061034e565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16610214576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101cc3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610218565b5060005b92915050565b80516001600160a01b038116811461023557600080fd5b919050565b805161ffff8116811461023557600080fd5b80516001600160401b038116811461023557600080fd5b60008060008060008086880360e081121561027d57600080fd5b604081121561028b57600080fd5b50604080519081016001600160401b03811182821017156102bc57634e487b7160e01b600052604160045260246000fd5b6040908152885182526020808a0151908301529096506102dd90880161021e565b94506102eb6060880161023a565b93506102f96080880161024c565b925061030760a0880161021e565b915061031560c0880161021e565b90509295509295509295565b60006020828403121561033357600080fd5b815163ffffffff8116811461034757600080fd5b9392505050565b608051611cf3610377600039600081816104f8015281816112a001526112e00152611cf36000f3fe6080604052600436106101e95760003560e01c8063724e78da11610113578063b3129896116100ab578063d547741f1161006f578063d547741f14610718578063f3acc68d14610738578063f48ab8f214610758578063f49ef50514610793578063fbd9b28b146107c357600080fd5b8063b312989614610678578063bb37d00c14610698578063c358de0a146106b8578063c5fdf39c146106d8578063cd88b903146106f857600080fd5b8063724e78da146104c657806372607537146104e6578063741bef1a1461052f57806375b238fc1461056757806391d148541461058957806395d376d7146105a95780639e944965146105bc578063a217fddf14610641578063a98586e11461065657600080fd5b8063296817001161018657806329681700146103995780632f2ff15d146103c957806330bb3aac146103e957806336568abe1461041057806351cc784f1461043057806352d3b8711461044657806354093c65146104665780635580c07d146104865780635b4c2500146104a657600080fd5b8062bf2e80146101ee57806301ffc9a7146102285780631095b6d7146102585780631703a0181461027a578063180aedf3146102b95780631fad0b4c146102ee57806320ac2ece1461030e578063248a9ca31461032e57806326e67a371461036c575b600080fd5b3480156101fa57600080fd5b5060055461021090600160a01b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561023457600080fd5b50610248610243366004611417565b6107f5565b604051901515815260200161021f565b34801561026457600080fd5b50610278610273366004611464565b61082c565b005b34801561028657600080fd5b506005546102a190600160b01b90046001600160401b031681565b6040516001600160401b03909116815260200161021f565b3480156102c557600080fd5b506102d96102d43660046114a1565b61094f565b60405161021f9998979695949392919061150a565b3480156102fa57600080fd5b50610278610309366004611593565b610ad8565b34801561031a57600080fd5b50610278610329366004611593565b610b13565b34801561033a57600080fd5b5061035e6103493660046114a1565b60009081526020819052604090206001015490565b60405190815260200161021f565b34801561037857600080fd5b5061038c6103873660046115c2565b610b4e565b60405161021f91906115dd565b3480156103a557600080fd5b506102486103b43660046115c2565b60096020526000908152604090205460ff1681565b3480156103d557600080fd5b506102786103e4366004611623565b610bd5565b3480156103f557600080fd5b5061035e6104043660046116ae565b506103e8949350505050565b34801561041c57600080fd5b5061027861042b366004611623565b610c00565b34801561043c57600080fd5b5061035e60025481565b34801561045257600080fd5b50610278610461366004611723565b610c38565b34801561047257600080fd5b506102786104813660046117de565b610da8565b34801561049257600080fd5b506102786104a136600461182e565b610dcf565b3480156104b257600080fd5b506102786104c1366004611593565b610f57565b3480156104d257600080fd5b506102786104e1366004611593565b610f92565b3480156104f257600080fd5b5061051a7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161021f565b34801561053b57600080fd5b5060065461054f906001600160a01b031681565b6040516001600160a01b03909116815260200161021f565b34801561057357600080fd5b5061035e600080516020611c9e83398151915281565b34801561059557600080fd5b506102486105a4366004611623565b610fcd565b61035e6105b736600461191c565b610ff6565b3480156105c857600080fd5b506106106105d73660046115c2565b600a602052600090815260409020546001600160401b03811690600160401b810461ffff1690600160501b90046001600160801b031683565b604080516001600160401b03909416845261ffff90921660208401526001600160801b03169082015260600161021f565b34801561064d57600080fd5b5061035e600081565b34801561066257600080fd5b5061035e600080516020611c7e83398151915281565b34801561068457600080fd5b5060015461054f906001600160a01b031681565b3480156106a457600080fd5b5060075461054f906001600160a01b031681565b3480156106c457600080fd5b506102786106d336600461199f565b611087565b3480156106e457600080fd5b5060055461054f906001600160a01b031681565b34801561070457600080fd5b506102786107133660046119ba565b6110c2565b34801561072457600080fd5b50610278610733366004611623565b6110e2565b34801561074457600080fd5b50610278610753366004611a40565b611107565b34801561076457600080fd5b50610248610773366004611a7c565b600b60209081526000928352604080842090915290825290205460ff1681565b34801561079f57600080fd5b506003546004546107ae919082565b6040805192835260208301919091520161021f565b3480156107cf57600080fd5b506107e36107de366004611a7c565b611148565b60405160ff909116815260200161021f565b60006001600160e01b03198216637965db0b60e01b148061082657506301ffc9a760e01b6001600160e01b03198316145b92915050565b600080516020611c9e8339815191526108448161118b565b61085c600080516020611c7e83398151915285610fcd565b61089b5760405162461bcd60e51b815260206004820152600b60248201526a24b73b30b634b2103634b160a91b60448201526064015b60405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b1580156108e557600080fd5b505af11580156108f9573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b600860205260009081526040902080546001820180546001600160a01b0383169363ffffffff600160a01b8504811694600160c01b90041692909161099390611aa6565b80601f01602080910402602001604051908101604052809291908181526020018280546109bf90611aa6565b8015610a0c5780601f106109e157610100808354040283529160200191610a0c565b820191906000526020600020905b8154815290600101906020018083116109ef57829003601f168201915b50505050600283015460038401546004850154600586018054959693956001600160401b0384169550600160401b9093046001600160a01b0390811694921692610a5590611aa6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8190611aa6565b8015610ace5780601f10610aa357610100808354040283529160200191610ace565b820191906000526020600020905b815481529060010190602001808311610ab157829003601f168201915b5050505050905089565b600080516020611c9e833981519152610af08161118b565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020611c9e833981519152610b2b8161118b565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b63ffffffff81166000908152600c6020908152604091829020805483518184028101840190945280845260609392830182828015610bc957602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610b9a5790505b50505050509050919050565b600082815260208190526040902060010154610bf08161118b565b610bfa8383611198565b50505050565b6001600160a01b0381163314610c295760405163334bd91960e11b815260040160405180910390fd5b610c33828261122a565b505050565b600080516020611c9e833981519152610c508161118b565b60005b82811015610d695736848483818110610c6e57610c6e611ae0565b90506080020190506040518060600160405280826020016020810190610c949190611af6565b6001600160401b03168152602001610cb2606084016040850161199f565b61ffff168152602001610ccb6080840160608501611b28565b6001600160801b03169052600a6000610ce760208501856115c2565b63ffffffff1681526020808201929092526040908101600020835181549385015194909201516001600160801b0316600160501b02600160501b600160d01b031961ffff909516600160401b0269ffffffffffffffffffff199094166001600160401b0390931692909217929092179290921691909117905550600101610c53565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051610d9b929190611b43565b60405180910390a1505050565b600080516020611c9e833981519152610dc08161118b565b50805160035560200151600455565b3068929eee149b4bd212685403610dee5763ab143c066000526004601cfd5b3068929eee149b4bd2126855610e0386611295565b610e405760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908191cdd115a5960921b6044820152606401610892565b63ffffffff87166000908152600b6020908152604080832088845290915290205460ff1615610eb15760405162461bcd60e51b815260206004820152601d60248201527f737263206a6f62496420697320616c72656164792076657269666965640000006044820152606401610892565b63ffffffff87166000908152600b60209081526040808320888452825291829020805460ff191660011790559051610ef791899189918991899189918991899101611bd4565b60408051808303601f1901905281815263ffffffff89168252602082018790527f33d9faf7f95795c8d5bd00585df49c5e70f8c4c8b9b11ed439fb144db238e5c7910160405180910390a13868929eee149b4bd212685550505050505050565b600080516020611c9e833981519152610f6f8161118b565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020611c9e833981519152610faa8161118b565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60003068929eee149b4bd2126854036110175763ab143c066000526004601cfd5b3068929eee149b4bd2126855600080516020611c7e83398151915261103b8161118b565b6040516103e880825292507f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a1503868929eee149b4bd21268559392505050565b600080516020611c9e83398151915261109f8161118b565b506005805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b63ffffffff83166000908152600c60205260409020610bfa908383611359565b6000828152602081905260409020600101546110fd8161118b565b610bfa838361122a565b600080516020611c9e83398151915261111f8161118b565b5063ffffffff919091166000908152600960205260409020805460ff1916911515919091179055565b600c602052816000526040600020818154811061116457600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b611195813361131c565b50565b60006111a48383610fcd565b611222576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556111da3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610826565b506000610826565b60006112368383610fcd565b15611222576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610826565b60008163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16148061130757506112d882617530611c53565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16145b1561131457506001919050565b506000919050565b6113268282610fcd565b6113555760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610892565b5050565b82805482825590600052602060002090601f016020900481019282156113f25791602002820160005b838211156113c357833560ff1683826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302611382565b80156113f05782816101000a81549060ff02191690556001016020816000010492830192600103026113c3565b505b506113fe929150611402565b5090565b5b808211156113fe5760008155600101611403565b60006020828403121561142957600080fd5b81356001600160e01b03198116811461144157600080fd5b9392505050565b80356001600160a01b038116811461145f57600080fd5b919050565b60008060006060848603121561147957600080fd5b61148284611448565b925061149060208501611448565b929592945050506040919091013590565b6000602082840312156114b357600080fd5b5035919050565b60005b838110156114d55781810151838201526020016114bd565b50506000910152565b600081518084526114f68160208601602086016114ba565b601f01601f19169290920160200192915050565b6001600160a01b038a16815263ffffffff89811660208301528816604082015261012060608201819052600090611543908301896114de565b608083018890526001600160401b03871660a08401526001600160a01b0386811660c0850152851660e084015282810361010084015261158381856114de565b9c9b505050505050505050505050565b6000602082840312156115a557600080fd5b61144182611448565b803563ffffffff8116811461145f57600080fd5b6000602082840312156115d457600080fd5b611441826115ae565b602080825282518282018190526000918401906040840190835b8181101561161857835160ff168352602093840193909201916001016115f7565b509095945050505050565b6000806040838503121561163657600080fd5b8235915061164660208401611448565b90509250929050565b80356001600160401b038116811461145f57600080fd5b60008083601f84011261167857600080fd5b5081356001600160401b0381111561168f57600080fd5b6020830191508360208285010111156116a757600080fd5b9250929050565b6000806000806000608086880312156116c657600080fd5b6116cf866115ae565b94506116dd6020870161164f565b93506116eb60408701611448565b925060608601356001600160401b0381111561170657600080fd5b61171288828901611666565b969995985093965092949392505050565b6000806020838503121561173657600080fd5b82356001600160401b0381111561174c57600080fd5b8301601f8101851361175d57600080fd5b80356001600160401b0381111561177357600080fd5b8560208260071b840101111561178857600080fd5b6020919091019590945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156117d6576117d6611798565b604052919050565b600060408284031280156117f157600080fd5b50604080519081016001600160401b038111828210171561181457611814611798565b604052823581526020928301359281019290925250919050565b600080600080600080600060e0888a03121561184957600080fd5b611852886115ae565b9650611860602089016115ae565b95506040880135945060608801356001600160401b0381111561188257600080fd5b8801601f81018a1361189357600080fd5b80356001600160401b038111156118ac576118ac611798565b6118bf601f8201601f19166020016117ae565b8181528b60208385010111156118d457600080fd5b816020840160208301376000918101602001919091529450506080880135925061190060a0890161164f565b915061190e60c08901611448565b905092959891949750929550565b60008060006040848603121561193157600080fd5b83356001600160401b0381111561194757600080fd5b840160a0818703121561195957600080fd5b925060208401356001600160401b0381111561197457600080fd5b61198086828701611666565b9497909650939450505050565b803561ffff8116811461145f57600080fd5b6000602082840312156119b157600080fd5b6114418261198d565b6000806000604084860312156119cf57600080fd5b6119d8846115ae565b925060208401356001600160401b038111156119f357600080fd5b8401601f81018613611a0457600080fd5b80356001600160401b03811115611a1a57600080fd5b8660208260051b8401011115611a2f57600080fd5b939660209190910195509293505050565b60008060408385031215611a5357600080fd5b611a5c836115ae565b915060208301358015158114611a7157600080fd5b809150509250929050565b60008060408385031215611a8f57600080fd5b611a98836115ae565b946020939093013593505050565b600181811c90821680611aba57607f821691505b602082108103611ada57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611b0857600080fd5b6114418261164f565b80356001600160801b038116811461145f57600080fd5b600060208284031215611b3a57600080fd5b61144182611b11565b6020808252810182905260008360408301825b85811015611bca5763ffffffff611b6c846115ae565b1682526001600160401b03611b836020850161164f565b16602083015261ffff611b986040850161198d565b1660408301526001600160801b03611bb260608501611b11565b16606083015260809283019290910190600101611b56565b5095945050505050565b63ffffffff60e01b8860e01b16815263ffffffff60e01b8760e01b16600482015285600882015260008551611c10816028850160208a016114ba565b602892019182019490945260c09290921b6001600160c01b031916604883015260601b6bffffffffffffffffffffffff1916605082015260640195945050505050565b63ffffffff818116838216019081111561082657634e487b7160e01b600052601160045260246000fdfe724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19dea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220166b6caddb9f4021f46722e2b1c53f377d997ee6106ea36bade6dc27e70d406a64736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006edce65403992e310a62460808c4b910d972f10f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c03f31fd86a9077785b7bcf6598ce3598fa91113000000000000000000000000b3e790273f0a89e53d2c20dd4dfe82aa00bbf91b", + "nonce": "0x51", + "chainId": "0x66eee" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x5a2711", + "logs": [ + { + "address": "0x36ec6ff7fbb82a688f5d060401dc801036dd1530", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0xb37617bbf9809751372de34a4a77c169e55dc0f6f91820f710036ba2b48d4971", + "blockNumber": "0x5a2e33a", + "transactionHash": "0xf2fcd556647dfd5ca85fbe276e85f4f10eb1f351e9b825d06a0ead2fc7cd0385", + "transactionIndex": "0x10", + "logIndex": "0x10", + "removed": false + }, + { + "address": "0x36ec6ff7fbb82a688f5d060401dc801036dd1530", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0xa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0xb37617bbf9809751372de34a4a77c169e55dc0f6f91820f710036ba2b48d4971", + "blockNumber": "0x5a2e33a", + "transactionHash": "0xf2fcd556647dfd5ca85fbe276e85f4f10eb1f351e9b825d06a0ead2fc7cd0385", + "transactionIndex": "0x10", + "logIndex": "0x11", + "removed": false + } + ], + "logsBloom": "0x00000004000000000000000000000000000000000000004000000000000000000000000000000000000000000000100000004000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000020000000000000000000800000000000000000800000000000000000000200000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000400900000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xf2fcd556647dfd5ca85fbe276e85f4f10eb1f351e9b825d06a0ead2fc7cd0385", + "transactionIndex": "0x10", + "blockHash": "0xb37617bbf9809751372de34a4a77c169e55dc0f6f91820f710036ba2b48d4971", + "blockNumber": "0x5a2e33a", + "gasUsed": "0x1eb515", + "effectiveGasPrice": "0x75a2bf0", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0x36ec6ff7fbb82a688f5d060401dc801036dd1530", + "gasUsedForL1": "0x30726", + "l1BlockNumber": "0x6b0e10" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730798313, + "chain": 421614, + "commit": "d4e1224" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeployDvn.s.sol/421614/run-1730798623.json b/contracts/evm/broadcast/DeployDvn.s.sol/421614/run-1730798623.json new file mode 100644 index 00000000..0d4228b7 --- /dev/null +++ b/contracts/evm/broadcast/DeployDvn.s.sol/421614/run-1730798623.json @@ -0,0 +1,88 @@ +{ + "transactions": [ + { + "hash": "0xe4e3d64a98312516f16ccb5ae155d70e6485b3ad2543ca2d93d45cf2dc94cbc3", + "transactionType": "CREATE", + "contractName": "NuffDVN", + "contractAddress": "0x71a1381db276b9636c1cb2542860c8d45be15fe1", + "function": null, + "arguments": [ + "(0, 0)", + "0x6EDCE65403992e310A62460808c4b910D972f10f", + "1", + "1", + "0xC03f31fD86a9077785b7bCf6598Ce3598Fa91113", + "0xb3e790273f0A89e53d2C20dD4dFe82AA00bbf91b" + ], + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x2791e3", + "value": "0x0", + "input": "0x60a060405234801561001057600080fd5b5060405161206a38038061206a83398101604081905261002f91610263565b85516003556020808701516004908155600180546001600160a01b0319166001600160a01b0389169081179091556040805163416ecebf60e01b81529051919363416ecebf938281019391928290030181865afa158015610094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b89190610321565b63ffffffff1660805260058054600160a01b600160f01b031916600160a01b61ffff871602600160b01b600160f01b03191617600160b01b6001600160401b03861602179055600680546001600160a01b03199081166001600160a01b03858116919091179092556007805490911691831691909117905561013b600033610172565b506101667fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610172565b5050505050505061034e565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16610214576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101cc3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610218565b5060005b92915050565b80516001600160a01b038116811461023557600080fd5b919050565b805161ffff8116811461023557600080fd5b80516001600160401b038116811461023557600080fd5b60008060008060008086880360e081121561027d57600080fd5b604081121561028b57600080fd5b50604080519081016001600160401b03811182821017156102bc57634e487b7160e01b600052604160045260246000fd5b6040908152885182526020808a0151908301529096506102dd90880161021e565b94506102eb6060880161023a565b93506102f96080880161024c565b925061030760a0880161021e565b915061031560c0880161021e565b90509295509295509295565b60006020828403121561033357600080fd5b815163ffffffff8116811461034757600080fd5b9392505050565b608051611cf3610377600039600081816104f8015281816112a001526112e00152611cf36000f3fe6080604052600436106101e95760003560e01c8063724e78da11610113578063b3129896116100ab578063d547741f1161006f578063d547741f14610718578063f3acc68d14610738578063f48ab8f214610758578063f49ef50514610793578063fbd9b28b146107c357600080fd5b8063b312989614610678578063bb37d00c14610698578063c358de0a146106b8578063c5fdf39c146106d8578063cd88b903146106f857600080fd5b8063724e78da146104c657806372607537146104e6578063741bef1a1461052f57806375b238fc1461056757806391d148541461058957806395d376d7146105a95780639e944965146105bc578063a217fddf14610641578063a98586e11461065657600080fd5b8063296817001161018657806329681700146103995780632f2ff15d146103c957806330bb3aac146103e957806336568abe1461041057806351cc784f1461043057806352d3b8711461044657806354093c65146104665780635580c07d146104865780635b4c2500146104a657600080fd5b8062bf2e80146101ee57806301ffc9a7146102285780631095b6d7146102585780631703a0181461027a578063180aedf3146102b95780631fad0b4c146102ee57806320ac2ece1461030e578063248a9ca31461032e57806326e67a371461036c575b600080fd5b3480156101fa57600080fd5b5060055461021090600160a01b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561023457600080fd5b50610248610243366004611417565b6107f5565b604051901515815260200161021f565b34801561026457600080fd5b50610278610273366004611464565b61082c565b005b34801561028657600080fd5b506005546102a190600160b01b90046001600160401b031681565b6040516001600160401b03909116815260200161021f565b3480156102c557600080fd5b506102d96102d43660046114a1565b61094f565b60405161021f9998979695949392919061150a565b3480156102fa57600080fd5b50610278610309366004611593565b610ad8565b34801561031a57600080fd5b50610278610329366004611593565b610b13565b34801561033a57600080fd5b5061035e6103493660046114a1565b60009081526020819052604090206001015490565b60405190815260200161021f565b34801561037857600080fd5b5061038c6103873660046115c2565b610b4e565b60405161021f91906115dd565b3480156103a557600080fd5b506102486103b43660046115c2565b60096020526000908152604090205460ff1681565b3480156103d557600080fd5b506102786103e4366004611623565b610bd5565b3480156103f557600080fd5b5061035e6104043660046116ae565b50612710949350505050565b34801561041c57600080fd5b5061027861042b366004611623565b610c00565b34801561043c57600080fd5b5061035e60025481565b34801561045257600080fd5b50610278610461366004611723565b610c38565b34801561047257600080fd5b506102786104813660046117de565b610da8565b34801561049257600080fd5b506102786104a136600461182e565b610dcf565b3480156104b257600080fd5b506102786104c1366004611593565b610f57565b3480156104d257600080fd5b506102786104e1366004611593565b610f92565b3480156104f257600080fd5b5061051a7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161021f565b34801561053b57600080fd5b5060065461054f906001600160a01b031681565b6040516001600160a01b03909116815260200161021f565b34801561057357600080fd5b5061035e600080516020611c9e83398151915281565b34801561059557600080fd5b506102486105a4366004611623565b610fcd565b61035e6105b736600461191c565b610ff6565b3480156105c857600080fd5b506106106105d73660046115c2565b600a602052600090815260409020546001600160401b03811690600160401b810461ffff1690600160501b90046001600160801b031683565b604080516001600160401b03909416845261ffff90921660208401526001600160801b03169082015260600161021f565b34801561064d57600080fd5b5061035e600081565b34801561066257600080fd5b5061035e600080516020611c7e83398151915281565b34801561068457600080fd5b5060015461054f906001600160a01b031681565b3480156106a457600080fd5b5060075461054f906001600160a01b031681565b3480156106c457600080fd5b506102786106d336600461199f565b611087565b3480156106e457600080fd5b5060055461054f906001600160a01b031681565b34801561070457600080fd5b506102786107133660046119ba565b6110c2565b34801561072457600080fd5b50610278610733366004611623565b6110e2565b34801561074457600080fd5b50610278610753366004611a40565b611107565b34801561076457600080fd5b50610248610773366004611a7c565b600b60209081526000928352604080842090915290825290205460ff1681565b34801561079f57600080fd5b506003546004546107ae919082565b6040805192835260208301919091520161021f565b3480156107cf57600080fd5b506107e36107de366004611a7c565b611148565b60405160ff909116815260200161021f565b60006001600160e01b03198216637965db0b60e01b148061082657506301ffc9a760e01b6001600160e01b03198316145b92915050565b600080516020611c9e8339815191526108448161118b565b61085c600080516020611c7e83398151915285610fcd565b61089b5760405162461bcd60e51b815260206004820152600b60248201526a24b73b30b634b2103634b160a91b60448201526064015b60405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b1580156108e557600080fd5b505af11580156108f9573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b600860205260009081526040902080546001820180546001600160a01b0383169363ffffffff600160a01b8504811694600160c01b90041692909161099390611aa6565b80601f01602080910402602001604051908101604052809291908181526020018280546109bf90611aa6565b8015610a0c5780601f106109e157610100808354040283529160200191610a0c565b820191906000526020600020905b8154815290600101906020018083116109ef57829003601f168201915b50505050600283015460038401546004850154600586018054959693956001600160401b0384169550600160401b9093046001600160a01b0390811694921692610a5590611aa6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8190611aa6565b8015610ace5780601f10610aa357610100808354040283529160200191610ace565b820191906000526020600020905b815481529060010190602001808311610ab157829003601f168201915b5050505050905089565b600080516020611c9e833981519152610af08161118b565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020611c9e833981519152610b2b8161118b565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b63ffffffff81166000908152600c6020908152604091829020805483518184028101840190945280845260609392830182828015610bc957602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610b9a5790505b50505050509050919050565b600082815260208190526040902060010154610bf08161118b565b610bfa8383611198565b50505050565b6001600160a01b0381163314610c295760405163334bd91960e11b815260040160405180910390fd5b610c33828261122a565b505050565b600080516020611c9e833981519152610c508161118b565b60005b82811015610d695736848483818110610c6e57610c6e611ae0565b90506080020190506040518060600160405280826020016020810190610c949190611af6565b6001600160401b03168152602001610cb2606084016040850161199f565b61ffff168152602001610ccb6080840160608501611b28565b6001600160801b03169052600a6000610ce760208501856115c2565b63ffffffff1681526020808201929092526040908101600020835181549385015194909201516001600160801b0316600160501b02600160501b600160d01b031961ffff909516600160401b0269ffffffffffffffffffff199094166001600160401b0390931692909217929092179290921691909117905550600101610c53565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051610d9b929190611b43565b60405180910390a1505050565b600080516020611c9e833981519152610dc08161118b565b50805160035560200151600455565b3068929eee149b4bd212685403610dee5763ab143c066000526004601cfd5b3068929eee149b4bd2126855610e0386611295565b610e405760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908191cdd115a5960921b6044820152606401610892565b63ffffffff87166000908152600b6020908152604080832088845290915290205460ff1615610eb15760405162461bcd60e51b815260206004820152601d60248201527f737263206a6f62496420697320616c72656164792076657269666965640000006044820152606401610892565b63ffffffff87166000908152600b60209081526040808320888452825291829020805460ff191660011790559051610ef791899189918991899189918991899101611bd4565b60408051808303601f1901905281815263ffffffff89168252602082018790527f33d9faf7f95795c8d5bd00585df49c5e70f8c4c8b9b11ed439fb144db238e5c7910160405180910390a13868929eee149b4bd212685550505050505050565b600080516020611c9e833981519152610f6f8161118b565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020611c9e833981519152610faa8161118b565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60003068929eee149b4bd2126854036110175763ab143c066000526004601cfd5b3068929eee149b4bd2126855600080516020611c7e83398151915261103b8161118b565b60405161271080825292507f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a1503868929eee149b4bd21268559392505050565b600080516020611c9e83398151915261109f8161118b565b506005805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b63ffffffff83166000908152600c60205260409020610bfa908383611359565b6000828152602081905260409020600101546110fd8161118b565b610bfa838361122a565b600080516020611c9e83398151915261111f8161118b565b5063ffffffff919091166000908152600960205260409020805460ff1916911515919091179055565b600c602052816000526040600020818154811061116457600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b611195813361131c565b50565b60006111a48383610fcd565b611222576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556111da3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610826565b506000610826565b60006112368383610fcd565b15611222576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610826565b60008163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16148061130757506112d882617530611c53565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16145b1561131457506001919050565b506000919050565b6113268282610fcd565b6113555760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610892565b5050565b82805482825590600052602060002090601f016020900481019282156113f25791602002820160005b838211156113c357833560ff1683826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302611382565b80156113f05782816101000a81549060ff02191690556001016020816000010492830192600103026113c3565b505b506113fe929150611402565b5090565b5b808211156113fe5760008155600101611403565b60006020828403121561142957600080fd5b81356001600160e01b03198116811461144157600080fd5b9392505050565b80356001600160a01b038116811461145f57600080fd5b919050565b60008060006060848603121561147957600080fd5b61148284611448565b925061149060208501611448565b929592945050506040919091013590565b6000602082840312156114b357600080fd5b5035919050565b60005b838110156114d55781810151838201526020016114bd565b50506000910152565b600081518084526114f68160208601602086016114ba565b601f01601f19169290920160200192915050565b6001600160a01b038a16815263ffffffff89811660208301528816604082015261012060608201819052600090611543908301896114de565b608083018890526001600160401b03871660a08401526001600160a01b0386811660c0850152851660e084015282810361010084015261158381856114de565b9c9b505050505050505050505050565b6000602082840312156115a557600080fd5b61144182611448565b803563ffffffff8116811461145f57600080fd5b6000602082840312156115d457600080fd5b611441826115ae565b602080825282518282018190526000918401906040840190835b8181101561161857835160ff168352602093840193909201916001016115f7565b509095945050505050565b6000806040838503121561163657600080fd5b8235915061164660208401611448565b90509250929050565b80356001600160401b038116811461145f57600080fd5b60008083601f84011261167857600080fd5b5081356001600160401b0381111561168f57600080fd5b6020830191508360208285010111156116a757600080fd5b9250929050565b6000806000806000608086880312156116c657600080fd5b6116cf866115ae565b94506116dd6020870161164f565b93506116eb60408701611448565b925060608601356001600160401b0381111561170657600080fd5b61171288828901611666565b969995985093965092949392505050565b6000806020838503121561173657600080fd5b82356001600160401b0381111561174c57600080fd5b8301601f8101851361175d57600080fd5b80356001600160401b0381111561177357600080fd5b8560208260071b840101111561178857600080fd5b6020919091019590945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156117d6576117d6611798565b604052919050565b600060408284031280156117f157600080fd5b50604080519081016001600160401b038111828210171561181457611814611798565b604052823581526020928301359281019290925250919050565b600080600080600080600060e0888a03121561184957600080fd5b611852886115ae565b9650611860602089016115ae565b95506040880135945060608801356001600160401b0381111561188257600080fd5b8801601f81018a1361189357600080fd5b80356001600160401b038111156118ac576118ac611798565b6118bf601f8201601f19166020016117ae565b8181528b60208385010111156118d457600080fd5b816020840160208301376000918101602001919091529450506080880135925061190060a0890161164f565b915061190e60c08901611448565b905092959891949750929550565b60008060006040848603121561193157600080fd5b83356001600160401b0381111561194757600080fd5b840160a0818703121561195957600080fd5b925060208401356001600160401b0381111561197457600080fd5b61198086828701611666565b9497909650939450505050565b803561ffff8116811461145f57600080fd5b6000602082840312156119b157600080fd5b6114418261198d565b6000806000604084860312156119cf57600080fd5b6119d8846115ae565b925060208401356001600160401b038111156119f357600080fd5b8401601f81018613611a0457600080fd5b80356001600160401b03811115611a1a57600080fd5b8660208260051b8401011115611a2f57600080fd5b939660209190910195509293505050565b60008060408385031215611a5357600080fd5b611a5c836115ae565b915060208301358015158114611a7157600080fd5b809150509250929050565b60008060408385031215611a8f57600080fd5b611a98836115ae565b946020939093013593505050565b600181811c90821680611aba57607f821691505b602082108103611ada57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611b0857600080fd5b6114418261164f565b80356001600160801b038116811461145f57600080fd5b600060208284031215611b3a57600080fd5b61144182611b11565b6020808252810182905260008360408301825b85811015611bca5763ffffffff611b6c846115ae565b1682526001600160401b03611b836020850161164f565b16602083015261ffff611b986040850161198d565b1660408301526001600160801b03611bb260608501611b11565b16606083015260809283019290910190600101611b56565b5095945050505050565b63ffffffff60e01b8860e01b16815263ffffffff60e01b8760e01b16600482015285600882015260008551611c10816028850160208a016114ba565b602892019182019490945260c09290921b6001600160c01b031916604883015260601b6bffffffffffffffffffffffff1916605082015260640195945050505050565b63ffffffff818116838216019081111561082657634e487b7160e01b600052601160045260246000fdfe724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19dea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220d1a546e8508e3b470a3f45040f0f348499a639347aced6c8ee9ce372838989b164736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006edce65403992e310a62460808c4b910d972f10f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c03f31fd86a9077785b7bcf6598ce3598fa91113000000000000000000000000b3e790273f0a89e53d2c20dd4dfe82aa00bbf91b", + "nonce": "0x54", + "chainId": "0x66eee" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x1deaba", + "logs": [ + { + "address": "0x71a1381db276b9636c1cb2542860c8d45be15fe1", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x22e0c84c358aeafc4768eb9f5cd99509fc68d2aeb9f1d9dcff7f85e150967635", + "blockNumber": "0x5a2e786", + "transactionHash": "0xe4e3d64a98312516f16ccb5ae155d70e6485b3ad2543ca2d93d45cf2dc94cbc3", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + }, + { + "address": "0x71a1381db276b9636c1cb2542860c8d45be15fe1", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0xa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x22e0c84c358aeafc4768eb9f5cd99509fc68d2aeb9f1d9dcff7f85e150967635", + "blockNumber": "0x5a2e786", + "transactionHash": "0xe4e3d64a98312516f16ccb5ae155d70e6485b3ad2543ca2d93d45cf2dc94cbc3", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + } + ], + "logsBloom": "0x00000004000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000020000000000000000000800000000000000000800000000000000000000200000000000000000000000004000000000000200000000000000000020000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000400100000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xe4e3d64a98312516f16ccb5ae155d70e6485b3ad2543ca2d93d45cf2dc94cbc3", + "transactionIndex": "0x1", + "blockHash": "0x22e0c84c358aeafc4768eb9f5cd99509fc68d2aeb9f1d9dcff7f85e150967635", + "blockNumber": "0x5a2e786", + "gasUsed": "0x1deaba", + "effectiveGasPrice": "0x5f5e100", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0x71a1381db276b9636c1cb2542860c8d45be15fe1", + "gasUsedForL1": "0x23ccb", + "l1BlockNumber": "0x6b0e28" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730798623, + "chain": 421614, + "commit": "d4e1224" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeployDvn.s.sol/421614/run-1730801615.json b/contracts/evm/broadcast/DeployDvn.s.sol/421614/run-1730801615.json new file mode 100644 index 00000000..46f76f9a --- /dev/null +++ b/contracts/evm/broadcast/DeployDvn.s.sol/421614/run-1730801615.json @@ -0,0 +1,88 @@ +{ + "transactions": [ + { + "hash": "0xadfd2a85aee6655bbb8608e00fc90f21f0004eb2207f9c1c9b05a15a34e303e2", + "transactionType": "CREATE", + "contractName": "NuffDVN", + "contractAddress": "0x7fa40e4ec7ff57429909fc147d004a3ba878c3ba", + "function": null, + "arguments": [ + "(0, 0)", + "0x6EDCE65403992e310A62460808c4b910D972f10f", + "1", + "1", + "0xC03f31fD86a9077785b7bCf6598Ce3598Fa91113", + "0xb3e790273f0A89e53d2C20dD4dFe82AA00bbf91b" + ], + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x27ba5e", + "value": "0x0", + "input": "0x60a060405234801561001057600080fd5b5060405161206a38038061206a83398101604081905261002f91610263565b85516003556020808701516004908155600180546001600160a01b0319166001600160a01b0389169081179091556040805163416ecebf60e01b81529051919363416ecebf938281019391928290030181865afa158015610094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b89190610321565b63ffffffff1660805260058054600160a01b600160f01b031916600160a01b61ffff871602600160b01b600160f01b03191617600160b01b6001600160401b03861602179055600680546001600160a01b03199081166001600160a01b03858116919091179092556007805490911691831691909117905561013b600033610172565b506101667fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610172565b5050505050505061034e565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16610214576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101cc3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610218565b5060005b92915050565b80516001600160a01b038116811461023557600080fd5b919050565b805161ffff8116811461023557600080fd5b80516001600160401b038116811461023557600080fd5b60008060008060008086880360e081121561027d57600080fd5b604081121561028b57600080fd5b50604080519081016001600160401b03811182821017156102bc57634e487b7160e01b600052604160045260246000fd5b6040908152885182526020808a0151908301529096506102dd90880161021e565b94506102eb6060880161023a565b93506102f96080880161024c565b925061030760a0880161021e565b915061031560c0880161021e565b90509295509295509295565b60006020828403121561033357600080fd5b815163ffffffff8116811461034757600080fd5b9392505050565b608051611cf3610377600039600081816104f8015281816112a001526112e00152611cf36000f3fe6080604052600436106101e95760003560e01c8063724e78da11610113578063b3129896116100ab578063d547741f1161006f578063d547741f14610718578063f3acc68d14610738578063f48ab8f214610758578063f49ef50514610793578063fbd9b28b146107c357600080fd5b8063b312989614610678578063bb37d00c14610698578063c358de0a146106b8578063c5fdf39c146106d8578063cd88b903146106f857600080fd5b8063724e78da146104c657806372607537146104e6578063741bef1a1461052f57806375b238fc1461056757806391d148541461058957806395d376d7146105a95780639e944965146105bc578063a217fddf14610641578063a98586e11461065657600080fd5b8063296817001161018657806329681700146103995780632f2ff15d146103c957806330bb3aac146103e957806336568abe1461041057806351cc784f1461043057806352d3b8711461044657806354093c65146104665780635580c07d146104865780635b4c2500146104a657600080fd5b8062bf2e80146101ee57806301ffc9a7146102285780631095b6d7146102585780631703a0181461027a578063180aedf3146102b95780631fad0b4c146102ee57806320ac2ece1461030e578063248a9ca31461032e57806326e67a371461036c575b600080fd5b3480156101fa57600080fd5b5060055461021090600160a01b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561023457600080fd5b50610248610243366004611417565b6107f5565b604051901515815260200161021f565b34801561026457600080fd5b50610278610273366004611464565b61082c565b005b34801561028657600080fd5b506005546102a190600160b01b90046001600160401b031681565b6040516001600160401b03909116815260200161021f565b3480156102c557600080fd5b506102d96102d43660046114a1565b61094f565b60405161021f9998979695949392919061150a565b3480156102fa57600080fd5b50610278610309366004611593565b610ad8565b34801561031a57600080fd5b50610278610329366004611593565b610b13565b34801561033a57600080fd5b5061035e6103493660046114a1565b60009081526020819052604090206001015490565b60405190815260200161021f565b34801561037857600080fd5b5061038c6103873660046115c2565b610b4e565b60405161021f91906115dd565b3480156103a557600080fd5b506102486103b43660046115c2565b60096020526000908152604090205460ff1681565b3480156103d557600080fd5b506102786103e4366004611623565b610bd5565b3480156103f557600080fd5b5061035e6104043660046116ae565b50612710949350505050565b34801561041c57600080fd5b5061027861042b366004611623565b610c00565b34801561043c57600080fd5b5061035e60025481565b34801561045257600080fd5b50610278610461366004611723565b610c38565b34801561047257600080fd5b506102786104813660046117de565b610da8565b34801561049257600080fd5b506102786104a136600461182e565b610dcf565b3480156104b257600080fd5b506102786104c1366004611593565b610f57565b3480156104d257600080fd5b506102786104e1366004611593565b610f92565b3480156104f257600080fd5b5061051a7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161021f565b34801561053b57600080fd5b5060065461054f906001600160a01b031681565b6040516001600160a01b03909116815260200161021f565b34801561057357600080fd5b5061035e600080516020611c9e83398151915281565b34801561059557600080fd5b506102486105a4366004611623565b610fcd565b61035e6105b736600461191c565b610ff6565b3480156105c857600080fd5b506106106105d73660046115c2565b600a602052600090815260409020546001600160401b03811690600160401b810461ffff1690600160501b90046001600160801b031683565b604080516001600160401b03909416845261ffff90921660208401526001600160801b03169082015260600161021f565b34801561064d57600080fd5b5061035e600081565b34801561066257600080fd5b5061035e600080516020611c7e83398151915281565b34801561068457600080fd5b5060015461054f906001600160a01b031681565b3480156106a457600080fd5b5060075461054f906001600160a01b031681565b3480156106c457600080fd5b506102786106d336600461199f565b611087565b3480156106e457600080fd5b5060055461054f906001600160a01b031681565b34801561070457600080fd5b506102786107133660046119ba565b6110c2565b34801561072457600080fd5b50610278610733366004611623565b6110e2565b34801561074457600080fd5b50610278610753366004611a40565b611107565b34801561076457600080fd5b50610248610773366004611a7c565b600b60209081526000928352604080842090915290825290205460ff1681565b34801561079f57600080fd5b506003546004546107ae919082565b6040805192835260208301919091520161021f565b3480156107cf57600080fd5b506107e36107de366004611a7c565b611148565b60405160ff909116815260200161021f565b60006001600160e01b03198216637965db0b60e01b148061082657506301ffc9a760e01b6001600160e01b03198316145b92915050565b600080516020611c9e8339815191526108448161118b565b61085c600080516020611c7e83398151915285610fcd565b61089b5760405162461bcd60e51b815260206004820152600b60248201526a24b73b30b634b2103634b160a91b60448201526064015b60405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b1580156108e557600080fd5b505af11580156108f9573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b600860205260009081526040902080546001820180546001600160a01b0383169363ffffffff600160a01b8504811694600160c01b90041692909161099390611aa6565b80601f01602080910402602001604051908101604052809291908181526020018280546109bf90611aa6565b8015610a0c5780601f106109e157610100808354040283529160200191610a0c565b820191906000526020600020905b8154815290600101906020018083116109ef57829003601f168201915b50505050600283015460038401546004850154600586018054959693956001600160401b0384169550600160401b9093046001600160a01b0390811694921692610a5590611aa6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8190611aa6565b8015610ace5780601f10610aa357610100808354040283529160200191610ace565b820191906000526020600020905b815481529060010190602001808311610ab157829003601f168201915b5050505050905089565b600080516020611c9e833981519152610af08161118b565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020611c9e833981519152610b2b8161118b565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b63ffffffff81166000908152600c6020908152604091829020805483518184028101840190945280845260609392830182828015610bc957602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610b9a5790505b50505050509050919050565b600082815260208190526040902060010154610bf08161118b565b610bfa8383611198565b50505050565b6001600160a01b0381163314610c295760405163334bd91960e11b815260040160405180910390fd5b610c33828261122a565b505050565b600080516020611c9e833981519152610c508161118b565b60005b82811015610d695736848483818110610c6e57610c6e611ae0565b90506080020190506040518060600160405280826020016020810190610c949190611af6565b6001600160401b03168152602001610cb2606084016040850161199f565b61ffff168152602001610ccb6080840160608501611b28565b6001600160801b03169052600a6000610ce760208501856115c2565b63ffffffff1681526020808201929092526040908101600020835181549385015194909201516001600160801b0316600160501b02600160501b600160d01b031961ffff909516600160401b0269ffffffffffffffffffff199094166001600160401b0390931692909217929092179290921691909117905550600101610c53565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051610d9b929190611b43565b60405180910390a1505050565b600080516020611c9e833981519152610dc08161118b565b50805160035560200151600455565b3068929eee149b4bd212685403610dee5763ab143c066000526004601cfd5b3068929eee149b4bd2126855610e0386611295565b610e405760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908191cdd115a5960921b6044820152606401610892565b63ffffffff87166000908152600b6020908152604080832088845290915290205460ff1615610eb15760405162461bcd60e51b815260206004820152601d60248201527f737263206a6f62496420697320616c72656164792076657269666965640000006044820152606401610892565b63ffffffff87166000908152600b60209081526040808320888452825291829020805460ff191660011790559051610ef791899189918991899189918991899101611bd4565b60408051808303601f1901905281815263ffffffff89168252602082018790527f33d9faf7f95795c8d5bd00585df49c5e70f8c4c8b9b11ed439fb144db238e5c7910160405180910390a13868929eee149b4bd212685550505050505050565b600080516020611c9e833981519152610f6f8161118b565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020611c9e833981519152610faa8161118b565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60003068929eee149b4bd2126854036110175763ab143c066000526004601cfd5b3068929eee149b4bd2126855600080516020611c7e83398151915261103b8161118b565b60405161271080825292507f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a1503868929eee149b4bd21268559392505050565b600080516020611c9e83398151915261109f8161118b565b506005805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b63ffffffff83166000908152600c60205260409020610bfa908383611359565b6000828152602081905260409020600101546110fd8161118b565b610bfa838361122a565b600080516020611c9e83398151915261111f8161118b565b5063ffffffff919091166000908152600960205260409020805460ff1916911515919091179055565b600c602052816000526040600020818154811061116457600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b611195813361131c565b50565b60006111a48383610fcd565b611222576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556111da3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610826565b506000610826565b60006112368383610fcd565b15611222576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610826565b60008163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16148061130757506112d882617530611c53565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16145b1561131457506001919050565b506000919050565b6113268282610fcd565b6113555760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610892565b5050565b82805482825590600052602060002090601f016020900481019282156113f25791602002820160005b838211156113c357833560ff1683826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302611382565b80156113f05782816101000a81549060ff02191690556001016020816000010492830192600103026113c3565b505b506113fe929150611402565b5090565b5b808211156113fe5760008155600101611403565b60006020828403121561142957600080fd5b81356001600160e01b03198116811461144157600080fd5b9392505050565b80356001600160a01b038116811461145f57600080fd5b919050565b60008060006060848603121561147957600080fd5b61148284611448565b925061149060208501611448565b929592945050506040919091013590565b6000602082840312156114b357600080fd5b5035919050565b60005b838110156114d55781810151838201526020016114bd565b50506000910152565b600081518084526114f68160208601602086016114ba565b601f01601f19169290920160200192915050565b6001600160a01b038a16815263ffffffff89811660208301528816604082015261012060608201819052600090611543908301896114de565b608083018890526001600160401b03871660a08401526001600160a01b0386811660c0850152851660e084015282810361010084015261158381856114de565b9c9b505050505050505050505050565b6000602082840312156115a557600080fd5b61144182611448565b803563ffffffff8116811461145f57600080fd5b6000602082840312156115d457600080fd5b611441826115ae565b602080825282518282018190526000918401906040840190835b8181101561161857835160ff168352602093840193909201916001016115f7565b509095945050505050565b6000806040838503121561163657600080fd5b8235915061164660208401611448565b90509250929050565b80356001600160401b038116811461145f57600080fd5b60008083601f84011261167857600080fd5b5081356001600160401b0381111561168f57600080fd5b6020830191508360208285010111156116a757600080fd5b9250929050565b6000806000806000608086880312156116c657600080fd5b6116cf866115ae565b94506116dd6020870161164f565b93506116eb60408701611448565b925060608601356001600160401b0381111561170657600080fd5b61171288828901611666565b969995985093965092949392505050565b6000806020838503121561173657600080fd5b82356001600160401b0381111561174c57600080fd5b8301601f8101851361175d57600080fd5b80356001600160401b0381111561177357600080fd5b8560208260071b840101111561178857600080fd5b6020919091019590945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156117d6576117d6611798565b604052919050565b600060408284031280156117f157600080fd5b50604080519081016001600160401b038111828210171561181457611814611798565b604052823581526020928301359281019290925250919050565b600080600080600080600060e0888a03121561184957600080fd5b611852886115ae565b9650611860602089016115ae565b95506040880135945060608801356001600160401b0381111561188257600080fd5b8801601f81018a1361189357600080fd5b80356001600160401b038111156118ac576118ac611798565b6118bf601f8201601f19166020016117ae565b8181528b60208385010111156118d457600080fd5b816020840160208301376000918101602001919091529450506080880135925061190060a0890161164f565b915061190e60c08901611448565b905092959891949750929550565b60008060006040848603121561193157600080fd5b83356001600160401b0381111561194757600080fd5b840160a0818703121561195957600080fd5b925060208401356001600160401b0381111561197457600080fd5b61198086828701611666565b9497909650939450505050565b803561ffff8116811461145f57600080fd5b6000602082840312156119b157600080fd5b6114418261198d565b6000806000604084860312156119cf57600080fd5b6119d8846115ae565b925060208401356001600160401b038111156119f357600080fd5b8401601f81018613611a0457600080fd5b80356001600160401b03811115611a1a57600080fd5b8660208260051b8401011115611a2f57600080fd5b939660209190910195509293505050565b60008060408385031215611a5357600080fd5b611a5c836115ae565b915060208301358015158114611a7157600080fd5b809150509250929050565b60008060408385031215611a8f57600080fd5b611a98836115ae565b946020939093013593505050565b600181811c90821680611aba57607f821691505b602082108103611ada57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611b0857600080fd5b6114418261164f565b80356001600160801b038116811461145f57600080fd5b600060208284031215611b3a57600080fd5b61144182611b11565b6020808252810182905260008360408301825b85811015611bca5763ffffffff611b6c846115ae565b1682526001600160401b03611b836020850161164f565b16602083015261ffff611b986040850161198d565b1660408301526001600160801b03611bb260608501611b11565b16606083015260809283019290910190600101611b56565b5095945050505050565b63ffffffff60e01b8860e01b16815263ffffffff60e01b8760e01b16600482015285600882015260008551611c10816028850160208a016114ba565b602892019182019490945260c09290921b6001600160c01b031916604883015260601b6bffffffffffffffffffffffff1916605082015260640195945050505050565b63ffffffff818116838216019081111561082657634e487b7160e01b600052601160045260246000fdfe724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19dea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220d1a546e8508e3b470a3f45040f0f348499a639347aced6c8ee9ce372838989b164736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006edce65403992e310a62460808c4b910d972f10f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c03f31fd86a9077785b7bcf6598ce3598fa91113000000000000000000000000b3e790273f0a89e53d2c20dd4dfe82aa00bbf91b", + "nonce": "0x5b", + "chainId": "0x66eee" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x20d10f", + "logs": [ + { + "address": "0x7fa40e4ec7ff57429909fc147d004a3ba878c3ba", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x2bc71f19d951a406151ecc03f7d55b2e44183ce5220714c92f7a666b6b0d036d", + "blockNumber": "0x5a30e2c", + "transactionHash": "0xadfd2a85aee6655bbb8608e00fc90f21f0004eb2207f9c1c9b05a15a34e303e2", + "transactionIndex": "0x2", + "logIndex": "0x3", + "removed": false + }, + { + "address": "0x7fa40e4ec7ff57429909fc147d004a3ba878c3ba", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0xa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x2bc71f19d951a406151ecc03f7d55b2e44183ce5220714c92f7a666b6b0d036d", + "blockNumber": "0x5a30e2c", + "transactionHash": "0xadfd2a85aee6655bbb8608e00fc90f21f0004eb2207f9c1c9b05a15a34e303e2", + "transactionIndex": "0x2", + "logIndex": "0x4", + "removed": false + } + ], + "logsBloom": "0x00000004000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000020000000000000000000800000000000000000800000000000000000000200000000000000000000000004000000000000000000000000000000000000000000000000000000040000000000000000000000000001000000000000000000000000000000000000000000000000000000000400100000000000020000000000000000000000000000000000000000000000000400000000000000000", + "type": "0x2", + "transactionHash": "0xadfd2a85aee6655bbb8608e00fc90f21f0004eb2207f9c1c9b05a15a34e303e2", + "transactionIndex": "0x2", + "blockHash": "0x2bc71f19d951a406151ecc03f7d55b2e44183ce5220714c92f7a666b6b0d036d", + "blockNumber": "0x5a30e2c", + "gasUsed": "0x1e067a", + "effectiveGasPrice": "0x5f5e100", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0x7fa40e4ec7ff57429909fc147d004a3ba878c3ba", + "gasUsedForL1": "0x2588b", + "l1BlockNumber": "0x6b0f16" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730801615, + "chain": 421614, + "commit": "d4e1224" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeployDvn.s.sol/421614/run-1730806590.json b/contracts/evm/broadcast/DeployDvn.s.sol/421614/run-1730806590.json new file mode 100644 index 00000000..a69d6e32 --- /dev/null +++ b/contracts/evm/broadcast/DeployDvn.s.sol/421614/run-1730806590.json @@ -0,0 +1,88 @@ +{ + "transactions": [ + { + "hash": "0x8b33b8df67d6d62c01d5b590f5e7be3ab19a522a93c1ab79bf4026878099137a", + "transactionType": "CREATE", + "contractName": "NuffDVN", + "contractAddress": "0xbf01f5a6aed5959f984d4e7fb312c542f54cec79", + "function": null, + "arguments": [ + "(0, 0)", + "0x6EDCE65403992e310A62460808c4b910D972f10f", + "1", + "1", + "0xC03f31fD86a9077785b7bCf6598Ce3598Fa91113", + "0xb3e790273f0A89e53d2C20dD4dFe82AA00bbf91b" + ], + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x2765b9", + "value": "0x0", + "input": "0x60a060405234801561001057600080fd5b5060405161206a38038061206a83398101604081905261002f91610263565b85516003556020808701516004908155600180546001600160a01b0319166001600160a01b0389169081179091556040805163416ecebf60e01b81529051919363416ecebf938281019391928290030181865afa158015610094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b89190610321565b63ffffffff1660805260058054600160a01b600160f01b031916600160a01b61ffff871602600160b01b600160f01b03191617600160b01b6001600160401b03861602179055600680546001600160a01b03199081166001600160a01b03858116919091179092556007805490911691831691909117905561013b600033610172565b506101667fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610172565b5050505050505061034e565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16610214576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101cc3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610218565b5060005b92915050565b80516001600160a01b038116811461023557600080fd5b919050565b805161ffff8116811461023557600080fd5b80516001600160401b038116811461023557600080fd5b60008060008060008086880360e081121561027d57600080fd5b604081121561028b57600080fd5b50604080519081016001600160401b03811182821017156102bc57634e487b7160e01b600052604160045260246000fd5b6040908152885182526020808a0151908301529096506102dd90880161021e565b94506102eb6060880161023a565b93506102f96080880161024c565b925061030760a0880161021e565b915061031560c0880161021e565b90509295509295509295565b60006020828403121561033357600080fd5b815163ffffffff8116811461034757600080fd5b9392505050565b608051611cf3610377600039600081816104f8015281816112a001526112e00152611cf36000f3fe6080604052600436106101e95760003560e01c8063724e78da11610113578063b3129896116100ab578063d547741f1161006f578063d547741f14610718578063f3acc68d14610738578063f48ab8f214610758578063f49ef50514610793578063fbd9b28b146107c357600080fd5b8063b312989614610678578063bb37d00c14610698578063c358de0a146106b8578063c5fdf39c146106d8578063cd88b903146106f857600080fd5b8063724e78da146104c657806372607537146104e6578063741bef1a1461052f57806375b238fc1461056757806391d148541461058957806395d376d7146105a95780639e944965146105bc578063a217fddf14610641578063a98586e11461065657600080fd5b8063296817001161018657806329681700146103995780632f2ff15d146103c957806330bb3aac146103e957806336568abe1461041057806351cc784f1461043057806352d3b8711461044657806354093c65146104665780635580c07d146104865780635b4c2500146104a657600080fd5b8062bf2e80146101ee57806301ffc9a7146102285780631095b6d7146102585780631703a0181461027a578063180aedf3146102b95780631fad0b4c146102ee57806320ac2ece1461030e578063248a9ca31461032e57806326e67a371461036c575b600080fd5b3480156101fa57600080fd5b5060055461021090600160a01b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561023457600080fd5b50610248610243366004611417565b6107f5565b604051901515815260200161021f565b34801561026457600080fd5b50610278610273366004611464565b61082c565b005b34801561028657600080fd5b506005546102a190600160b01b90046001600160401b031681565b6040516001600160401b03909116815260200161021f565b3480156102c557600080fd5b506102d96102d43660046114a1565b61094f565b60405161021f9998979695949392919061150a565b3480156102fa57600080fd5b50610278610309366004611593565b610ad8565b34801561031a57600080fd5b50610278610329366004611593565b610b13565b34801561033a57600080fd5b5061035e6103493660046114a1565b60009081526020819052604090206001015490565b60405190815260200161021f565b34801561037857600080fd5b5061038c6103873660046115c2565b610b4e565b60405161021f91906115dd565b3480156103a557600080fd5b506102486103b43660046115c2565b60096020526000908152604090205460ff1681565b3480156103d557600080fd5b506102786103e4366004611623565b610bd5565b3480156103f557600080fd5b5061035e6104043660046116ae565b50612710949350505050565b34801561041c57600080fd5b5061027861042b366004611623565b610c00565b34801561043c57600080fd5b5061035e60025481565b34801561045257600080fd5b50610278610461366004611723565b610c38565b34801561047257600080fd5b506102786104813660046117de565b610da8565b34801561049257600080fd5b506102786104a136600461182e565b610dcf565b3480156104b257600080fd5b506102786104c1366004611593565b610f57565b3480156104d257600080fd5b506102786104e1366004611593565b610f92565b3480156104f257600080fd5b5061051a7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161021f565b34801561053b57600080fd5b5060065461054f906001600160a01b031681565b6040516001600160a01b03909116815260200161021f565b34801561057357600080fd5b5061035e600080516020611c9e83398151915281565b34801561059557600080fd5b506102486105a4366004611623565b610fcd565b61035e6105b736600461191c565b610ff6565b3480156105c857600080fd5b506106106105d73660046115c2565b600a602052600090815260409020546001600160401b03811690600160401b810461ffff1690600160501b90046001600160801b031683565b604080516001600160401b03909416845261ffff90921660208401526001600160801b03169082015260600161021f565b34801561064d57600080fd5b5061035e600081565b34801561066257600080fd5b5061035e600080516020611c7e83398151915281565b34801561068457600080fd5b5060015461054f906001600160a01b031681565b3480156106a457600080fd5b5060075461054f906001600160a01b031681565b3480156106c457600080fd5b506102786106d336600461199f565b611087565b3480156106e457600080fd5b5060055461054f906001600160a01b031681565b34801561070457600080fd5b506102786107133660046119ba565b6110c2565b34801561072457600080fd5b50610278610733366004611623565b6110e2565b34801561074457600080fd5b50610278610753366004611a40565b611107565b34801561076457600080fd5b50610248610773366004611a7c565b600b60209081526000928352604080842090915290825290205460ff1681565b34801561079f57600080fd5b506003546004546107ae919082565b6040805192835260208301919091520161021f565b3480156107cf57600080fd5b506107e36107de366004611a7c565b611148565b60405160ff909116815260200161021f565b60006001600160e01b03198216637965db0b60e01b148061082657506301ffc9a760e01b6001600160e01b03198316145b92915050565b600080516020611c9e8339815191526108448161118b565b61085c600080516020611c7e83398151915285610fcd565b61089b5760405162461bcd60e51b815260206004820152600b60248201526a24b73b30b634b2103634b160a91b60448201526064015b60405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b1580156108e557600080fd5b505af11580156108f9573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b600860205260009081526040902080546001820180546001600160a01b0383169363ffffffff600160a01b8504811694600160c01b90041692909161099390611aa6565b80601f01602080910402602001604051908101604052809291908181526020018280546109bf90611aa6565b8015610a0c5780601f106109e157610100808354040283529160200191610a0c565b820191906000526020600020905b8154815290600101906020018083116109ef57829003601f168201915b50505050600283015460038401546004850154600586018054959693956001600160401b0384169550600160401b9093046001600160a01b0390811694921692610a5590611aa6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8190611aa6565b8015610ace5780601f10610aa357610100808354040283529160200191610ace565b820191906000526020600020905b815481529060010190602001808311610ab157829003601f168201915b5050505050905089565b600080516020611c9e833981519152610af08161118b565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020611c9e833981519152610b2b8161118b565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b63ffffffff81166000908152600c6020908152604091829020805483518184028101840190945280845260609392830182828015610bc957602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610b9a5790505b50505050509050919050565b600082815260208190526040902060010154610bf08161118b565b610bfa8383611198565b50505050565b6001600160a01b0381163314610c295760405163334bd91960e11b815260040160405180910390fd5b610c33828261122a565b505050565b600080516020611c9e833981519152610c508161118b565b60005b82811015610d695736848483818110610c6e57610c6e611ae0565b90506080020190506040518060600160405280826020016020810190610c949190611af6565b6001600160401b03168152602001610cb2606084016040850161199f565b61ffff168152602001610ccb6080840160608501611b28565b6001600160801b03169052600a6000610ce760208501856115c2565b63ffffffff1681526020808201929092526040908101600020835181549385015194909201516001600160801b0316600160501b02600160501b600160d01b031961ffff909516600160401b0269ffffffffffffffffffff199094166001600160401b0390931692909217929092179290921691909117905550600101610c53565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051610d9b929190611b43565b60405180910390a1505050565b600080516020611c9e833981519152610dc08161118b565b50805160035560200151600455565b3068929eee149b4bd212685403610dee5763ab143c066000526004601cfd5b3068929eee149b4bd2126855610e0386611295565b610e405760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908191cdd115a5960921b6044820152606401610892565b63ffffffff87166000908152600b6020908152604080832088845290915290205460ff1615610eb15760405162461bcd60e51b815260206004820152601d60248201527f737263206a6f62496420697320616c72656164792076657269666965640000006044820152606401610892565b63ffffffff87166000908152600b60209081526040808320888452825291829020805460ff191660011790559051610ef791899189918991899189918991899101611bd4565b60408051808303601f1901905281815263ffffffff89168252602082018790527f33d9faf7f95795c8d5bd00585df49c5e70f8c4c8b9b11ed439fb144db238e5c7910160405180910390a13868929eee149b4bd212685550505050505050565b600080516020611c9e833981519152610f6f8161118b565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020611c9e833981519152610faa8161118b565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60003068929eee149b4bd2126854036110175763ab143c066000526004601cfd5b3068929eee149b4bd2126855600080516020611c7e83398151915261103b8161118b565b60405161271080825292507f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a1503868929eee149b4bd21268559392505050565b600080516020611c9e83398151915261109f8161118b565b506005805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b63ffffffff83166000908152600c60205260409020610bfa908383611359565b6000828152602081905260409020600101546110fd8161118b565b610bfa838361122a565b600080516020611c9e83398151915261111f8161118b565b5063ffffffff919091166000908152600960205260409020805460ff1916911515919091179055565b600c602052816000526040600020818154811061116457600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b611195813361131c565b50565b60006111a48383610fcd565b611222576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556111da3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610826565b506000610826565b60006112368383610fcd565b15611222576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610826565b60008163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16148061130757506112d882617530611c53565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16145b1561131457506001919050565b506000919050565b6113268282610fcd565b6113555760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610892565b5050565b82805482825590600052602060002090601f016020900481019282156113f25791602002820160005b838211156113c357833560ff1683826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302611382565b80156113f05782816101000a81549060ff02191690556001016020816000010492830192600103026113c3565b505b506113fe929150611402565b5090565b5b808211156113fe5760008155600101611403565b60006020828403121561142957600080fd5b81356001600160e01b03198116811461144157600080fd5b9392505050565b80356001600160a01b038116811461145f57600080fd5b919050565b60008060006060848603121561147957600080fd5b61148284611448565b925061149060208501611448565b929592945050506040919091013590565b6000602082840312156114b357600080fd5b5035919050565b60005b838110156114d55781810151838201526020016114bd565b50506000910152565b600081518084526114f68160208601602086016114ba565b601f01601f19169290920160200192915050565b6001600160a01b038a16815263ffffffff89811660208301528816604082015261012060608201819052600090611543908301896114de565b608083018890526001600160401b03871660a08401526001600160a01b0386811660c0850152851660e084015282810361010084015261158381856114de565b9c9b505050505050505050505050565b6000602082840312156115a557600080fd5b61144182611448565b803563ffffffff8116811461145f57600080fd5b6000602082840312156115d457600080fd5b611441826115ae565b602080825282518282018190526000918401906040840190835b8181101561161857835160ff168352602093840193909201916001016115f7565b509095945050505050565b6000806040838503121561163657600080fd5b8235915061164660208401611448565b90509250929050565b80356001600160401b038116811461145f57600080fd5b60008083601f84011261167857600080fd5b5081356001600160401b0381111561168f57600080fd5b6020830191508360208285010111156116a757600080fd5b9250929050565b6000806000806000608086880312156116c657600080fd5b6116cf866115ae565b94506116dd6020870161164f565b93506116eb60408701611448565b925060608601356001600160401b0381111561170657600080fd5b61171288828901611666565b969995985093965092949392505050565b6000806020838503121561173657600080fd5b82356001600160401b0381111561174c57600080fd5b8301601f8101851361175d57600080fd5b80356001600160401b0381111561177357600080fd5b8560208260071b840101111561178857600080fd5b6020919091019590945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156117d6576117d6611798565b604052919050565b600060408284031280156117f157600080fd5b50604080519081016001600160401b038111828210171561181457611814611798565b604052823581526020928301359281019290925250919050565b600080600080600080600060e0888a03121561184957600080fd5b611852886115ae565b9650611860602089016115ae565b95506040880135945060608801356001600160401b0381111561188257600080fd5b8801601f81018a1361189357600080fd5b80356001600160401b038111156118ac576118ac611798565b6118bf601f8201601f19166020016117ae565b8181528b60208385010111156118d457600080fd5b816020840160208301376000918101602001919091529450506080880135925061190060a0890161164f565b915061190e60c08901611448565b905092959891949750929550565b60008060006040848603121561193157600080fd5b83356001600160401b0381111561194757600080fd5b840160a0818703121561195957600080fd5b925060208401356001600160401b0381111561197457600080fd5b61198086828701611666565b9497909650939450505050565b803561ffff8116811461145f57600080fd5b6000602082840312156119b157600080fd5b6114418261198d565b6000806000604084860312156119cf57600080fd5b6119d8846115ae565b925060208401356001600160401b038111156119f357600080fd5b8401601f81018613611a0457600080fd5b80356001600160401b03811115611a1a57600080fd5b8660208260051b8401011115611a2f57600080fd5b939660209190910195509293505050565b60008060408385031215611a5357600080fd5b611a5c836115ae565b915060208301358015158114611a7157600080fd5b809150509250929050565b60008060408385031215611a8f57600080fd5b611a98836115ae565b946020939093013593505050565b600181811c90821680611aba57607f821691505b602082108103611ada57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611b0857600080fd5b6114418261164f565b80356001600160801b038116811461145f57600080fd5b600060208284031215611b3a57600080fd5b61144182611b11565b6020808252810182905260008360408301825b85811015611bca5763ffffffff611b6c846115ae565b1682526001600160401b03611b836020850161164f565b16602083015261ffff611b986040850161198d565b1660408301526001600160801b03611bb260608501611b11565b16606083015260809283019290910190600101611b56565b5095945050505050565b63ffffffff60e01b8860e01b16815263ffffffff60e01b8760e01b16600482015285600882015260008551611c10816028850160208a016114ba565b602892019182019490945260c09290921b6001600160c01b031916604883015260601b6bffffffffffffffffffffffff1916605082015260640195945050505050565b63ffffffff818116838216019081111561082657634e487b7160e01b600052601160045260246000fdfe724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19dea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220d1a546e8508e3b470a3f45040f0f348499a639347aced6c8ee9ce372838989b164736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006edce65403992e310a62460808c4b910d972f10f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c03f31fd86a9077785b7bcf6598ce3598fa91113000000000000000000000000b3e790273f0a89e53d2c20dd4dfe82aa00bbf91b", + "nonce": "0x5d", + "chainId": "0x66eee" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x1dccb0", + "logs": [ + { + "address": "0xbf01f5a6aed5959f984d4e7fb312c542f54cec79", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x53bdd398e4753eabb9bf04a9e708cf3d966ab75c9badda494c8ee5b69a21a0f0", + "blockNumber": "0x5a34fb1", + "transactionHash": "0x8b33b8df67d6d62c01d5b590f5e7be3ab19a522a93c1ab79bf4026878099137a", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + }, + { + "address": "0xbf01f5a6aed5959f984d4e7fb312c542f54cec79", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0xa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x53bdd398e4753eabb9bf04a9e708cf3d966ab75c9badda494c8ee5b69a21a0f0", + "blockNumber": "0x5a34fb1", + "transactionHash": "0x8b33b8df67d6d62c01d5b590f5e7be3ab19a522a93c1ab79bf4026878099137a", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + } + ], + "logsBloom": "0x00000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000020000000000000000000800000000000000000800000000000000000000200000000000000000000000004000000010000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000400100000000000020000000000000000000000000000000000000100000000000000000001000000000", + "type": "0x2", + "transactionHash": "0x8b33b8df67d6d62c01d5b590f5e7be3ab19a522a93c1ab79bf4026878099137a", + "transactionIndex": "0x1", + "blockHash": "0x53bdd398e4753eabb9bf04a9e708cf3d966ab75c9badda494c8ee5b69a21a0f0", + "blockNumber": "0x5a34fb1", + "gasUsed": "0x1dccb0", + "effectiveGasPrice": "0x5f5e100", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0xbf01f5a6aed5959f984d4e7fb312c542f54cec79", + "gasUsedForL1": "0x21ec1", + "l1BlockNumber": "0x6b109a" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730806590, + "chain": 421614, + "commit": "d4e1224" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeployDvn.s.sol/421614/run-latest.json b/contracts/evm/broadcast/DeployDvn.s.sol/421614/run-latest.json new file mode 100644 index 00000000..a69d6e32 --- /dev/null +++ b/contracts/evm/broadcast/DeployDvn.s.sol/421614/run-latest.json @@ -0,0 +1,88 @@ +{ + "transactions": [ + { + "hash": "0x8b33b8df67d6d62c01d5b590f5e7be3ab19a522a93c1ab79bf4026878099137a", + "transactionType": "CREATE", + "contractName": "NuffDVN", + "contractAddress": "0xbf01f5a6aed5959f984d4e7fb312c542f54cec79", + "function": null, + "arguments": [ + "(0, 0)", + "0x6EDCE65403992e310A62460808c4b910D972f10f", + "1", + "1", + "0xC03f31fD86a9077785b7bCf6598Ce3598Fa91113", + "0xb3e790273f0A89e53d2C20dD4dFe82AA00bbf91b" + ], + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x2765b9", + "value": "0x0", + "input": "0x60a060405234801561001057600080fd5b5060405161206a38038061206a83398101604081905261002f91610263565b85516003556020808701516004908155600180546001600160a01b0319166001600160a01b0389169081179091556040805163416ecebf60e01b81529051919363416ecebf938281019391928290030181865afa158015610094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b89190610321565b63ffffffff1660805260058054600160a01b600160f01b031916600160a01b61ffff871602600160b01b600160f01b03191617600160b01b6001600160401b03861602179055600680546001600160a01b03199081166001600160a01b03858116919091179092556007805490911691831691909117905561013b600033610172565b506101667fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610172565b5050505050505061034e565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16610214576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101cc3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610218565b5060005b92915050565b80516001600160a01b038116811461023557600080fd5b919050565b805161ffff8116811461023557600080fd5b80516001600160401b038116811461023557600080fd5b60008060008060008086880360e081121561027d57600080fd5b604081121561028b57600080fd5b50604080519081016001600160401b03811182821017156102bc57634e487b7160e01b600052604160045260246000fd5b6040908152885182526020808a0151908301529096506102dd90880161021e565b94506102eb6060880161023a565b93506102f96080880161024c565b925061030760a0880161021e565b915061031560c0880161021e565b90509295509295509295565b60006020828403121561033357600080fd5b815163ffffffff8116811461034757600080fd5b9392505050565b608051611cf3610377600039600081816104f8015281816112a001526112e00152611cf36000f3fe6080604052600436106101e95760003560e01c8063724e78da11610113578063b3129896116100ab578063d547741f1161006f578063d547741f14610718578063f3acc68d14610738578063f48ab8f214610758578063f49ef50514610793578063fbd9b28b146107c357600080fd5b8063b312989614610678578063bb37d00c14610698578063c358de0a146106b8578063c5fdf39c146106d8578063cd88b903146106f857600080fd5b8063724e78da146104c657806372607537146104e6578063741bef1a1461052f57806375b238fc1461056757806391d148541461058957806395d376d7146105a95780639e944965146105bc578063a217fddf14610641578063a98586e11461065657600080fd5b8063296817001161018657806329681700146103995780632f2ff15d146103c957806330bb3aac146103e957806336568abe1461041057806351cc784f1461043057806352d3b8711461044657806354093c65146104665780635580c07d146104865780635b4c2500146104a657600080fd5b8062bf2e80146101ee57806301ffc9a7146102285780631095b6d7146102585780631703a0181461027a578063180aedf3146102b95780631fad0b4c146102ee57806320ac2ece1461030e578063248a9ca31461032e57806326e67a371461036c575b600080fd5b3480156101fa57600080fd5b5060055461021090600160a01b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561023457600080fd5b50610248610243366004611417565b6107f5565b604051901515815260200161021f565b34801561026457600080fd5b50610278610273366004611464565b61082c565b005b34801561028657600080fd5b506005546102a190600160b01b90046001600160401b031681565b6040516001600160401b03909116815260200161021f565b3480156102c557600080fd5b506102d96102d43660046114a1565b61094f565b60405161021f9998979695949392919061150a565b3480156102fa57600080fd5b50610278610309366004611593565b610ad8565b34801561031a57600080fd5b50610278610329366004611593565b610b13565b34801561033a57600080fd5b5061035e6103493660046114a1565b60009081526020819052604090206001015490565b60405190815260200161021f565b34801561037857600080fd5b5061038c6103873660046115c2565b610b4e565b60405161021f91906115dd565b3480156103a557600080fd5b506102486103b43660046115c2565b60096020526000908152604090205460ff1681565b3480156103d557600080fd5b506102786103e4366004611623565b610bd5565b3480156103f557600080fd5b5061035e6104043660046116ae565b50612710949350505050565b34801561041c57600080fd5b5061027861042b366004611623565b610c00565b34801561043c57600080fd5b5061035e60025481565b34801561045257600080fd5b50610278610461366004611723565b610c38565b34801561047257600080fd5b506102786104813660046117de565b610da8565b34801561049257600080fd5b506102786104a136600461182e565b610dcf565b3480156104b257600080fd5b506102786104c1366004611593565b610f57565b3480156104d257600080fd5b506102786104e1366004611593565b610f92565b3480156104f257600080fd5b5061051a7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161021f565b34801561053b57600080fd5b5060065461054f906001600160a01b031681565b6040516001600160a01b03909116815260200161021f565b34801561057357600080fd5b5061035e600080516020611c9e83398151915281565b34801561059557600080fd5b506102486105a4366004611623565b610fcd565b61035e6105b736600461191c565b610ff6565b3480156105c857600080fd5b506106106105d73660046115c2565b600a602052600090815260409020546001600160401b03811690600160401b810461ffff1690600160501b90046001600160801b031683565b604080516001600160401b03909416845261ffff90921660208401526001600160801b03169082015260600161021f565b34801561064d57600080fd5b5061035e600081565b34801561066257600080fd5b5061035e600080516020611c7e83398151915281565b34801561068457600080fd5b5060015461054f906001600160a01b031681565b3480156106a457600080fd5b5060075461054f906001600160a01b031681565b3480156106c457600080fd5b506102786106d336600461199f565b611087565b3480156106e457600080fd5b5060055461054f906001600160a01b031681565b34801561070457600080fd5b506102786107133660046119ba565b6110c2565b34801561072457600080fd5b50610278610733366004611623565b6110e2565b34801561074457600080fd5b50610278610753366004611a40565b611107565b34801561076457600080fd5b50610248610773366004611a7c565b600b60209081526000928352604080842090915290825290205460ff1681565b34801561079f57600080fd5b506003546004546107ae919082565b6040805192835260208301919091520161021f565b3480156107cf57600080fd5b506107e36107de366004611a7c565b611148565b60405160ff909116815260200161021f565b60006001600160e01b03198216637965db0b60e01b148061082657506301ffc9a760e01b6001600160e01b03198316145b92915050565b600080516020611c9e8339815191526108448161118b565b61085c600080516020611c7e83398151915285610fcd565b61089b5760405162461bcd60e51b815260206004820152600b60248201526a24b73b30b634b2103634b160a91b60448201526064015b60405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b1580156108e557600080fd5b505af11580156108f9573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b600860205260009081526040902080546001820180546001600160a01b0383169363ffffffff600160a01b8504811694600160c01b90041692909161099390611aa6565b80601f01602080910402602001604051908101604052809291908181526020018280546109bf90611aa6565b8015610a0c5780601f106109e157610100808354040283529160200191610a0c565b820191906000526020600020905b8154815290600101906020018083116109ef57829003601f168201915b50505050600283015460038401546004850154600586018054959693956001600160401b0384169550600160401b9093046001600160a01b0390811694921692610a5590611aa6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8190611aa6565b8015610ace5780601f10610aa357610100808354040283529160200191610ace565b820191906000526020600020905b815481529060010190602001808311610ab157829003601f168201915b5050505050905089565b600080516020611c9e833981519152610af08161118b565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020611c9e833981519152610b2b8161118b565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b63ffffffff81166000908152600c6020908152604091829020805483518184028101840190945280845260609392830182828015610bc957602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610b9a5790505b50505050509050919050565b600082815260208190526040902060010154610bf08161118b565b610bfa8383611198565b50505050565b6001600160a01b0381163314610c295760405163334bd91960e11b815260040160405180910390fd5b610c33828261122a565b505050565b600080516020611c9e833981519152610c508161118b565b60005b82811015610d695736848483818110610c6e57610c6e611ae0565b90506080020190506040518060600160405280826020016020810190610c949190611af6565b6001600160401b03168152602001610cb2606084016040850161199f565b61ffff168152602001610ccb6080840160608501611b28565b6001600160801b03169052600a6000610ce760208501856115c2565b63ffffffff1681526020808201929092526040908101600020835181549385015194909201516001600160801b0316600160501b02600160501b600160d01b031961ffff909516600160401b0269ffffffffffffffffffff199094166001600160401b0390931692909217929092179290921691909117905550600101610c53565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051610d9b929190611b43565b60405180910390a1505050565b600080516020611c9e833981519152610dc08161118b565b50805160035560200151600455565b3068929eee149b4bd212685403610dee5763ab143c066000526004601cfd5b3068929eee149b4bd2126855610e0386611295565b610e405760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908191cdd115a5960921b6044820152606401610892565b63ffffffff87166000908152600b6020908152604080832088845290915290205460ff1615610eb15760405162461bcd60e51b815260206004820152601d60248201527f737263206a6f62496420697320616c72656164792076657269666965640000006044820152606401610892565b63ffffffff87166000908152600b60209081526040808320888452825291829020805460ff191660011790559051610ef791899189918991899189918991899101611bd4565b60408051808303601f1901905281815263ffffffff89168252602082018790527f33d9faf7f95795c8d5bd00585df49c5e70f8c4c8b9b11ed439fb144db238e5c7910160405180910390a13868929eee149b4bd212685550505050505050565b600080516020611c9e833981519152610f6f8161118b565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020611c9e833981519152610faa8161118b565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60003068929eee149b4bd2126854036110175763ab143c066000526004601cfd5b3068929eee149b4bd2126855600080516020611c7e83398151915261103b8161118b565b60405161271080825292507f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a1503868929eee149b4bd21268559392505050565b600080516020611c9e83398151915261109f8161118b565b506005805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b63ffffffff83166000908152600c60205260409020610bfa908383611359565b6000828152602081905260409020600101546110fd8161118b565b610bfa838361122a565b600080516020611c9e83398151915261111f8161118b565b5063ffffffff919091166000908152600960205260409020805460ff1916911515919091179055565b600c602052816000526040600020818154811061116457600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b611195813361131c565b50565b60006111a48383610fcd565b611222576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556111da3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610826565b506000610826565b60006112368383610fcd565b15611222576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610826565b60008163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16148061130757506112d882617530611c53565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16145b1561131457506001919050565b506000919050565b6113268282610fcd565b6113555760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610892565b5050565b82805482825590600052602060002090601f016020900481019282156113f25791602002820160005b838211156113c357833560ff1683826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302611382565b80156113f05782816101000a81549060ff02191690556001016020816000010492830192600103026113c3565b505b506113fe929150611402565b5090565b5b808211156113fe5760008155600101611403565b60006020828403121561142957600080fd5b81356001600160e01b03198116811461144157600080fd5b9392505050565b80356001600160a01b038116811461145f57600080fd5b919050565b60008060006060848603121561147957600080fd5b61148284611448565b925061149060208501611448565b929592945050506040919091013590565b6000602082840312156114b357600080fd5b5035919050565b60005b838110156114d55781810151838201526020016114bd565b50506000910152565b600081518084526114f68160208601602086016114ba565b601f01601f19169290920160200192915050565b6001600160a01b038a16815263ffffffff89811660208301528816604082015261012060608201819052600090611543908301896114de565b608083018890526001600160401b03871660a08401526001600160a01b0386811660c0850152851660e084015282810361010084015261158381856114de565b9c9b505050505050505050505050565b6000602082840312156115a557600080fd5b61144182611448565b803563ffffffff8116811461145f57600080fd5b6000602082840312156115d457600080fd5b611441826115ae565b602080825282518282018190526000918401906040840190835b8181101561161857835160ff168352602093840193909201916001016115f7565b509095945050505050565b6000806040838503121561163657600080fd5b8235915061164660208401611448565b90509250929050565b80356001600160401b038116811461145f57600080fd5b60008083601f84011261167857600080fd5b5081356001600160401b0381111561168f57600080fd5b6020830191508360208285010111156116a757600080fd5b9250929050565b6000806000806000608086880312156116c657600080fd5b6116cf866115ae565b94506116dd6020870161164f565b93506116eb60408701611448565b925060608601356001600160401b0381111561170657600080fd5b61171288828901611666565b969995985093965092949392505050565b6000806020838503121561173657600080fd5b82356001600160401b0381111561174c57600080fd5b8301601f8101851361175d57600080fd5b80356001600160401b0381111561177357600080fd5b8560208260071b840101111561178857600080fd5b6020919091019590945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156117d6576117d6611798565b604052919050565b600060408284031280156117f157600080fd5b50604080519081016001600160401b038111828210171561181457611814611798565b604052823581526020928301359281019290925250919050565b600080600080600080600060e0888a03121561184957600080fd5b611852886115ae565b9650611860602089016115ae565b95506040880135945060608801356001600160401b0381111561188257600080fd5b8801601f81018a1361189357600080fd5b80356001600160401b038111156118ac576118ac611798565b6118bf601f8201601f19166020016117ae565b8181528b60208385010111156118d457600080fd5b816020840160208301376000918101602001919091529450506080880135925061190060a0890161164f565b915061190e60c08901611448565b905092959891949750929550565b60008060006040848603121561193157600080fd5b83356001600160401b0381111561194757600080fd5b840160a0818703121561195957600080fd5b925060208401356001600160401b0381111561197457600080fd5b61198086828701611666565b9497909650939450505050565b803561ffff8116811461145f57600080fd5b6000602082840312156119b157600080fd5b6114418261198d565b6000806000604084860312156119cf57600080fd5b6119d8846115ae565b925060208401356001600160401b038111156119f357600080fd5b8401601f81018613611a0457600080fd5b80356001600160401b03811115611a1a57600080fd5b8660208260051b8401011115611a2f57600080fd5b939660209190910195509293505050565b60008060408385031215611a5357600080fd5b611a5c836115ae565b915060208301358015158114611a7157600080fd5b809150509250929050565b60008060408385031215611a8f57600080fd5b611a98836115ae565b946020939093013593505050565b600181811c90821680611aba57607f821691505b602082108103611ada57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611b0857600080fd5b6114418261164f565b80356001600160801b038116811461145f57600080fd5b600060208284031215611b3a57600080fd5b61144182611b11565b6020808252810182905260008360408301825b85811015611bca5763ffffffff611b6c846115ae565b1682526001600160401b03611b836020850161164f565b16602083015261ffff611b986040850161198d565b1660408301526001600160801b03611bb260608501611b11565b16606083015260809283019290910190600101611b56565b5095945050505050565b63ffffffff60e01b8860e01b16815263ffffffff60e01b8760e01b16600482015285600882015260008551611c10816028850160208a016114ba565b602892019182019490945260c09290921b6001600160c01b031916604883015260601b6bffffffffffffffffffffffff1916605082015260640195945050505050565b63ffffffff818116838216019081111561082657634e487b7160e01b600052601160045260246000fdfe724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19dea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220d1a546e8508e3b470a3f45040f0f348499a639347aced6c8ee9ce372838989b164736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006edce65403992e310a62460808c4b910d972f10f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c03f31fd86a9077785b7bcf6598ce3598fa91113000000000000000000000000b3e790273f0a89e53d2c20dd4dfe82aa00bbf91b", + "nonce": "0x5d", + "chainId": "0x66eee" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x1dccb0", + "logs": [ + { + "address": "0xbf01f5a6aed5959f984d4e7fb312c542f54cec79", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x53bdd398e4753eabb9bf04a9e708cf3d966ab75c9badda494c8ee5b69a21a0f0", + "blockNumber": "0x5a34fb1", + "transactionHash": "0x8b33b8df67d6d62c01d5b590f5e7be3ab19a522a93c1ab79bf4026878099137a", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + }, + { + "address": "0xbf01f5a6aed5959f984d4e7fb312c542f54cec79", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0xa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x53bdd398e4753eabb9bf04a9e708cf3d966ab75c9badda494c8ee5b69a21a0f0", + "blockNumber": "0x5a34fb1", + "transactionHash": "0x8b33b8df67d6d62c01d5b590f5e7be3ab19a522a93c1ab79bf4026878099137a", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + } + ], + "logsBloom": "0x00000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000020000000000000000000800000000000000000800000000000000000000200000000000000000000000004000000010000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000400100000000000020000000000000000000000000000000000000100000000000000000001000000000", + "type": "0x2", + "transactionHash": "0x8b33b8df67d6d62c01d5b590f5e7be3ab19a522a93c1ab79bf4026878099137a", + "transactionIndex": "0x1", + "blockHash": "0x53bdd398e4753eabb9bf04a9e708cf3d966ab75c9badda494c8ee5b69a21a0f0", + "blockNumber": "0x5a34fb1", + "gasUsed": "0x1dccb0", + "effectiveGasPrice": "0x5f5e100", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0xbf01f5a6aed5959f984d4e7fb312c542f54cec79", + "gasUsedForL1": "0x21ec1", + "l1BlockNumber": "0x6b109a" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730806590, + "chain": 421614, + "commit": "d4e1224" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeployDvn.s.sol/80002/run-1730458104.json b/contracts/evm/broadcast/DeployDvn.s.sol/80002/run-1730458104.json new file mode 100644 index 00000000..24adbe2f --- /dev/null +++ b/contracts/evm/broadcast/DeployDvn.s.sol/80002/run-1730458104.json @@ -0,0 +1,102 @@ +{ + "transactions": [ + { + "hash": "0xc8894a329ed9cc615899992f460c49b1277371f602605843910a85f18fd8d31a", + "transactionType": "CREATE", + "contractName": "NuffDVN", + "contractAddress": "0xe6d53283e3c6d7f8f363baa538b418b1312855bf", + "function": null, + "arguments": [ + "0", + "0x6EDCE65403992e310A62460808c4b910D972f10f", + "1", + "1", + "0xC03f31fD86a9077785b7bCf6598Ce3598Fa91113", + "0xb3e790273f0A89e53d2C20dD4dFe82AA00bbf91b" + ], + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x25ce94", + "value": "0x0", + "input": "0x60a060405234801561001057600080fd5b506040516121b93803806121b983398101604081905261002f91610233565b6003869055600180546001600160a01b0319166001600160a01b0387169081179091556040805163416ecebf60e01b8152905163416ecebf916004808201926020929091908290030181865afa15801561008d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b191906102b8565b63ffffffff1660805260068054600160a01b600160f01b031916600160a01b61ffff871602600160b01b600160f01b03191617600160b01b6001600160401b03861602179055600780546001600160a01b03199081166001600160a01b03858116919091179092556008805490911691831691909117905561013460003361016b565b5061015f7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217753361016b565b505050505050506102e5565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661020d576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101c53390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610211565b5060005b92915050565b80516001600160a01b038116811461022e57600080fd5b919050565b60008060008060008060c0878903121561024c57600080fd5b8651955061025c60208801610217565b9450604087015161ffff8116811461027357600080fd5b60608801519094506001600160401b038116811461029057600080fd5b925061029e60808801610217565b91506102ac60a08801610217565b90509295509295509295565b6000602082840312156102ca57600080fd5b815163ffffffff811681146102de57600080fd5b9392505050565b608051611eb26103076000396000818161054301526110000152611eb26000f3fe60806040526004361061021f5760003560e01c8063724e78da1161012e578063b3129896116100ab578063d547741f1161006f578063d547741f14610783578063f3acc68d146107a3578063f48ab8f2146107c3578063f49ef505146107fe578063fbd9b28b1461082e57600080fd5b8063b3129896146106e3578063bb37d00c14610703578063c358de0a14610723578063c5fdf39c14610743578063cd88b9031461076357600080fd5b806391d14854116100f257806391d14854146105f457806395d376d7146106145780639e94496514610627578063a217fddf146106ac578063a98586e1146106c157600080fd5b8063724e78da146105115780637260753714610531578063741bef1a1461057a57806375b238fc146105b25780638f355c60146105d457600080fd5b806329681700116101bc578063493c7e6411610180578063493c7e641461048557806351cc784f1461049b57806352d3b871146104b157806354093c65146104d15780635b4c2500146104f157600080fd5b806329681700146103cf5780632cf450ee146103ff5780632f2ff15d1461041f57806330bb3aac1461043f57806336568abe1461046557600080fd5b8062bf2e801461022457806301ffc9a71461025e5780631095b6d71461028e5780631703a018146102b0578063180aedf3146102ef5780631fad0b4c1461032457806320ac2ece14610344578063248a9ca31461036457806326e67a37146103a2575b600080fd5b34801561023057600080fd5b5060065461024690600160a01b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561026a57600080fd5b5061027e6102793660046114e0565b610860565b6040519015158152602001610255565b34801561029a57600080fd5b506102ae6102a9366004611526565b610897565b005b3480156102bc57600080fd5b506006546102d790600160b01b90046001600160401b031681565b6040516001600160401b039091168152602001610255565b3480156102fb57600080fd5b5061030f61030a366004611563565b6109ba565b604051610255999897969594939291906115c2565b34801561033057600080fd5b506102ae61033f36600461164b565b610b43565b34801561035057600080fd5b506102ae61035f36600461164b565b610b7e565b34801561037057600080fd5b5061039461037f366004611563565b60009081526020819052604090206001015490565b604051908152602001610255565b3480156103ae57600080fd5b506103c26103bd36600461167a565b610bb9565b6040516102559190611695565b3480156103db57600080fd5b5061027e6103ea36600461167a565b600a6020526000908152604090205460ff1681565b34801561040b57600080fd5b506102ae61041a366004611563565b610c40565b34801561042b57600080fd5b506102ae61043a3660046116db565b610c5e565b34801561044b57600080fd5b5061039461045a366004611766565b506007949350505050565b34801561047157600080fd5b506102ae6104803660046116db565b610c89565b34801561049157600080fd5b5061039460035481565b3480156104a757600080fd5b5061039460025481565b3480156104bd57600080fd5b506102ae6104cc3660046117db565b610cc1565b3480156104dd57600080fd5b506102ae6104ec366004611896565b610e31565b3480156104fd57600080fd5b506102ae61050c36600461164b565b610e58565b34801561051d57600080fd5b506102ae61052c36600461164b565b610e93565b34801561053d57600080fd5b506105657f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610255565b34801561058657600080fd5b5060075461059a906001600160a01b031681565b6040516001600160a01b039091168152602001610255565b3480156105be57600080fd5b50610394600080516020611e5d83398151915281565b3480156105e057600080fd5b506102ae6105ef3660046118e6565b610ece565b34801561060057600080fd5b5061027e61060f3660046116db565b610f4c565b6103946106223660046119c2565b610f75565b34801561063357600080fd5b5061067b61064236600461167a565b600b602052600090815260409020546001600160401b03811690600160401b810461ffff1690600160501b90046001600160801b031683565b604080516001600160401b03909416845261ffff90921660208401526001600160801b031690820152606001610255565b3480156106b857600080fd5b50610394600081565b3480156106cd57600080fd5b50610394600080516020611e3d83398151915281565b3480156106ef57600080fd5b5060015461059a906001600160a01b031681565b34801561070f57600080fd5b5060085461059a906001600160a01b031681565b34801561072f57600080fd5b506102ae61073e366004611a45565b6111b7565b34801561074f57600080fd5b5060065461059a906001600160a01b031681565b34801561076f57600080fd5b506102ae61077e366004611a60565b6111f2565b34801561078f57600080fd5b506102ae61079e3660046116db565b611212565b3480156107af57600080fd5b506102ae6107be366004611ae6565b611237565b3480156107cf57600080fd5b5061027e6107de366004611b22565b600c60209081526000928352604080842090915290825290205460ff1681565b34801561080a57600080fd5b50600454600554610819919082565b60408051928352602083019190915201610255565b34801561083a57600080fd5b5061084e610849366004611b22565b611278565b60405160ff9091168152602001610255565b60006001600160e01b03198216637965db0b60e01b148061089157506301ffc9a760e01b6001600160e01b03198316145b92915050565b600080516020611e5d8339815191526108af816112bb565b6108c7600080516020611e3d83398151915285610f4c565b6109065760405162461bcd60e51b815260206004820152600b60248201526a24b73b30b634b2103634b160a91b60448201526064015b60405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b15801561095057600080fd5b505af1158015610964573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b600960205260009081526040902080546001820180546001600160a01b0383169363ffffffff600160a01b8504811694600160c01b9004169290916109fe90611b4c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2a90611b4c565b8015610a775780601f10610a4c57610100808354040283529160200191610a77565b820191906000526020600020905b815481529060010190602001808311610a5a57829003601f168201915b50505050600283015460038401546004850154600586018054959693956001600160401b0384169550600160401b9093046001600160a01b0390811694921692610ac090611b4c565b80601f0160208091040260200160405190810160405280929190818152602001828054610aec90611b4c565b8015610b395780601f10610b0e57610100808354040283529160200191610b39565b820191906000526020600020905b815481529060010190602001808311610b1c57829003601f168201915b5050505050905089565b600080516020611e5d833981519152610b5b816112bb565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020611e5d833981519152610b96816112bb565b50600880546001600160a01b0319166001600160a01b0392909216919091179055565b63ffffffff81166000908152600d6020908152604091829020805483518184028101840190945280845260609392830182828015610c3457602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610c055790505b50505050509050919050565b600080516020611e5d833981519152610c58816112bb565b50600355565b600082815260208190526040902060010154610c79816112bb565b610c8383836112c8565b50505050565b6001600160a01b0381163314610cb25760405163334bd91960e11b815260040160405180910390fd5b610cbc828261135a565b505050565b600080516020611e5d833981519152610cd9816112bb565b60005b82811015610df25736848483818110610cf757610cf7611b86565b90506080020190506040518060600160405280826020016020810190610d1d9190611b9c565b6001600160401b03168152602001610d3b6060840160408501611a45565b61ffff168152602001610d546080840160608501611bce565b6001600160801b03169052600b6000610d70602085018561167a565b63ffffffff1681526020808201929092526040908101600020835181549385015194909201516001600160801b0316600160501b02600160501b600160d01b031961ffff909516600160401b0269ffffffffffffffffffff199094166001600160401b0390931692909217929092179290921691909117905550600101610cdc565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051610e24929190611be9565b60405180910390a1505050565b600080516020611e5d833981519152610e49816112bb565b50805160045560200151600555565b600080516020611e5d833981519152610e70816112bb565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020611e5d833981519152610eab816112bb565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b3068929eee149b4bd212685403610eed5763ab143c066000526004601cfd5b3068929eee149b4bd21268556040805163ffffffff88168152602081018790527f33d9faf7f95795c8d5bd00585df49c5e70f8c4c8b9b11ed439fb144db238e5c7910160405180910390a13868929eee149b4bd2126855505050505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60003068929eee149b4bd212685403610f965763ab143c066000526004601cfd5b3068929eee149b4bd2126855600080516020611e3d833981519152610fba816112bb565b6000600260008154610fcb90611c7a565b9182905550600081815260096020908152604090912080546001600160c01b0319163363ffffffff60a01b191617600160a01b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16021781559192506110389088018861167a565b815463ffffffff91909116600160c01b0263ffffffff60c01b199091161781556110656020880188611ca1565b6001830191611075919083611d35565b50604087013560028201556110906080880160608901611b9c565b60038201805467ffffffffffffffff19166001600160401b03929092169190911790556110c360a088016080890161164b565b6003820180546001600160a01b0392909216600160401b02600160401b600160e01b03199092169190911790556111056111006020890189611ca1565b6113c5565b6004820180546001600160a01b0319166001600160a01b039290921691909117905560058101611136868883611d35565b50604051828152600b94507fa34614e1f25aade4e7abdcc77ae23ea2ea54c27f927e9060a39d5efe3f71adeb9060200160405180910390a16040518481527f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a15050503868929eee149b4bd21268559392505050565b600080516020611e5d8339815191526111cf816112bb565b506006805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b63ffffffff83166000908152600d60205260409020610c83908383611422565b60008281526020819052604090206001015461122d816112bb565b610c83838361135a565b600080516020611e5d83398151915261124f816112bb565b5063ffffffff919091166000908152600a60205260409020805460ff1916911515919091179055565b600d602052816000526040600020818154811061129457600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b6112c581336113e5565b50565b60006112d48383610f4c565b611352576000838152602081815260408083206001600160a01b03861684529091529020805460ff1916600117905561130a3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610891565b506000610891565b60006113668383610f4c565b15611352576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610891565b60006113d5605160318486611df4565b6113de91611e1e565b9392505050565b6113ef8282610f4c565b61141e5760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016108fd565b5050565b82805482825590600052602060002090601f016020900481019282156114bb5791602002820160005b8382111561148c57833560ff1683826101000a81548160ff021916908360ff160217905550926020019260010160208160000104928301926001030261144b565b80156114b95782816101000a81549060ff021916905560010160208160000104928301926001030261148c565b505b506114c79291506114cb565b5090565b5b808211156114c757600081556001016114cc565b6000602082840312156114f257600080fd5b81356001600160e01b0319811681146113de57600080fd5b80356001600160a01b038116811461152157600080fd5b919050565b60008060006060848603121561153b57600080fd5b6115448461150a565b92506115526020850161150a565b929592945050506040919091013590565b60006020828403121561157557600080fd5b5035919050565b6000815180845260005b818110156115a257602081850181015186830182015201611586565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b038a16815263ffffffff898116602083015288166040820152610120606082018190526000906115fb9083018961157c565b608083018890526001600160401b03871660a08401526001600160a01b0386811660c0850152851660e084015282810361010084015261163b818561157c565b9c9b505050505050505050505050565b60006020828403121561165d57600080fd5b6113de8261150a565b803563ffffffff8116811461152157600080fd5b60006020828403121561168c57600080fd5b6113de82611666565b602080825282518282018190526000918401906040840190835b818110156116d057835160ff168352602093840193909201916001016116af565b509095945050505050565b600080604083850312156116ee57600080fd5b823591506116fe6020840161150a565b90509250929050565b80356001600160401b038116811461152157600080fd5b60008083601f84011261173057600080fd5b5081356001600160401b0381111561174757600080fd5b60208301915083602082850101111561175f57600080fd5b9250929050565b60008060008060006080868803121561177e57600080fd5b61178786611666565b945061179560208701611707565b93506117a36040870161150a565b925060608601356001600160401b038111156117be57600080fd5b6117ca8882890161171e565b969995985093965092949392505050565b600080602083850312156117ee57600080fd5b82356001600160401b0381111561180457600080fd5b8301601f8101851361181557600080fd5b80356001600160401b0381111561182b57600080fd5b8560208260071b840101111561184057600080fd5b6020919091019590945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561188e5761188e611850565b604052919050565b600060408284031280156118a957600080fd5b50604080519081016001600160401b03811182821017156118cc576118cc611850565b604052823581526020928301359281019290925250919050565b60008060008060008060c087890312156118ff57600080fd5b61190887611666565b95506020870135945060408701356001600160401b0381111561192a57600080fd5b8701601f8101891361193b57600080fd5b80356001600160401b0381111561195457611954611850565b611967601f8201601f1916602001611866565b8181528a602083850101111561197c57600080fd5b81602084016020830137600091810160200191909152945050606087013592506119a860808801611707565b91506119b660a0880161150a565b90509295509295509295565b6000806000604084860312156119d757600080fd5b83356001600160401b038111156119ed57600080fd5b840160a081870312156119ff57600080fd5b925060208401356001600160401b03811115611a1a57600080fd5b611a268682870161171e565b9497909650939450505050565b803561ffff8116811461152157600080fd5b600060208284031215611a5757600080fd5b6113de82611a33565b600080600060408486031215611a7557600080fd5b611a7e84611666565b925060208401356001600160401b03811115611a9957600080fd5b8401601f81018613611aaa57600080fd5b80356001600160401b03811115611ac057600080fd5b8660208260051b8401011115611ad557600080fd5b939660209190910195509293505050565b60008060408385031215611af957600080fd5b611b0283611666565b915060208301358015158114611b1757600080fd5b809150509250929050565b60008060408385031215611b3557600080fd5b611b3e83611666565b946020939093013593505050565b600181811c90821680611b6057607f821691505b602082108103611b8057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611bae57600080fd5b6113de82611707565b80356001600160801b038116811461152157600080fd5b600060208284031215611be057600080fd5b6113de82611bb7565b6020808252810182905260008360408301825b85811015611c705763ffffffff611c1284611666565b1682526001600160401b03611c2960208501611707565b16602083015261ffff611c3e60408501611a33565b1660408301526001600160801b03611c5860608501611bb7565b16606083015260809283019290910190600101611bfc565b5095945050505050565b600060018201611c9a57634e487b7160e01b600052601160045260246000fd5b5060010190565b6000808335601e19843603018112611cb857600080fd5b8301803591506001600160401b03821115611cd257600080fd5b60200191503681900382131561175f57600080fd5b601f821115610cbc57806000526020600020601f840160051c81016020851015611d0e5750805b601f840160051c820191505b81811015611d2e5760008155600101611d1a565b5050505050565b6001600160401b03831115611d4c57611d4c611850565b611d6083611d5a8354611b4c565b83611ce7565b6000601f841160018114611d945760008515611d7c5750838201355b600019600387901b1c1916600186901b178355611d2e565b600083815260209020601f19861690835b82811015611dc55786850135825560209485019460019092019101611da5565b5086821015611de25760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60008085851115611e0457600080fd5b83861115611e1157600080fd5b5050820193919092039150565b8035602083101561089157600019602084900360031b1b169291505056fe724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19dea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a26469706673582212207480a3a059a908a83ec12131b36efd2ce41baa2ab0eb8a74d823ce93e550373e64736f6c634300081a003300000000000000000000000000000000000000000000000000000000000000000000000000000000000000006edce65403992e310a62460808c4b910d972f10f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c03f31fd86a9077785b7bcf6598ce3598fa91113000000000000000000000000b3e790273f0a89e53d2c20dd4dfe82aa00bbf91b", + "nonce": "0x1b", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x1d1738", + "logs": [ + { + "address": "0xe6d53283e3c6d7f8f363baa538b418b1312855bf", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x70754499322a81c9d8625744a1b521baf4772d35a51f863546c4e10d3fb53b7a", + "blockNumber": "0xd3e562", + "transactionHash": "0xc8894a329ed9cc615899992f460c49b1277371f602605843910a85f18fd8d31a", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + }, + { + "address": "0xe6d53283e3c6d7f8f363baa538b418b1312855bf", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0xa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x70754499322a81c9d8625744a1b521baf4772d35a51f863546c4e10d3fb53b7a", + "blockNumber": "0xd3e562", + "transactionHash": "0xc8894a329ed9cc615899992f460c49b1277371f602605843910a85f18fd8d31a", + "transactionIndex": "0x0", + "logIndex": "0x1", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000093feed2cc3d58c2b1bb62ce63125fa7fcaae7177" + ], + "data": "0x00000000000000000000000000000000000000000000000001067634171a9590000000000000000000000000000000000000000000000000799cb84394e7cd3c00000000000000000000000000000000000000000000003176b89a5e91819e360000000000000000000000000000000000000000000000007896420f7dcd37ac00000000000000000000000000000000000000000000003177bf1092a89c33c6", + "blockHash": "0x70754499322a81c9d8625744a1b521baf4772d35a51f863546c4e10d3fb53b7a", + "blockNumber": "0xd3e562", + "transactionHash": "0xc8894a329ed9cc615899992f460c49b1277371f602605843910a85f18fd8d31a", + "transactionIndex": "0x0", + "logIndex": "0x2", + "removed": false + } + ], + "logsBloom": "0x0000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000004000000000000800000000020000000000100000000000000000000020000000000000000000800000000000000000880000000000000000000200000000000000000000000004000000000000000000000040000000000200800000400000000000000000000000000000000000000001000000000004000000000000000000001000000000000000000080000400100100000000020000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0xc8894a329ed9cc615899992f460c49b1277371f602605843910a85f18fd8d31a", + "transactionIndex": "0x0", + "blockHash": "0x70754499322a81c9d8625744a1b521baf4772d35a51f863546c4e10d3fb53b7a", + "blockNumber": "0xd3e562", + "gasUsed": "0x1d1738", + "effectiveGasPrice": "0x905ae138d", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0xe6d53283e3c6d7f8f363baa538b418b1312855bf" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730458104, + "chain": 80002, + "commit": "ac971d2" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeployDvn.s.sol/80002/run-1730796595.json b/contracts/evm/broadcast/DeployDvn.s.sol/80002/run-1730796595.json new file mode 100644 index 00000000..90ca7d18 --- /dev/null +++ b/contracts/evm/broadcast/DeployDvn.s.sol/80002/run-1730796595.json @@ -0,0 +1,102 @@ +{ + "transactions": [ + { + "hash": "0x01cb74c8c7d150d8825b047db057da72bc8e9d5a96b25e17cbaba108124aafa3", + "transactionType": "CREATE", + "contractName": "NuffDVN", + "contractAddress": "0xf262c523c07ea7b0dedfa99d56dc2b602fba5b76", + "function": null, + "arguments": [ + "(0, 0)", + "0x6EDCE65403992e310A62460808c4b910D972f10f", + "1", + "1", + "0xC03f31fD86a9077785b7bCf6598Ce3598Fa91113", + "0xb3e790273f0A89e53d2C20dD4dFe82AA00bbf91b" + ], + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x2b4f67", + "value": "0x0", + "input": "0x60a060405234801561001057600080fd5b5060405161272338038061272383398101604081905261002f91610263565b85516003556020808701516004908155600180546001600160a01b0319166001600160a01b0389169081179091556040805163416ecebf60e01b81529051919363416ecebf938281019391928290030181865afa158015610094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b89190610321565b63ffffffff1660805260058054600160a01b600160f01b031916600160a01b61ffff871602600160b01b600160f01b03191617600160b01b6001600160401b03861602179055600680546001600160a01b03199081166001600160a01b03858116919091179092556007805490911691831691909117905561013b600033610172565b506101667fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610172565b5050505050505061034e565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16610214576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101cc3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610218565b5060005b92915050565b80516001600160a01b038116811461023557600080fd5b919050565b805161ffff8116811461023557600080fd5b80516001600160401b038116811461023557600080fd5b60008060008060008086880360e081121561027d57600080fd5b604081121561028b57600080fd5b50604080519081016001600160401b03811182821017156102bc57634e487b7160e01b600052604160045260246000fd5b6040908152885182526020808a0151908301529096506102dd90880161021e565b94506102eb6060880161023a565b93506102f96080880161024c565b925061030760a0880161021e565b915061031560c0880161021e565b90509295509295509295565b60006020828403121561033357600080fd5b815163ffffffff8116811461034757600080fd5b9392505050565b6080516123a561037e600039600081816104f1015281816111610152818161167e01526116be01526123a56000f3fe6080604052600436106101e95760003560e01c8063724e78da11610113578063b3129896116100ab578063d547741f1161006f578063d547741f14610711578063f3acc68d14610731578063f48ab8f214610751578063f49ef5051461078c578063fbd9b28b146107bc57600080fd5b8063b312989614610671578063bb37d00c14610691578063c358de0a146106b1578063c5fdf39c146106d1578063cd88b903146106f157600080fd5b8063724e78da146104bf57806372607537146104df578063741bef1a1461052857806375b238fc1461056057806391d148541461058257806395d376d7146105a25780639e944965146105b5578063a217fddf1461063a578063a98586e11461064f57600080fd5b8063296817001161018657806329681700146103995780632f2ff15d146103c957806330bb3aac146103e957806336568abe1461040957806351cc784f1461042957806352d3b8711461043f57806354093c651461045f5780635580c07d1461047f5780635b4c25001461049f57600080fd5b8062bf2e80146101ee57806301ffc9a7146102285780631095b6d7146102585780631703a0181461027a578063180aedf3146102b95780631fad0b4c146102ee57806320ac2ece1461030e578063248a9ca31461032e57806326e67a371461036c575b600080fd5b3480156101fa57600080fd5b5060055461021090600160a01b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561023457600080fd5b50610248610243366004611815565b6107ee565b604051901515815260200161021f565b34801561026457600080fd5b5061027861027336600461185b565b610825565b005b34801561028657600080fd5b506005546102a190600160b01b90046001600160401b031681565b6040516001600160401b03909116815260200161021f565b3480156102c557600080fd5b506102d96102d4366004611898565b610948565b60405161021f99989796959493929190611901565b3480156102fa57600080fd5b5061027861030936600461198a565b610ad1565b34801561031a57600080fd5b5061027861032936600461198a565b610b0c565b34801561033a57600080fd5b5061035e610349366004611898565b60009081526020819052604090206001015490565b60405190815260200161021f565b34801561037857600080fd5b5061038c6103873660046119b9565b610b47565b60405161021f91906119d4565b3480156103a557600080fd5b506102486103b43660046119b9565b60096020526000908152604090205460ff1681565b3480156103d557600080fd5b506102786103e4366004611a1a565b610bce565b3480156103f557600080fd5b5061035e610404366004611aa5565b610bf9565b34801561041557600080fd5b50610278610424366004611a1a565b610ce0565b34801561043557600080fd5b5061035e60025481565b34801561044b57600080fd5b5061027861045a366004611b1a565b610d18565b34801561046b57600080fd5b5061027861047a366004611bd5565b610e88565b34801561048b57600080fd5b5061027861049a366004611c25565b610eaf565b3480156104ab57600080fd5b506102786104ba36600461198a565b611037565b3480156104cb57600080fd5b506102786104da36600461198a565b611072565b3480156104eb57600080fd5b506105137f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161021f565b34801561053457600080fd5b50600654610548906001600160a01b031681565b6040516001600160a01b03909116815260200161021f565b34801561056c57600080fd5b5061035e60008051602061235083398151915281565b34801561058e57600080fd5b5061024861059d366004611a1a565b6110ad565b61035e6105b0366004611d13565b6110d6565b3480156105c157600080fd5b506106096105d03660046119b9565b600a602052600090815260409020546001600160401b03811690600160401b810461ffff1690600160501b90046001600160801b031683565b604080516001600160401b03909416845261ffff90921660208401526001600160801b03169082015260600161021f565b34801561064657600080fd5b5061035e600081565b34801561065b57600080fd5b5061035e60008051602061233083398151915281565b34801561067d57600080fd5b50600154610548906001600160a01b031681565b34801561069d57600080fd5b50600754610548906001600160a01b031681565b3480156106bd57600080fd5b506102786106cc366004611d96565b611465565b3480156106dd57600080fd5b50600554610548906001600160a01b031681565b3480156106fd57600080fd5b5061027861070c366004611db1565b6114a0565b34801561071d57600080fd5b5061027861072c366004611a1a565b6114c0565b34801561073d57600080fd5b5061027861074c366004611e37565b6114e5565b34801561075d57600080fd5b5061024861076c366004611e73565b600b60209081526000928352604080842090915290825290205460ff1681565b34801561079857600080fd5b506003546004546107a7919082565b6040805192835260208301919091520161021f565b3480156107c857600080fd5b506107dc6107d7366004611e73565b611526565b60405160ff909116815260200161021f565b60006001600160e01b03198216637965db0b60e01b148061081f57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008051602061235083398151915261083d81611569565b610855600080516020612330833981519152856110ad565b6108945760405162461bcd60e51b815260206004820152600b60248201526a24b73b30b634b2103634b160a91b60448201526064015b60405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b1580156108de57600080fd5b505af11580156108f2573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b600860205260009081526040902080546001820180546001600160a01b0383169363ffffffff600160a01b8504811694600160c01b90041692909161098c90611e9d565b80601f01602080910402602001604051908101604052809291908181526020018280546109b890611e9d565b8015610a055780601f106109da57610100808354040283529160200191610a05565b820191906000526020600020905b8154815290600101906020018083116109e857829003601f168201915b50505050600283015460038401546004850154600586018054959693956001600160401b0384169550600160401b9093046001600160a01b0390811694921692610a4e90611e9d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7a90611e9d565b8015610ac75780601f10610a9c57610100808354040283529160200191610ac7565b820191906000526020600020905b815481529060010190602001808311610aaa57829003601f168201915b5050505050905089565b600080516020612350833981519152610ae981611569565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020612350833981519152610b2481611569565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b63ffffffff81166000908152600c6020908152604091829020805483518184028101840190945280845260609392830182828015610bc257602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610b935790505b50505050509050919050565b600082815260208190526040902060010154610be981611569565b610bf38383611576565b50505050565b6040805160c0810182526006546001600160a01b03908116825263ffffffff881660208084018290526001600160401b03898116858701528884166060860152600554600160b01b81049091166080860152600160a01b900461ffff1660a08501526007546000928352600a9091528482209451637bfa20a960e01b81529194921691637bfa20a991610c9491859189908990600401611f00565b602060405180830381865afa158015610cb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd59190611fbd565b979650505050505050565b6001600160a01b0381163314610d095760405163334bd91960e11b815260040160405180910390fd5b610d138282611608565b505050565b600080516020612350833981519152610d3081611569565b60005b82811015610e495736848483818110610d4e57610d4e611fd6565b90506080020190506040518060600160405280826020016020810190610d749190611fec565b6001600160401b03168152602001610d926060840160408501611d96565b61ffff168152602001610dab608084016060850161201e565b6001600160801b03169052600a6000610dc760208501856119b9565b63ffffffff1681526020808201929092526040908101600020835181549385015194909201516001600160801b0316600160501b02600160501b600160d01b031961ffff909516600160401b0269ffffffffffffffffffff199094166001600160401b0390931692909217929092179290921691909117905550600101610d33565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051610e7b929190612039565b60405180910390a1505050565b600080516020612350833981519152610ea081611569565b50805160035560200151600455565b3068929eee149b4bd212685403610ece5763ab143c066000526004601cfd5b3068929eee149b4bd2126855610ee386611673565b610f205760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908191cdd115a5960921b604482015260640161088b565b63ffffffff87166000908152600b6020908152604080832088845290915290205460ff1615610f915760405162461bcd60e51b815260206004820152601d60248201527f737263206a6f62496420697320616c7265616479207665726966696564000000604482015260640161088b565b63ffffffff87166000908152600b60209081526040808320888452825291829020805460ff191660011790559051610fd7918991899189918991899189918991016120ca565b60408051808303601f1901905281815263ffffffff89168252602082018790527f33d9faf7f95795c8d5bd00585df49c5e70f8c4c8b9b11ed439fb144db238e5c7910160405180910390a13868929eee149b4bd212685550505050505050565b60008051602061235083398151915261104f81611569565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008051602061235083398151915261108a81611569565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60003068929eee149b4bd2126854036110f75763ab143c066000526004601cfd5b3068929eee149b4bd212685560008051602061233083398151915261111b81611569565b600060026000815461112c9061215f565b9182905550600081815260086020908152604090912080546001600160c01b0319163363ffffffff60a01b191617600160a01b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff1602178155919250611199908801886119b9565b815463ffffffff91909116600160c01b0263ffffffff60c01b199091161781556111c66020880188612178565b60018301916111d691908361220c565b50604087013560028201556111f16080880160608901611fec565b60038201805467ffffffffffffffff19166001600160401b039290921691909117905561122460a088016080890161198a565b6003820180546001600160a01b0392909216600160401b02600160401b600160e01b03199092169190911790556112666112616020890189612178565b6116fa565b6004820180546001600160a01b0319166001600160a01b03929092169190911790556005810161129786888361220c565b506040805160c081019091526006546001600160a01b031681526000906020808201906112c6908b018b6119b9565b63ffffffff1681526020016112e160808b0160608c01611fec565b6001600160401b031681526020016112ff60a08b0160808c0161198a565b6001600160a01b039081168252600554600160b01b81046001600160401b0316602080850191909152600160a01b90910461ffff16604090930192909252600754929350919091169063df2b057e908390600a90600090611362908e018e6119b9565b63ffffffff1663ffffffff1681526020019081526020016000208a8a6040518563ffffffff1660e01b815260040161139d9493929190611f00565b6020604051808303816000875af11580156113bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e09190611fbd565b94507fa34614e1f25aade4e7abdcc77ae23ea2ea54c27f927e9060a39d5efe3f71adeb8360405161141391815260200190565b60405180910390a16040518581527f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a1505050503868929eee149b4bd21268559392505050565b60008051602061235083398151915261147d81611569565b506005805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b63ffffffff83166000908152600c60205260409020610bf3908383611757565b6000828152602081905260409020600101546114db81611569565b610bf38383611608565b6000805160206123508339815191526114fd81611569565b5063ffffffff919091166000908152600960205260409020805460ff1916911515919091179055565b600c602052816000526040600020818154811061154257600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b611573813361171a565b50565b600061158283836110ad565b611600576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556115b83390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161081f565b50600061081f565b600061161483836110ad565b15611600576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161081f565b60008163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff1614806116e557506116b6826175306122cb565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16145b156116f257506001919050565b506000919050565b600061170a6051603184866122e7565b61171391612311565b9392505050565b61172482826110ad565b6117535760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440161088b565b5050565b82805482825590600052602060002090601f016020900481019282156117f05791602002820160005b838211156117c157833560ff1683826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302611780565b80156117ee5782816101000a81549060ff02191690556001016020816000010492830192600103026117c1565b505b506117fc929150611800565b5090565b5b808211156117fc5760008155600101611801565b60006020828403121561182757600080fd5b81356001600160e01b03198116811461171357600080fd5b80356001600160a01b038116811461185657600080fd5b919050565b60008060006060848603121561187057600080fd5b6118798461183f565b92506118876020850161183f565b929592945050506040919091013590565b6000602082840312156118aa57600080fd5b5035919050565b60005b838110156118cc5781810151838201526020016118b4565b50506000910152565b600081518084526118ed8160208601602086016118b1565b601f01601f19169290920160200192915050565b6001600160a01b038a16815263ffffffff8981166020830152881660408201526101206060820181905260009061193a908301896118d5565b608083018890526001600160401b03871660a08401526001600160a01b0386811660c0850152851660e084015282810361010084015261197a81856118d5565b9c9b505050505050505050505050565b60006020828403121561199c57600080fd5b6117138261183f565b803563ffffffff8116811461185657600080fd5b6000602082840312156119cb57600080fd5b611713826119a5565b602080825282518282018190526000918401906040840190835b81811015611a0f57835160ff168352602093840193909201916001016119ee565b509095945050505050565b60008060408385031215611a2d57600080fd5b82359150611a3d6020840161183f565b90509250929050565b80356001600160401b038116811461185657600080fd5b60008083601f840112611a6f57600080fd5b5081356001600160401b03811115611a8657600080fd5b602083019150836020828501011115611a9e57600080fd5b9250929050565b600080600080600060808688031215611abd57600080fd5b611ac6866119a5565b9450611ad460208701611a46565b9350611ae26040870161183f565b925060608601356001600160401b03811115611afd57600080fd5b611b0988828901611a5d565b969995985093965092949392505050565b60008060208385031215611b2d57600080fd5b82356001600160401b03811115611b4357600080fd5b8301601f81018513611b5457600080fd5b80356001600160401b03811115611b6a57600080fd5b8560208260071b8401011115611b7f57600080fd5b6020919091019590945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611bcd57611bcd611b8f565b604052919050565b60006040828403128015611be857600080fd5b50604080519081016001600160401b0381118282101715611c0b57611c0b611b8f565b604052823581526020928301359281019290925250919050565b600080600080600080600060e0888a031215611c4057600080fd5b611c49886119a5565b9650611c57602089016119a5565b95506040880135945060608801356001600160401b03811115611c7957600080fd5b8801601f81018a13611c8a57600080fd5b80356001600160401b03811115611ca357611ca3611b8f565b611cb6601f8201601f1916602001611ba5565b8181528b6020838501011115611ccb57600080fd5b8160208401602083013760009181016020019190915294505060808801359250611cf760a08901611a46565b9150611d0560c0890161183f565b905092959891949750929550565b600080600060408486031215611d2857600080fd5b83356001600160401b03811115611d3e57600080fd5b840160a08187031215611d5057600080fd5b925060208401356001600160401b03811115611d6b57600080fd5b611d7786828701611a5d565b9497909650939450505050565b803561ffff8116811461185657600080fd5b600060208284031215611da857600080fd5b61171382611d84565b600080600060408486031215611dc657600080fd5b611dcf846119a5565b925060208401356001600160401b03811115611dea57600080fd5b8401601f81018613611dfb57600080fd5b80356001600160401b03811115611e1157600080fd5b8660208260051b8401011115611e2657600080fd5b939660209190910195509293505050565b60008060408385031215611e4a57600080fd5b611e53836119a5565b915060208301358015158114611e6857600080fd5b809150509250929050565b60008060408385031215611e8657600080fd5b611e8f836119a5565b946020939093013593505050565b600181811c90821680611eb157607f821691505b602082108103611ed157634e487b7160e01b600052602260045260246000fd5b50919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b03855116815263ffffffff60208601511660208201526001600160401b03604086015116604082015260018060a01b0360608601511660608201526001600160401b03608086015116608082015261ffff60a08601511660a0820152611f9960c0820185546001600160401b0381168252604081811c61ffff16602084015260509190911c6001600160801b0316910152565b6101406101208201526000611fb361014083018486611ed7565b9695505050505050565b600060208284031215611fcf57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611ffe57600080fd5b61171382611a46565b80356001600160801b038116811461185657600080fd5b60006020828403121561203057600080fd5b61171382612007565b6020808252810182905260008360408301825b858110156120c05763ffffffff612062846119a5565b1682526001600160401b0361207960208501611a46565b16602083015261ffff61208e60408501611d84565b1660408301526001600160801b036120a860608501612007565b1660608301526080928301929091019060010161204c565b5095945050505050565b63ffffffff60e01b8860e01b16815263ffffffff60e01b8760e01b16600482015285600882015260008551612106816028850160208a016118b1565b602892019182019490945260c09290921b6001600160c01b031916604883015260601b6bffffffffffffffffffffffff1916605082015260640195945050505050565b634e487b7160e01b600052601160045260246000fd5b60006001820161217157612171612149565b5060010190565b6000808335601e1984360301811261218f57600080fd5b8301803591506001600160401b038211156121a957600080fd5b602001915036819003821315611a9e57600080fd5b601f821115610d1357806000526020600020601f840160051c810160208510156121e55750805b601f840160051c820191505b8181101561220557600081556001016121f1565b5050505050565b6001600160401b0383111561222357612223611b8f565b612237836122318354611e9d565b836121be565b6000601f84116001811461226b57600085156122535750838201355b600019600387901b1c1916600186901b178355612205565b600083815260209020601f19861690835b8281101561229c578685013582556020948501946001909201910161227c565b50868210156122b95760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b63ffffffff818116838216019081111561081f5761081f612149565b600080858511156122f757600080fd5b8386111561230457600080fd5b5050820193919092039150565b8035602083101561081f57600019602084900360031b1b169291505056fe724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19dea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220fbe5f848742a50c9a41c386d830b9ab6fd6236867ba154c6a61fd4620e82ba2f64736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006edce65403992e310a62460808c4b910d972f10f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c03f31fd86a9077785b7bcf6598ce3598fa91113000000000000000000000000b3e790273f0a89e53d2c20dd4dfe82aa00bbf91b", + "nonce": "0x26", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x21e628", + "logs": [ + { + "address": "0xf262c523c07ea7b0dedfa99d56dc2b602fba5b76", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0xe40b495e6452363f87022fc686ebe23ff6741e57335d9e047881e76876ebbea4", + "blockNumber": "0xd652b7", + "transactionHash": "0x01cb74c8c7d150d8825b047db057da72bc8e9d5a96b25e17cbaba108124aafa3", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + }, + { + "address": "0xf262c523c07ea7b0dedfa99d56dc2b602fba5b76", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0xa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0xe40b495e6452363f87022fc686ebe23ff6741e57335d9e047881e76876ebbea4", + "blockNumber": "0xd652b7", + "transactionHash": "0x01cb74c8c7d150d8825b047db057da72bc8e9d5a96b25e17cbaba108124aafa3", + "transactionIndex": "0x1", + "logIndex": "0x2", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x0000000000000000000000004ca9ff871c7aa1e7b64e1eae110835f68d6a0bd4" + ], + "data": "0x000000000000000000000000000000000000000000000000047b72ddd18ff060000000000000000000000000000000000000000000000000764768878f79bd4c000000000000000000000000000000000000000000000025918906c6be0b6fd900000000000000000000000000000000000000000000000071cbf5a9bde9ccec000000000000000000000000000000000000000000000025960479a48f9b6039", + "blockHash": "0xe40b495e6452363f87022fc686ebe23ff6741e57335d9e047881e76876ebbea4", + "blockNumber": "0xd652b7", + "transactionHash": "0x01cb74c8c7d150d8825b047db057da72bc8e9d5a96b25e17cbaba108124aafa3", + "transactionIndex": "0x1", + "logIndex": "0x3", + "removed": false + } + ], + "logsBloom": "0x0000000400000000000000000000000000000000000000000000000000000080000000000000000000000000000000002000c000000000000000000000000000000000000000400000000000000000800000000020000000000100000000000000000000020000000000000000000800000000000000000880000000000000000000200000000000000000000000004000008000000000000000000000000000200000000000040000000000000000000000000000000000001000000000004000000000000000000001000000000000000000002000400100100000000020000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0x01cb74c8c7d150d8825b047db057da72bc8e9d5a96b25e17cbaba108124aafa3", + "transactionIndex": "0x1", + "blockHash": "0xe40b495e6452363f87022fc686ebe23ff6741e57335d9e047881e76876ebbea4", + "blockNumber": "0xd652b7", + "gasUsed": "0x215348", + "effectiveGasPrice": "0x226e86943b", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0xf262c523c07ea7b0dedfa99d56dc2b602fba5b76" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730796595, + "chain": 80002, + "commit": "d4e1224" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeployDvn.s.sol/80002/run-1730797470.json b/contracts/evm/broadcast/DeployDvn.s.sol/80002/run-1730797470.json new file mode 100644 index 00000000..6d7caf21 --- /dev/null +++ b/contracts/evm/broadcast/DeployDvn.s.sol/80002/run-1730797470.json @@ -0,0 +1,102 @@ +{ + "transactions": [ + { + "hash": "0x4f4940ead84440090dc2d6c84fd003b5fdff909320ec735193c14edca39c4eea", + "transactionType": "CREATE", + "contractName": "NuffDVN", + "contractAddress": "0xce7ee05be76f4c44b8ea584199f8db31023a2da7", + "function": null, + "arguments": [ + "(0, 0)", + "0x6EDCE65403992e310A62460808c4b910D972f10f", + "1", + "1", + "0xC03f31fD86a9077785b7bCf6598Ce3598Fa91113", + "0xb3e790273f0A89e53d2C20dD4dFe82AA00bbf91b" + ], + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x2772a8", + "value": "0x0", + "input": "0x60a060405234801561001057600080fd5b5060405161239538038061239583398101604081905261002f91610263565b85516003556020808701516004908155600180546001600160a01b0319166001600160a01b0389169081179091556040805163416ecebf60e01b81529051919363416ecebf938281019391928290030181865afa158015610094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b89190610321565b63ffffffff1660805260058054600160a01b600160f01b031916600160a01b61ffff871602600160b01b600160f01b03191617600160b01b6001600160401b03861602179055600680546001600160a01b03199081166001600160a01b03858116919091179092556007805490911691831691909117905561013b600033610172565b506101667fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610172565b5050505050505061034e565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16610214576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101cc3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610218565b5060005b92915050565b80516001600160a01b038116811461023557600080fd5b919050565b805161ffff8116811461023557600080fd5b80516001600160401b038116811461023557600080fd5b60008060008060008086880360e081121561027d57600080fd5b604081121561028b57600080fd5b50604080519081016001600160401b03811182821017156102bc57634e487b7160e01b600052604160045260246000fd5b6040908152885182526020808a0151908301529096506102dd90880161021e565b94506102eb6060880161023a565b93506102f96080880161024c565b925061030760a0880161021e565b915061031560c0880161021e565b90509295509295509295565b60006020828403121561033357600080fd5b815163ffffffff8116811461034757600080fd5b9392505050565b60805161201e610377600039600081816104f1015281816114cc015261150c015261201e6000f3fe6080604052600436106101e95760003560e01c8063724e78da11610113578063b3129896116100ab578063d547741f1161006f578063d547741f14610711578063f3acc68d14610731578063f48ab8f214610751578063f49ef5051461078c578063fbd9b28b146107bc57600080fd5b8063b312989614610671578063bb37d00c14610691578063c358de0a146106b1578063c5fdf39c146106d1578063cd88b903146106f157600080fd5b8063724e78da146104bf57806372607537146104df578063741bef1a1461052857806375b238fc1461056057806391d148541461058257806395d376d7146105a25780639e944965146105b5578063a217fddf1461063a578063a98586e11461064f57600080fd5b8063296817001161018657806329681700146103995780632f2ff15d146103c957806330bb3aac146103e957806336568abe1461040957806351cc784f1461042957806352d3b8711461043f57806354093c651461045f5780635580c07d1461047f5780635b4c25001461049f57600080fd5b8062bf2e80146101ee57806301ffc9a7146102285780631095b6d7146102585780631703a0181461027a578063180aedf3146102b95780631fad0b4c146102ee57806320ac2ece1461030e578063248a9ca31461032e57806326e67a371461036c575b600080fd5b3480156101fa57600080fd5b5060055461021090600160a01b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561023457600080fd5b50610248610243366004611643565b6107ee565b604051901515815260200161021f565b34801561026457600080fd5b50610278610273366004611690565b610825565b005b34801561028657600080fd5b506005546102a190600160b01b90046001600160401b031681565b6040516001600160401b03909116815260200161021f565b3480156102c557600080fd5b506102d96102d43660046116cd565b610948565b60405161021f99989796959493929190611736565b3480156102fa57600080fd5b506102786103093660046117bf565b610ad1565b34801561031a57600080fd5b506102786103293660046117bf565b610b0c565b34801561033a57600080fd5b5061035e6103493660046116cd565b60009081526020819052604090206001015490565b60405190815260200161021f565b34801561037857600080fd5b5061038c6103873660046117ee565b610b47565b60405161021f9190611809565b3480156103a557600080fd5b506102486103b43660046117ee565b60096020526000908152604090205460ff1681565b3480156103d557600080fd5b506102786103e436600461184f565b610bce565b3480156103f557600080fd5b5061035e6104043660046118da565b610bf9565b34801561041557600080fd5b5061027861042436600461184f565b610ce0565b34801561043557600080fd5b5061035e60025481565b34801561044b57600080fd5b5061027861045a36600461194f565b610d18565b34801561046b57600080fd5b5061027861047a366004611a0a565b610e88565b34801561048b57600080fd5b5061027861049a366004611a5a565b610eaf565b3480156104ab57600080fd5b506102786104ba3660046117bf565b611037565b3480156104cb57600080fd5b506102786104da3660046117bf565b611072565b3480156104eb57600080fd5b506105137f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161021f565b34801561053457600080fd5b50600654610548906001600160a01b031681565b6040516001600160a01b03909116815260200161021f565b34801561056c57600080fd5b5061035e600080516020611fc983398151915281565b34801561058e57600080fd5b5061024861059d36600461184f565b6110ad565b61035e6105b0366004611b48565b6110d6565b3480156105c157600080fd5b506106096105d03660046117ee565b600a602052600090815260409020546001600160401b03811690600160401b810461ffff1690600160501b90046001600160801b031683565b604080516001600160401b03909416845261ffff90921660208401526001600160801b03169082015260600161021f565b34801561064657600080fd5b5061035e600081565b34801561065b57600080fd5b5061035e600080516020611fa983398151915281565b34801561067d57600080fd5b50600154610548906001600160a01b031681565b34801561069d57600080fd5b50600754610548906001600160a01b031681565b3480156106bd57600080fd5b506102786106cc366004611bcb565b6112b3565b3480156106dd57600080fd5b50600554610548906001600160a01b031681565b3480156106fd57600080fd5b5061027861070c366004611be6565b6112ee565b34801561071d57600080fd5b5061027861072c36600461184f565b61130e565b34801561073d57600080fd5b5061027861074c366004611c6c565b611333565b34801561075d57600080fd5b5061024861076c366004611ca8565b600b60209081526000928352604080842090915290825290205460ff1681565b34801561079857600080fd5b506003546004546107a7919082565b6040805192835260208301919091520161021f565b3480156107c857600080fd5b506107dc6107d7366004611ca8565b611374565b60405160ff909116815260200161021f565b60006001600160e01b03198216637965db0b60e01b148061081f57506301ffc9a760e01b6001600160e01b03198316145b92915050565b600080516020611fc983398151915261083d816113b7565b610855600080516020611fa9833981519152856110ad565b6108945760405162461bcd60e51b815260206004820152600b60248201526a24b73b30b634b2103634b160a91b60448201526064015b60405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b1580156108de57600080fd5b505af11580156108f2573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b600860205260009081526040902080546001820180546001600160a01b0383169363ffffffff600160a01b8504811694600160c01b90041692909161098c90611cd2565b80601f01602080910402602001604051908101604052809291908181526020018280546109b890611cd2565b8015610a055780601f106109da57610100808354040283529160200191610a05565b820191906000526020600020905b8154815290600101906020018083116109e857829003601f168201915b50505050600283015460038401546004850154600586018054959693956001600160401b0384169550600160401b9093046001600160a01b0390811694921692610a4e90611cd2565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7a90611cd2565b8015610ac75780601f10610a9c57610100808354040283529160200191610ac7565b820191906000526020600020905b815481529060010190602001808311610aaa57829003601f168201915b5050505050905089565b600080516020611fc9833981519152610ae9816113b7565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020611fc9833981519152610b24816113b7565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b63ffffffff81166000908152600c6020908152604091829020805483518184028101840190945280845260609392830182828015610bc257602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610b935790505b50505050509050919050565b600082815260208190526040902060010154610be9816113b7565b610bf383836113c4565b50505050565b6040805160c0810182526006546001600160a01b03908116825263ffffffff881660208084018290526001600160401b03898116858701528884166060860152600554600160b01b81049091166080860152600160a01b900461ffff1660a08501526007546000928352600a9091528482209451637bfa20a960e01b81529194921691637bfa20a991610c9491859189908990600401611d35565b602060405180830381865afa158015610cb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd59190611df2565b979650505050505050565b6001600160a01b0381163314610d095760405163334bd91960e11b815260040160405180910390fd5b610d138282611456565b505050565b600080516020611fc9833981519152610d30816113b7565b60005b82811015610e495736848483818110610d4e57610d4e611e0b565b90506080020190506040518060600160405280826020016020810190610d749190611e21565b6001600160401b03168152602001610d926060840160408501611bcb565b61ffff168152602001610dab6080840160608501611e53565b6001600160801b03169052600a6000610dc760208501856117ee565b63ffffffff1681526020808201929092526040908101600020835181549385015194909201516001600160801b0316600160501b02600160501b600160d01b031961ffff909516600160401b0269ffffffffffffffffffff199094166001600160401b0390931692909217929092179290921691909117905550600101610d33565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051610e7b929190611e6e565b60405180910390a1505050565b600080516020611fc9833981519152610ea0816113b7565b50805160035560200151600455565b3068929eee149b4bd212685403610ece5763ab143c066000526004601cfd5b3068929eee149b4bd2126855610ee3866114c1565b610f205760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908191cdd115a5960921b604482015260640161088b565b63ffffffff87166000908152600b6020908152604080832088845290915290205460ff1615610f915760405162461bcd60e51b815260206004820152601d60248201527f737263206a6f62496420697320616c7265616479207665726966696564000000604482015260640161088b565b63ffffffff87166000908152600b60209081526040808320888452825291829020805460ff191660011790559051610fd791899189918991899189918991899101611eff565b60408051808303601f1901905281815263ffffffff89168252602082018790527f33d9faf7f95795c8d5bd00585df49c5e70f8c4c8b9b11ed439fb144db238e5c7910160405180910390a13868929eee149b4bd212685550505050505050565b600080516020611fc983398151915261104f816113b7565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020611fc983398151915261108a816113b7565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60003068929eee149b4bd2126854036110f75763ab143c066000526004601cfd5b3068929eee149b4bd2126855600080516020611fa983398151915261111b816113b7565b6040805160c081019091526006546001600160a01b03168152600090602080820190611149908901896117ee565b63ffffffff1681526020016111646080890160608a01611e21565b6001600160401b0316815260200161118260a0890160808a016117bf565b6001600160a01b039081168252600554600160b01b81046001600160401b0316602080850191909152600160a01b90910461ffff16604090930192909252600754929350919091169063df2b057e908390600a906000906111e5908c018c6117ee565b63ffffffff1663ffffffff16815260200190815260200160002088886040518563ffffffff1660e01b81526004016112209493929190611d35565b6020604051808303816000875af115801561123f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112639190611df2565b92507f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef8360405161129691815260200190565b60405180910390a150503868929eee149b4bd21268559392505050565b600080516020611fc98339815191526112cb816113b7565b506005805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b63ffffffff83166000908152600c60205260409020610bf3908383611585565b600082815260208190526040902060010154611329816113b7565b610bf38383611456565b600080516020611fc983398151915261134b816113b7565b5063ffffffff919091166000908152600960205260409020805460ff1916911515919091179055565b600c602052816000526040600020818154811061139057600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b6113c18133611548565b50565b60006113d083836110ad565b61144e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556114063390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161081f565b50600061081f565b600061146283836110ad565b1561144e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161081f565b60008163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff161480611533575061150482617530611f7e565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16145b1561154057506001919050565b506000919050565b61155282826110ad565b6115815760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440161088b565b5050565b82805482825590600052602060002090601f0160209004810192821561161e5791602002820160005b838211156115ef57833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026115ae565b801561161c5782816101000a81549060ff02191690556001016020816000010492830192600103026115ef565b505b5061162a92915061162e565b5090565b5b8082111561162a576000815560010161162f565b60006020828403121561165557600080fd5b81356001600160e01b03198116811461166d57600080fd5b9392505050565b80356001600160a01b038116811461168b57600080fd5b919050565b6000806000606084860312156116a557600080fd5b6116ae84611674565b92506116bc60208501611674565b929592945050506040919091013590565b6000602082840312156116df57600080fd5b5035919050565b60005b838110156117015781810151838201526020016116e9565b50506000910152565b600081518084526117228160208601602086016116e6565b601f01601f19169290920160200192915050565b6001600160a01b038a16815263ffffffff8981166020830152881660408201526101206060820181905260009061176f9083018961170a565b608083018890526001600160401b03871660a08401526001600160a01b0386811660c0850152851660e08401528281036101008401526117af818561170a565b9c9b505050505050505050505050565b6000602082840312156117d157600080fd5b61166d82611674565b803563ffffffff8116811461168b57600080fd5b60006020828403121561180057600080fd5b61166d826117da565b602080825282518282018190526000918401906040840190835b8181101561184457835160ff16835260209384019390920191600101611823565b509095945050505050565b6000806040838503121561186257600080fd5b8235915061187260208401611674565b90509250929050565b80356001600160401b038116811461168b57600080fd5b60008083601f8401126118a457600080fd5b5081356001600160401b038111156118bb57600080fd5b6020830191508360208285010111156118d357600080fd5b9250929050565b6000806000806000608086880312156118f257600080fd5b6118fb866117da565b94506119096020870161187b565b935061191760408701611674565b925060608601356001600160401b0381111561193257600080fd5b61193e88828901611892565b969995985093965092949392505050565b6000806020838503121561196257600080fd5b82356001600160401b0381111561197857600080fd5b8301601f8101851361198957600080fd5b80356001600160401b0381111561199f57600080fd5b8560208260071b84010111156119b457600080fd5b6020919091019590945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611a0257611a026119c4565b604052919050565b60006040828403128015611a1d57600080fd5b50604080519081016001600160401b0381118282101715611a4057611a406119c4565b604052823581526020928301359281019290925250919050565b600080600080600080600060e0888a031215611a7557600080fd5b611a7e886117da565b9650611a8c602089016117da565b95506040880135945060608801356001600160401b03811115611aae57600080fd5b8801601f81018a13611abf57600080fd5b80356001600160401b03811115611ad857611ad86119c4565b611aeb601f8201601f19166020016119da565b8181528b6020838501011115611b0057600080fd5b8160208401602083013760009181016020019190915294505060808801359250611b2c60a0890161187b565b9150611b3a60c08901611674565b905092959891949750929550565b600080600060408486031215611b5d57600080fd5b83356001600160401b03811115611b7357600080fd5b840160a08187031215611b8557600080fd5b925060208401356001600160401b03811115611ba057600080fd5b611bac86828701611892565b9497909650939450505050565b803561ffff8116811461168b57600080fd5b600060208284031215611bdd57600080fd5b61166d82611bb9565b600080600060408486031215611bfb57600080fd5b611c04846117da565b925060208401356001600160401b03811115611c1f57600080fd5b8401601f81018613611c3057600080fd5b80356001600160401b03811115611c4657600080fd5b8660208260051b8401011115611c5b57600080fd5b939660209190910195509293505050565b60008060408385031215611c7f57600080fd5b611c88836117da565b915060208301358015158114611c9d57600080fd5b809150509250929050565b60008060408385031215611cbb57600080fd5b611cc4836117da565b946020939093013593505050565b600181811c90821680611ce657607f821691505b602082108103611d0657634e487b7160e01b600052602260045260246000fd5b50919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b03855116815263ffffffff60208601511660208201526001600160401b03604086015116604082015260018060a01b0360608601511660608201526001600160401b03608086015116608082015261ffff60a08601511660a0820152611dce60c0820185546001600160401b0381168252604081811c61ffff16602084015260509190911c6001600160801b0316910152565b6101406101208201526000611de861014083018486611d0c565b9695505050505050565b600060208284031215611e0457600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611e3357600080fd5b61166d8261187b565b80356001600160801b038116811461168b57600080fd5b600060208284031215611e6557600080fd5b61166d82611e3c565b6020808252810182905260008360408301825b85811015611ef55763ffffffff611e97846117da565b1682526001600160401b03611eae6020850161187b565b16602083015261ffff611ec360408501611bb9565b1660408301526001600160801b03611edd60608501611e3c565b16606083015260809283019290910190600101611e81565b5095945050505050565b63ffffffff60e01b8860e01b16815263ffffffff60e01b8760e01b16600482015285600882015260008551611f3b816028850160208a016116e6565b602892019182019490945260c09290921b6001600160c01b031916604883015260601b6bffffffffffffffffffffffff1916605082015260640195945050505050565b63ffffffff818116838216019081111561081f57634e487b7160e01b600052601160045260246000fdfe724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19dea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220aa6085295249fea5de77ebb21c14eb4119a069286912c1c8b6a85a2a1b91e75764736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006edce65403992e310a62460808c4b910d972f10f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c03f31fd86a9077785b7bcf6598ce3598fa91113000000000000000000000000b3e790273f0a89e53d2c20dd4dfe82aa00bbf91b", + "nonce": "0x28", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x1e5a7b", + "logs": [ + { + "address": "0xce7ee05be76f4c44b8ea584199f8db31023a2da7", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x94686fa3077ce38ec396fa5778c29142178eb1ef9ba6f6254afcf99c58b02c51", + "blockNumber": "0xd65453", + "transactionHash": "0x4f4940ead84440090dc2d6c84fd003b5fdff909320ec735193c14edca39c4eea", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + }, + { + "address": "0xce7ee05be76f4c44b8ea584199f8db31023a2da7", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0xa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x94686fa3077ce38ec396fa5778c29142178eb1ef9ba6f6254afcf99c58b02c51", + "blockNumber": "0xd65453", + "transactionHash": "0x4f4940ead84440090dc2d6c84fd003b5fdff909320ec735193c14edca39c4eea", + "transactionIndex": "0x0", + "logIndex": "0x1", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x0000000000000000000000006ab3d36c46ecfb9b9c0bd51cb1c3da5a2c81cea6" + ], + "data": "0x00000000000000000000000000000000000000000000000003ea7bdddfc1a22300000000000000000000000000000000000000000000000071ae3c2532fbfb6400000000000000000000000000000000000000000000031d3f1fa87a1080a83d0000000000000000000000000000000000000000000000006dc3c047533a594100000000000000000000000000000000000000000000031d430a2457f0424a60", + "blockHash": "0x94686fa3077ce38ec396fa5778c29142178eb1ef9ba6f6254afcf99c58b02c51", + "blockNumber": "0xd65453", + "transactionHash": "0x4f4940ead84440090dc2d6c84fd003b5fdff909320ec735193c14edca39c4eea", + "transactionIndex": "0x0", + "logIndex": "0x2", + "removed": false + } + ], + "logsBloom": "0x0001000408000000000000000000000000000400000000000000200000000000000000000000000000000000000000000000c000000000000000000000000000000000080000000000000000000000800000000020000000000100000000000000000000020000000000000000000800000000000000000880000000000000000000200000000000000000000000004000000000000000000000000000000000200000000000000000000000000000000000000000000000001000000000004000000000000000000001000000000000000000010000400100100000000020000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0x4f4940ead84440090dc2d6c84fd003b5fdff909320ec735193c14edca39c4eea", + "transactionIndex": "0x0", + "blockHash": "0x94686fa3077ce38ec396fa5778c29142178eb1ef9ba6f6254afcf99c58b02c51", + "blockNumber": "0xd65453", + "gasUsed": "0x1e5a7b", + "effectiveGasPrice": "0x2106eb3a88", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0xce7ee05be76f4c44b8ea584199f8db31023a2da7" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730797470, + "chain": 80002, + "commit": "d4e1224" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeployDvn.s.sol/80002/run-1730798344.json b/contracts/evm/broadcast/DeployDvn.s.sol/80002/run-1730798344.json new file mode 100644 index 00000000..b2d6ef3a --- /dev/null +++ b/contracts/evm/broadcast/DeployDvn.s.sol/80002/run-1730798344.json @@ -0,0 +1,102 @@ +{ + "transactions": [ + { + "hash": "0x7f24de49a317f191cceff7a445842e9c8997c0126f577cd1a18934eedd1efee2", + "transactionType": "CREATE", + "contractName": "NuffDVN", + "contractAddress": "0xa9c1046d11488b77549b0ecbc8917d56fc37a811", + "function": null, + "arguments": [ + "(0, 0)", + "0x6EDCE65403992e310A62460808c4b910D972f10f", + "1", + "1", + "0xC03f31fD86a9077785b7bCf6598Ce3598Fa91113", + "0xb3e790273f0A89e53d2C20dD4dFe82AA00bbf91b" + ], + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x23f900", + "value": "0x0", + "input": "0x60a060405234801561001057600080fd5b5060405161206a38038061206a83398101604081905261002f91610263565b85516003556020808701516004908155600180546001600160a01b0319166001600160a01b0389169081179091556040805163416ecebf60e01b81529051919363416ecebf938281019391928290030181865afa158015610094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b89190610321565b63ffffffff1660805260058054600160a01b600160f01b031916600160a01b61ffff871602600160b01b600160f01b03191617600160b01b6001600160401b03861602179055600680546001600160a01b03199081166001600160a01b03858116919091179092556007805490911691831691909117905561013b600033610172565b506101667fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610172565b5050505050505061034e565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16610214576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101cc3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610218565b5060005b92915050565b80516001600160a01b038116811461023557600080fd5b919050565b805161ffff8116811461023557600080fd5b80516001600160401b038116811461023557600080fd5b60008060008060008086880360e081121561027d57600080fd5b604081121561028b57600080fd5b50604080519081016001600160401b03811182821017156102bc57634e487b7160e01b600052604160045260246000fd5b6040908152885182526020808a0151908301529096506102dd90880161021e565b94506102eb6060880161023a565b93506102f96080880161024c565b925061030760a0880161021e565b915061031560c0880161021e565b90509295509295509295565b60006020828403121561033357600080fd5b815163ffffffff8116811461034757600080fd5b9392505050565b608051611cf3610377600039600081816104f8015281816112a001526112e00152611cf36000f3fe6080604052600436106101e95760003560e01c8063724e78da11610113578063b3129896116100ab578063d547741f1161006f578063d547741f14610718578063f3acc68d14610738578063f48ab8f214610758578063f49ef50514610793578063fbd9b28b146107c357600080fd5b8063b312989614610678578063bb37d00c14610698578063c358de0a146106b8578063c5fdf39c146106d8578063cd88b903146106f857600080fd5b8063724e78da146104c657806372607537146104e6578063741bef1a1461052f57806375b238fc1461056757806391d148541461058957806395d376d7146105a95780639e944965146105bc578063a217fddf14610641578063a98586e11461065657600080fd5b8063296817001161018657806329681700146103995780632f2ff15d146103c957806330bb3aac146103e957806336568abe1461041057806351cc784f1461043057806352d3b8711461044657806354093c65146104665780635580c07d146104865780635b4c2500146104a657600080fd5b8062bf2e80146101ee57806301ffc9a7146102285780631095b6d7146102585780631703a0181461027a578063180aedf3146102b95780631fad0b4c146102ee57806320ac2ece1461030e578063248a9ca31461032e57806326e67a371461036c575b600080fd5b3480156101fa57600080fd5b5060055461021090600160a01b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561023457600080fd5b50610248610243366004611417565b6107f5565b604051901515815260200161021f565b34801561026457600080fd5b50610278610273366004611464565b61082c565b005b34801561028657600080fd5b506005546102a190600160b01b90046001600160401b031681565b6040516001600160401b03909116815260200161021f565b3480156102c557600080fd5b506102d96102d43660046114a1565b61094f565b60405161021f9998979695949392919061150a565b3480156102fa57600080fd5b50610278610309366004611593565b610ad8565b34801561031a57600080fd5b50610278610329366004611593565b610b13565b34801561033a57600080fd5b5061035e6103493660046114a1565b60009081526020819052604090206001015490565b60405190815260200161021f565b34801561037857600080fd5b5061038c6103873660046115c2565b610b4e565b60405161021f91906115dd565b3480156103a557600080fd5b506102486103b43660046115c2565b60096020526000908152604090205460ff1681565b3480156103d557600080fd5b506102786103e4366004611623565b610bd5565b3480156103f557600080fd5b5061035e6104043660046116ae565b506103e8949350505050565b34801561041c57600080fd5b5061027861042b366004611623565b610c00565b34801561043c57600080fd5b5061035e60025481565b34801561045257600080fd5b50610278610461366004611723565b610c38565b34801561047257600080fd5b506102786104813660046117de565b610da8565b34801561049257600080fd5b506102786104a136600461182e565b610dcf565b3480156104b257600080fd5b506102786104c1366004611593565b610f57565b3480156104d257600080fd5b506102786104e1366004611593565b610f92565b3480156104f257600080fd5b5061051a7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161021f565b34801561053b57600080fd5b5060065461054f906001600160a01b031681565b6040516001600160a01b03909116815260200161021f565b34801561057357600080fd5b5061035e600080516020611c9e83398151915281565b34801561059557600080fd5b506102486105a4366004611623565b610fcd565b61035e6105b736600461191c565b610ff6565b3480156105c857600080fd5b506106106105d73660046115c2565b600a602052600090815260409020546001600160401b03811690600160401b810461ffff1690600160501b90046001600160801b031683565b604080516001600160401b03909416845261ffff90921660208401526001600160801b03169082015260600161021f565b34801561064d57600080fd5b5061035e600081565b34801561066257600080fd5b5061035e600080516020611c7e83398151915281565b34801561068457600080fd5b5060015461054f906001600160a01b031681565b3480156106a457600080fd5b5060075461054f906001600160a01b031681565b3480156106c457600080fd5b506102786106d336600461199f565b611087565b3480156106e457600080fd5b5060055461054f906001600160a01b031681565b34801561070457600080fd5b506102786107133660046119ba565b6110c2565b34801561072457600080fd5b50610278610733366004611623565b6110e2565b34801561074457600080fd5b50610278610753366004611a40565b611107565b34801561076457600080fd5b50610248610773366004611a7c565b600b60209081526000928352604080842090915290825290205460ff1681565b34801561079f57600080fd5b506003546004546107ae919082565b6040805192835260208301919091520161021f565b3480156107cf57600080fd5b506107e36107de366004611a7c565b611148565b60405160ff909116815260200161021f565b60006001600160e01b03198216637965db0b60e01b148061082657506301ffc9a760e01b6001600160e01b03198316145b92915050565b600080516020611c9e8339815191526108448161118b565b61085c600080516020611c7e83398151915285610fcd565b61089b5760405162461bcd60e51b815260206004820152600b60248201526a24b73b30b634b2103634b160a91b60448201526064015b60405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b1580156108e557600080fd5b505af11580156108f9573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b600860205260009081526040902080546001820180546001600160a01b0383169363ffffffff600160a01b8504811694600160c01b90041692909161099390611aa6565b80601f01602080910402602001604051908101604052809291908181526020018280546109bf90611aa6565b8015610a0c5780601f106109e157610100808354040283529160200191610a0c565b820191906000526020600020905b8154815290600101906020018083116109ef57829003601f168201915b50505050600283015460038401546004850154600586018054959693956001600160401b0384169550600160401b9093046001600160a01b0390811694921692610a5590611aa6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8190611aa6565b8015610ace5780601f10610aa357610100808354040283529160200191610ace565b820191906000526020600020905b815481529060010190602001808311610ab157829003601f168201915b5050505050905089565b600080516020611c9e833981519152610af08161118b565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020611c9e833981519152610b2b8161118b565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b63ffffffff81166000908152600c6020908152604091829020805483518184028101840190945280845260609392830182828015610bc957602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610b9a5790505b50505050509050919050565b600082815260208190526040902060010154610bf08161118b565b610bfa8383611198565b50505050565b6001600160a01b0381163314610c295760405163334bd91960e11b815260040160405180910390fd5b610c33828261122a565b505050565b600080516020611c9e833981519152610c508161118b565b60005b82811015610d695736848483818110610c6e57610c6e611ae0565b90506080020190506040518060600160405280826020016020810190610c949190611af6565b6001600160401b03168152602001610cb2606084016040850161199f565b61ffff168152602001610ccb6080840160608501611b28565b6001600160801b03169052600a6000610ce760208501856115c2565b63ffffffff1681526020808201929092526040908101600020835181549385015194909201516001600160801b0316600160501b02600160501b600160d01b031961ffff909516600160401b0269ffffffffffffffffffff199094166001600160401b0390931692909217929092179290921691909117905550600101610c53565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051610d9b929190611b43565b60405180910390a1505050565b600080516020611c9e833981519152610dc08161118b565b50805160035560200151600455565b3068929eee149b4bd212685403610dee5763ab143c066000526004601cfd5b3068929eee149b4bd2126855610e0386611295565b610e405760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908191cdd115a5960921b6044820152606401610892565b63ffffffff87166000908152600b6020908152604080832088845290915290205460ff1615610eb15760405162461bcd60e51b815260206004820152601d60248201527f737263206a6f62496420697320616c72656164792076657269666965640000006044820152606401610892565b63ffffffff87166000908152600b60209081526040808320888452825291829020805460ff191660011790559051610ef791899189918991899189918991899101611bd4565b60408051808303601f1901905281815263ffffffff89168252602082018790527f33d9faf7f95795c8d5bd00585df49c5e70f8c4c8b9b11ed439fb144db238e5c7910160405180910390a13868929eee149b4bd212685550505050505050565b600080516020611c9e833981519152610f6f8161118b565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020611c9e833981519152610faa8161118b565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60003068929eee149b4bd2126854036110175763ab143c066000526004601cfd5b3068929eee149b4bd2126855600080516020611c7e83398151915261103b8161118b565b6040516103e880825292507f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a1503868929eee149b4bd21268559392505050565b600080516020611c9e83398151915261109f8161118b565b506005805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b63ffffffff83166000908152600c60205260409020610bfa908383611359565b6000828152602081905260409020600101546110fd8161118b565b610bfa838361122a565b600080516020611c9e83398151915261111f8161118b565b5063ffffffff919091166000908152600960205260409020805460ff1916911515919091179055565b600c602052816000526040600020818154811061116457600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b611195813361131c565b50565b60006111a48383610fcd565b611222576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556111da3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610826565b506000610826565b60006112368383610fcd565b15611222576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610826565b60008163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16148061130757506112d882617530611c53565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16145b1561131457506001919050565b506000919050565b6113268282610fcd565b6113555760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610892565b5050565b82805482825590600052602060002090601f016020900481019282156113f25791602002820160005b838211156113c357833560ff1683826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302611382565b80156113f05782816101000a81549060ff02191690556001016020816000010492830192600103026113c3565b505b506113fe929150611402565b5090565b5b808211156113fe5760008155600101611403565b60006020828403121561142957600080fd5b81356001600160e01b03198116811461144157600080fd5b9392505050565b80356001600160a01b038116811461145f57600080fd5b919050565b60008060006060848603121561147957600080fd5b61148284611448565b925061149060208501611448565b929592945050506040919091013590565b6000602082840312156114b357600080fd5b5035919050565b60005b838110156114d55781810151838201526020016114bd565b50506000910152565b600081518084526114f68160208601602086016114ba565b601f01601f19169290920160200192915050565b6001600160a01b038a16815263ffffffff89811660208301528816604082015261012060608201819052600090611543908301896114de565b608083018890526001600160401b03871660a08401526001600160a01b0386811660c0850152851660e084015282810361010084015261158381856114de565b9c9b505050505050505050505050565b6000602082840312156115a557600080fd5b61144182611448565b803563ffffffff8116811461145f57600080fd5b6000602082840312156115d457600080fd5b611441826115ae565b602080825282518282018190526000918401906040840190835b8181101561161857835160ff168352602093840193909201916001016115f7565b509095945050505050565b6000806040838503121561163657600080fd5b8235915061164660208401611448565b90509250929050565b80356001600160401b038116811461145f57600080fd5b60008083601f84011261167857600080fd5b5081356001600160401b0381111561168f57600080fd5b6020830191508360208285010111156116a757600080fd5b9250929050565b6000806000806000608086880312156116c657600080fd5b6116cf866115ae565b94506116dd6020870161164f565b93506116eb60408701611448565b925060608601356001600160401b0381111561170657600080fd5b61171288828901611666565b969995985093965092949392505050565b6000806020838503121561173657600080fd5b82356001600160401b0381111561174c57600080fd5b8301601f8101851361175d57600080fd5b80356001600160401b0381111561177357600080fd5b8560208260071b840101111561178857600080fd5b6020919091019590945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156117d6576117d6611798565b604052919050565b600060408284031280156117f157600080fd5b50604080519081016001600160401b038111828210171561181457611814611798565b604052823581526020928301359281019290925250919050565b600080600080600080600060e0888a03121561184957600080fd5b611852886115ae565b9650611860602089016115ae565b95506040880135945060608801356001600160401b0381111561188257600080fd5b8801601f81018a1361189357600080fd5b80356001600160401b038111156118ac576118ac611798565b6118bf601f8201601f19166020016117ae565b8181528b60208385010111156118d457600080fd5b816020840160208301376000918101602001919091529450506080880135925061190060a0890161164f565b915061190e60c08901611448565b905092959891949750929550565b60008060006040848603121561193157600080fd5b83356001600160401b0381111561194757600080fd5b840160a0818703121561195957600080fd5b925060208401356001600160401b0381111561197457600080fd5b61198086828701611666565b9497909650939450505050565b803561ffff8116811461145f57600080fd5b6000602082840312156119b157600080fd5b6114418261198d565b6000806000604084860312156119cf57600080fd5b6119d8846115ae565b925060208401356001600160401b038111156119f357600080fd5b8401601f81018613611a0457600080fd5b80356001600160401b03811115611a1a57600080fd5b8660208260051b8401011115611a2f57600080fd5b939660209190910195509293505050565b60008060408385031215611a5357600080fd5b611a5c836115ae565b915060208301358015158114611a7157600080fd5b809150509250929050565b60008060408385031215611a8f57600080fd5b611a98836115ae565b946020939093013593505050565b600181811c90821680611aba57607f821691505b602082108103611ada57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611b0857600080fd5b6114418261164f565b80356001600160801b038116811461145f57600080fd5b600060208284031215611b3a57600080fd5b61144182611b11565b6020808252810182905260008360408301825b85811015611bca5763ffffffff611b6c846115ae565b1682526001600160401b03611b836020850161164f565b16602083015261ffff611b986040850161198d565b1660408301526001600160801b03611bb260608501611b11565b16606083015260809283019290910190600101611b56565b5095945050505050565b63ffffffff60e01b8860e01b16815263ffffffff60e01b8760e01b16600482015285600882015260008551611c10816028850160208a016114ba565b602892019182019490945260c09290921b6001600160c01b031916604883015260601b6bffffffffffffffffffffffff1916605082015260640195945050505050565b63ffffffff818116838216019081111561082657634e487b7160e01b600052601160045260246000fdfe724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19dea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220166b6caddb9f4021f46722e2b1c53f377d997ee6106ea36bade6dc27e70d406a64736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006edce65403992e310a62460808c4b910d972f10f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c03f31fd86a9077785b7bcf6598ce3598fa91113000000000000000000000000b3e790273f0a89e53d2c20dd4dfe82aa00bbf91b", + "nonce": "0x2a", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x1badef", + "logs": [ + { + "address": "0xa9c1046d11488b77549b0ecbc8917d56fc37a811", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x1399c68792990c0cdacd5fe2ee08a38a4424d5af5902e963be5b8ca15cc87612", + "blockNumber": "0xd655ef", + "transactionHash": "0x7f24de49a317f191cceff7a445842e9c8997c0126f577cd1a18934eedd1efee2", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + }, + { + "address": "0xa9c1046d11488b77549b0ecbc8917d56fc37a811", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0xa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0x1399c68792990c0cdacd5fe2ee08a38a4424d5af5902e963be5b8ca15cc87612", + "blockNumber": "0xd655ef", + "transactionHash": "0x7f24de49a317f191cceff7a445842e9c8997c0126f577cd1a18934eedd1efee2", + "transactionIndex": "0x0", + "logIndex": "0x1", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x0000000000000000000000004ad84f7014b7b44f723f284a85b1662337971439" + ], + "data": "0x00000000000000000000000000000000000000000000000000c156aca48994000000000000000000000000000000000000000000000000006d9d531e3e23b30d0000000000000000000000000000000000000000000003c1eedab3b33b541f860000000000000000000000000000000000000000000000006cdbfc71999a1f0d0000000000000000000000000000000000000000000003c1ef9c0a5fdfddb386", + "blockHash": "0x1399c68792990c0cdacd5fe2ee08a38a4424d5af5902e963be5b8ca15cc87612", + "blockNumber": "0xd655ef", + "transactionHash": "0x7f24de49a317f191cceff7a445842e9c8997c0126f577cd1a18934eedd1efee2", + "transactionIndex": "0x0", + "logIndex": "0x2", + "removed": false + } + ], + "logsBloom": "0x0000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000400000000000000000000000000000000000800000000020000000000100001000000000000000220000000000000000000800000000000000000880000000000000000000200000000000000000000000004000000000000000000000040000000000200000000000000000000000000000000000000000000000001000000000004000000000000000000001000000000000000000000000400100100000000020000400000000000000000000000000008000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0x7f24de49a317f191cceff7a445842e9c8997c0126f577cd1a18934eedd1efee2", + "transactionIndex": "0x0", + "blockHash": "0x1399c68792990c0cdacd5fe2ee08a38a4424d5af5902e963be5b8ca15cc87612", + "blockNumber": "0xd655ef", + "gasUsed": "0x1badef", + "effectiveGasPrice": "0x6fc23ac0f", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0xa9c1046d11488b77549b0ecbc8917d56fc37a811" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730798344, + "chain": 80002, + "commit": "d4e1224" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeployDvn.s.sol/80002/run-1730801654.json b/contracts/evm/broadcast/DeployDvn.s.sol/80002/run-1730801654.json new file mode 100644 index 00000000..b431e725 --- /dev/null +++ b/contracts/evm/broadcast/DeployDvn.s.sol/80002/run-1730801654.json @@ -0,0 +1,102 @@ +{ + "transactions": [ + { + "hash": "0x270179258f0518f0765f877ea88f84905dd92a964ed676bd2f66b81441491c39", + "transactionType": "CREATE", + "contractName": "NuffDVN", + "contractAddress": "0x3a2a5e47ee16f9d5857d723c267794869b596961", + "function": null, + "arguments": [ + "(0, 0)", + "0x6EDCE65403992e310A62460808c4b910D972f10f", + "1", + "1", + "0xC03f31fD86a9077785b7bCf6598Ce3598Fa91113", + "0xb3e790273f0A89e53d2C20dD4dFe82AA00bbf91b" + ], + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x23f900", + "value": "0x0", + "input": "0x60a060405234801561001057600080fd5b5060405161206a38038061206a83398101604081905261002f91610263565b85516003556020808701516004908155600180546001600160a01b0319166001600160a01b0389169081179091556040805163416ecebf60e01b81529051919363416ecebf938281019391928290030181865afa158015610094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b89190610321565b63ffffffff1660805260058054600160a01b600160f01b031916600160a01b61ffff871602600160b01b600160f01b03191617600160b01b6001600160401b03861602179055600680546001600160a01b03199081166001600160a01b03858116919091179092556007805490911691831691909117905561013b600033610172565b506101667fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610172565b5050505050505061034e565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16610214576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101cc3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610218565b5060005b92915050565b80516001600160a01b038116811461023557600080fd5b919050565b805161ffff8116811461023557600080fd5b80516001600160401b038116811461023557600080fd5b60008060008060008086880360e081121561027d57600080fd5b604081121561028b57600080fd5b50604080519081016001600160401b03811182821017156102bc57634e487b7160e01b600052604160045260246000fd5b6040908152885182526020808a0151908301529096506102dd90880161021e565b94506102eb6060880161023a565b93506102f96080880161024c565b925061030760a0880161021e565b915061031560c0880161021e565b90509295509295509295565b60006020828403121561033357600080fd5b815163ffffffff8116811461034757600080fd5b9392505050565b608051611cf3610377600039600081816104f8015281816112a001526112e00152611cf36000f3fe6080604052600436106101e95760003560e01c8063724e78da11610113578063b3129896116100ab578063d547741f1161006f578063d547741f14610718578063f3acc68d14610738578063f48ab8f214610758578063f49ef50514610793578063fbd9b28b146107c357600080fd5b8063b312989614610678578063bb37d00c14610698578063c358de0a146106b8578063c5fdf39c146106d8578063cd88b903146106f857600080fd5b8063724e78da146104c657806372607537146104e6578063741bef1a1461052f57806375b238fc1461056757806391d148541461058957806395d376d7146105a95780639e944965146105bc578063a217fddf14610641578063a98586e11461065657600080fd5b8063296817001161018657806329681700146103995780632f2ff15d146103c957806330bb3aac146103e957806336568abe1461041057806351cc784f1461043057806352d3b8711461044657806354093c65146104665780635580c07d146104865780635b4c2500146104a657600080fd5b8062bf2e80146101ee57806301ffc9a7146102285780631095b6d7146102585780631703a0181461027a578063180aedf3146102b95780631fad0b4c146102ee57806320ac2ece1461030e578063248a9ca31461032e57806326e67a371461036c575b600080fd5b3480156101fa57600080fd5b5060055461021090600160a01b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561023457600080fd5b50610248610243366004611417565b6107f5565b604051901515815260200161021f565b34801561026457600080fd5b50610278610273366004611464565b61082c565b005b34801561028657600080fd5b506005546102a190600160b01b90046001600160401b031681565b6040516001600160401b03909116815260200161021f565b3480156102c557600080fd5b506102d96102d43660046114a1565b61094f565b60405161021f9998979695949392919061150a565b3480156102fa57600080fd5b50610278610309366004611593565b610ad8565b34801561031a57600080fd5b50610278610329366004611593565b610b13565b34801561033a57600080fd5b5061035e6103493660046114a1565b60009081526020819052604090206001015490565b60405190815260200161021f565b34801561037857600080fd5b5061038c6103873660046115c2565b610b4e565b60405161021f91906115dd565b3480156103a557600080fd5b506102486103b43660046115c2565b60096020526000908152604090205460ff1681565b3480156103d557600080fd5b506102786103e4366004611623565b610bd5565b3480156103f557600080fd5b5061035e6104043660046116ae565b50612710949350505050565b34801561041c57600080fd5b5061027861042b366004611623565b610c00565b34801561043c57600080fd5b5061035e60025481565b34801561045257600080fd5b50610278610461366004611723565b610c38565b34801561047257600080fd5b506102786104813660046117de565b610da8565b34801561049257600080fd5b506102786104a136600461182e565b610dcf565b3480156104b257600080fd5b506102786104c1366004611593565b610f57565b3480156104d257600080fd5b506102786104e1366004611593565b610f92565b3480156104f257600080fd5b5061051a7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161021f565b34801561053b57600080fd5b5060065461054f906001600160a01b031681565b6040516001600160a01b03909116815260200161021f565b34801561057357600080fd5b5061035e600080516020611c9e83398151915281565b34801561059557600080fd5b506102486105a4366004611623565b610fcd565b61035e6105b736600461191c565b610ff6565b3480156105c857600080fd5b506106106105d73660046115c2565b600a602052600090815260409020546001600160401b03811690600160401b810461ffff1690600160501b90046001600160801b031683565b604080516001600160401b03909416845261ffff90921660208401526001600160801b03169082015260600161021f565b34801561064d57600080fd5b5061035e600081565b34801561066257600080fd5b5061035e600080516020611c7e83398151915281565b34801561068457600080fd5b5060015461054f906001600160a01b031681565b3480156106a457600080fd5b5060075461054f906001600160a01b031681565b3480156106c457600080fd5b506102786106d336600461199f565b611087565b3480156106e457600080fd5b5060055461054f906001600160a01b031681565b34801561070457600080fd5b506102786107133660046119ba565b6110c2565b34801561072457600080fd5b50610278610733366004611623565b6110e2565b34801561074457600080fd5b50610278610753366004611a40565b611107565b34801561076457600080fd5b50610248610773366004611a7c565b600b60209081526000928352604080842090915290825290205460ff1681565b34801561079f57600080fd5b506003546004546107ae919082565b6040805192835260208301919091520161021f565b3480156107cf57600080fd5b506107e36107de366004611a7c565b611148565b60405160ff909116815260200161021f565b60006001600160e01b03198216637965db0b60e01b148061082657506301ffc9a760e01b6001600160e01b03198316145b92915050565b600080516020611c9e8339815191526108448161118b565b61085c600080516020611c7e83398151915285610fcd565b61089b5760405162461bcd60e51b815260206004820152600b60248201526a24b73b30b634b2103634b160a91b60448201526064015b60405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b1580156108e557600080fd5b505af11580156108f9573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b600860205260009081526040902080546001820180546001600160a01b0383169363ffffffff600160a01b8504811694600160c01b90041692909161099390611aa6565b80601f01602080910402602001604051908101604052809291908181526020018280546109bf90611aa6565b8015610a0c5780601f106109e157610100808354040283529160200191610a0c565b820191906000526020600020905b8154815290600101906020018083116109ef57829003601f168201915b50505050600283015460038401546004850154600586018054959693956001600160401b0384169550600160401b9093046001600160a01b0390811694921692610a5590611aa6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8190611aa6565b8015610ace5780601f10610aa357610100808354040283529160200191610ace565b820191906000526020600020905b815481529060010190602001808311610ab157829003601f168201915b5050505050905089565b600080516020611c9e833981519152610af08161118b565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020611c9e833981519152610b2b8161118b565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b63ffffffff81166000908152600c6020908152604091829020805483518184028101840190945280845260609392830182828015610bc957602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610b9a5790505b50505050509050919050565b600082815260208190526040902060010154610bf08161118b565b610bfa8383611198565b50505050565b6001600160a01b0381163314610c295760405163334bd91960e11b815260040160405180910390fd5b610c33828261122a565b505050565b600080516020611c9e833981519152610c508161118b565b60005b82811015610d695736848483818110610c6e57610c6e611ae0565b90506080020190506040518060600160405280826020016020810190610c949190611af6565b6001600160401b03168152602001610cb2606084016040850161199f565b61ffff168152602001610ccb6080840160608501611b28565b6001600160801b03169052600a6000610ce760208501856115c2565b63ffffffff1681526020808201929092526040908101600020835181549385015194909201516001600160801b0316600160501b02600160501b600160d01b031961ffff909516600160401b0269ffffffffffffffffffff199094166001600160401b0390931692909217929092179290921691909117905550600101610c53565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051610d9b929190611b43565b60405180910390a1505050565b600080516020611c9e833981519152610dc08161118b565b50805160035560200151600455565b3068929eee149b4bd212685403610dee5763ab143c066000526004601cfd5b3068929eee149b4bd2126855610e0386611295565b610e405760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908191cdd115a5960921b6044820152606401610892565b63ffffffff87166000908152600b6020908152604080832088845290915290205460ff1615610eb15760405162461bcd60e51b815260206004820152601d60248201527f737263206a6f62496420697320616c72656164792076657269666965640000006044820152606401610892565b63ffffffff87166000908152600b60209081526040808320888452825291829020805460ff191660011790559051610ef791899189918991899189918991899101611bd4565b60408051808303601f1901905281815263ffffffff89168252602082018790527f33d9faf7f95795c8d5bd00585df49c5e70f8c4c8b9b11ed439fb144db238e5c7910160405180910390a13868929eee149b4bd212685550505050505050565b600080516020611c9e833981519152610f6f8161118b565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020611c9e833981519152610faa8161118b565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60003068929eee149b4bd2126854036110175763ab143c066000526004601cfd5b3068929eee149b4bd2126855600080516020611c7e83398151915261103b8161118b565b60405161271080825292507f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a1503868929eee149b4bd21268559392505050565b600080516020611c9e83398151915261109f8161118b565b506005805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b63ffffffff83166000908152600c60205260409020610bfa908383611359565b6000828152602081905260409020600101546110fd8161118b565b610bfa838361122a565b600080516020611c9e83398151915261111f8161118b565b5063ffffffff919091166000908152600960205260409020805460ff1916911515919091179055565b600c602052816000526040600020818154811061116457600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b611195813361131c565b50565b60006111a48383610fcd565b611222576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556111da3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610826565b506000610826565b60006112368383610fcd565b15611222576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610826565b60008163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16148061130757506112d882617530611c53565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16145b1561131457506001919050565b506000919050565b6113268282610fcd565b6113555760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610892565b5050565b82805482825590600052602060002090601f016020900481019282156113f25791602002820160005b838211156113c357833560ff1683826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302611382565b80156113f05782816101000a81549060ff02191690556001016020816000010492830192600103026113c3565b505b506113fe929150611402565b5090565b5b808211156113fe5760008155600101611403565b60006020828403121561142957600080fd5b81356001600160e01b03198116811461144157600080fd5b9392505050565b80356001600160a01b038116811461145f57600080fd5b919050565b60008060006060848603121561147957600080fd5b61148284611448565b925061149060208501611448565b929592945050506040919091013590565b6000602082840312156114b357600080fd5b5035919050565b60005b838110156114d55781810151838201526020016114bd565b50506000910152565b600081518084526114f68160208601602086016114ba565b601f01601f19169290920160200192915050565b6001600160a01b038a16815263ffffffff89811660208301528816604082015261012060608201819052600090611543908301896114de565b608083018890526001600160401b03871660a08401526001600160a01b0386811660c0850152851660e084015282810361010084015261158381856114de565b9c9b505050505050505050505050565b6000602082840312156115a557600080fd5b61144182611448565b803563ffffffff8116811461145f57600080fd5b6000602082840312156115d457600080fd5b611441826115ae565b602080825282518282018190526000918401906040840190835b8181101561161857835160ff168352602093840193909201916001016115f7565b509095945050505050565b6000806040838503121561163657600080fd5b8235915061164660208401611448565b90509250929050565b80356001600160401b038116811461145f57600080fd5b60008083601f84011261167857600080fd5b5081356001600160401b0381111561168f57600080fd5b6020830191508360208285010111156116a757600080fd5b9250929050565b6000806000806000608086880312156116c657600080fd5b6116cf866115ae565b94506116dd6020870161164f565b93506116eb60408701611448565b925060608601356001600160401b0381111561170657600080fd5b61171288828901611666565b969995985093965092949392505050565b6000806020838503121561173657600080fd5b82356001600160401b0381111561174c57600080fd5b8301601f8101851361175d57600080fd5b80356001600160401b0381111561177357600080fd5b8560208260071b840101111561178857600080fd5b6020919091019590945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156117d6576117d6611798565b604052919050565b600060408284031280156117f157600080fd5b50604080519081016001600160401b038111828210171561181457611814611798565b604052823581526020928301359281019290925250919050565b600080600080600080600060e0888a03121561184957600080fd5b611852886115ae565b9650611860602089016115ae565b95506040880135945060608801356001600160401b0381111561188257600080fd5b8801601f81018a1361189357600080fd5b80356001600160401b038111156118ac576118ac611798565b6118bf601f8201601f19166020016117ae565b8181528b60208385010111156118d457600080fd5b816020840160208301376000918101602001919091529450506080880135925061190060a0890161164f565b915061190e60c08901611448565b905092959891949750929550565b60008060006040848603121561193157600080fd5b83356001600160401b0381111561194757600080fd5b840160a0818703121561195957600080fd5b925060208401356001600160401b0381111561197457600080fd5b61198086828701611666565b9497909650939450505050565b803561ffff8116811461145f57600080fd5b6000602082840312156119b157600080fd5b6114418261198d565b6000806000604084860312156119cf57600080fd5b6119d8846115ae565b925060208401356001600160401b038111156119f357600080fd5b8401601f81018613611a0457600080fd5b80356001600160401b03811115611a1a57600080fd5b8660208260051b8401011115611a2f57600080fd5b939660209190910195509293505050565b60008060408385031215611a5357600080fd5b611a5c836115ae565b915060208301358015158114611a7157600080fd5b809150509250929050565b60008060408385031215611a8f57600080fd5b611a98836115ae565b946020939093013593505050565b600181811c90821680611aba57607f821691505b602082108103611ada57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611b0857600080fd5b6114418261164f565b80356001600160801b038116811461145f57600080fd5b600060208284031215611b3a57600080fd5b61144182611b11565b6020808252810182905260008360408301825b85811015611bca5763ffffffff611b6c846115ae565b1682526001600160401b03611b836020850161164f565b16602083015261ffff611b986040850161198d565b1660408301526001600160801b03611bb260608501611b11565b16606083015260809283019290910190600101611b56565b5095945050505050565b63ffffffff60e01b8860e01b16815263ffffffff60e01b8760e01b16600482015285600882015260008551611c10816028850160208a016114ba565b602892019182019490945260c09290921b6001600160c01b031916604883015260601b6bffffffffffffffffffffffff1916605082015260640195945050505050565b63ffffffff818116838216019081111561082657634e487b7160e01b600052601160045260246000fdfe724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19dea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220d1a546e8508e3b470a3f45040f0f348499a639347aced6c8ee9ce372838989b164736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006edce65403992e310a62460808c4b910d972f10f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c03f31fd86a9077785b7bcf6598ce3598fa91113000000000000000000000000b3e790273f0a89e53d2c20dd4dfe82aa00bbf91b", + "nonce": "0x2d", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x2c1fe9", + "logs": [ + { + "address": "0x3a2a5e47ee16f9d5857d723c267794869b596961", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0xdb52882a835128ec13d470a2b9f82f0f8f76ead1b0acd02b3ab367d6bf79e3ae", + "blockNumber": "0xd65c03", + "transactionHash": "0x270179258f0518f0765f877ea88f84905dd92a964ed676bd2f66b81441491c39", + "transactionIndex": "0x1", + "logIndex": "0x10", + "removed": false + }, + { + "address": "0x3a2a5e47ee16f9d5857d723c267794869b596961", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0xa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0xdb52882a835128ec13d470a2b9f82f0f8f76ead1b0acd02b3ab367d6bf79e3ae", + "blockNumber": "0xd65c03", + "transactionHash": "0x270179258f0518f0765f877ea88f84905dd92a964ed676bd2f66b81441491c39", + "transactionIndex": "0x1", + "logIndex": "0x11", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x0000000000000000000000004ad84f7014b7b44f723f284a85b1662337971439" + ], + "data": "0x0000000000000000000000000000000000000000000000000130b39b598b0fde0000000000000000000000000000000000000000000000006cc0caecfb90081b0000000000000000000000000000000000000000000003c21b1c1433d22c523d0000000000000000000000000000000000000000000000006b901751a204f83d0000000000000000000000000000000000000000000003c21c4cc7cf2bb7621b", + "blockHash": "0xdb52882a835128ec13d470a2b9f82f0f8f76ead1b0acd02b3ab367d6bf79e3ae", + "blockNumber": "0xd65c03", + "transactionHash": "0x270179258f0518f0765f877ea88f84905dd92a964ed676bd2f66b81441491c39", + "transactionIndex": "0x1", + "logIndex": "0x12", + "removed": false + } + ], + "logsBloom": "0x0000000400000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000c000000000000000000000400000000000000000000000000000000000800000000020000000000100001000000000000000020000000000000000000800000000000000000880000000000000000000200000000000000000000000004000000000000000000000000000000800200000000000000000000000000000000000000000000000001000000000004000000000000000000001000000000000000000000000400100100000000020000000000000000000000000000000008001000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0x270179258f0518f0765f877ea88f84905dd92a964ed676bd2f66b81441491c39", + "transactionIndex": "0x1", + "blockHash": "0xdb52882a835128ec13d470a2b9f82f0f8f76ead1b0acd02b3ab367d6bf79e3ae", + "blockNumber": "0xd65c03", + "gasUsed": "0x1badef", + "effectiveGasPrice": "0xb021b8c11", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0x3a2a5e47ee16f9d5857d723c267794869b596961" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730801654, + "chain": 80002, + "commit": "d4e1224" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeployDvn.s.sol/80002/run-1730806554.json b/contracts/evm/broadcast/DeployDvn.s.sol/80002/run-1730806554.json new file mode 100644 index 00000000..5660adad --- /dev/null +++ b/contracts/evm/broadcast/DeployDvn.s.sol/80002/run-1730806554.json @@ -0,0 +1,102 @@ +{ + "transactions": [ + { + "hash": "0x98423afa96311d7df5c172566c15caecfa32ddd65f481064d6eeb42ab9b0aefc", + "transactionType": "CREATE", + "contractName": "NuffDVN", + "contractAddress": "0xbe4bad49fe4c887f1ba0adf5287ab2408caad8cf", + "function": null, + "arguments": [ + "(0, 0)", + "0x6EDCE65403992e310A62460808c4b910D972f10f", + "1", + "1", + "0xC03f31fD86a9077785b7bCf6598Ce3598Fa91113", + "0xb3e790273f0A89e53d2C20dD4dFe82AA00bbf91b" + ], + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x23f900", + "value": "0x0", + "input": "0x60a060405234801561001057600080fd5b5060405161206a38038061206a83398101604081905261002f91610263565b85516003556020808701516004908155600180546001600160a01b0319166001600160a01b0389169081179091556040805163416ecebf60e01b81529051919363416ecebf938281019391928290030181865afa158015610094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b89190610321565b63ffffffff1660805260058054600160a01b600160f01b031916600160a01b61ffff871602600160b01b600160f01b03191617600160b01b6001600160401b03861602179055600680546001600160a01b03199081166001600160a01b03858116919091179092556007805490911691831691909117905561013b600033610172565b506101667fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610172565b5050505050505061034e565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16610214576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101cc3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610218565b5060005b92915050565b80516001600160a01b038116811461023557600080fd5b919050565b805161ffff8116811461023557600080fd5b80516001600160401b038116811461023557600080fd5b60008060008060008086880360e081121561027d57600080fd5b604081121561028b57600080fd5b50604080519081016001600160401b03811182821017156102bc57634e487b7160e01b600052604160045260246000fd5b6040908152885182526020808a0151908301529096506102dd90880161021e565b94506102eb6060880161023a565b93506102f96080880161024c565b925061030760a0880161021e565b915061031560c0880161021e565b90509295509295509295565b60006020828403121561033357600080fd5b815163ffffffff8116811461034757600080fd5b9392505050565b608051611cf3610377600039600081816104f8015281816112a001526112e00152611cf36000f3fe6080604052600436106101e95760003560e01c8063724e78da11610113578063b3129896116100ab578063d547741f1161006f578063d547741f14610718578063f3acc68d14610738578063f48ab8f214610758578063f49ef50514610793578063fbd9b28b146107c357600080fd5b8063b312989614610678578063bb37d00c14610698578063c358de0a146106b8578063c5fdf39c146106d8578063cd88b903146106f857600080fd5b8063724e78da146104c657806372607537146104e6578063741bef1a1461052f57806375b238fc1461056757806391d148541461058957806395d376d7146105a95780639e944965146105bc578063a217fddf14610641578063a98586e11461065657600080fd5b8063296817001161018657806329681700146103995780632f2ff15d146103c957806330bb3aac146103e957806336568abe1461041057806351cc784f1461043057806352d3b8711461044657806354093c65146104665780635580c07d146104865780635b4c2500146104a657600080fd5b8062bf2e80146101ee57806301ffc9a7146102285780631095b6d7146102585780631703a0181461027a578063180aedf3146102b95780631fad0b4c146102ee57806320ac2ece1461030e578063248a9ca31461032e57806326e67a371461036c575b600080fd5b3480156101fa57600080fd5b5060055461021090600160a01b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561023457600080fd5b50610248610243366004611417565b6107f5565b604051901515815260200161021f565b34801561026457600080fd5b50610278610273366004611464565b61082c565b005b34801561028657600080fd5b506005546102a190600160b01b90046001600160401b031681565b6040516001600160401b03909116815260200161021f565b3480156102c557600080fd5b506102d96102d43660046114a1565b61094f565b60405161021f9998979695949392919061150a565b3480156102fa57600080fd5b50610278610309366004611593565b610ad8565b34801561031a57600080fd5b50610278610329366004611593565b610b13565b34801561033a57600080fd5b5061035e6103493660046114a1565b60009081526020819052604090206001015490565b60405190815260200161021f565b34801561037857600080fd5b5061038c6103873660046115c2565b610b4e565b60405161021f91906115dd565b3480156103a557600080fd5b506102486103b43660046115c2565b60096020526000908152604090205460ff1681565b3480156103d557600080fd5b506102786103e4366004611623565b610bd5565b3480156103f557600080fd5b5061035e6104043660046116ae565b50612710949350505050565b34801561041c57600080fd5b5061027861042b366004611623565b610c00565b34801561043c57600080fd5b5061035e60025481565b34801561045257600080fd5b50610278610461366004611723565b610c38565b34801561047257600080fd5b506102786104813660046117de565b610da8565b34801561049257600080fd5b506102786104a136600461182e565b610dcf565b3480156104b257600080fd5b506102786104c1366004611593565b610f57565b3480156104d257600080fd5b506102786104e1366004611593565b610f92565b3480156104f257600080fd5b5061051a7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161021f565b34801561053b57600080fd5b5060065461054f906001600160a01b031681565b6040516001600160a01b03909116815260200161021f565b34801561057357600080fd5b5061035e600080516020611c9e83398151915281565b34801561059557600080fd5b506102486105a4366004611623565b610fcd565b61035e6105b736600461191c565b610ff6565b3480156105c857600080fd5b506106106105d73660046115c2565b600a602052600090815260409020546001600160401b03811690600160401b810461ffff1690600160501b90046001600160801b031683565b604080516001600160401b03909416845261ffff90921660208401526001600160801b03169082015260600161021f565b34801561064d57600080fd5b5061035e600081565b34801561066257600080fd5b5061035e600080516020611c7e83398151915281565b34801561068457600080fd5b5060015461054f906001600160a01b031681565b3480156106a457600080fd5b5060075461054f906001600160a01b031681565b3480156106c457600080fd5b506102786106d336600461199f565b611087565b3480156106e457600080fd5b5060055461054f906001600160a01b031681565b34801561070457600080fd5b506102786107133660046119ba565b6110c2565b34801561072457600080fd5b50610278610733366004611623565b6110e2565b34801561074457600080fd5b50610278610753366004611a40565b611107565b34801561076457600080fd5b50610248610773366004611a7c565b600b60209081526000928352604080842090915290825290205460ff1681565b34801561079f57600080fd5b506003546004546107ae919082565b6040805192835260208301919091520161021f565b3480156107cf57600080fd5b506107e36107de366004611a7c565b611148565b60405160ff909116815260200161021f565b60006001600160e01b03198216637965db0b60e01b148061082657506301ffc9a760e01b6001600160e01b03198316145b92915050565b600080516020611c9e8339815191526108448161118b565b61085c600080516020611c7e83398151915285610fcd565b61089b5760405162461bcd60e51b815260206004820152600b60248201526a24b73b30b634b2103634b160a91b60448201526064015b60405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b1580156108e557600080fd5b505af11580156108f9573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b600860205260009081526040902080546001820180546001600160a01b0383169363ffffffff600160a01b8504811694600160c01b90041692909161099390611aa6565b80601f01602080910402602001604051908101604052809291908181526020018280546109bf90611aa6565b8015610a0c5780601f106109e157610100808354040283529160200191610a0c565b820191906000526020600020905b8154815290600101906020018083116109ef57829003601f168201915b50505050600283015460038401546004850154600586018054959693956001600160401b0384169550600160401b9093046001600160a01b0390811694921692610a5590611aa6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8190611aa6565b8015610ace5780601f10610aa357610100808354040283529160200191610ace565b820191906000526020600020905b815481529060010190602001808311610ab157829003601f168201915b5050505050905089565b600080516020611c9e833981519152610af08161118b565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020611c9e833981519152610b2b8161118b565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b63ffffffff81166000908152600c6020908152604091829020805483518184028101840190945280845260609392830182828015610bc957602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610b9a5790505b50505050509050919050565b600082815260208190526040902060010154610bf08161118b565b610bfa8383611198565b50505050565b6001600160a01b0381163314610c295760405163334bd91960e11b815260040160405180910390fd5b610c33828261122a565b505050565b600080516020611c9e833981519152610c508161118b565b60005b82811015610d695736848483818110610c6e57610c6e611ae0565b90506080020190506040518060600160405280826020016020810190610c949190611af6565b6001600160401b03168152602001610cb2606084016040850161199f565b61ffff168152602001610ccb6080840160608501611b28565b6001600160801b03169052600a6000610ce760208501856115c2565b63ffffffff1681526020808201929092526040908101600020835181549385015194909201516001600160801b0316600160501b02600160501b600160d01b031961ffff909516600160401b0269ffffffffffffffffffff199094166001600160401b0390931692909217929092179290921691909117905550600101610c53565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051610d9b929190611b43565b60405180910390a1505050565b600080516020611c9e833981519152610dc08161118b565b50805160035560200151600455565b3068929eee149b4bd212685403610dee5763ab143c066000526004601cfd5b3068929eee149b4bd2126855610e0386611295565b610e405760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908191cdd115a5960921b6044820152606401610892565b63ffffffff87166000908152600b6020908152604080832088845290915290205460ff1615610eb15760405162461bcd60e51b815260206004820152601d60248201527f737263206a6f62496420697320616c72656164792076657269666965640000006044820152606401610892565b63ffffffff87166000908152600b60209081526040808320888452825291829020805460ff191660011790559051610ef791899189918991899189918991899101611bd4565b60408051808303601f1901905281815263ffffffff89168252602082018790527f33d9faf7f95795c8d5bd00585df49c5e70f8c4c8b9b11ed439fb144db238e5c7910160405180910390a13868929eee149b4bd212685550505050505050565b600080516020611c9e833981519152610f6f8161118b565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020611c9e833981519152610faa8161118b565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60003068929eee149b4bd2126854036110175763ab143c066000526004601cfd5b3068929eee149b4bd2126855600080516020611c7e83398151915261103b8161118b565b60405161271080825292507f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a1503868929eee149b4bd21268559392505050565b600080516020611c9e83398151915261109f8161118b565b506005805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b63ffffffff83166000908152600c60205260409020610bfa908383611359565b6000828152602081905260409020600101546110fd8161118b565b610bfa838361122a565b600080516020611c9e83398151915261111f8161118b565b5063ffffffff919091166000908152600960205260409020805460ff1916911515919091179055565b600c602052816000526040600020818154811061116457600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b611195813361131c565b50565b60006111a48383610fcd565b611222576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556111da3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610826565b506000610826565b60006112368383610fcd565b15611222576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610826565b60008163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16148061130757506112d882617530611c53565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16145b1561131457506001919050565b506000919050565b6113268282610fcd565b6113555760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610892565b5050565b82805482825590600052602060002090601f016020900481019282156113f25791602002820160005b838211156113c357833560ff1683826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302611382565b80156113f05782816101000a81549060ff02191690556001016020816000010492830192600103026113c3565b505b506113fe929150611402565b5090565b5b808211156113fe5760008155600101611403565b60006020828403121561142957600080fd5b81356001600160e01b03198116811461144157600080fd5b9392505050565b80356001600160a01b038116811461145f57600080fd5b919050565b60008060006060848603121561147957600080fd5b61148284611448565b925061149060208501611448565b929592945050506040919091013590565b6000602082840312156114b357600080fd5b5035919050565b60005b838110156114d55781810151838201526020016114bd565b50506000910152565b600081518084526114f68160208601602086016114ba565b601f01601f19169290920160200192915050565b6001600160a01b038a16815263ffffffff89811660208301528816604082015261012060608201819052600090611543908301896114de565b608083018890526001600160401b03871660a08401526001600160a01b0386811660c0850152851660e084015282810361010084015261158381856114de565b9c9b505050505050505050505050565b6000602082840312156115a557600080fd5b61144182611448565b803563ffffffff8116811461145f57600080fd5b6000602082840312156115d457600080fd5b611441826115ae565b602080825282518282018190526000918401906040840190835b8181101561161857835160ff168352602093840193909201916001016115f7565b509095945050505050565b6000806040838503121561163657600080fd5b8235915061164660208401611448565b90509250929050565b80356001600160401b038116811461145f57600080fd5b60008083601f84011261167857600080fd5b5081356001600160401b0381111561168f57600080fd5b6020830191508360208285010111156116a757600080fd5b9250929050565b6000806000806000608086880312156116c657600080fd5b6116cf866115ae565b94506116dd6020870161164f565b93506116eb60408701611448565b925060608601356001600160401b0381111561170657600080fd5b61171288828901611666565b969995985093965092949392505050565b6000806020838503121561173657600080fd5b82356001600160401b0381111561174c57600080fd5b8301601f8101851361175d57600080fd5b80356001600160401b0381111561177357600080fd5b8560208260071b840101111561178857600080fd5b6020919091019590945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156117d6576117d6611798565b604052919050565b600060408284031280156117f157600080fd5b50604080519081016001600160401b038111828210171561181457611814611798565b604052823581526020928301359281019290925250919050565b600080600080600080600060e0888a03121561184957600080fd5b611852886115ae565b9650611860602089016115ae565b95506040880135945060608801356001600160401b0381111561188257600080fd5b8801601f81018a1361189357600080fd5b80356001600160401b038111156118ac576118ac611798565b6118bf601f8201601f19166020016117ae565b8181528b60208385010111156118d457600080fd5b816020840160208301376000918101602001919091529450506080880135925061190060a0890161164f565b915061190e60c08901611448565b905092959891949750929550565b60008060006040848603121561193157600080fd5b83356001600160401b0381111561194757600080fd5b840160a0818703121561195957600080fd5b925060208401356001600160401b0381111561197457600080fd5b61198086828701611666565b9497909650939450505050565b803561ffff8116811461145f57600080fd5b6000602082840312156119b157600080fd5b6114418261198d565b6000806000604084860312156119cf57600080fd5b6119d8846115ae565b925060208401356001600160401b038111156119f357600080fd5b8401601f81018613611a0457600080fd5b80356001600160401b03811115611a1a57600080fd5b8660208260051b8401011115611a2f57600080fd5b939660209190910195509293505050565b60008060408385031215611a5357600080fd5b611a5c836115ae565b915060208301358015158114611a7157600080fd5b809150509250929050565b60008060408385031215611a8f57600080fd5b611a98836115ae565b946020939093013593505050565b600181811c90821680611aba57607f821691505b602082108103611ada57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611b0857600080fd5b6114418261164f565b80356001600160801b038116811461145f57600080fd5b600060208284031215611b3a57600080fd5b61144182611b11565b6020808252810182905260008360408301825b85811015611bca5763ffffffff611b6c846115ae565b1682526001600160401b03611b836020850161164f565b16602083015261ffff611b986040850161198d565b1660408301526001600160801b03611bb260608501611b11565b16606083015260809283019290910190600101611b56565b5095945050505050565b63ffffffff60e01b8860e01b16815263ffffffff60e01b8760e01b16600482015285600882015260008551611c10816028850160208a016114ba565b602892019182019490945260c09290921b6001600160c01b031916604883015260601b6bffffffffffffffffffffffff1916605082015260640195945050505050565b63ffffffff818116838216019081111561082657634e487b7160e01b600052601160045260246000fdfe724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19dea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220d1a546e8508e3b470a3f45040f0f348499a639347aced6c8ee9ce372838989b164736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006edce65403992e310a62460808c4b910d972f10f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c03f31fd86a9077785b7bcf6598ce3598fa91113000000000000000000000000b3e790273f0a89e53d2c20dd4dfe82aa00bbf91b", + "nonce": "0x2f", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x1badef", + "logs": [ + { + "address": "0xbe4bad49fe4c887f1ba0adf5287ab2408caad8cf", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0xd7cbf8f2fb8855979183d9f219b1664749e9d37ebf5f3c87f62e5d1bf9ca5dba", + "blockNumber": "0xd66505", + "transactionHash": "0x98423afa96311d7df5c172566c15caecfa32ddd65f481064d6eeb42ab9b0aefc", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + }, + { + "address": "0xbe4bad49fe4c887f1ba0adf5287ab2408caad8cf", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0xa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0xd7cbf8f2fb8855979183d9f219b1664749e9d37ebf5f3c87f62e5d1bf9ca5dba", + "blockNumber": "0xd66505", + "transactionHash": "0x98423afa96311d7df5c172566c15caecfa32ddd65f481064d6eeb42ab9b0aefc", + "transactionIndex": "0x0", + "logIndex": "0x1", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x0000000000000000000000004ad84f7014b7b44f723f284a85b1662337971439" + ], + "data": "0x00000000000000000000000000000000000000000000000000d4ac244e9756000000000000000000000000000000000000000000000000006b8a010283a5104b0000000000000000000000000000000000000000000003c32527f67d927136850000000000000000000000000000000000000000000000006ab554de350dba4b0000000000000000000000000000000000000000000003c325fca2a1e1088c85", + "blockHash": "0xd7cbf8f2fb8855979183d9f219b1664749e9d37ebf5f3c87f62e5d1bf9ca5dba", + "blockNumber": "0xd66505", + "transactionHash": "0x98423afa96311d7df5c172566c15caecfa32ddd65f481064d6eeb42ab9b0aefc", + "transactionIndex": "0x0", + "logIndex": "0x2", + "removed": false + } + ], + "logsBloom": "0x0000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000400000000000000000000000000000000000800000002020000000000100001000000000000000020000000000004000000800000000000000000880000000000000000000200000000000000000000000004000000000000000000000000000000000200000000000000000000000000000000000000000000000001000000000004000000000000000000001000000002000000000000000400100100000000020000000000000000000000000000000008000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0x98423afa96311d7df5c172566c15caecfa32ddd65f481064d6eeb42ab9b0aefc", + "transactionIndex": "0x0", + "blockHash": "0xd7cbf8f2fb8855979183d9f219b1664749e9d37ebf5f3c87f62e5d1bf9ca5dba", + "blockNumber": "0xd66505", + "gasUsed": "0x1badef", + "effectiveGasPrice": "0x7aef40a0f", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0xbe4bad49fe4c887f1ba0adf5287ab2408caad8cf" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730806554, + "chain": 80002, + "commit": "d4e1224" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeployDvn.s.sol/80002/run-latest.json b/contracts/evm/broadcast/DeployDvn.s.sol/80002/run-latest.json new file mode 100644 index 00000000..5660adad --- /dev/null +++ b/contracts/evm/broadcast/DeployDvn.s.sol/80002/run-latest.json @@ -0,0 +1,102 @@ +{ + "transactions": [ + { + "hash": "0x98423afa96311d7df5c172566c15caecfa32ddd65f481064d6eeb42ab9b0aefc", + "transactionType": "CREATE", + "contractName": "NuffDVN", + "contractAddress": "0xbe4bad49fe4c887f1ba0adf5287ab2408caad8cf", + "function": null, + "arguments": [ + "(0, 0)", + "0x6EDCE65403992e310A62460808c4b910D972f10f", + "1", + "1", + "0xC03f31fD86a9077785b7bCf6598Ce3598Fa91113", + "0xb3e790273f0A89e53d2C20dD4dFe82AA00bbf91b" + ], + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x23f900", + "value": "0x0", + "input": "0x60a060405234801561001057600080fd5b5060405161206a38038061206a83398101604081905261002f91610263565b85516003556020808701516004908155600180546001600160a01b0319166001600160a01b0389169081179091556040805163416ecebf60e01b81529051919363416ecebf938281019391928290030181865afa158015610094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b89190610321565b63ffffffff1660805260058054600160a01b600160f01b031916600160a01b61ffff871602600160b01b600160f01b03191617600160b01b6001600160401b03861602179055600680546001600160a01b03199081166001600160a01b03858116919091179092556007805490911691831691909117905561013b600033610172565b506101667fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610172565b5050505050505061034e565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16610214576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101cc3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610218565b5060005b92915050565b80516001600160a01b038116811461023557600080fd5b919050565b805161ffff8116811461023557600080fd5b80516001600160401b038116811461023557600080fd5b60008060008060008086880360e081121561027d57600080fd5b604081121561028b57600080fd5b50604080519081016001600160401b03811182821017156102bc57634e487b7160e01b600052604160045260246000fd5b6040908152885182526020808a0151908301529096506102dd90880161021e565b94506102eb6060880161023a565b93506102f96080880161024c565b925061030760a0880161021e565b915061031560c0880161021e565b90509295509295509295565b60006020828403121561033357600080fd5b815163ffffffff8116811461034757600080fd5b9392505050565b608051611cf3610377600039600081816104f8015281816112a001526112e00152611cf36000f3fe6080604052600436106101e95760003560e01c8063724e78da11610113578063b3129896116100ab578063d547741f1161006f578063d547741f14610718578063f3acc68d14610738578063f48ab8f214610758578063f49ef50514610793578063fbd9b28b146107c357600080fd5b8063b312989614610678578063bb37d00c14610698578063c358de0a146106b8578063c5fdf39c146106d8578063cd88b903146106f857600080fd5b8063724e78da146104c657806372607537146104e6578063741bef1a1461052f57806375b238fc1461056757806391d148541461058957806395d376d7146105a95780639e944965146105bc578063a217fddf14610641578063a98586e11461065657600080fd5b8063296817001161018657806329681700146103995780632f2ff15d146103c957806330bb3aac146103e957806336568abe1461041057806351cc784f1461043057806352d3b8711461044657806354093c65146104665780635580c07d146104865780635b4c2500146104a657600080fd5b8062bf2e80146101ee57806301ffc9a7146102285780631095b6d7146102585780631703a0181461027a578063180aedf3146102b95780631fad0b4c146102ee57806320ac2ece1461030e578063248a9ca31461032e57806326e67a371461036c575b600080fd5b3480156101fa57600080fd5b5060055461021090600160a01b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561023457600080fd5b50610248610243366004611417565b6107f5565b604051901515815260200161021f565b34801561026457600080fd5b50610278610273366004611464565b61082c565b005b34801561028657600080fd5b506005546102a190600160b01b90046001600160401b031681565b6040516001600160401b03909116815260200161021f565b3480156102c557600080fd5b506102d96102d43660046114a1565b61094f565b60405161021f9998979695949392919061150a565b3480156102fa57600080fd5b50610278610309366004611593565b610ad8565b34801561031a57600080fd5b50610278610329366004611593565b610b13565b34801561033a57600080fd5b5061035e6103493660046114a1565b60009081526020819052604090206001015490565b60405190815260200161021f565b34801561037857600080fd5b5061038c6103873660046115c2565b610b4e565b60405161021f91906115dd565b3480156103a557600080fd5b506102486103b43660046115c2565b60096020526000908152604090205460ff1681565b3480156103d557600080fd5b506102786103e4366004611623565b610bd5565b3480156103f557600080fd5b5061035e6104043660046116ae565b50612710949350505050565b34801561041c57600080fd5b5061027861042b366004611623565b610c00565b34801561043c57600080fd5b5061035e60025481565b34801561045257600080fd5b50610278610461366004611723565b610c38565b34801561047257600080fd5b506102786104813660046117de565b610da8565b34801561049257600080fd5b506102786104a136600461182e565b610dcf565b3480156104b257600080fd5b506102786104c1366004611593565b610f57565b3480156104d257600080fd5b506102786104e1366004611593565b610f92565b3480156104f257600080fd5b5061051a7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161021f565b34801561053b57600080fd5b5060065461054f906001600160a01b031681565b6040516001600160a01b03909116815260200161021f565b34801561057357600080fd5b5061035e600080516020611c9e83398151915281565b34801561059557600080fd5b506102486105a4366004611623565b610fcd565b61035e6105b736600461191c565b610ff6565b3480156105c857600080fd5b506106106105d73660046115c2565b600a602052600090815260409020546001600160401b03811690600160401b810461ffff1690600160501b90046001600160801b031683565b604080516001600160401b03909416845261ffff90921660208401526001600160801b03169082015260600161021f565b34801561064d57600080fd5b5061035e600081565b34801561066257600080fd5b5061035e600080516020611c7e83398151915281565b34801561068457600080fd5b5060015461054f906001600160a01b031681565b3480156106a457600080fd5b5060075461054f906001600160a01b031681565b3480156106c457600080fd5b506102786106d336600461199f565b611087565b3480156106e457600080fd5b5060055461054f906001600160a01b031681565b34801561070457600080fd5b506102786107133660046119ba565b6110c2565b34801561072457600080fd5b50610278610733366004611623565b6110e2565b34801561074457600080fd5b50610278610753366004611a40565b611107565b34801561076457600080fd5b50610248610773366004611a7c565b600b60209081526000928352604080842090915290825290205460ff1681565b34801561079f57600080fd5b506003546004546107ae919082565b6040805192835260208301919091520161021f565b3480156107cf57600080fd5b506107e36107de366004611a7c565b611148565b60405160ff909116815260200161021f565b60006001600160e01b03198216637965db0b60e01b148061082657506301ffc9a760e01b6001600160e01b03198316145b92915050565b600080516020611c9e8339815191526108448161118b565b61085c600080516020611c7e83398151915285610fcd565b61089b5760405162461bcd60e51b815260206004820152600b60248201526a24b73b30b634b2103634b160a91b60448201526064015b60405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b1580156108e557600080fd5b505af11580156108f9573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b600860205260009081526040902080546001820180546001600160a01b0383169363ffffffff600160a01b8504811694600160c01b90041692909161099390611aa6565b80601f01602080910402602001604051908101604052809291908181526020018280546109bf90611aa6565b8015610a0c5780601f106109e157610100808354040283529160200191610a0c565b820191906000526020600020905b8154815290600101906020018083116109ef57829003601f168201915b50505050600283015460038401546004850154600586018054959693956001600160401b0384169550600160401b9093046001600160a01b0390811694921692610a5590611aa6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8190611aa6565b8015610ace5780601f10610aa357610100808354040283529160200191610ace565b820191906000526020600020905b815481529060010190602001808311610ab157829003601f168201915b5050505050905089565b600080516020611c9e833981519152610af08161118b565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020611c9e833981519152610b2b8161118b565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b63ffffffff81166000908152600c6020908152604091829020805483518184028101840190945280845260609392830182828015610bc957602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610b9a5790505b50505050509050919050565b600082815260208190526040902060010154610bf08161118b565b610bfa8383611198565b50505050565b6001600160a01b0381163314610c295760405163334bd91960e11b815260040160405180910390fd5b610c33828261122a565b505050565b600080516020611c9e833981519152610c508161118b565b60005b82811015610d695736848483818110610c6e57610c6e611ae0565b90506080020190506040518060600160405280826020016020810190610c949190611af6565b6001600160401b03168152602001610cb2606084016040850161199f565b61ffff168152602001610ccb6080840160608501611b28565b6001600160801b03169052600a6000610ce760208501856115c2565b63ffffffff1681526020808201929092526040908101600020835181549385015194909201516001600160801b0316600160501b02600160501b600160d01b031961ffff909516600160401b0269ffffffffffffffffffff199094166001600160401b0390931692909217929092179290921691909117905550600101610c53565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051610d9b929190611b43565b60405180910390a1505050565b600080516020611c9e833981519152610dc08161118b565b50805160035560200151600455565b3068929eee149b4bd212685403610dee5763ab143c066000526004601cfd5b3068929eee149b4bd2126855610e0386611295565b610e405760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908191cdd115a5960921b6044820152606401610892565b63ffffffff87166000908152600b6020908152604080832088845290915290205460ff1615610eb15760405162461bcd60e51b815260206004820152601d60248201527f737263206a6f62496420697320616c72656164792076657269666965640000006044820152606401610892565b63ffffffff87166000908152600b60209081526040808320888452825291829020805460ff191660011790559051610ef791899189918991899189918991899101611bd4565b60408051808303601f1901905281815263ffffffff89168252602082018790527f33d9faf7f95795c8d5bd00585df49c5e70f8c4c8b9b11ed439fb144db238e5c7910160405180910390a13868929eee149b4bd212685550505050505050565b600080516020611c9e833981519152610f6f8161118b565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020611c9e833981519152610faa8161118b565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60003068929eee149b4bd2126854036110175763ab143c066000526004601cfd5b3068929eee149b4bd2126855600080516020611c7e83398151915261103b8161118b565b60405161271080825292507f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a1503868929eee149b4bd21268559392505050565b600080516020611c9e83398151915261109f8161118b565b506005805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b63ffffffff83166000908152600c60205260409020610bfa908383611359565b6000828152602081905260409020600101546110fd8161118b565b610bfa838361122a565b600080516020611c9e83398151915261111f8161118b565b5063ffffffff919091166000908152600960205260409020805460ff1916911515919091179055565b600c602052816000526040600020818154811061116457600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b611195813361131c565b50565b60006111a48383610fcd565b611222576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556111da3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610826565b506000610826565b60006112368383610fcd565b15611222576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610826565b60008163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16148061130757506112d882617530611c53565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16145b1561131457506001919050565b506000919050565b6113268282610fcd565b6113555760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610892565b5050565b82805482825590600052602060002090601f016020900481019282156113f25791602002820160005b838211156113c357833560ff1683826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302611382565b80156113f05782816101000a81549060ff02191690556001016020816000010492830192600103026113c3565b505b506113fe929150611402565b5090565b5b808211156113fe5760008155600101611403565b60006020828403121561142957600080fd5b81356001600160e01b03198116811461144157600080fd5b9392505050565b80356001600160a01b038116811461145f57600080fd5b919050565b60008060006060848603121561147957600080fd5b61148284611448565b925061149060208501611448565b929592945050506040919091013590565b6000602082840312156114b357600080fd5b5035919050565b60005b838110156114d55781810151838201526020016114bd565b50506000910152565b600081518084526114f68160208601602086016114ba565b601f01601f19169290920160200192915050565b6001600160a01b038a16815263ffffffff89811660208301528816604082015261012060608201819052600090611543908301896114de565b608083018890526001600160401b03871660a08401526001600160a01b0386811660c0850152851660e084015282810361010084015261158381856114de565b9c9b505050505050505050505050565b6000602082840312156115a557600080fd5b61144182611448565b803563ffffffff8116811461145f57600080fd5b6000602082840312156115d457600080fd5b611441826115ae565b602080825282518282018190526000918401906040840190835b8181101561161857835160ff168352602093840193909201916001016115f7565b509095945050505050565b6000806040838503121561163657600080fd5b8235915061164660208401611448565b90509250929050565b80356001600160401b038116811461145f57600080fd5b60008083601f84011261167857600080fd5b5081356001600160401b0381111561168f57600080fd5b6020830191508360208285010111156116a757600080fd5b9250929050565b6000806000806000608086880312156116c657600080fd5b6116cf866115ae565b94506116dd6020870161164f565b93506116eb60408701611448565b925060608601356001600160401b0381111561170657600080fd5b61171288828901611666565b969995985093965092949392505050565b6000806020838503121561173657600080fd5b82356001600160401b0381111561174c57600080fd5b8301601f8101851361175d57600080fd5b80356001600160401b0381111561177357600080fd5b8560208260071b840101111561178857600080fd5b6020919091019590945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156117d6576117d6611798565b604052919050565b600060408284031280156117f157600080fd5b50604080519081016001600160401b038111828210171561181457611814611798565b604052823581526020928301359281019290925250919050565b600080600080600080600060e0888a03121561184957600080fd5b611852886115ae565b9650611860602089016115ae565b95506040880135945060608801356001600160401b0381111561188257600080fd5b8801601f81018a1361189357600080fd5b80356001600160401b038111156118ac576118ac611798565b6118bf601f8201601f19166020016117ae565b8181528b60208385010111156118d457600080fd5b816020840160208301376000918101602001919091529450506080880135925061190060a0890161164f565b915061190e60c08901611448565b905092959891949750929550565b60008060006040848603121561193157600080fd5b83356001600160401b0381111561194757600080fd5b840160a0818703121561195957600080fd5b925060208401356001600160401b0381111561197457600080fd5b61198086828701611666565b9497909650939450505050565b803561ffff8116811461145f57600080fd5b6000602082840312156119b157600080fd5b6114418261198d565b6000806000604084860312156119cf57600080fd5b6119d8846115ae565b925060208401356001600160401b038111156119f357600080fd5b8401601f81018613611a0457600080fd5b80356001600160401b03811115611a1a57600080fd5b8660208260051b8401011115611a2f57600080fd5b939660209190910195509293505050565b60008060408385031215611a5357600080fd5b611a5c836115ae565b915060208301358015158114611a7157600080fd5b809150509250929050565b60008060408385031215611a8f57600080fd5b611a98836115ae565b946020939093013593505050565b600181811c90821680611aba57607f821691505b602082108103611ada57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611b0857600080fd5b6114418261164f565b80356001600160801b038116811461145f57600080fd5b600060208284031215611b3a57600080fd5b61144182611b11565b6020808252810182905260008360408301825b85811015611bca5763ffffffff611b6c846115ae565b1682526001600160401b03611b836020850161164f565b16602083015261ffff611b986040850161198d565b1660408301526001600160801b03611bb260608501611b11565b16606083015260809283019290910190600101611b56565b5095945050505050565b63ffffffff60e01b8860e01b16815263ffffffff60e01b8760e01b16600482015285600882015260008551611c10816028850160208a016114ba565b602892019182019490945260c09290921b6001600160c01b031916604883015260601b6bffffffffffffffffffffffff1916605082015260640195945050505050565b63ffffffff818116838216019081111561082657634e487b7160e01b600052601160045260246000fdfe724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19dea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220d1a546e8508e3b470a3f45040f0f348499a639347aced6c8ee9ce372838989b164736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006edce65403992e310a62460808c4b910d972f10f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c03f31fd86a9077785b7bcf6598ce3598fa91113000000000000000000000000b3e790273f0a89e53d2c20dd4dfe82aa00bbf91b", + "nonce": "0x2f", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x1badef", + "logs": [ + { + "address": "0xbe4bad49fe4c887f1ba0adf5287ab2408caad8cf", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0xd7cbf8f2fb8855979183d9f219b1664749e9d37ebf5f3c87f62e5d1bf9ca5dba", + "blockNumber": "0xd66505", + "transactionHash": "0x98423afa96311d7df5c172566c15caecfa32ddd65f481064d6eeb42ab9b0aefc", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + }, + { + "address": "0xbe4bad49fe4c887f1ba0adf5287ab2408caad8cf", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0xa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "blockHash": "0xd7cbf8f2fb8855979183d9f219b1664749e9d37ebf5f3c87f62e5d1bf9ca5dba", + "blockNumber": "0xd66505", + "transactionHash": "0x98423afa96311d7df5c172566c15caecfa32ddd65f481064d6eeb42ab9b0aefc", + "transactionIndex": "0x0", + "logIndex": "0x1", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x0000000000000000000000004ad84f7014b7b44f723f284a85b1662337971439" + ], + "data": "0x00000000000000000000000000000000000000000000000000d4ac244e9756000000000000000000000000000000000000000000000000006b8a010283a5104b0000000000000000000000000000000000000000000003c32527f67d927136850000000000000000000000000000000000000000000000006ab554de350dba4b0000000000000000000000000000000000000000000003c325fca2a1e1088c85", + "blockHash": "0xd7cbf8f2fb8855979183d9f219b1664749e9d37ebf5f3c87f62e5d1bf9ca5dba", + "blockNumber": "0xd66505", + "transactionHash": "0x98423afa96311d7df5c172566c15caecfa32ddd65f481064d6eeb42ab9b0aefc", + "transactionIndex": "0x0", + "logIndex": "0x2", + "removed": false + } + ], + "logsBloom": "0x0000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000400000000000000000000000000000000000800000002020000000000100001000000000000000020000000000004000000800000000000000000880000000000000000000200000000000000000000000004000000000000000000000000000000000200000000000000000000000000000000000000000000000001000000000004000000000000000000001000000002000000000000000400100100000000020000000000000000000000000000000008000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0x98423afa96311d7df5c172566c15caecfa32ddd65f481064d6eeb42ab9b0aefc", + "transactionIndex": "0x0", + "blockHash": "0xd7cbf8f2fb8855979183d9f219b1664749e9d37ebf5f3c87f62e5d1bf9ca5dba", + "blockNumber": "0xd66505", + "gasUsed": "0x1badef", + "effectiveGasPrice": "0x7aef40a0f", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0xbe4bad49fe4c887f1ba0adf5287ab2408caad8cf" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730806554, + "chain": 80002, + "commit": "d4e1224" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeployExecutor.s.sol/17000/run-1731598477.json b/contracts/evm/broadcast/DeployExecutor.s.sol/17000/run-1731598477.json new file mode 100644 index 00000000..d14a0ff7 --- /dev/null +++ b/contracts/evm/broadcast/DeployExecutor.s.sol/17000/run-1731598477.json @@ -0,0 +1,46 @@ +{ + "transactions": [ + { + "hash": "0xf41217634e21fa3f8a4ea06df4ffac0221d9381983a00fb2dae04ed0bbb153e8", + "transactionType": "CREATE", + "contractName": "NuffExecutor", + "contractAddress": "0x8bdc18bf33fd8643d70caccb684251e2a80130b2", + "function": null, + "arguments": null, + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x28224", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b506101538061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063709eb6641461003b578063717e8a421461003b575b600080fd5b610055610049366004610067565b50612710949350505050565b60405190815260200160405180910390f35b60008060008060006080868803121561007f57600080fd5b853563ffffffff8116811461009357600080fd5b945060208601356001600160a01b03811681146100af57600080fd5b935060408601359250606086013567ffffffffffffffff8111156100d257600080fd5b8601601f810188136100e357600080fd5b803567ffffffffffffffff8111156100fa57600080fd5b88602082840101111561010c57600080fd5b95989497509295505050602001919056fea264697066735822122042cfac2133b8b689c32fb376a84e3ee8a5f5a64ba8a41d967461dcdcb080f18864736f6c634300081a0033", + "nonce": "0xe1", + "chainId": "0x4268" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xe4fd3d", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xf41217634e21fa3f8a4ea06df4ffac0221d9381983a00fb2dae04ed0bbb153e8", + "transactionIndex": "0x1b", + "blockHash": "0x5438d37529b20ad03a3af80c141bf49aeeaf45c0570d910201e967ce33d742a9", + "blockNumber": "0x29cc0d", + "gasUsed": "0x1ee0d", + "effectiveGasPrice": "0x3ee6afe", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0x8bdc18bf33fd8643d70caccb684251e2a80130b2" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1731598477, + "chain": 17000, + "commit": "1edc562" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeployExecutor.s.sol/17000/run-latest.json b/contracts/evm/broadcast/DeployExecutor.s.sol/17000/run-latest.json new file mode 100644 index 00000000..d14a0ff7 --- /dev/null +++ b/contracts/evm/broadcast/DeployExecutor.s.sol/17000/run-latest.json @@ -0,0 +1,46 @@ +{ + "transactions": [ + { + "hash": "0xf41217634e21fa3f8a4ea06df4ffac0221d9381983a00fb2dae04ed0bbb153e8", + "transactionType": "CREATE", + "contractName": "NuffExecutor", + "contractAddress": "0x8bdc18bf33fd8643d70caccb684251e2a80130b2", + "function": null, + "arguments": null, + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x28224", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b506101538061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063709eb6641461003b578063717e8a421461003b575b600080fd5b610055610049366004610067565b50612710949350505050565b60405190815260200160405180910390f35b60008060008060006080868803121561007f57600080fd5b853563ffffffff8116811461009357600080fd5b945060208601356001600160a01b03811681146100af57600080fd5b935060408601359250606086013567ffffffffffffffff8111156100d257600080fd5b8601601f810188136100e357600080fd5b803567ffffffffffffffff8111156100fa57600080fd5b88602082840101111561010c57600080fd5b95989497509295505050602001919056fea264697066735822122042cfac2133b8b689c32fb376a84e3ee8a5f5a64ba8a41d967461dcdcb080f18864736f6c634300081a0033", + "nonce": "0xe1", + "chainId": "0x4268" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xe4fd3d", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xf41217634e21fa3f8a4ea06df4ffac0221d9381983a00fb2dae04ed0bbb153e8", + "transactionIndex": "0x1b", + "blockHash": "0x5438d37529b20ad03a3af80c141bf49aeeaf45c0570d910201e967ce33d742a9", + "blockNumber": "0x29cc0d", + "gasUsed": "0x1ee0d", + "effectiveGasPrice": "0x3ee6afe", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0x8bdc18bf33fd8643d70caccb684251e2a80130b2" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1731598477, + "chain": 17000, + "commit": "1edc562" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeployExecutor.s.sol/421614/run-1731598564.json b/contracts/evm/broadcast/DeployExecutor.s.sol/421614/run-1731598564.json new file mode 100644 index 00000000..78e7d975 --- /dev/null +++ b/contracts/evm/broadcast/DeployExecutor.s.sol/421614/run-1731598564.json @@ -0,0 +1,48 @@ +{ + "transactions": [ + { + "hash": "0x082d96f956fdc132e1fe0764fdd36e1b519072adda282191e819ea003bf23a68", + "transactionType": "CREATE", + "contractName": "NuffExecutor", + "contractAddress": "0x77981c5ab32db61c2c67cbff8a3eae12c99671e3", + "function": null, + "arguments": null, + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x2934c", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b506101538061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063709eb6641461003b578063717e8a421461003b575b600080fd5b610055610049366004610067565b50612710949350505050565b60405190815260200160405180910390f35b60008060008060006080868803121561007f57600080fd5b853563ffffffff8116811461009357600080fd5b945060208601356001600160a01b03811681146100af57600080fd5b935060408601359250606086013567ffffffffffffffff8111156100d257600080fd5b8601601f810188136100e357600080fd5b803567ffffffffffffffff8111156100fa57600080fd5b88602082840101111561010c57600080fd5b95989497509295505050602001919056fea264697066735822122042cfac2133b8b689c32fb376a84e3ee8a5f5a64ba8a41d967461dcdcb080f18864736f6c634300081a0033", + "nonce": "0x7c", + "chainId": "0x66eee" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x1f588", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x082d96f956fdc132e1fe0764fdd36e1b519072adda282191e819ea003bf23a68", + "transactionIndex": "0x1", + "blockHash": "0x0d21bdb0eebb6bcbe8c219e30631846142e3642647e544b8658e2e5949664eb6", + "blockNumber": "0x5ccfae0", + "gasUsed": "0x1f588", + "effectiveGasPrice": "0x5f5e100", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0x77981c5ab32db61c2c67cbff8a3eae12c99671e3", + "gasUsedForL1": "0x77b", + "l1BlockNumber": "0x6bf916" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1731598564, + "chain": 421614, + "commit": "1edc562" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeployExecutor.s.sol/421614/run-latest.json b/contracts/evm/broadcast/DeployExecutor.s.sol/421614/run-latest.json new file mode 100644 index 00000000..78e7d975 --- /dev/null +++ b/contracts/evm/broadcast/DeployExecutor.s.sol/421614/run-latest.json @@ -0,0 +1,48 @@ +{ + "transactions": [ + { + "hash": "0x082d96f956fdc132e1fe0764fdd36e1b519072adda282191e819ea003bf23a68", + "transactionType": "CREATE", + "contractName": "NuffExecutor", + "contractAddress": "0x77981c5ab32db61c2c67cbff8a3eae12c99671e3", + "function": null, + "arguments": null, + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x2934c", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b506101538061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063709eb6641461003b578063717e8a421461003b575b600080fd5b610055610049366004610067565b50612710949350505050565b60405190815260200160405180910390f35b60008060008060006080868803121561007f57600080fd5b853563ffffffff8116811461009357600080fd5b945060208601356001600160a01b03811681146100af57600080fd5b935060408601359250606086013567ffffffffffffffff8111156100d257600080fd5b8601601f810188136100e357600080fd5b803567ffffffffffffffff8111156100fa57600080fd5b88602082840101111561010c57600080fd5b95989497509295505050602001919056fea264697066735822122042cfac2133b8b689c32fb376a84e3ee8a5f5a64ba8a41d967461dcdcb080f18864736f6c634300081a0033", + "nonce": "0x7c", + "chainId": "0x66eee" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x1f588", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x082d96f956fdc132e1fe0764fdd36e1b519072adda282191e819ea003bf23a68", + "transactionIndex": "0x1", + "blockHash": "0x0d21bdb0eebb6bcbe8c219e30631846142e3642647e544b8658e2e5949664eb6", + "blockNumber": "0x5ccfae0", + "gasUsed": "0x1f588", + "effectiveGasPrice": "0x5f5e100", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0x77981c5ab32db61c2c67cbff8a3eae12c99671e3", + "gasUsedForL1": "0x77b", + "l1BlockNumber": "0x6bf916" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1731598564, + "chain": 421614, + "commit": "1edc562" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeployExecutor.s.sol/80002/run-1731598493.json b/contracts/evm/broadcast/DeployExecutor.s.sol/80002/run-1731598493.json new file mode 100644 index 00000000..d1be36e0 --- /dev/null +++ b/contracts/evm/broadcast/DeployExecutor.s.sol/80002/run-1731598493.json @@ -0,0 +1,63 @@ +{ + "transactions": [ + { + "hash": "0x2468be85f7ecaf2d67dca87a06284fb9d67b555ab2d2390c1fbad4688fab82e1", + "transactionType": "CREATE", + "contractName": "NuffExecutor", + "contractAddress": "0x496e293f4c43a68de3d831d8f5fd58182235ef55", + "function": null, + "arguments": null, + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x28224", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b506101538061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063709eb6641461003b578063717e8a421461003b575b600080fd5b610055610049366004610067565b50612710949350505050565b60405190815260200160405180910390f35b60008060008060006080868803121561007f57600080fd5b853563ffffffff8116811461009357600080fd5b945060208601356001600160a01b03811681146100af57600080fd5b935060408601359250606086013567ffffffffffffffff8111156100d257600080fd5b8601601f810188136100e357600080fd5b803567ffffffffffffffff8111156100fa57600080fd5b88602082840101111561010c57600080fd5b95989497509295505050602001919056fea264697066735822122042cfac2133b8b689c32fb376a84e3ee8a5f5a64ba8a41d967461dcdcb080f18864736f6c634300081a0033", + "nonce": "0x48", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x1ee0d", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x0000000000000000000000006dc2dd54f24979ec26212794c71afefed722280c" + ], + "data": "0x0000000000000000000000000000000000000000000000000036ffb116b47d0900000000000000000000000000000000000000000000000076309a11cca3a95f0000000000000000000000000000000000000000000003f97a56565379ccfc3100000000000000000000000000000000000000000000000075f99a60b5ef2c560000000000000000000000000000000000000000000003f97a8d56049081793a", + "blockHash": "0x11a746972a5c281456c0cd719a53386a3fa301db29382d268501de93a2a35595", + "blockNumber": "0xdc0c23", + "transactionHash": "0x2468be85f7ecaf2d67dca87a06284fb9d67b555ab2d2390c1fbad4688fab82e1", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "logsBloom": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000800000000000000000000100080000000000000000000000000000000000000000000000000000000080000000000000020000200000000000000000000040000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000400000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0x2468be85f7ecaf2d67dca87a06284fb9d67b555ab2d2390c1fbad4688fab82e1", + "transactionIndex": "0x0", + "blockHash": "0x11a746972a5c281456c0cd719a53386a3fa301db29382d268501de93a2a35595", + "blockNumber": "0xdc0c23", + "gasUsed": "0x1ee0d", + "effectiveGasPrice": "0x1c7f9bc7fc", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0x496e293f4c43a68de3d831d8f5fd58182235ef55" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1731598493, + "chain": 80002, + "commit": "1edc562" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeployExecutor.s.sol/80002/run-latest.json b/contracts/evm/broadcast/DeployExecutor.s.sol/80002/run-latest.json new file mode 100644 index 00000000..d1be36e0 --- /dev/null +++ b/contracts/evm/broadcast/DeployExecutor.s.sol/80002/run-latest.json @@ -0,0 +1,63 @@ +{ + "transactions": [ + { + "hash": "0x2468be85f7ecaf2d67dca87a06284fb9d67b555ab2d2390c1fbad4688fab82e1", + "transactionType": "CREATE", + "contractName": "NuffExecutor", + "contractAddress": "0x496e293f4c43a68de3d831d8f5fd58182235ef55", + "function": null, + "arguments": null, + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x28224", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b506101538061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063709eb6641461003b578063717e8a421461003b575b600080fd5b610055610049366004610067565b50612710949350505050565b60405190815260200160405180910390f35b60008060008060006080868803121561007f57600080fd5b853563ffffffff8116811461009357600080fd5b945060208601356001600160a01b03811681146100af57600080fd5b935060408601359250606086013567ffffffffffffffff8111156100d257600080fd5b8601601f810188136100e357600080fd5b803567ffffffffffffffff8111156100fa57600080fd5b88602082840101111561010c57600080fd5b95989497509295505050602001919056fea264697066735822122042cfac2133b8b689c32fb376a84e3ee8a5f5a64ba8a41d967461dcdcb080f18864736f6c634300081a0033", + "nonce": "0x48", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x1ee0d", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x0000000000000000000000006dc2dd54f24979ec26212794c71afefed722280c" + ], + "data": "0x0000000000000000000000000000000000000000000000000036ffb116b47d0900000000000000000000000000000000000000000000000076309a11cca3a95f0000000000000000000000000000000000000000000003f97a56565379ccfc3100000000000000000000000000000000000000000000000075f99a60b5ef2c560000000000000000000000000000000000000000000003f97a8d56049081793a", + "blockHash": "0x11a746972a5c281456c0cd719a53386a3fa301db29382d268501de93a2a35595", + "blockNumber": "0xdc0c23", + "transactionHash": "0x2468be85f7ecaf2d67dca87a06284fb9d67b555ab2d2390c1fbad4688fab82e1", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "logsBloom": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000800000000000000000000100080000000000000000000000000000000000000000000000000000000080000000000000020000200000000000000000000040000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000400000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0x2468be85f7ecaf2d67dca87a06284fb9d67b555ab2d2390c1fbad4688fab82e1", + "transactionIndex": "0x0", + "blockHash": "0x11a746972a5c281456c0cd719a53386a3fa301db29382d268501de93a2a35595", + "blockNumber": "0xdc0c23", + "gasUsed": "0x1ee0d", + "effectiveGasPrice": "0x1c7f9bc7fc", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0x496e293f4c43a68de3d831d8f5fd58182235ef55" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1731598493, + "chain": 80002, + "commit": "1edc562" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeploySimple.s.sol/17000/run-1730910844.json b/contracts/evm/broadcast/DeploySimple.s.sol/17000/run-1730910844.json new file mode 100644 index 00000000..4ea6fc79 --- /dev/null +++ b/contracts/evm/broadcast/DeploySimple.s.sol/17000/run-1730910844.json @@ -0,0 +1,46 @@ +{ + "transactions": [ + { + "hash": "0xaa890a94a5863829d43880c7c6c896b279ecd0d7df97c856a0788feb61a861ad", + "transactionType": "CREATE", + "contractName": "SimpleNuffDVN", + "contractAddress": "0x25e8edce1bcf8d074f8af8838e9ceecd3e3e0268", + "function": null, + "arguments": null, + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x38907", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b506102438061001f6000396000f3fe6080604052600436106100295760003560e01c806330bb3aac1461002e57806395d376d714610067575b600080fd5b34801561003a57600080fd5b506100556100493660046100fc565b50612710949350505050565b60405190815260200160405180910390f35b61005561007536600461019a565b604051612710808252907f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a19392505050565b60008083601f8401126100c557600080fd5b50813567ffffffffffffffff8111156100dd57600080fd5b6020830191508360208285010111156100f557600080fd5b9250929050565b60008060008060006080868803121561011457600080fd5b853563ffffffff8116811461012857600080fd5b9450602086013567ffffffffffffffff8116811461014557600080fd5b935060408601356001600160a01b038116811461016157600080fd5b9250606086013567ffffffffffffffff81111561017d57600080fd5b610189888289016100b3565b969995985093965092949392505050565b6000806000604084860312156101af57600080fd5b833567ffffffffffffffff8111156101c657600080fd5b840160a081870312156101d857600080fd5b9250602084013567ffffffffffffffff8111156101f457600080fd5b610200868287016100b3565b949790965093945050505056fea26469706673582212202e5aeb575af6f567e663778f480a39965e2c4db5261c9e1015d02df57fe8211964736f6c634300081a0033", + "nonce": "0x2e", + "chainId": "0x4268" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x46f024", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xaa890a94a5863829d43880c7c6c896b279ecd0d7df97c856a0788feb61a861ad", + "transactionIndex": "0x9", + "blockHash": "0xaf5080765930b4b4fa957fe9b027487822c1efda99203c794cae50179e2a2312", + "blockNumber": "0x28fb56", + "gasUsed": "0x2b855", + "effectiveGasPrice": "0x1a81190e", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0x25e8edce1bcf8d074f8af8838e9ceecd3e3e0268" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730910844, + "chain": 17000, + "commit": "4f0aff3" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeploySimple.s.sol/17000/run-latest.json b/contracts/evm/broadcast/DeploySimple.s.sol/17000/run-latest.json new file mode 100644 index 00000000..4ea6fc79 --- /dev/null +++ b/contracts/evm/broadcast/DeploySimple.s.sol/17000/run-latest.json @@ -0,0 +1,46 @@ +{ + "transactions": [ + { + "hash": "0xaa890a94a5863829d43880c7c6c896b279ecd0d7df97c856a0788feb61a861ad", + "transactionType": "CREATE", + "contractName": "SimpleNuffDVN", + "contractAddress": "0x25e8edce1bcf8d074f8af8838e9ceecd3e3e0268", + "function": null, + "arguments": null, + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x38907", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b506102438061001f6000396000f3fe6080604052600436106100295760003560e01c806330bb3aac1461002e57806395d376d714610067575b600080fd5b34801561003a57600080fd5b506100556100493660046100fc565b50612710949350505050565b60405190815260200160405180910390f35b61005561007536600461019a565b604051612710808252907f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a19392505050565b60008083601f8401126100c557600080fd5b50813567ffffffffffffffff8111156100dd57600080fd5b6020830191508360208285010111156100f557600080fd5b9250929050565b60008060008060006080868803121561011457600080fd5b853563ffffffff8116811461012857600080fd5b9450602086013567ffffffffffffffff8116811461014557600080fd5b935060408601356001600160a01b038116811461016157600080fd5b9250606086013567ffffffffffffffff81111561017d57600080fd5b610189888289016100b3565b969995985093965092949392505050565b6000806000604084860312156101af57600080fd5b833567ffffffffffffffff8111156101c657600080fd5b840160a081870312156101d857600080fd5b9250602084013567ffffffffffffffff8111156101f457600080fd5b610200868287016100b3565b949790965093945050505056fea26469706673582212202e5aeb575af6f567e663778f480a39965e2c4db5261c9e1015d02df57fe8211964736f6c634300081a0033", + "nonce": "0x2e", + "chainId": "0x4268" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x46f024", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xaa890a94a5863829d43880c7c6c896b279ecd0d7df97c856a0788feb61a861ad", + "transactionIndex": "0x9", + "blockHash": "0xaf5080765930b4b4fa957fe9b027487822c1efda99203c794cae50179e2a2312", + "blockNumber": "0x28fb56", + "gasUsed": "0x2b855", + "effectiveGasPrice": "0x1a81190e", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0x25e8edce1bcf8d074f8af8838e9ceecd3e3e0268" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730910844, + "chain": 17000, + "commit": "4f0aff3" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeploySimple.s.sol/421614/run-1730910884.json b/contracts/evm/broadcast/DeploySimple.s.sol/421614/run-1730910884.json new file mode 100644 index 00000000..0f115901 --- /dev/null +++ b/contracts/evm/broadcast/DeploySimple.s.sol/421614/run-1730910884.json @@ -0,0 +1,48 @@ +{ + "transactions": [ + { + "hash": "0xa6ebfa3547fe6270234de085065acb47b20e1bcaaa9892b725aab235d2a939c0", + "transactionType": "CREATE", + "contractName": "SimpleNuffDVN", + "contractAddress": "0x539c696515fb90b1d399e4fa0ae56c94fc391649", + "function": null, + "arguments": null, + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x40e39", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b506102438061001f6000396000f3fe6080604052600436106100295760003560e01c806330bb3aac1461002e57806395d376d714610067575b600080fd5b34801561003a57600080fd5b506100556100493660046100fc565b50612710949350505050565b60405190815260200160405180910390f35b61005561007536600461019a565b604051612710808252907f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a19392505050565b60008083601f8401126100c557600080fd5b50813567ffffffffffffffff8111156100dd57600080fd5b6020830191508360208285010111156100f557600080fd5b9250929050565b60008060008060006080868803121561011457600080fd5b853563ffffffff8116811461012857600080fd5b9450602086013567ffffffffffffffff8116811461014557600080fd5b935060408601356001600160a01b038116811461016157600080fd5b9250606086013567ffffffffffffffff81111561017d57600080fd5b610189888289016100b3565b969995985093965092949392505050565b6000806000604084860312156101af57600080fd5b833567ffffffffffffffff8111156101c657600080fd5b840160a081870312156101d857600080fd5b9250602084013567ffffffffffffffff8111156101f457600080fd5b610200868287016100b3565b949790965093945050505056fea26469706673582212202e5aeb575af6f567e663778f480a39965e2c4db5261c9e1015d02df57fe8211964736f6c634300081a0033", + "nonce": "0x73", + "chainId": "0x66eee" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x30722", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xa6ebfa3547fe6270234de085065acb47b20e1bcaaa9892b725aab235d2a939c0", + "transactionIndex": "0x1", + "blockHash": "0xf4b26f40905f20756f2272a96e462c9ce2e6682a8014c4d33bdf20ca2a0114a2", + "blockNumber": "0x5a8aac3", + "gasUsed": "0x30722", + "effectiveGasPrice": "0x5f5e100", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0x539c696515fb90b1d399e4fa0ae56c94fc391649", + "gasUsedForL1": "0x4ecd", + "l1BlockNumber": "0x6b2ff3" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730910884, + "chain": 421614, + "commit": "4f0aff3" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeploySimple.s.sol/421614/run-latest.json b/contracts/evm/broadcast/DeploySimple.s.sol/421614/run-latest.json new file mode 100644 index 00000000..0f115901 --- /dev/null +++ b/contracts/evm/broadcast/DeploySimple.s.sol/421614/run-latest.json @@ -0,0 +1,48 @@ +{ + "transactions": [ + { + "hash": "0xa6ebfa3547fe6270234de085065acb47b20e1bcaaa9892b725aab235d2a939c0", + "transactionType": "CREATE", + "contractName": "SimpleNuffDVN", + "contractAddress": "0x539c696515fb90b1d399e4fa0ae56c94fc391649", + "function": null, + "arguments": null, + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x40e39", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b506102438061001f6000396000f3fe6080604052600436106100295760003560e01c806330bb3aac1461002e57806395d376d714610067575b600080fd5b34801561003a57600080fd5b506100556100493660046100fc565b50612710949350505050565b60405190815260200160405180910390f35b61005561007536600461019a565b604051612710808252907f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a19392505050565b60008083601f8401126100c557600080fd5b50813567ffffffffffffffff8111156100dd57600080fd5b6020830191508360208285010111156100f557600080fd5b9250929050565b60008060008060006080868803121561011457600080fd5b853563ffffffff8116811461012857600080fd5b9450602086013567ffffffffffffffff8116811461014557600080fd5b935060408601356001600160a01b038116811461016157600080fd5b9250606086013567ffffffffffffffff81111561017d57600080fd5b610189888289016100b3565b969995985093965092949392505050565b6000806000604084860312156101af57600080fd5b833567ffffffffffffffff8111156101c657600080fd5b840160a081870312156101d857600080fd5b9250602084013567ffffffffffffffff8111156101f457600080fd5b610200868287016100b3565b949790965093945050505056fea26469706673582212202e5aeb575af6f567e663778f480a39965e2c4db5261c9e1015d02df57fe8211964736f6c634300081a0033", + "nonce": "0x73", + "chainId": "0x66eee" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x30722", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xa6ebfa3547fe6270234de085065acb47b20e1bcaaa9892b725aab235d2a939c0", + "transactionIndex": "0x1", + "blockHash": "0xf4b26f40905f20756f2272a96e462c9ce2e6682a8014c4d33bdf20ca2a0114a2", + "blockNumber": "0x5a8aac3", + "gasUsed": "0x30722", + "effectiveGasPrice": "0x5f5e100", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0x539c696515fb90b1d399e4fa0ae56c94fc391649", + "gasUsedForL1": "0x4ecd", + "l1BlockNumber": "0x6b2ff3" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730910884, + "chain": 421614, + "commit": "4f0aff3" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeploySimple.s.sol/80002/run-1730910861.json b/contracts/evm/broadcast/DeploySimple.s.sol/80002/run-1730910861.json new file mode 100644 index 00000000..253d675e --- /dev/null +++ b/contracts/evm/broadcast/DeploySimple.s.sol/80002/run-1730910861.json @@ -0,0 +1,63 @@ +{ + "transactions": [ + { + "hash": "0x809455d38fddfa28ccaf464bf6d0b9b35f9a341a6468887b24c1b0fe0a32ba24", + "transactionType": "CREATE", + "contractName": "SimpleNuffDVN", + "contractAddress": "0xd58388997b0ad8f7f4a035f6c159c9c2270170f4", + "function": null, + "arguments": null, + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x38907", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b506102438061001f6000396000f3fe6080604052600436106100295760003560e01c806330bb3aac1461002e57806395d376d714610067575b600080fd5b34801561003a57600080fd5b506100556100493660046100fc565b50612710949350505050565b60405190815260200160405180910390f35b61005561007536600461019a565b604051612710808252907f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a19392505050565b60008083601f8401126100c557600080fd5b50813567ffffffffffffffff8111156100dd57600080fd5b6020830191508360208285010111156100f557600080fd5b9250929050565b60008060008060006080868803121561011457600080fd5b853563ffffffff8116811461012857600080fd5b9450602086013567ffffffffffffffff8116811461014557600080fd5b935060408601356001600160a01b038116811461016157600080fd5b9250606086013567ffffffffffffffff81111561017d57600080fd5b610189888289016100b3565b969995985093965092949392505050565b6000806000604084860312156101af57600080fd5b833567ffffffffffffffff8111156101c657600080fd5b840160a081870312156101d857600080fd5b9250602084013567ffffffffffffffff8111156101f457600080fd5b610200868287016100b3565b949790965093945050505056fea26469706673582212202e5aeb575af6f567e663778f480a39965e2c4db5261c9e1015d02df57fe8211964736f6c634300081a0033", + "nonce": "0x3e", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x2b855", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x000000000000000000000000915a2284d28bd93de7d6f31173b981204bb666e6" + ], + "data": "0x000000000000000000000000000000000000000000000000001534d71a1178da00000000000000000000000000000000000000000000000078d2980ce797219e0000000000000000000000000000000000000000000004b355f15b9be356706200000000000000000000000000000000000000000000000078bd6335cd85a8c40000000000000000000000000000000000000000000004b356069072fd67e93c", + "blockHash": "0x32c447a1c8c4c0af7db817ddf5645160ca8c0bfa0926a1386f5c73745a58c35c", + "blockNumber": "0xd724ba", + "transactionHash": "0x809455d38fddfa28ccaf464bf6d0b9b35f9a341a6468887b24c1b0fe0a32ba24", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "logsBloom": "0x0000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000000000000080000000000000000000200000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000002000000400000100000000000000000000000000000000000000000000000000000400000000000000000100000", + "type": "0x2", + "transactionHash": "0x809455d38fddfa28ccaf464bf6d0b9b35f9a341a6468887b24c1b0fe0a32ba24", + "transactionIndex": "0x0", + "blockHash": "0x32c447a1c8c4c0af7db817ddf5645160ca8c0bfa0926a1386f5c73745a58c35c", + "blockNumber": "0xd724ba", + "gasUsed": "0x2b855", + "effectiveGasPrice": "0x7cbdcd781", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0xd58388997b0ad8f7f4a035f6c159c9c2270170f4" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730910861, + "chain": 80002, + "commit": "4f0aff3" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeploySimple.s.sol/80002/run-latest.json b/contracts/evm/broadcast/DeploySimple.s.sol/80002/run-latest.json new file mode 100644 index 00000000..253d675e --- /dev/null +++ b/contracts/evm/broadcast/DeploySimple.s.sol/80002/run-latest.json @@ -0,0 +1,63 @@ +{ + "transactions": [ + { + "hash": "0x809455d38fddfa28ccaf464bf6d0b9b35f9a341a6468887b24c1b0fe0a32ba24", + "transactionType": "CREATE", + "contractName": "SimpleNuffDVN", + "contractAddress": "0xd58388997b0ad8f7f4a035f6c159c9c2270170f4", + "function": null, + "arguments": null, + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x38907", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b506102438061001f6000396000f3fe6080604052600436106100295760003560e01c806330bb3aac1461002e57806395d376d714610067575b600080fd5b34801561003a57600080fd5b506100556100493660046100fc565b50612710949350505050565b60405190815260200160405180910390f35b61005561007536600461019a565b604051612710808252907f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a19392505050565b60008083601f8401126100c557600080fd5b50813567ffffffffffffffff8111156100dd57600080fd5b6020830191508360208285010111156100f557600080fd5b9250929050565b60008060008060006080868803121561011457600080fd5b853563ffffffff8116811461012857600080fd5b9450602086013567ffffffffffffffff8116811461014557600080fd5b935060408601356001600160a01b038116811461016157600080fd5b9250606086013567ffffffffffffffff81111561017d57600080fd5b610189888289016100b3565b969995985093965092949392505050565b6000806000604084860312156101af57600080fd5b833567ffffffffffffffff8111156101c657600080fd5b840160a081870312156101d857600080fd5b9250602084013567ffffffffffffffff8111156101f457600080fd5b610200868287016100b3565b949790965093945050505056fea26469706673582212202e5aeb575af6f567e663778f480a39965e2c4db5261c9e1015d02df57fe8211964736f6c634300081a0033", + "nonce": "0x3e", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x2b855", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x000000000000000000000000915a2284d28bd93de7d6f31173b981204bb666e6" + ], + "data": "0x000000000000000000000000000000000000000000000000001534d71a1178da00000000000000000000000000000000000000000000000078d2980ce797219e0000000000000000000000000000000000000000000004b355f15b9be356706200000000000000000000000000000000000000000000000078bd6335cd85a8c40000000000000000000000000000000000000000000004b356069072fd67e93c", + "blockHash": "0x32c447a1c8c4c0af7db817ddf5645160ca8c0bfa0926a1386f5c73745a58c35c", + "blockNumber": "0xd724ba", + "transactionHash": "0x809455d38fddfa28ccaf464bf6d0b9b35f9a341a6468887b24c1b0fe0a32ba24", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "logsBloom": "0x0000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000000000000080000000000000000000200000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000002000000400000100000000000000000000000000000000000000000000000000000400000000000000000100000", + "type": "0x2", + "transactionHash": "0x809455d38fddfa28ccaf464bf6d0b9b35f9a341a6468887b24c1b0fe0a32ba24", + "transactionIndex": "0x0", + "blockHash": "0x32c447a1c8c4c0af7db817ddf5645160ca8c0bfa0926a1386f5c73745a58c35c", + "blockNumber": "0xd724ba", + "gasUsed": "0x2b855", + "effectiveGasPrice": "0x7cbdcd781", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0xd58388997b0ad8f7f4a035f6c159c9c2270170f4" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730910861, + "chain": 80002, + "commit": "4f0aff3" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeploySimpleDvn.s.sol/421614/run-1730475871.json b/contracts/evm/broadcast/DeploySimpleDvn.s.sol/421614/run-1730475871.json new file mode 100644 index 00000000..a241aca9 --- /dev/null +++ b/contracts/evm/broadcast/DeploySimpleDvn.s.sol/421614/run-1730475871.json @@ -0,0 +1,48 @@ +{ + "transactions": [ + { + "hash": "0x200b98eab11cc18d4d2f6fe0e91488221c5a169b29aa01009bd212b6e642e56f", + "transactionType": "CREATE", + "contractName": "SimpleNuffDVN", + "contractAddress": "0x5d41b8a40d249c65c1174a761bd449625fafae3f", + "function": null, + "arguments": null, + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x93973", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b506107358061001f6000396000f3fe60806040526004361061009c5760003560e01c806375b238fc1161006457806375b238fc1461017c57806391d14854146101b057806395d376d7146101d0578063a217fddf146101e3578063a98586e1146101f8578063d547741f1461022c57600080fd5b806301ffc9a7146100a1578063248a9ca3146100d65780632f2ff15d1461011457806330bb3aac1461013657806336568abe1461015c575b600080fd5b3480156100ad57600080fd5b506100c16100bc366004610521565b61024c565b60405190151581526020015b60405180910390f35b3480156100e257600080fd5b506101066100f1366004610552565b60009081526020819052604090206001015490565b6040519081526020016100cd565b34801561012057600080fd5b5061013461012f366004610587565b610283565b005b34801561014257600080fd5b506101066101513660046105fc565b50600b949350505050565b34801561016857600080fd5b50610134610177366004610587565b6102ae565b34801561018857600080fd5b506101067fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b3480156101bc57600080fd5b506100c16101cb366004610587565b6102e6565b6101066101de36600461068c565b61030f565b3480156101ef57600080fd5b50610106600081565b34801561020457600080fd5b506101067f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de81565b34801561023857600080fd5b50610134610247366004610587565b6103b1565b60006001600160e01b03198216637965db0b60e01b148061027d57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008281526020819052604090206001015461029e816103d6565b6102a883836103e3565b50505050565b6001600160a01b03811633146102d75760405163334bd91960e11b815260040160405180910390fd5b6102e18282610475565b505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60003068929eee149b4bd2126854036103305763ab143c066000526004601cfd5b3068929eee149b4bd21268557f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de610366816103d6565b604051600b80825292507f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a1503868929eee149b4bd21268559392505050565b6000828152602081905260409020600101546103cc816103d6565b6102a88383610475565b6103e081336104e0565b50565b60006103ef83836102e6565b61046d576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556104253390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161027d565b50600061027d565b600061048183836102e6565b1561046d576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161027d565b6104ea82826102e6565b61051d5760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440160405180910390fd5b5050565b60006020828403121561053357600080fd5b81356001600160e01b03198116811461054b57600080fd5b9392505050565b60006020828403121561056457600080fd5b5035919050565b80356001600160a01b038116811461058257600080fd5b919050565b6000806040838503121561059a57600080fd5b823591506105aa6020840161056b565b90509250929050565b60008083601f8401126105c557600080fd5b50813567ffffffffffffffff8111156105dd57600080fd5b6020830191508360208285010111156105f557600080fd5b9250929050565b60008060008060006080868803121561061457600080fd5b853563ffffffff8116811461062857600080fd5b9450602086013567ffffffffffffffff8116811461064557600080fd5b93506106536040870161056b565b9250606086013567ffffffffffffffff81111561066f57600080fd5b61067b888289016105b3565b969995985093965092949392505050565b6000806000604084860312156106a157600080fd5b833567ffffffffffffffff8111156106b857600080fd5b840160a081870312156106ca57600080fd5b9250602084013567ffffffffffffffff8111156106e657600080fd5b6106f2868287016105b3565b949790965093945050505056fea2646970667358221220a5276f55e9567d81a847e9ed1e4f935fa6a1a07c707c1358e323142dd57a5ee064736f6c634300081a0033", + "nonce": "0x2b", + "chainId": "0x66eee" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x70191", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x200b98eab11cc18d4d2f6fe0e91488221c5a169b29aa01009bd212b6e642e56f", + "transactionIndex": "0x1", + "blockHash": "0x58363680173815625cfacd546c57f9e2ebe975250053db73db178c0d5872d83c", + "blockNumber": "0x593626a", + "gasUsed": "0x70191", + "effectiveGasPrice": "0x5f5e100", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0x5d41b8a40d249c65c1174a761bd449625fafae3f", + "gasUsedForL1": "0x1d12", + "l1BlockNumber": "0x6aacd6" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730475871, + "chain": 421614, + "commit": "d4e1224" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeploySimpleDvn.s.sol/421614/run-1730727237.json b/contracts/evm/broadcast/DeploySimpleDvn.s.sol/421614/run-1730727237.json new file mode 100644 index 00000000..4ca34503 --- /dev/null +++ b/contracts/evm/broadcast/DeploySimpleDvn.s.sol/421614/run-1730727237.json @@ -0,0 +1,48 @@ +{ + "transactions": [ + { + "hash": "0x049e2cd2fb48957e6a19f9830f37bc16508a69fa5a92c2f1312769082b3f87db", + "transactionType": "CREATE", + "contractName": "SimpleNuffDVN", + "contractAddress": "0x1ab7bf1d9cfc5d8acb1d723ac9d738d8db2c055a", + "function": null, + "arguments": null, + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x8b985", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b5061067c8061001f6000396000f3fe6080604052600436106100765760003560e01c806301ffc9a71461007b578063248a9ca3146100b05780632f2ff15d146100ee57806330bb3aac1461011057806336568abe1461013657806391d148541461015657806395d376d714610176578063a217fddf14610189578063d547741f1461019e575b600080fd5b34801561008757600080fd5b5061009b610096366004610468565b6101be565b60405190151581526020015b60405180910390f35b3480156100bc57600080fd5b506100e06100cb366004610499565b60009081526020819052604090206001015490565b6040519081526020016100a7565b3480156100fa57600080fd5b5061010e6101093660046104ce565b6101f5565b005b34801561011c57600080fd5b506100e061012b366004610543565b50600b949350505050565b34801561014257600080fd5b5061010e6101513660046104ce565b610220565b34801561016257600080fd5b5061009b6101713660046104ce565b610258565b6100e06101843660046105d3565b610281565b34801561019557600080fd5b506100e0600081565b3480156101aa57600080fd5b5061010e6101b93660046104ce565b6102f8565b60006001600160e01b03198216637965db0b60e01b14806101ef57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000828152602081905260409020600101546102108161031d565b61021a838361032a565b50505050565b6001600160a01b03811633146102495760405163334bd91960e11b815260040160405180910390fd5b61025382826103bc565b505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60003068929eee149b4bd2126854036102a25763ab143c066000526004601cfd5b503068929eee149b4bd2126855604051600b808252907f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a13868929eee149b4bd21268559392505050565b6000828152602081905260409020600101546103138161031d565b61021a83836103bc565b6103278133610427565b50565b60006103368383610258565b6103b4576000838152602081815260408083206001600160a01b03861684529091529020805460ff1916600117905561036c3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101ef565b5060006101ef565b60006103c88383610258565b156103b4576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016101ef565b6104318282610258565b6104645760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440160405180910390fd5b5050565b60006020828403121561047a57600080fd5b81356001600160e01b03198116811461049257600080fd5b9392505050565b6000602082840312156104ab57600080fd5b5035919050565b80356001600160a01b03811681146104c957600080fd5b919050565b600080604083850312156104e157600080fd5b823591506104f1602084016104b2565b90509250929050565b60008083601f84011261050c57600080fd5b50813567ffffffffffffffff81111561052457600080fd5b60208301915083602082850101111561053c57600080fd5b9250929050565b60008060008060006080868803121561055b57600080fd5b853563ffffffff8116811461056f57600080fd5b9450602086013567ffffffffffffffff8116811461058c57600080fd5b935061059a604087016104b2565b9250606086013567ffffffffffffffff8111156105b657600080fd5b6105c2888289016104fa565b969995985093965092949392505050565b6000806000604084860312156105e857600080fd5b833567ffffffffffffffff8111156105ff57600080fd5b840160a0818703121561061157600080fd5b9250602084013567ffffffffffffffff81111561062d57600080fd5b610639868287016104fa565b949790965093945050505056fea264697066735822122065c9caed3ff3a003a6f15513e167d3fa92689d1845aacd7e6678142690e8ad6864736f6c634300081a0033", + "nonce": "0x49", + "chainId": "0x66eee" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x69935", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x049e2cd2fb48957e6a19f9830f37bc16508a69fa5a92c2f1312769082b3f87db", + "transactionIndex": "0x1", + "blockHash": "0x8af37a6573482ac6b0be45f293a331d183be13fdd64de6fcd306dd043183a3e7", + "blockNumber": "0x59f49cb", + "gasUsed": "0x69935", + "effectiveGasPrice": "0x5f5e100", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0x1ab7bf1d9cfc5d8acb1d723ac9d738d8db2c055a", + "gasUsedForL1": "0x5117", + "l1BlockNumber": "0x6af862" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730727237, + "chain": 421614, + "commit": "d4e1224" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeploySimpleDvn.s.sol/421614/run-1730734959.json b/contracts/evm/broadcast/DeploySimpleDvn.s.sol/421614/run-1730734959.json new file mode 100644 index 00000000..764f7822 --- /dev/null +++ b/contracts/evm/broadcast/DeploySimpleDvn.s.sol/421614/run-1730734959.json @@ -0,0 +1,48 @@ +{ + "transactions": [ + { + "hash": "0x80580ecdbbd894981a0db420cc74e60a5b695609d87ba6857f2358242813772e", + "transactionType": "CREATE", + "contractName": "SimpleNuffDVN", + "contractAddress": "0x4c320121150e81684add9e8a330bf7bd46e8c121", + "function": null, + "arguments": null, + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x8aa68", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b506106448061001f6000396000f3fe6080604052600436106100765760003560e01c806301ffc9a71461007b578063248a9ca3146100b05780632f2ff15d146100ee57806330bb3aac1461011057806336568abe1461013757806391d148541461015757806395d376d714610177578063a217fddf1461018a578063d547741f1461019f575b600080fd5b34801561008757600080fd5b5061009b610096366004610430565b6101bf565b60405190151581526020015b60405180910390f35b3480156100bc57600080fd5b506100e06100cb366004610461565b60009081526020819052604090206001015490565b6040519081526020016100a7565b3480156100fa57600080fd5b5061010e610109366004610496565b6101f6565b005b34801561011c57600080fd5b506100e061012b36600461050b565b50612710949350505050565b34801561014357600080fd5b5061010e610152366004610496565b610221565b34801561016357600080fd5b5061009b610172366004610496565b610259565b6100e061018536600461059b565b610282565b34801561019657600080fd5b506100e0600081565b3480156101ab57600080fd5b5061010e6101ba366004610496565b6102c0565b60006001600160e01b03198216637965db0b60e01b14806101f057506301ffc9a760e01b6001600160e01b03198316145b92915050565b600082815260208190526040902060010154610211816102e5565b61021b83836102f2565b50505050565b6001600160a01b038116331461024a5760405163334bd91960e11b815260040160405180910390fd5b6102548282610384565b505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b604051612710808252907f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a19392505050565b6000828152602081905260409020600101546102db816102e5565b61021b8383610384565b6102ef81336103ef565b50565b60006102fe8383610259565b61037c576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556103343390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101f0565b5060006101f0565b60006103908383610259565b1561037c576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016101f0565b6103f98282610259565b61042c5760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440160405180910390fd5b5050565b60006020828403121561044257600080fd5b81356001600160e01b03198116811461045a57600080fd5b9392505050565b60006020828403121561047357600080fd5b5035919050565b80356001600160a01b038116811461049157600080fd5b919050565b600080604083850312156104a957600080fd5b823591506104b96020840161047a565b90509250929050565b60008083601f8401126104d457600080fd5b50813567ffffffffffffffff8111156104ec57600080fd5b60208301915083602082850101111561050457600080fd5b9250929050565b60008060008060006080868803121561052357600080fd5b853563ffffffff8116811461053757600080fd5b9450602086013567ffffffffffffffff8116811461055457600080fd5b93506105626040870161047a565b9250606086013567ffffffffffffffff81111561057e57600080fd5b61058a888289016104c2565b969995985093965092949392505050565b6000806000604084860312156105b057600080fd5b833567ffffffffffffffff8111156105c757600080fd5b840160a081870312156105d957600080fd5b9250602084013567ffffffffffffffff8111156105f557600080fd5b610601868287016104c2565b949790965093945050505056fea26469706673582212205e7554683bfa3e291caee250b4de3d2463b014176c92a654d584eaf1e0cf8b9b64736f6c634300081a0033", + "nonce": "0x4a", + "chainId": "0x66eee" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x7216b", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x80580ecdbbd894981a0db420cc74e60a5b695609d87ba6857f2358242813772e", + "transactionIndex": "0x2", + "blockHash": "0xd214477fa7f4b7cb0c88e3408b405b09944bc61e291d8783f5abd7a35eba7a49", + "blockNumber": "0x59fb2c2", + "gasUsed": "0x688da", + "effectiveGasPrice": "0x5f5e100", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0x4c320121150e81684add9e8a330bf7bd46e8c121", + "gasUsedForL1": "0x6fec", + "l1BlockNumber": "0x6afabb" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730734959, + "chain": 421614, + "commit": "d4e1224" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeploySimpleDvn.s.sol/421614/run-1730799250.json b/contracts/evm/broadcast/DeploySimpleDvn.s.sol/421614/run-1730799250.json new file mode 100644 index 00000000..68f4eb0c --- /dev/null +++ b/contracts/evm/broadcast/DeploySimpleDvn.s.sol/421614/run-1730799250.json @@ -0,0 +1,51 @@ +{ + "transactions": [ + { + "hash": "0xe8ff44adcff29189bcbc2c545e8bc56326075daca2417d22712cead3aea8acb6", + "transactionType": "CREATE", + "contractName": "SimpleNuffDVN", + "contractAddress": "0xaec0518fbf8199a34724304d3e16c491a115dd22", + "function": null, + "arguments": [ + "0xC03f31fD86a9077785b7bCf6598Ce3598Fa91113", + "0xb3e790273f0A89e53d2C20dD4dFe82AA00bbf91b" + ], + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x100a12", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b50604051610ace380380610ace833981016040819052602c916077565b600180546001600160a01b039384166001600160a01b0319918216179091556002805492909316911617905560a5565b80516001600160a01b0381168114607257600080fd5b919050565b60008060408385031215608957600080fd5b609083605c565b9150609c60208401605c565b90509250929050565b610a1a806100b46000396000f3fe60806040526004361061009c5760003560e01c8063741bef1a11610064578063741bef1a1461017657806391d14854146101ae57806395d376d7146101ce578063a217fddf146101e1578063bb37d00c146101f6578063d547741f1461021657600080fd5b806301ffc9a7146100a1578063248a9ca3146100d65780632f2ff15d1461011457806330bb3aac1461013657806336568abe14610156575b600080fd5b3480156100ad57600080fd5b506100c16100bc3660046106a9565b610236565b60405190151581526020015b60405180910390f35b3480156100e257600080fd5b506101066100f13660046106da565b60009081526020819052604090206001015490565b6040519081526020016100cd565b34801561012057600080fd5b5061013461012f36600461070f565b61026d565b005b34801561014257600080fd5b506101066101513660046107ae565b610298565b34801561016257600080fd5b5061013461017136600461070f565b610380565b34801561018257600080fd5b50600154610196906001600160a01b031681565b6040516001600160a01b0390911681526020016100cd565b3480156101ba57600080fd5b506100c16101c936600461070f565b6103b8565b6101066101dc366004610823565b6103e1565b3480156101ed57600080fd5b50610106600081565b34801561020257600080fd5b50600254610196906001600160a01b031681565b34801561022257600080fd5b5061013461023136600461070f565b610539565b60006001600160e01b03198216637965db0b60e01b148061026757506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000828152602081905260409020600101546102888161055e565b610292838361056b565b50505050565b6040805160c081018252600180546001600160a01b03908116835263ffffffff89166020808501919091526001600160401b038916848601528782166060808601919091526080850184905260a0850193909352600254855193840186526103e8808552918401829052838601919091529351637bfa20a960e01b815260009490911691637bfa20a991610334918591899089906004016108bd565b602060405180830381865afa158015610351573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610375919061097a565b979650505050505050565b6001600160a01b03811633146103a95760405163334bd91960e11b815260040160405180910390fd5b6103b382826105fd565b505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6040805160c081019091526001546001600160a01b03168152600090819060208082019061041190880188610993565b63ffffffff16815260200161042c60808801606089016109ae565b6001600160401b0316815260200161044a60a08801608089016109c9565b6001600160a01b0390811682526001602080840182905260409384019190915260025483516060810185526103e8808252928101839052808501929092529251636f9582bf60e11b815293945091169163df2b057e916104b391859190899089906004016108bd565b6020604051808303816000875af11580156104d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f6919061097a565b91507f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef8260405161052991815260200190565b60405180910390a1509392505050565b6000828152602081905260409020600101546105548161055e565b61029283836105fd565b6105688133610668565b50565b600061057783836103b8565b6105f5576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556105ad3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610267565b506000610267565b600061060983836103b8565b156105f5576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610267565b61067282826103b8565b6106a55760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440160405180910390fd5b5050565b6000602082840312156106bb57600080fd5b81356001600160e01b0319811681146106d357600080fd5b9392505050565b6000602082840312156106ec57600080fd5b5035919050565b80356001600160a01b038116811461070a57600080fd5b919050565b6000806040838503121561072257600080fd5b82359150610732602084016106f3565b90509250929050565b803563ffffffff8116811461070a57600080fd5b80356001600160401b038116811461070a57600080fd5b60008083601f84011261077857600080fd5b5081356001600160401b0381111561078f57600080fd5b6020830191508360208285010111156107a757600080fd5b9250929050565b6000806000806000608086880312156107c657600080fd5b6107cf8661073b565b94506107dd6020870161074f565b93506107eb604087016106f3565b925060608601356001600160401b0381111561080657600080fd5b61081288828901610766565b969995985093965092949392505050565b60008060006040848603121561083857600080fd5b83356001600160401b0381111561084e57600080fd5b840160a0818703121561086057600080fd5b925060208401356001600160401b0381111561087b57600080fd5b61088786828701610766565b9497909650939450505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b03855116815263ffffffff60208601511660208201526001600160401b03604086015116604082015260018060a01b0360608601511660608201526001600160401b03608086015116608082015261ffff60a08601511660a082015261095660c082018580516001600160401b0316825260208082015161ffff16908301526040908101516001600160801b0316910152565b610140610120820152600061097061014083018486610894565b9695505050505050565b60006020828403121561098c57600080fd5b5051919050565b6000602082840312156109a557600080fd5b6106d38261073b565b6000602082840312156109c057600080fd5b6106d38261074f565b6000602082840312156109db57600080fd5b6106d3826106f356fea264697066735822122009faf9181314513f371f89010256ce8ee7896773a485f5aa1965738a3bdcd7ca64736f6c634300081a0033000000000000000000000000c03f31fd86a9077785b7bcf6598ce3598fa91113000000000000000000000000b3e790273f0a89e53d2c20dd4dfe82aa00bbf91b", + "nonce": "0x59", + "chainId": "0x66eee" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xbf97d", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xe8ff44adcff29189bcbc2c545e8bc56326075daca2417d22712cead3aea8acb6", + "transactionIndex": "0x1", + "blockHash": "0x488e857efb4132185402512daa33a07a5e17018e76ac68ab7029fdffc3335f85", + "blockNumber": "0x5a2efa7", + "gasUsed": "0xbf97d", + "effectiveGasPrice": "0x5f5e100", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0xaec0518fbf8199a34724304d3e16c491a115dd22", + "gasUsedForL1": "0x1e972", + "l1BlockNumber": "0x6b0e5b" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730799250, + "chain": 421614, + "commit": "d4e1224" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeploySimpleDvn.s.sol/421614/run-1730806774.json b/contracts/evm/broadcast/DeploySimpleDvn.s.sol/421614/run-1730806774.json new file mode 100644 index 00000000..2f35b3cd --- /dev/null +++ b/contracts/evm/broadcast/DeploySimpleDvn.s.sol/421614/run-1730806774.json @@ -0,0 +1,51 @@ +{ + "transactions": [ + { + "hash": "0xd0b37ab3bfcfb557cf4927c4175d69268823caf5f0879262960978fe49b010d5", + "transactionType": "CREATE", + "contractName": "SimpleNuffDVN", + "contractAddress": "0xdc334042380f9fc7f3e62c11cad75e59afbdf052", + "function": null, + "arguments": [ + "0xC03f31fD86a9077785b7bCf6598Ce3598Fa91113", + "0xb3e790273f0A89e53d2C20dD4dFe82AA00bbf91b" + ], + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0xa01f1", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b50604051610776380380610776833981016040819052602c916077565b600180546001600160a01b039384166001600160a01b0319918216179091556002805492909316911617905560a5565b80516001600160a01b0381168114607257600080fd5b919050565b60008060408385031215608957600080fd5b609083605c565b9150609c60208401605c565b90509250929050565b6106c2806100b46000396000f3fe60806040526004361061009c5760003560e01c8063741bef1a11610064578063741bef1a1461017d57806391d14854146101b557806395d376d7146101d5578063a217fddf146101e8578063bb37d00c146101fd578063d547741f1461021d57600080fd5b806301ffc9a7146100a1578063248a9ca3146100d65780632f2ff15d1461011457806330bb3aac1461013657806336568abe1461015d575b600080fd5b3480156100ad57600080fd5b506100c16100bc3660046104ae565b61023d565b60405190151581526020015b60405180910390f35b3480156100e257600080fd5b506101066100f13660046104df565b60009081526020819052604090206001015490565b6040519081526020016100cd565b34801561012057600080fd5b5061013461012f366004610514565b610274565b005b34801561014257600080fd5b50610106610151366004610589565b50612710949350505050565b34801561016957600080fd5b50610134610178366004610514565b61029f565b34801561018957600080fd5b5060015461019d906001600160a01b031681565b6040516001600160a01b0390911681526020016100cd565b3480156101c157600080fd5b506100c16101d0366004610514565b6102d7565b6101066101e3366004610619565b610300565b3480156101f457600080fd5b50610106600081565b34801561020957600080fd5b5060025461019d906001600160a01b031681565b34801561022957600080fd5b50610134610238366004610514565b61033e565b60006001600160e01b03198216637965db0b60e01b148061026e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008281526020819052604090206001015461028f81610363565b6102998383610370565b50505050565b6001600160a01b03811633146102c85760405163334bd91960e11b815260040160405180910390fd5b6102d28282610402565b505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b604051612710808252907f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a19392505050565b60008281526020819052604090206001015461035981610363565b6102998383610402565b61036d813361046d565b50565b600061037c83836102d7565b6103fa576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556103b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161026e565b50600061026e565b600061040e83836102d7565b156103fa576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161026e565b61047782826102d7565b6104aa5760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440160405180910390fd5b5050565b6000602082840312156104c057600080fd5b81356001600160e01b0319811681146104d857600080fd5b9392505050565b6000602082840312156104f157600080fd5b5035919050565b80356001600160a01b038116811461050f57600080fd5b919050565b6000806040838503121561052757600080fd5b82359150610537602084016104f8565b90509250929050565b60008083601f84011261055257600080fd5b50813567ffffffffffffffff81111561056a57600080fd5b60208301915083602082850101111561058257600080fd5b9250929050565b6000806000806000608086880312156105a157600080fd5b853563ffffffff811681146105b557600080fd5b9450602086013567ffffffffffffffff811681146105d257600080fd5b93506105e0604087016104f8565b9250606086013567ffffffffffffffff8111156105fc57600080fd5b61060888828901610540565b969995985093965092949392505050565b60008060006040848603121561062e57600080fd5b833567ffffffffffffffff81111561064557600080fd5b840160a0818703121561065757600080fd5b9250602084013567ffffffffffffffff81111561067357600080fd5b61067f86828701610540565b949790965093945050505056fea264697066735822122072a1c9052df72b875e6a348272e8506fa7fe2acf62d1d8ae5e9ee160e3cda12264736f6c634300081a0033000000000000000000000000c03f31fd86a9077785b7bcf6598ce3598fa91113000000000000000000000000b3e790273f0a89e53d2c20dd4dfe82aa00bbf91b", + "nonce": "0x60", + "chainId": "0x66eee" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x79358", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xd0b37ab3bfcfb557cf4927c4175d69268823caf5f0879262960978fe49b010d5", + "transactionIndex": "0x1", + "blockHash": "0x7a671e5e0dec1baee675b20af18cf877333fe02aedfe0d99e126795c35f46a7b", + "blockNumber": "0x5a35208", + "gasUsed": "0x79358", + "effectiveGasPrice": "0x5f5e100", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0xdc334042380f9fc7f3e62c11cad75e59afbdf052", + "gasUsedForL1": "0x55a6", + "l1BlockNumber": "0x6b10a7" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730806774, + "chain": 421614, + "commit": "d4e1224" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeploySimpleDvn.s.sol/421614/run-latest.json b/contracts/evm/broadcast/DeploySimpleDvn.s.sol/421614/run-latest.json new file mode 100644 index 00000000..2f35b3cd --- /dev/null +++ b/contracts/evm/broadcast/DeploySimpleDvn.s.sol/421614/run-latest.json @@ -0,0 +1,51 @@ +{ + "transactions": [ + { + "hash": "0xd0b37ab3bfcfb557cf4927c4175d69268823caf5f0879262960978fe49b010d5", + "transactionType": "CREATE", + "contractName": "SimpleNuffDVN", + "contractAddress": "0xdc334042380f9fc7f3e62c11cad75e59afbdf052", + "function": null, + "arguments": [ + "0xC03f31fD86a9077785b7bCf6598Ce3598Fa91113", + "0xb3e790273f0A89e53d2C20dD4dFe82AA00bbf91b" + ], + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0xa01f1", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b50604051610776380380610776833981016040819052602c916077565b600180546001600160a01b039384166001600160a01b0319918216179091556002805492909316911617905560a5565b80516001600160a01b0381168114607257600080fd5b919050565b60008060408385031215608957600080fd5b609083605c565b9150609c60208401605c565b90509250929050565b6106c2806100b46000396000f3fe60806040526004361061009c5760003560e01c8063741bef1a11610064578063741bef1a1461017d57806391d14854146101b557806395d376d7146101d5578063a217fddf146101e8578063bb37d00c146101fd578063d547741f1461021d57600080fd5b806301ffc9a7146100a1578063248a9ca3146100d65780632f2ff15d1461011457806330bb3aac1461013657806336568abe1461015d575b600080fd5b3480156100ad57600080fd5b506100c16100bc3660046104ae565b61023d565b60405190151581526020015b60405180910390f35b3480156100e257600080fd5b506101066100f13660046104df565b60009081526020819052604090206001015490565b6040519081526020016100cd565b34801561012057600080fd5b5061013461012f366004610514565b610274565b005b34801561014257600080fd5b50610106610151366004610589565b50612710949350505050565b34801561016957600080fd5b50610134610178366004610514565b61029f565b34801561018957600080fd5b5060015461019d906001600160a01b031681565b6040516001600160a01b0390911681526020016100cd565b3480156101c157600080fd5b506100c16101d0366004610514565b6102d7565b6101066101e3366004610619565b610300565b3480156101f457600080fd5b50610106600081565b34801561020957600080fd5b5060025461019d906001600160a01b031681565b34801561022957600080fd5b50610134610238366004610514565b61033e565b60006001600160e01b03198216637965db0b60e01b148061026e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008281526020819052604090206001015461028f81610363565b6102998383610370565b50505050565b6001600160a01b03811633146102c85760405163334bd91960e11b815260040160405180910390fd5b6102d28282610402565b505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b604051612710808252907f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a19392505050565b60008281526020819052604090206001015461035981610363565b6102998383610402565b61036d813361046d565b50565b600061037c83836102d7565b6103fa576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556103b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161026e565b50600061026e565b600061040e83836102d7565b156103fa576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161026e565b61047782826102d7565b6104aa5760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440160405180910390fd5b5050565b6000602082840312156104c057600080fd5b81356001600160e01b0319811681146104d857600080fd5b9392505050565b6000602082840312156104f157600080fd5b5035919050565b80356001600160a01b038116811461050f57600080fd5b919050565b6000806040838503121561052757600080fd5b82359150610537602084016104f8565b90509250929050565b60008083601f84011261055257600080fd5b50813567ffffffffffffffff81111561056a57600080fd5b60208301915083602082850101111561058257600080fd5b9250929050565b6000806000806000608086880312156105a157600080fd5b853563ffffffff811681146105b557600080fd5b9450602086013567ffffffffffffffff811681146105d257600080fd5b93506105e0604087016104f8565b9250606086013567ffffffffffffffff8111156105fc57600080fd5b61060888828901610540565b969995985093965092949392505050565b60008060006040848603121561062e57600080fd5b833567ffffffffffffffff81111561064557600080fd5b840160a0818703121561065757600080fd5b9250602084013567ffffffffffffffff81111561067357600080fd5b61067f86828701610540565b949790965093945050505056fea264697066735822122072a1c9052df72b875e6a348272e8506fa7fe2acf62d1d8ae5e9ee160e3cda12264736f6c634300081a0033000000000000000000000000c03f31fd86a9077785b7bcf6598ce3598fa91113000000000000000000000000b3e790273f0a89e53d2c20dd4dfe82aa00bbf91b", + "nonce": "0x60", + "chainId": "0x66eee" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x79358", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xd0b37ab3bfcfb557cf4927c4175d69268823caf5f0879262960978fe49b010d5", + "transactionIndex": "0x1", + "blockHash": "0x7a671e5e0dec1baee675b20af18cf877333fe02aedfe0d99e126795c35f46a7b", + "blockNumber": "0x5a35208", + "gasUsed": "0x79358", + "effectiveGasPrice": "0x5f5e100", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0xdc334042380f9fc7f3e62c11cad75e59afbdf052", + "gasUsedForL1": "0x55a6", + "l1BlockNumber": "0x6b10a7" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730806774, + "chain": 421614, + "commit": "d4e1224" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeploySimpleDvn.s.sol/80002/run-1730475906.json b/contracts/evm/broadcast/DeploySimpleDvn.s.sol/80002/run-1730475906.json new file mode 100644 index 00000000..6c267a3c --- /dev/null +++ b/contracts/evm/broadcast/DeploySimpleDvn.s.sol/80002/run-1730475906.json @@ -0,0 +1,63 @@ +{ + "transactions": [ + { + "hash": "0xd6ee228fc1895589230f777286564a6cce333bb665294d0fa9ef31e99f6127e0", + "transactionType": "CREATE", + "contractName": "SimpleNuffDVN", + "contractAddress": "0x2ae2b65da37b0d894316f5fdea60df43442098e7", + "function": null, + "arguments": null, + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x8f53e", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b506107358061001f6000396000f3fe60806040526004361061009c5760003560e01c806375b238fc1161006457806375b238fc1461017c57806391d14854146101b057806395d376d7146101d0578063a217fddf146101e3578063a98586e1146101f8578063d547741f1461022c57600080fd5b806301ffc9a7146100a1578063248a9ca3146100d65780632f2ff15d1461011457806330bb3aac1461013657806336568abe1461015c575b600080fd5b3480156100ad57600080fd5b506100c16100bc366004610521565b61024c565b60405190151581526020015b60405180910390f35b3480156100e257600080fd5b506101066100f1366004610552565b60009081526020819052604090206001015490565b6040519081526020016100cd565b34801561012057600080fd5b5061013461012f366004610587565b610283565b005b34801561014257600080fd5b506101066101513660046105fc565b50600b949350505050565b34801561016857600080fd5b50610134610177366004610587565b6102ae565b34801561018857600080fd5b506101067fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b3480156101bc57600080fd5b506100c16101cb366004610587565b6102e6565b6101066101de36600461068c565b61030f565b3480156101ef57600080fd5b50610106600081565b34801561020457600080fd5b506101067f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de81565b34801561023857600080fd5b50610134610247366004610587565b6103b1565b60006001600160e01b03198216637965db0b60e01b148061027d57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008281526020819052604090206001015461029e816103d6565b6102a883836103e3565b50505050565b6001600160a01b03811633146102d75760405163334bd91960e11b815260040160405180910390fd5b6102e18282610475565b505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60003068929eee149b4bd2126854036103305763ab143c066000526004601cfd5b3068929eee149b4bd21268557f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de610366816103d6565b604051600b80825292507f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a1503868929eee149b4bd21268559392505050565b6000828152602081905260409020600101546103cc816103d6565b6102a88383610475565b6103e081336104e0565b50565b60006103ef83836102e6565b61046d576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556104253390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161027d565b50600061027d565b600061048183836102e6565b1561046d576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161027d565b6104ea82826102e6565b61051d5760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440160405180910390fd5b5050565b60006020828403121561053357600080fd5b81356001600160e01b03198116811461054b57600080fd5b9392505050565b60006020828403121561056457600080fd5b5035919050565b80356001600160a01b038116811461058257600080fd5b919050565b6000806040838503121561059a57600080fd5b823591506105aa6020840161056b565b90509250929050565b60008083601f8401126105c557600080fd5b50813567ffffffffffffffff8111156105dd57600080fd5b6020830191508360208285010111156105f557600080fd5b9250929050565b60008060008060006080868803121561061457600080fd5b853563ffffffff8116811461062857600080fd5b9450602086013567ffffffffffffffff8116811461064557600080fd5b93506106536040870161056b565b9250606086013567ffffffffffffffff81111561066f57600080fd5b61067b888289016105b3565b969995985093965092949392505050565b6000806000604084860312156106a157600080fd5b833567ffffffffffffffff8111156106b857600080fd5b840160a081870312156106ca57600080fd5b9250602084013567ffffffffffffffff8111156106e657600080fd5b6106f2868287016105b3565b949790965093945050505056fea2646970667358221220a5276f55e9567d81a847e9ed1e4f935fa6a1a07c707c1358e323142dd57a5ee064736f6c634300081a0033", + "nonce": "0x1e", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x6e47f", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x00000000000000000000000009207a6efee346cb3e4a54ac18523e3715d38b3f" + ], + "data": "0x00000000000000000000000000000000000000000000000000c00a822826d9db00000000000000000000000000000000000000000000000078700a27889d8dd200000000000000000000000000000000000000000000036834371f010ee009c500000000000000000000000000000000000000000000000077afffa56076b3f700000000000000000000000000000000000000000000036834f729833706e3a0", + "blockHash": "0xaebaa0897b939ebdc88be1699578a9ccb3c043523787c0a9c1167794ae97db3f", + "blockNumber": "0xd4061b", + "transactionHash": "0xd6ee228fc1895589230f777286564a6cce333bb665294d0fa9ef31e99f6127e0", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "logsBloom": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000010000000000000000000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000000000000080000000000000000000200000000000000000000000000000004000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000400000100000000000000000000000000000000000010000000000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0xd6ee228fc1895589230f777286564a6cce333bb665294d0fa9ef31e99f6127e0", + "transactionIndex": "0x0", + "blockHash": "0xaebaa0897b939ebdc88be1699578a9ccb3c043523787c0a9c1167794ae97db3f", + "blockNumber": "0xd4061b", + "gasUsed": "0x6e47f", + "effectiveGasPrice": "0x1bdcb06cb4", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0x2ae2b65da37b0d894316f5fdea60df43442098e7" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730475906, + "chain": 80002, + "commit": "d4e1224" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeploySimpleDvn.s.sol/80002/run-1730806818.json b/contracts/evm/broadcast/DeploySimpleDvn.s.sol/80002/run-1730806818.json new file mode 100644 index 00000000..44a0ea52 --- /dev/null +++ b/contracts/evm/broadcast/DeploySimpleDvn.s.sol/80002/run-1730806818.json @@ -0,0 +1,66 @@ +{ + "transactions": [ + { + "hash": "0x8030678b4af0ef71e88333f1cfee901e2aeb152bf9ee1a47743b773a1a71ba95", + "transactionType": "CREATE", + "contractName": "SimpleNuffDVN", + "contractAddress": "0x6246696dba86622dd624c276da5af61480bb4e6c", + "function": null, + "arguments": [ + "0xC03f31fD86a9077785b7bCf6598Ce3598Fa91113", + "0xb3e790273f0A89e53d2C20dD4dFe82AA00bbf91b" + ], + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x9692c", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b50604051610776380380610776833981016040819052602c916077565b600180546001600160a01b039384166001600160a01b0319918216179091556002805492909316911617905560a5565b80516001600160a01b0381168114607257600080fd5b919050565b60008060408385031215608957600080fd5b609083605c565b9150609c60208401605c565b90509250929050565b6106c2806100b46000396000f3fe60806040526004361061009c5760003560e01c8063741bef1a11610064578063741bef1a1461017d57806391d14854146101b557806395d376d7146101d5578063a217fddf146101e8578063bb37d00c146101fd578063d547741f1461021d57600080fd5b806301ffc9a7146100a1578063248a9ca3146100d65780632f2ff15d1461011457806330bb3aac1461013657806336568abe1461015d575b600080fd5b3480156100ad57600080fd5b506100c16100bc3660046104ae565b61023d565b60405190151581526020015b60405180910390f35b3480156100e257600080fd5b506101066100f13660046104df565b60009081526020819052604090206001015490565b6040519081526020016100cd565b34801561012057600080fd5b5061013461012f366004610514565b610274565b005b34801561014257600080fd5b50610106610151366004610589565b50612710949350505050565b34801561016957600080fd5b50610134610178366004610514565b61029f565b34801561018957600080fd5b5060015461019d906001600160a01b031681565b6040516001600160a01b0390911681526020016100cd565b3480156101c157600080fd5b506100c16101d0366004610514565b6102d7565b6101066101e3366004610619565b610300565b3480156101f457600080fd5b50610106600081565b34801561020957600080fd5b5060025461019d906001600160a01b031681565b34801561022957600080fd5b50610134610238366004610514565b61033e565b60006001600160e01b03198216637965db0b60e01b148061026e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008281526020819052604090206001015461028f81610363565b6102998383610370565b50505050565b6001600160a01b03811633146102c85760405163334bd91960e11b815260040160405180910390fd5b6102d28282610402565b505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b604051612710808252907f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a19392505050565b60008281526020819052604090206001015461035981610363565b6102998383610402565b61036d813361046d565b50565b600061037c83836102d7565b6103fa576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556103b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161026e565b50600061026e565b600061040e83836102d7565b156103fa576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161026e565b61047782826102d7565b6104aa5760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440160405180910390fd5b5050565b6000602082840312156104c057600080fd5b81356001600160e01b0319811681146104d857600080fd5b9392505050565b6000602082840312156104f157600080fd5b5035919050565b80356001600160a01b038116811461050f57600080fd5b919050565b6000806040838503121561052757600080fd5b82359150610537602084016104f8565b90509250929050565b60008083601f84011261055257600080fd5b50813567ffffffffffffffff81111561056a57600080fd5b60208301915083602082850101111561058257600080fd5b9250929050565b6000806000806000608086880312156105a157600080fd5b853563ffffffff811681146105b557600080fd5b9450602086013567ffffffffffffffff811681146105d257600080fd5b93506105e0604087016104f8565b9250606086013567ffffffffffffffff8111156105fc57600080fd5b61060888828901610540565b969995985093965092949392505050565b60008060006040848603121561062e57600080fd5b833567ffffffffffffffff81111561064557600080fd5b840160a0818703121561065757600080fd5b9250602084013567ffffffffffffffff81111561067357600080fd5b61067f86828701610540565b949790965093945050505056fea264697066735822122072a1c9052df72b875e6a348272e8506fa7fe2acf62d1d8ae5e9ee160e3cda12264736f6c634300081a0033000000000000000000000000c03f31fd86a9077785b7bcf6598ce3598fa91113000000000000000000000000b3e790273f0a89e53d2c20dd4dfe82aa00bbf91b", + "nonce": "0x31", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x7bf7e", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x000000000000000000000000033aaded92ebfec6c818624f28a8e4b3c571ab6f" + ], + "data": "0x0000000000000000000000000000000000000000000000000039fa9c420fa43c0000000000000000000000000000000000000000000000006aae029cf5a4274a0000000000000000000000000000000000000000000000ba96e7ef6d9171b9e30000000000000000000000000000000000000000000000006a740800b394830e0000000000000000000000000000000000000000000000ba9721ea09d3815e1f", + "blockHash": "0x9566391c591fa98629b7cc4c2cf5f950249624ba1814838b90e2ec436c90aded", + "blockNumber": "0xd66581", + "transactionHash": "0x8030678b4af0ef71e88333f1cfee901e2aeb152bf9ee1a47743b773a1a71ba95", + "transactionIndex": "0x1", + "logIndex": "0x2", + "removed": false + } + ], + "logsBloom": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000000080000000000000000000000000000000000000000000080000000000000000000210000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000400000500000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0x8030678b4af0ef71e88333f1cfee901e2aeb152bf9ee1a47743b773a1a71ba95", + "transactionIndex": "0x1", + "blockHash": "0x9566391c591fa98629b7cc4c2cf5f950249624ba1814838b90e2ec436c90aded", + "blockNumber": "0xd66581", + "gasUsed": "0x73db2", + "effectiveGasPrice": "0x801cd4c5d", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0x6246696dba86622dd624c276da5af61480bb4e6c" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730806818, + "chain": 80002, + "commit": "d4e1224" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeploySimpleDvn.s.sol/80002/run-1730814880.json b/contracts/evm/broadcast/DeploySimpleDvn.s.sol/80002/run-1730814880.json new file mode 100644 index 00000000..18de202b --- /dev/null +++ b/contracts/evm/broadcast/DeploySimpleDvn.s.sol/80002/run-1730814880.json @@ -0,0 +1,66 @@ +{ + "transactions": [ + { + "hash": "0x56c1c8712f8de5aa0b8b4af5e332d54a00d7aea319294257a74627bae3ae9efa", + "transactionType": "CREATE", + "contractName": "SimpleNuffDVN", + "contractAddress": "0x1f841c1f294ccb93aa110b9703c03c53a23c6647", + "function": null, + "arguments": [ + "0xC03f31fD86a9077785b7bCf6598Ce3598Fa91113", + "0xb3e790273f0A89e53d2C20dD4dFe82AA00bbf91b" + ], + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x9692c", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b50604051610776380380610776833981016040819052602c916077565b600180546001600160a01b039384166001600160a01b0319918216179091556002805492909316911617905560a5565b80516001600160a01b0381168114607257600080fd5b919050565b60008060408385031215608957600080fd5b609083605c565b9150609c60208401605c565b90509250929050565b6106c2806100b46000396000f3fe60806040526004361061009c5760003560e01c8063741bef1a11610064578063741bef1a1461017d57806391d14854146101b557806395d376d7146101d5578063a217fddf146101e8578063bb37d00c146101fd578063d547741f1461021d57600080fd5b806301ffc9a7146100a1578063248a9ca3146100d65780632f2ff15d1461011457806330bb3aac1461013657806336568abe1461015d575b600080fd5b3480156100ad57600080fd5b506100c16100bc3660046104ae565b61023d565b60405190151581526020015b60405180910390f35b3480156100e257600080fd5b506101066100f13660046104df565b60009081526020819052604090206001015490565b6040519081526020016100cd565b34801561012057600080fd5b5061013461012f366004610514565b610274565b005b34801561014257600080fd5b50610106610151366004610589565b50612710949350505050565b34801561016957600080fd5b50610134610178366004610514565b61029f565b34801561018957600080fd5b5060015461019d906001600160a01b031681565b6040516001600160a01b0390911681526020016100cd565b3480156101c157600080fd5b506100c16101d0366004610514565b6102d7565b6101066101e3366004610619565b610300565b3480156101f457600080fd5b50610106600081565b34801561020957600080fd5b5060025461019d906001600160a01b031681565b34801561022957600080fd5b50610134610238366004610514565b61033e565b60006001600160e01b03198216637965db0b60e01b148061026e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008281526020819052604090206001015461028f81610363565b6102998383610370565b50505050565b6001600160a01b03811633146102c85760405163334bd91960e11b815260040160405180910390fd5b6102d28282610402565b505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b604051612710808252907f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a19392505050565b60008281526020819052604090206001015461035981610363565b6102998383610402565b61036d813361046d565b50565b600061037c83836102d7565b6103fa576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556103b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161026e565b50600061026e565b600061040e83836102d7565b156103fa576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161026e565b61047782826102d7565b6104aa5760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440160405180910390fd5b5050565b6000602082840312156104c057600080fd5b81356001600160e01b0319811681146104d857600080fd5b9392505050565b6000602082840312156104f157600080fd5b5035919050565b80356001600160a01b038116811461050f57600080fd5b919050565b6000806040838503121561052757600080fd5b82359150610537602084016104f8565b90509250929050565b60008083601f84011261055257600080fd5b50813567ffffffffffffffff81111561056a57600080fd5b60208301915083602082850101111561058257600080fd5b9250929050565b6000806000806000608086880312156105a157600080fd5b853563ffffffff811681146105b557600080fd5b9450602086013567ffffffffffffffff811681146105d257600080fd5b93506105e0604087016104f8565b9250606086013567ffffffffffffffff8111156105fc57600080fd5b61060888828901610540565b969995985093965092949392505050565b60008060006040848603121561062e57600080fd5b833567ffffffffffffffff81111561064557600080fd5b840160a0818703121561065757600080fd5b9250602084013567ffffffffffffffff81111561067357600080fd5b61067f86828701610540565b949790965093945050505056fea264697066735822122072a1c9052df72b875e6a348272e8506fa7fe2acf62d1d8ae5e9ee160e3cda12264736f6c634300081a0033000000000000000000000000c03f31fd86a9077785b7bcf6598ce3598fa91113000000000000000000000000b3e790273f0a89e53d2c20dd4dfe82aa00bbf91b", + "nonce": "0x33", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x73db2", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x0000000000000000000000006dc2dd54f24979ec26212794c71afefed722280c" + ], + "data": "0x000000000000000000000000000000000000000000000000002a25ed43fd54000000000000000000000000000000000000000000000000006a6cd66a4259a3fd0000000000000000000000000000000000000000000003c60a46b754529517d90000000000000000000000000000000000000000000000006a42b07cfe5c4ffd0000000000000000000000000000000000000000000003c60a70dd4196926bd9", + "blockHash": "0xdd3400c68a9c88fd462f4ced42e0814499e511e8b489d7ceb3693c75c1604ca9", + "blockNumber": "0xd67452", + "transactionHash": "0x56c1c8712f8de5aa0b8b4af5e332d54a00d7aea319294257a74627bae3ae9efa", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "logsBloom": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000800000000000000000000100080000000000000000000000000000000000000000000000000000000080000000000000020000200000000000000000000040000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000400000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0x56c1c8712f8de5aa0b8b4af5e332d54a00d7aea319294257a74627bae3ae9efa", + "transactionIndex": "0x0", + "blockHash": "0xdd3400c68a9c88fd462f4ced42e0814499e511e8b489d7ceb3693c75c1604ca9", + "blockNumber": "0xd67452", + "gasUsed": "0x73db2", + "effectiveGasPrice": "0x5d21dba0f", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0x1f841c1f294ccb93aa110b9703c03c53a23c6647" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730814880, + "chain": 80002, + "commit": "d4e1224" +} \ No newline at end of file diff --git a/contracts/evm/broadcast/DeploySimpleDvn.s.sol/80002/run-latest.json b/contracts/evm/broadcast/DeploySimpleDvn.s.sol/80002/run-latest.json new file mode 100644 index 00000000..18de202b --- /dev/null +++ b/contracts/evm/broadcast/DeploySimpleDvn.s.sol/80002/run-latest.json @@ -0,0 +1,66 @@ +{ + "transactions": [ + { + "hash": "0x56c1c8712f8de5aa0b8b4af5e332d54a00d7aea319294257a74627bae3ae9efa", + "transactionType": "CREATE", + "contractName": "SimpleNuffDVN", + "contractAddress": "0x1f841c1f294ccb93aa110b9703c03c53a23c6647", + "function": null, + "arguments": [ + "0xC03f31fD86a9077785b7bCf6598Ce3598Fa91113", + "0xb3e790273f0A89e53d2C20dD4dFe82AA00bbf91b" + ], + "transaction": { + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "gas": "0x9692c", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b50604051610776380380610776833981016040819052602c916077565b600180546001600160a01b039384166001600160a01b0319918216179091556002805492909316911617905560a5565b80516001600160a01b0381168114607257600080fd5b919050565b60008060408385031215608957600080fd5b609083605c565b9150609c60208401605c565b90509250929050565b6106c2806100b46000396000f3fe60806040526004361061009c5760003560e01c8063741bef1a11610064578063741bef1a1461017d57806391d14854146101b557806395d376d7146101d5578063a217fddf146101e8578063bb37d00c146101fd578063d547741f1461021d57600080fd5b806301ffc9a7146100a1578063248a9ca3146100d65780632f2ff15d1461011457806330bb3aac1461013657806336568abe1461015d575b600080fd5b3480156100ad57600080fd5b506100c16100bc3660046104ae565b61023d565b60405190151581526020015b60405180910390f35b3480156100e257600080fd5b506101066100f13660046104df565b60009081526020819052604090206001015490565b6040519081526020016100cd565b34801561012057600080fd5b5061013461012f366004610514565b610274565b005b34801561014257600080fd5b50610106610151366004610589565b50612710949350505050565b34801561016957600080fd5b50610134610178366004610514565b61029f565b34801561018957600080fd5b5060015461019d906001600160a01b031681565b6040516001600160a01b0390911681526020016100cd565b3480156101c157600080fd5b506100c16101d0366004610514565b6102d7565b6101066101e3366004610619565b610300565b3480156101f457600080fd5b50610106600081565b34801561020957600080fd5b5060025461019d906001600160a01b031681565b34801561022957600080fd5b50610134610238366004610514565b61033e565b60006001600160e01b03198216637965db0b60e01b148061026e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008281526020819052604090206001015461028f81610363565b6102998383610370565b50505050565b6001600160a01b03811633146102c85760405163334bd91960e11b815260040160405180910390fd5b6102d28282610402565b505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b604051612710808252907f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef9060200160405180910390a19392505050565b60008281526020819052604090206001015461035981610363565b6102998383610402565b61036d813361046d565b50565b600061037c83836102d7565b6103fa576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556103b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161026e565b50600061026e565b600061040e83836102d7565b156103fa576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161026e565b61047782826102d7565b6104aa5760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440160405180910390fd5b5050565b6000602082840312156104c057600080fd5b81356001600160e01b0319811681146104d857600080fd5b9392505050565b6000602082840312156104f157600080fd5b5035919050565b80356001600160a01b038116811461050f57600080fd5b919050565b6000806040838503121561052757600080fd5b82359150610537602084016104f8565b90509250929050565b60008083601f84011261055257600080fd5b50813567ffffffffffffffff81111561056a57600080fd5b60208301915083602082850101111561058257600080fd5b9250929050565b6000806000806000608086880312156105a157600080fd5b853563ffffffff811681146105b557600080fd5b9450602086013567ffffffffffffffff811681146105d257600080fd5b93506105e0604087016104f8565b9250606086013567ffffffffffffffff8111156105fc57600080fd5b61060888828901610540565b969995985093965092949392505050565b60008060006040848603121561062e57600080fd5b833567ffffffffffffffff81111561064557600080fd5b840160a0818703121561065757600080fd5b9250602084013567ffffffffffffffff81111561067357600080fd5b61067f86828701610540565b949790965093945050505056fea264697066735822122072a1c9052df72b875e6a348272e8506fa7fe2acf62d1d8ae5e9ee160e3cda12264736f6c634300081a0033000000000000000000000000c03f31fd86a9077785b7bcf6598ce3598fa91113000000000000000000000000b3e790273f0a89e53d2c20dd4dfe82aa00bbf91b", + "nonce": "0x33", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x73db2", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x0000000000000000000000006dc2dd54f24979ec26212794c71afefed722280c" + ], + "data": "0x000000000000000000000000000000000000000000000000002a25ed43fd54000000000000000000000000000000000000000000000000006a6cd66a4259a3fd0000000000000000000000000000000000000000000003c60a46b754529517d90000000000000000000000000000000000000000000000006a42b07cfe5c4ffd0000000000000000000000000000000000000000000003c60a70dd4196926bd9", + "blockHash": "0xdd3400c68a9c88fd462f4ced42e0814499e511e8b489d7ceb3693c75c1604ca9", + "blockNumber": "0xd67452", + "transactionHash": "0x56c1c8712f8de5aa0b8b4af5e332d54a00d7aea319294257a74627bae3ae9efa", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "logsBloom": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000800000000000000000000100080000000000000000000000000000000000000000000000000000000080000000000000020000200000000000000000000040000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000400000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0x56c1c8712f8de5aa0b8b4af5e332d54a00d7aea319294257a74627bae3ae9efa", + "transactionIndex": "0x0", + "blockHash": "0xdd3400c68a9c88fd462f4ced42e0814499e511e8b489d7ceb3693c75c1604ca9", + "blockNumber": "0xd67452", + "gasUsed": "0x73db2", + "effectiveGasPrice": "0x5d21dba0f", + "from": "0x96e341c7e7537333afa153d196038c6d086d5d2b", + "to": null, + "contractAddress": "0x1f841c1f294ccb93aa110b9703c03c53a23c6647" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730814880, + "chain": 80002, + "commit": "d4e1224" +} \ No newline at end of file diff --git a/contracts/evm/script/deploy/dvn/Deploy.s.sol b/contracts/evm/script/deploy/dvn/Deploy.s.sol new file mode 100644 index 00000000..ff9e6406 --- /dev/null +++ b/contracts/evm/script/deploy/dvn/Deploy.s.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: GPL-3 +pragma solidity ^0.8.0; + +import "forge-std/Script.sol"; +import { NuffDVN } from "../../../src/dvn/NuffDVN.sol"; +import { INuffClient } from "../../../src/dvn/interfaces/INuffClient.sol"; + +// Run with: +// forge script /Deploy.s.sol --rpc-url --broadcast --account + +contract DeployDVN is Script { + address public owner; + NuffDVN public dvn; + + function _deployDVN() internal { + vm.startBroadcast(); + // FIXME: some parameters are not used right now, and might be removed. + dvn = new NuffDVN( + // 0, // uint256 _nuffAppId + INuffClient.PublicKey({x: 0, y: 0}), // ... _nuffPublicKey + // address(0x1234), // address _nuff + address(0x6EDCE65403992e310A62460808c4b910D972f10f), // address _layerZeroEndpointV2 + 1, // uint16 _defaultMultiplierBps + 1, // uint64 _quorum + // Values from: https://etherscan.io/address/0x589dedbd617e0cbcb916a9223f4d1300c294236b#readcontract + address(0xC03f31fD86a9077785b7bCf6598Ce3598Fa91113), // address _priceFeed + address(0xb3e790273f0A89e53d2C20dD4dFe82AA00bbf91b) // address _feeLib + ); + console.log("Deployed DVN at address: ", address(dvn)); + vm.stopBroadcast(); + } + + function run() external { + _deployDVN(); + } +} diff --git a/contracts/evm/script/deploy/dvn/DeployExecutor.s.sol b/contracts/evm/script/deploy/dvn/DeployExecutor.s.sol new file mode 100644 index 00000000..f4ce11db --- /dev/null +++ b/contracts/evm/script/deploy/dvn/DeployExecutor.s.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: GPL-3 +pragma solidity ^0.8.0; + +import "forge-std/Script.sol"; +import { NuffExecutor } from "../../../src/dvn/NuffExecutor.sol"; + +// Run with: +// forge script /Deploy.s.sol --rpc-url --broadcast --account + +contract DeployExecutor is Script { + address public owner; + NuffExecutor public executor; + + function _deployExecutor() internal { + vm.startBroadcast(); + executor = new NuffExecutor(); + console.log("Deployed Executor at address: ", address(executor)); + vm.stopBroadcast(); + } + + function run() external { + _deployExecutor(); + } +} diff --git a/contracts/evm/script/deploy/dvn/DeploySimple.s.sol b/contracts/evm/script/deploy/dvn/DeploySimple.s.sol new file mode 100644 index 00000000..4c7977c7 --- /dev/null +++ b/contracts/evm/script/deploy/dvn/DeploySimple.s.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: GPL-3 +pragma solidity ^0.8.0; + +import "forge-std/Script.sol"; +import { SimpleNuffDVN } from "../../../src/dvn/SimpleNuffDVN.sol"; + +// Run with: +// forge script /Deploy.s.sol --rpc-url --broadcast --account + +contract DeployDVN is Script { + address public owner; + SimpleNuffDVN public dvn; + + function _deployDVN() internal { + vm.startBroadcast(); + dvn = new SimpleNuffDVN(); + console.log("Deployed simple DVN at address: ", address(dvn)); + vm.stopBroadcast(); + } + + function run() external { + _deployDVN(); + } +} diff --git a/contracts/evm/script/deploy/dvn/Makefile b/contracts/evm/script/deploy/dvn/Makefile new file mode 100644 index 00000000..22d014a4 --- /dev/null +++ b/contracts/evm/script/deploy/dvn/Makefile @@ -0,0 +1,18 @@ +key = a7d4a3dd6f774049bce5d61651549421 +deploy-regular: + forge script Deploy.s.sol --rpc-url https://holesky.infura.io/v3/a7d4a3dd6f774049bce5d61651549421 --broadcast --account META + forge script Deploy.s.sol --rpc-url https://polygon-amoy.infura.io/v3/a7d4a3dd6f774049bce5d61651549421 --broadcast --account META + forge script Deploy.s.sol --rpc-url https://arbitrum-sepolia.infura.io/v3/a7d4a3dd6f774049bce5d61651549421 --broadcast --account META + +deploy-simple: + forge script DeploySimple.s.sol --rpc-url https://holesky.infura.io/v3/a7d4a3dd6f774049bce5d61651549421 --broadcast --account META + forge script DeploySimple.s.sol --rpc-url https://polygon-amoy.infura.io/v3/a7d4a3dd6f774049bce5d61651549421 --broadcast --account META + forge script DeploySimple.s.sol --rpc-url https://arbitrum-sepolia.infura.io/v3/a7d4a3dd6f774049bce5d61651549421 --broadcast --account META + +deploy: deploy-simple deploy-regular + +executor: + forge script DeployExecutor.s.sol --rpc-url https://holesky.infura.io/v3/$(key) --broadcast --account META + forge script DeployExecutor.s.sol --rpc-url https://polygon-amoy.infura.io/v3/$(key) --broadcast --account META + forge script DeployExecutor.s.sol --rpc-url https://arbitrum-sepolia.infura.io/v3/$(key) --broadcast --account META + diff --git a/contracts/evm/src/dvn/NuffDVN.sol b/contracts/evm/src/dvn/NuffDVN.sol index 7857db34..23e4c2f0 100644 --- a/contracts/evm/src/dvn/NuffDVN.sol +++ b/contracts/evm/src/dvn/NuffDVN.sol @@ -13,11 +13,11 @@ import { IReceiveUlnE2 } from "@layerzerolabs/lz-evm-messagelib-v2/contracts/uln import { IDVNFeeLib } from "@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol"; import { INuffClient } from "./interfaces/INuffClient.sol"; -import { INuffDVNConfig } from "./interfaces/INuffDVNConfig.sol"; +// import { INuffDVNConfig } from "./interfaces/INuffDVNConfig.sol"; import { ReentrancyGuard } from "solady/src/utils/ReentrancyGuard.sol"; -abstract contract NuffDVN is ILayerZeroDVN, AccessControl, IDVN, ReentrancyGuard { +contract NuffDVN is ILayerZeroDVN, AccessControl, IDVN, ReentrancyGuard { using PacketV1Codec for bytes; using ECDSA for bytes32; @@ -41,10 +41,8 @@ abstract contract NuffDVN is ILayerZeroDVN, AccessControl, IDVN, ReentrancyGuard uint256 public lastJobId; - uint256 public nuffAppId; INuffClient.PublicKey public nuffPublicKey; INuffClient public nuff; - INuffDVNConfig public dvnConfig; uint16 public defaultMultiplierBps; uint64 public quorum; @@ -56,26 +54,24 @@ abstract contract NuffDVN is ILayerZeroDVN, AccessControl, IDVN, ReentrancyGuard mapping(uint32 eid => bool isSupported) public supportedDstChain; mapping(uint32 dstEid => DstConfig config) public dstConfig; mapping(uint32 srcEid => mapping(uint256 jobId => bool isVerified)) public verifiedJobs; + mapping(uint32 eid => uint8[] optionTypes) public supportedOptionTypes; event JobAssigned(uint256 jobId); event Verified(uint32 srcEid, uint256 jobId); + event VerifierFeePaid(uint256 fee); constructor( - uint256 _nuffAppId, INuffClient.PublicKey memory _nuffPublicKey, - address _nuff, + // address _nuff, address _layerZeroEndpointV2, - address _dvnConfig, uint16 _defaultMultiplierBps, uint64 _quorum, address _priceFeed, address _feeLib ) { - nuffAppId = _nuffAppId; nuffPublicKey = _nuffPublicKey; - nuff = INuffClient(_nuff); + // nuff = INuffClient(_nuff); layerZeroEndpointV2 = ILayerZeroEndpointV2(_layerZeroEndpointV2); - dvnConfig = INuffDVNConfig(_dvnConfig); localEid = layerZeroEndpointV2.eid(); defaultMultiplierBps = _defaultMultiplierBps; quorum = _quorum; @@ -85,18 +81,38 @@ abstract contract NuffDVN is ILayerZeroDVN, AccessControl, IDVN, ReentrancyGuard _grantRole(ADMIN_ROLE, msg.sender); } + function getFee( + uint32 _dstEid, + uint64 _confirmations, + address _sender, + bytes calldata _options + ) external view override returns (uint256 _fee) { + // IDVNFeeLib.FeeParams memory params = IDVNFeeLib.FeeParams( + // priceFeed, + // _dstEid, + // _confirmations, + // _sender, + // quorum, + // defaultMultiplierBps + // ); + // + // _fee = IDVNFeeLib(feeLib).getFee(params, dstConfig[_dstEid], _options); + _fee = 10000; + } + function assignJob( AssignJobParam calldata _param, bytes calldata _options ) external - nonReentrant + // nonReentrant payable override - onlyRole(MESSAGE_LIB_ROLE) + // onlyRole(MESSAGE_LIB_ROLE) returns (uint256 fee) { - require(supportedDstChain[_param.dstEid], "Unsupported chain"); + // TODO: wire up later + // require(supportedDstChain[_param.dstEid], "Unsupported chain"); uint256 jobId = ++lastJobId; Job storage newJob = jobs[jobId]; @@ -115,22 +131,24 @@ abstract contract NuffDVN is ILayerZeroDVN, AccessControl, IDVN, ReentrancyGuard ); newJob.options = _options; - IDVNFeeLib.FeeParams memory feeParams = IDVNFeeLib.FeeParams( - priceFeed, - _param.dstEid, - _param.confirmations, - _param.sender, - quorum, - defaultMultiplierBps - ); - - fee = IDVNFeeLib(feeLib).getFeeOnSend( - feeParams, - dstConfig[_param.dstEid], - _options - ); + // IDVNFeeLib.FeeParams memory feeParams = IDVNFeeLib.FeeParams( + // priceFeed, + // _param.dstEid, + // _param.confirmations, + // _param.sender, + // quorum, + // defaultMultiplierBps + // ); + // + // fee = IDVNFeeLib(feeLib).getFeeOnSend( + // feeParams, + // dstConfig[_param.dstEid], + // _options + // ); + fee = 10000; emit JobAssigned(jobId); + emit VerifierFeePaid(fee); } function verify( @@ -152,9 +170,8 @@ abstract contract NuffDVN is ILayerZeroDVN, AccessControl, IDVN, ReentrancyGuard verifiedJobs[_srcEid][_jobId] = true; - bytes32 hash = keccak256( + bytes32 _hash = keccak256( abi.encodePacked( - nuffAppId, _reqId, _srcEid, _dstEid, @@ -168,7 +185,7 @@ abstract contract NuffDVN is ILayerZeroDVN, AccessControl, IDVN, ReentrancyGuard _verifyNuffSig( _reqId, - hash, + _hash, _signature ); @@ -183,10 +200,6 @@ abstract contract NuffDVN is ILayerZeroDVN, AccessControl, IDVN, ReentrancyGuard emit Verified(_srcEid, _jobId); } - function setNuffAppId(uint256 _nuffAppId) external onlyRole(ADMIN_ROLE) { - nuffAppId = _nuffAppId; - } - function setNuffContract(address addr) external onlyRole(ADMIN_ROLE) { nuff = INuffClient(addr); } @@ -248,23 +261,6 @@ abstract contract NuffDVN is ILayerZeroDVN, AccessControl, IDVN, ReentrancyGuard emit Withdraw(_lib, _to, _amount); } - function getFee( - uint32 _dstEid, - uint64 _confirmations, - address _sender, - bytes calldata _options - ) external view override returns (uint256 _fee) { - IDVNFeeLib.FeeParams memory params = IDVNFeeLib.FeeParams( - priceFeed, - _dstEid, - _confirmations, - _sender, - quorum, - defaultMultiplierBps - ); - return IDVNFeeLib(feeLib).getFee(params, dstConfig[_dstEid], _options); - } - function _verifyNuffSig( bytes calldata reqId, bytes32 hash, @@ -287,12 +283,11 @@ abstract contract NuffDVN is ILayerZeroDVN, AccessControl, IDVN, ReentrancyGuard address _receiver ) internal nonReentrant { address receiverLib; - if (_isV2(_srcEid)) { - (receiverLib, ) = layerZeroEndpointV2.getReceiveLibrary( - _receiver, - _srcEid - ); - } + + (receiverLib, ) = layerZeroEndpointV2.getReceiveLibrary( + _receiver, + _srcEid + ); IReceiveUlnE2(receiverLib).verify( _packetHeader, @@ -314,4 +309,12 @@ abstract contract NuffDVN is ILayerZeroDVN, AccessControl, IDVN, ReentrancyGuard } return false; } + + function getSupportedOptionTypes(uint32 _eid) external view returns (uint8[] memory) { + return supportedOptionTypes[_eid]; + } + + function setSupportedOptionTypes(uint32 _eid, uint8[] calldata _optionTypes) external { + supportedOptionTypes[_eid] = _optionTypes; + } } diff --git a/contracts/evm/src/dvn/NuffExecutor.sol b/contracts/evm/src/dvn/NuffExecutor.sol new file mode 100644 index 00000000..f9c0bbde --- /dev/null +++ b/contracts/evm/src/dvn/NuffExecutor.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +import { ILayerZeroExecutor } from "@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol"; + +contract NuffExecutor is ILayerZeroExecutor { + function assignJob( + uint32 _dstEid, + address _sender, + uint256 _calldataSize, + bytes calldata _options + ) external returns (uint256 price) { + price = 10000; + } + + function getFee( + uint32 _dstEid, + address _sender, + uint256 _calldataSize, + bytes calldata _options + ) external view returns (uint256 price) { + price = 10000; + } + +} + diff --git a/contracts/evm/src/dvn/SimpleNuffDVN.sol b/contracts/evm/src/dvn/SimpleNuffDVN.sol new file mode 100644 index 00000000..243d1269 --- /dev/null +++ b/contracts/evm/src/dvn/SimpleNuffDVN.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +import "@openzeppelin/contracts/access/AccessControl.sol"; +import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; + +import { ILayerZeroDVN } from "@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol"; + +contract SimpleNuffDVN is ILayerZeroDVN { + event VerifierFeePaid(uint256 fee); + + constructor() { } + + function assignJob( + AssignJobParam calldata _param, + bytes calldata _options + ) + external + payable + override + returns (uint256 fee) + { + fee = 10000; + emit VerifierFeePaid(fee); + } + + function getFee( + uint32 _dstEid, + uint64 _confirmations, + address _sender, + bytes calldata _options + ) external view override returns (uint256 fee) { + fee = 10000; + } +} diff --git a/contracts/evm/src/dvn/interfaces/INuffClient.sol b/contracts/evm/src/dvn/interfaces/INuffClient.sol index 3a3ad0bb..5f22caba 100644 --- a/contracts/evm/src/dvn/interfaces/INuffClient.sol +++ b/contracts/evm/src/dvn/interfaces/INuffClient.sol @@ -14,8 +14,8 @@ interface INuffClient { } struct PublicKey { - uint x; - uint y; + uint256 x; + uint256 y; } function nuffVerify( diff --git a/docker-compose.yml b/docker-compose.yml index 1a79ad78..d0e3767e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -318,52 +318,52 @@ services: networks: - near-sffl - # METRICS RELATED - grafana: - image: grafana/grafana:9.4.1 - container_name: grafana - volumes: - - grafana_data:/var/lib/grafana - - ./grafana/provisioning:/etc/grafana/provisioning - environment: - # See https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/#override-configuration-with-environment-variables - # and https://grafana.com/docs/grafana/latest/setup-grafana/configure-docker/ - # They recommend using env vars instead of overwriting config.ini - - GF_SECURITY_ADMIN_USER=${ADMIN_USER:-admin} - - GF_SECURITY_ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin} - - GF_USERS_ALLOW_SIGN_UP=false - restart: unless-stopped - ports: - - 3000:3000 - networks: - - near-sffl - - prometheus: - image: prom/prometheus:v2.42.0 - container_name: prometheus - volumes: - - ./prometheus:/etc/prometheus - - prometheus_data:/prometheus - command: - - "--config.file=/etc/prometheus/prometheus.yml" - - "--storage.tsdb.path=/prometheus" - - "--web.console.libraries=/etc/prometheus/console_libraries" - - "--web.console.templates=/etc/prometheus/consoles" - - "--storage.tsdb.retention.time=200h" - - "--web.enable-lifecycle" - - --web.enable-remote-write-receiver - restart: unless-stopped - ports: - - 9090:9090 - networks: - - near-sffl - # so that we can access the host from within the container - # needed to get the metrics from host.docker.internal:9184/metrics - extra_hosts: - - "host.docker.internal:host-gateway" + # METRICS RELATED, disable + # grafana: + # image: grafana/grafana:9.4.1 + # container_name: grafana + # volumes: + # - grafana_data:/var/lib/grafana + # - ./grafana/provisioning:/etc/grafana/provisioning + # environment: + # # See https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/#override-configuration-with-environment-variables + # # and https://grafana.com/docs/grafana/latest/setup-grafana/configure-docker/ + # # They recommend using env vars instead of overwriting config.ini + # - GF_SECURITY_ADMIN_USER=${ADMIN_USER:-admin} + # - GF_SECURITY_ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin} + # - GF_USERS_ALLOW_SIGN_UP=false + # restart: unless-stopped + # ports: + # - 3000:3000 + # networks: + # - near-sffl + # + # prometheus: + # image: prom/prometheus:v2.42.0 + # container_name: prometheus + # volumes: + # - ./prometheus:/etc/prometheus + # - prometheus_data:/prometheus + # command: + # - "--config.file=/etc/prometheus/prometheus.yml" + # - "--storage.tsdb.path=/prometheus" + # - "--web.console.libraries=/etc/prometheus/console_libraries" + # - "--web.console.templates=/etc/prometheus/consoles" + # - "--storage.tsdb.retention.time=200h" + # - "--web.enable-lifecycle" + # - --web.enable-remote-write-receiver + # restart: unless-stopped + # ports: + # - 9090:9090 + # networks: + # - near-sffl + # # so that we can access the host from within the container + # # needed to get the metrics from host.docker.internal:9184/metrics + # extra_hosts: + # - "host.docker.internal:host-gateway" volumes: - prometheus_data: - grafana_data: +# prometheus_data: +# grafana_data: near_cli_data: near_cli_keys: diff --git a/workers/Cargo.toml b/offchain/Cargo.toml similarity index 81% rename from workers/Cargo.toml rename to offchain/Cargo.toml index 68476256..67208b10 100644 --- a/workers/Cargo.toml +++ b/offchain/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "workers" +name = "offchain" version = "0.1.0" edition = "2021" @@ -18,16 +18,18 @@ bytes = "1.7.2" config = { version = "0.14.0", features = ["toml"] } eyre.workspace = true futures = "0.3.31" +log = "0.4.22" +project-root = "0.2.2" reqwest.workspace = true serde.workspace = true serde_json.workspace = true tokio.workspace = true tracing.workspace = true -tracing-subscriber = {workspace = true, features = ["env-filter"] } +tracing-subscriber = { workspace = true, features = ["env-filter"] } tokio-tungstenite = "0.24.0" -log = "0.4.22" [dev-dependencies] axum = "0.7.7" http-body-util = "0.1.0" wiremock = "0.6.2" +tempfile = "3.13.0" diff --git a/workers/README.md b/offchain/README.md similarity index 100% rename from workers/README.md rename to offchain/README.md diff --git a/offchain/abi/L0V2Endpoint.json b/offchain/abi/L0V2Endpoint.json new file mode 100644 index 00000000..0008c8e8 --- /dev/null +++ b/offchain/abi/L0V2Endpoint.json @@ -0,0 +1,2395 @@ +{ + "abi": [ + { + "inputs": [ + { + "internalType": "uint32", + "name": "_eid", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "LZ_AlreadyRegistered", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_ComposeExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "expected", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "actual", + "type": "bytes32" + } + ], + "name": "LZ_ComposeNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_DefaultReceiveLibUnavailable", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_DefaultSendLibUnavailable", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "requiredNative", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "suppliedNative", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "requiredLzToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "suppliedLzToken", + "type": "uint256" + } + ], + "name": "LZ_InsufficientFee", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_InvalidExpiry", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "nonce", + "type": "uint64" + } + ], + "name": "LZ_InvalidNonce", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_InvalidPayloadHash", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_InvalidReceiveLibrary", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_LzTokenUnavailable", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_OnlyNonDefaultLib", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_OnlyReceiveLib", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_OnlyRegisteredLib", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_OnlyRegisteredOrDefaultLib", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_OnlySendLib", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_PathNotInitializable", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_PathNotVerifiable", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "expected", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "actual", + "type": "bytes32" + } + ], + "name": "LZ_PayloadHashNotFound", + "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" + }, + { + "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": "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": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "executor", + "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": 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": "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": "timeout", + "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": "EMPTY_PAYLOAD_HASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "NIL_PAYLOAD_HASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "blockedLibrary", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "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": "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": "srcEid", + "type": "uint32" + } + ], + "name": "defaultReceiveLibrary", + "outputs": [ + { + "internalType": "address", + "name": "lib", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "srcEid", + "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": "dstEid", + "type": "uint32" + } + ], + "name": "defaultSendLibrary", + "outputs": [ + { + "internalType": "address", + "name": "lib", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oapp", + "type": "address" + } + ], + "name": "delegates", + "outputs": [ + { + "internalType": "address", + "name": "delegate", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "eid", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "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": "executable", + "outputs": [ + { + "internalType": "enum ExecutionState", + "name": "", + "type": "uint8" + } + ], + "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": "_srcEid", + "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": "", + "type": "uint32" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "internalType": "uint32", + "name": "_dstEid", + "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": "inboundNonce", + "type": "uint64" + } + ], + "name": "inboundPayloadHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "payloadHash", + "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": "_dstEid", + "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": "_srcEid", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_actualReceiveLib", + "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": "nonce", + "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": [ + { + "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": "uint256", + "name": "_gas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_message", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "_extraData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "_reason", + "type": "bytes" + } + ], + "name": "lzComposeAlert", + "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" + }, + { + "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": [ + { + "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": "uint256", + "name": "_gas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_message", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "_extraData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "_reason", + "type": "bytes" + } + ], + "name": "lzReceiveAlert", + "outputs": [], + "stateMutability": "nonpayable", + "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": "nonce", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "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": "srcEid", + "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": "_token", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "recoverToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_lib", + "type": "address" + } + ], + "name": "registerLibrary", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "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": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "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" + } + ] +} \ No newline at end of file diff --git a/offchain/abi/ReceiveLibUln301.json b/offchain/abi/ReceiveLibUln301.json new file mode 100644 index 00000000..109667a2 --- /dev/null +++ b/offchain/abi/ReceiveLibUln301.json @@ -0,0 +1,993 @@ +{ + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_endpoint", + "type": "address" + }, + { + "internalType": "uint32", + "name": "_localEid", + "type": "uint32" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "AddressCast_InvalidSizeForAddress", + "type": "error" + }, + { + "inputs": [], + "name": "AddressSizeConfig_AddressSizeAlreadySet", + "type": "error" + }, + { + "inputs": [], + "name": "AddressSizeConfig_InvalidAddressSize", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_MessageLib_InvalidExecutor", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_MessageLib_OnlyEndpoint", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_MessageLib_OnlyExecutor", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_ULN_AtLeastOneDVN", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "configType", + "type": "uint256" + } + ], + "name": "LZ_ULN_InvalidConfigType", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_ULN_InvalidConfirmations", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_ULN_InvalidEid", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_ULN_InvalidOptionalDVNCount", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_ULN_InvalidOptionalDVNThreshold", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_ULN_InvalidPacketHeader", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_ULN_InvalidPacketVersion", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_ULN_InvalidRequiredDVNCount", + "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" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint16", + "name": "eid", + "type": "uint16" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "size", + "type": "uint256" + } + ], + "name": "AddressSizeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "eid", + "type": "uint32" + }, + { + "internalType": "address", + "name": "executor", + "type": "address" + } + ], + "indexed": false, + "internalType": "struct SetDefaultExecutorParam[]", + "name": "params", + "type": "tuple[]" + } + ], + "name": "DefaultExecutorsSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "eid", + "type": "uint32" + }, + { + "components": [ + { + "internalType": "uint64", + "name": "confirmations", + "type": "uint64" + }, + { + "internalType": "uint8", + "name": "requiredDVNCount", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "optionalDVNCount", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "optionalDVNThreshold", + "type": "uint8" + }, + { + "internalType": "address[]", + "name": "requiredDVNs", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "optionalDVNs", + "type": "address[]" + } + ], + "internalType": "struct UlnConfig", + "name": "config", + "type": "tuple" + } + ], + "indexed": false, + "internalType": "struct SetDefaultUlnConfigParam[]", + "name": "params", + "type": "tuple[]" + } + ], + "name": "DefaultUlnConfigsSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oapp", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "eid", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "executor", + "type": "address" + } + ], + "name": "ExecutorSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint16", + "name": "srcChainId", + "type": "uint16" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "srcAddress", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "dstAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "nonce", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "payloadHash", + "type": "bytes32" + } + ], + "name": "InvalidDst", + "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": [ + { + "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": "address", + "name": "dvn", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "header", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "confirmations", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "proofHash", + "type": "bytes32" + } + ], + "name": "PayloadVerified", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oapp", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "eid", + "type": "uint32" + }, + { + "components": [ + { + "internalType": "uint64", + "name": "confirmations", + "type": "uint64" + }, + { + "internalType": "uint8", + "name": "requiredDVNCount", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "optionalDVNCount", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "optionalDVNThreshold", + "type": "uint8" + }, + { + "internalType": "address[]", + "name": "requiredDVNs", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "optionalDVNs", + "type": "address[]" + } + ], + "indexed": false, + "internalType": "struct UlnConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "UlnConfigSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "dstEid", + "type": "uint32" + } + ], + "name": "addressSizes", + "outputs": [ + { + "internalType": "uint256", + "name": "size", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_packetHeader", + "type": "bytes" + }, + { + "internalType": "uint32", + "name": "_localEid", + "type": "uint32" + } + ], + "name": "assertHeader", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_packet", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_gasLimit", + "type": "uint256" + } + ], + "name": "commitVerification", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "eid", + "type": "uint32" + } + ], + "name": "defaultExecutors", + "outputs": [ + { + "internalType": "address", + "name": "executor", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oapp", + "type": "address" + }, + { + "internalType": "uint32", + "name": "eid", + "type": "uint32" + } + ], + "name": "executors", + "outputs": [ + { + "internalType": "address", + "name": "executor", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_oapp", + "type": "address" + }, + { + "internalType": "uint32", + "name": "_remoteEid", + "type": "uint32" + } + ], + "name": "getAppUlnConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint64", + "name": "confirmations", + "type": "uint64" + }, + { + "internalType": "uint8", + "name": "requiredDVNCount", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "optionalDVNCount", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "optionalDVNThreshold", + "type": "uint8" + }, + { + "internalType": "address[]", + "name": "requiredDVNs", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "optionalDVNs", + "type": "address[]" + } + ], + "internalType": "struct UlnConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint16", + "name": "_eid", + "type": "uint16" + }, + { + "internalType": "address", + "name": "_oapp", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_configType", + "type": "uint256" + } + ], + "name": "getConfig", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_oapp", + "type": "address" + }, + { + "internalType": "uint32", + "name": "_remoteEid", + "type": "uint32" + } + ], + "name": "getExecutor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_oapp", + "type": "address" + }, + { + "internalType": "uint32", + "name": "_remoteEid", + "type": "uint32" + } + ], + "name": "getUlnConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint64", + "name": "confirmations", + "type": "uint64" + }, + { + "internalType": "uint8", + "name": "requiredDVNCount", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "optionalDVNCount", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "optionalDVNThreshold", + "type": "uint8" + }, + { + "internalType": "address[]", + "name": "requiredDVNs", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "optionalDVNs", + "type": "address[]" + } + ], + "internalType": "struct UlnConfig", + "name": "rtnConfig", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "headerHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "payloadHash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "dvn", + "type": "address" + } + ], + "name": "hashLookup", + "outputs": [ + { + "internalType": "bool", + "name": "submitted", + "type": "bool" + }, + { + "internalType": "uint64", + "name": "confirmations", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint16", + "name": "_eid", + "type": "uint16" + }, + { + "internalType": "uint256", + "name": "_size", + "type": "uint256" + } + ], + "name": "setAddressSize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint16", + "name": "_eid", + "type": "uint16" + }, + { + "internalType": "address", + "name": "_oapp", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_configType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_config", + "type": "bytes" + } + ], + "name": "setConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "eid", + "type": "uint32" + }, + { + "internalType": "address", + "name": "executor", + "type": "address" + } + ], + "internalType": "struct SetDefaultExecutorParam[]", + "name": "_params", + "type": "tuple[]" + } + ], + "name": "setDefaultExecutors", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "eid", + "type": "uint32" + }, + { + "components": [ + { + "internalType": "uint64", + "name": "confirmations", + "type": "uint64" + }, + { + "internalType": "uint8", + "name": "requiredDVNCount", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "optionalDVNCount", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "optionalDVNThreshold", + "type": "uint8" + }, + { + "internalType": "address[]", + "name": "requiredDVNs", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "optionalDVNs", + "type": "address[]" + } + ], + "internalType": "struct UlnConfig", + "name": "config", + "type": "tuple" + } + ], + "internalType": "struct SetDefaultUlnConfigParam[]", + "name": "_params", + "type": "tuple[]" + } + ], + "name": "setDefaultUlnConfigs", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint64", + "name": "confirmations", + "type": "uint64" + }, + { + "internalType": "uint8", + "name": "requiredDVNCount", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "optionalDVNCount", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "optionalDVNThreshold", + "type": "uint8" + }, + { + "internalType": "address[]", + "name": "requiredDVNs", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "optionalDVNs", + "type": "address[]" + } + ], + "internalType": "struct UlnConfig", + "name": "_config", + "type": "tuple" + }, + { + "internalType": "bytes32", + "name": "_headerHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "_payloadHash", + "type": "bytes32" + } + ], + "name": "verifiable", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_packetHeader", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "_payloadHash", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "_confirmations", + "type": "uint64" + } + ], + "name": "verify", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "uint64", + "name": "major", + "type": "uint64" + }, + { + "internalType": "uint8", + "name": "minor", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "endpointVersion", + "type": "uint8" + } + ], + "stateMutability": "pure", + "type": "function" + } + ] +} \ No newline at end of file diff --git a/offchain/abi/ReceiveLibUln302.json b/offchain/abi/ReceiveLibUln302.json new file mode 100644 index 00000000..04d76ca0 --- /dev/null +++ b/offchain/abi/ReceiveLibUln302.json @@ -0,0 +1,791 @@ +{ + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_endpoint", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "LZ_MessageLib_OnlyEndpoint", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_ULN_AtLeastOneDVN", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "configType", + "type": "uint32" + } + ], + "name": "LZ_ULN_InvalidConfigType", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_ULN_InvalidConfirmations", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_ULN_InvalidEid", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_ULN_InvalidOptionalDVNCount", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_ULN_InvalidOptionalDVNThreshold", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_ULN_InvalidPacketHeader", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_ULN_InvalidPacketVersion", + "type": "error" + }, + { + "inputs": [], + "name": "LZ_ULN_InvalidRequiredDVNCount", + "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" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "eid", + "type": "uint32" + }, + { + "components": [ + { + "internalType": "uint64", + "name": "confirmations", + "type": "uint64" + }, + { + "internalType": "uint8", + "name": "requiredDVNCount", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "optionalDVNCount", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "optionalDVNThreshold", + "type": "uint8" + }, + { + "internalType": "address[]", + "name": "requiredDVNs", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "optionalDVNs", + "type": "address[]" + } + ], + "internalType": "struct UlnConfig", + "name": "config", + "type": "tuple" + } + ], + "indexed": false, + "internalType": "struct SetDefaultUlnConfigParam[]", + "name": "params", + "type": "tuple[]" + } + ], + "name": "DefaultUlnConfigsSet", + "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": "address", + "name": "dvn", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "header", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "confirmations", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "proofHash", + "type": "bytes32" + } + ], + "name": "PayloadVerified", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oapp", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "eid", + "type": "uint32" + }, + { + "components": [ + { + "internalType": "uint64", + "name": "confirmations", + "type": "uint64" + }, + { + "internalType": "uint8", + "name": "requiredDVNCount", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "optionalDVNCount", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "optionalDVNThreshold", + "type": "uint8" + }, + { + "internalType": "address[]", + "name": "requiredDVNs", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "optionalDVNs", + "type": "address[]" + } + ], + "indexed": false, + "internalType": "struct UlnConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "UlnConfigSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_packetHeader", + "type": "bytes" + }, + { + "internalType": "uint32", + "name": "_localEid", + "type": "uint32" + } + ], + "name": "assertHeader", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_packetHeader", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "_payloadHash", + "type": "bytes32" + } + ], + "name": "commitVerification", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_oapp", + "type": "address" + }, + { + "internalType": "uint32", + "name": "_remoteEid", + "type": "uint32" + } + ], + "name": "getAppUlnConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint64", + "name": "confirmations", + "type": "uint64" + }, + { + "internalType": "uint8", + "name": "requiredDVNCount", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "optionalDVNCount", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "optionalDVNThreshold", + "type": "uint8" + }, + { + "internalType": "address[]", + "name": "requiredDVNs", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "optionalDVNs", + "type": "address[]" + } + ], + "internalType": "struct UlnConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_eid", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_oapp", + "type": "address" + }, + { + "internalType": "uint32", + "name": "_configType", + "type": "uint32" + } + ], + "name": "getConfig", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_oapp", + "type": "address" + }, + { + "internalType": "uint32", + "name": "_remoteEid", + "type": "uint32" + } + ], + "name": "getUlnConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint64", + "name": "confirmations", + "type": "uint64" + }, + { + "internalType": "uint8", + "name": "requiredDVNCount", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "optionalDVNCount", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "optionalDVNThreshold", + "type": "uint8" + }, + { + "internalType": "address[]", + "name": "requiredDVNs", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "optionalDVNs", + "type": "address[]" + } + ], + "internalType": "struct UlnConfig", + "name": "rtnConfig", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "headerHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "payloadHash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "dvn", + "type": "address" + } + ], + "name": "hashLookup", + "outputs": [ + { + "internalType": "bool", + "name": "submitted", + "type": "bool" + }, + { + "internalType": "uint64", + "name": "confirmations", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_eid", + "type": "uint32" + } + ], + "name": "isSupportedEid", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "messageLibType", + "outputs": [ + { + "internalType": "enum MessageLibType", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_oapp", + "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": [ + { + "components": [ + { + "internalType": "uint32", + "name": "eid", + "type": "uint32" + }, + { + "components": [ + { + "internalType": "uint64", + "name": "confirmations", + "type": "uint64" + }, + { + "internalType": "uint8", + "name": "requiredDVNCount", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "optionalDVNCount", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "optionalDVNThreshold", + "type": "uint8" + }, + { + "internalType": "address[]", + "name": "requiredDVNs", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "optionalDVNs", + "type": "address[]" + } + ], + "internalType": "struct UlnConfig", + "name": "config", + "type": "tuple" + } + ], + "internalType": "struct SetDefaultUlnConfigParam[]", + "name": "_params", + "type": "tuple[]" + } + ], + "name": "setDefaultUlnConfigs", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint64", + "name": "confirmations", + "type": "uint64" + }, + { + "internalType": "uint8", + "name": "requiredDVNCount", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "optionalDVNCount", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "optionalDVNThreshold", + "type": "uint8" + }, + { + "internalType": "address[]", + "name": "requiredDVNs", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "optionalDVNs", + "type": "address[]" + } + ], + "internalType": "struct UlnConfig", + "name": "_config", + "type": "tuple" + }, + { + "internalType": "bytes32", + "name": "_headerHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "_payloadHash", + "type": "bytes32" + } + ], + "name": "verifiable", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_packetHeader", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "_payloadHash", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "_confirmations", + "type": "uint64" + } + ], + "name": "verify", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "uint64", + "name": "major", + "type": "uint64" + }, + { + "internalType": "uint8", + "name": "minor", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "endpointVersion", + "type": "uint8" + } + ], + "stateMutability": "pure", + "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": "executable", + "outputs": [ + { + "internalType": "enum ExecutionState", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + } + ] +} \ No newline at end of file diff --git a/workers/abi/SendLibUln302.json b/offchain/abi/SendLibUln302.json similarity index 100% rename from workers/abi/SendLibUln302.json rename to offchain/abi/SendLibUln302.json diff --git a/workers/src/abi.rs b/offchain/src/abi.rs similarity index 57% rename from workers/src/abi.rs rename to offchain/src/abi.rs index b0170fa4..12735d49 100644 --- a/workers/src/abi.rs +++ b/offchain/src/abi.rs @@ -1,6 +1,5 @@ -//! Types create from the JSON ABI files. -//! -//! For example, to be able to decode the logs' data, or call contracts' methods. +//! Types from the JSON ABI files. For example, to be able to decode the logs' data, or call +//! contracts' methods. //! //! To obtain the corresponding ABI, there are two ways: //! - Manually downloading the ABI from the contract's source code (we use this one for now); @@ -24,18 +23,3 @@ sol!( L0V2EndpointAbi, "abi/L0V2Endpoint.json" ); - -//sol!( -// #[allow(missing_docs)] -// #[sol(abi)] -// #[derive(Debug, PartialEq, Eq)] -// struct Packet { -// uint64 nonce; -// uint32 src_eid; -// bytes32 sender; -// uint32 dst_eid; -// bytes32 receiver; -// bytes32 guid; -// bytes message; -// } -//); diff --git a/offchain/src/bin/dvn.rs b/offchain/src/bin/dvn.rs new file mode 100644 index 00000000..17fba905 --- /dev/null +++ b/offchain/src/bin/dvn.rs @@ -0,0 +1,22 @@ +//! Main off-chain workflow for Nuff DVN. + +use eyre::Result; +use offchain::workers::dvn::Dvn; +use tracing::level_filters::LevelFilter; +use tracing_subscriber::EnvFilter; + +#[tokio::main] +async fn main() -> Result<()> { + // Initialize tracing + tracing_subscriber::fmt() + .with_target(false) + .with_env_filter( + EnvFilter::builder() + .with_default_directive(LevelFilter::INFO.into()) + .from_env_lossy(), + ) + .init(); + + let mut dvn = Dvn::new_from_env()?; + dvn.listen().await +} diff --git a/workers/src/bin/executor.rs b/offchain/src/bin/executor.rs similarity index 82% rename from workers/src/bin/executor.rs rename to offchain/src/bin/executor.rs index 6b304fd1..9508c1ff 100644 --- a/workers/src/bin/executor.rs +++ b/offchain/src/bin/executor.rs @@ -1,7 +1,6 @@ +use offchain::{config, workers::executor::NFFLExecutor}; use tracing::level_filters::LevelFilter; use tracing_subscriber::EnvFilter; -use workers::config; -use workers::executor_def::NFFLExecutor; /// Executor is expected to work with low work rate, and we have a bonus /// from this observation - we don't need/want to care about concurrency control, @@ -18,7 +17,7 @@ async fn main() -> eyre::Result<()> { ) .init(); - let mut executor = NFFLExecutor::new(config::DVNConfig::load_from_env()?); + let mut executor = NFFLExecutor::new(config::WorkerConfig::load_from_env()?); executor.listen().await?; Ok(()) diff --git a/offchain/src/chain/connections.rs b/offchain/src/chain/connections.rs new file mode 100644 index 00000000..238ab734 --- /dev/null +++ b/offchain/src/chain/connections.rs @@ -0,0 +1,159 @@ +//! Utilities related to connection with a blockchain. + +use crate::{ + chain::{HttpProvider, LayerZeroEvent}, + config::WorkerConfig, +}; +use alloy::{ + eips::BlockNumberOrTag, + json_abi::JsonAbi, + providers::{Provider, ProviderBuilder, RootProvider, WsConnect}, + pubsub::{PubSubFrontend, SubscriptionStream}, + rpc::types::{Filter, Log}, +}; +use eyre::{eyre, OptionExt, Result}; +use std::path::PathBuf; + +/// Create the subscriptions for the DVN workflow. +pub async fn build_dvn_subscriptions( + config: &WorkerConfig, +) -> Result<( + RootProvider, + SubscriptionStream, + SubscriptionStream, +)> { + // Create the provider + let ws = WsConnect::new(config.source_ws_rpc_url.clone()); + let provider = ProviderBuilder::new().on_ws(ws).await?; + + // layerzero endpoint filter + let packet_filter = Filter::new() + .address(config.source_endpoint) + .event(LayerZeroEvent::PacketSent.as_ref()) + .from_block(BlockNumberOrTag::Latest); + + // messagelib endpoint filter + let fee_paid_filter = Filter::new() + .address(config.source_sendlib) + .event(LayerZeroEvent::DVNFeePaid.as_ref()) + .from_block(BlockNumberOrTag::Latest); + + // Subscribe to logs + let endpoint_sub = provider.subscribe_logs(&packet_filter).await?; + let sendlib_sub = provider.subscribe_logs(&fee_paid_filter).await?; + + // Create some streams from the subscriptions + let endpoint_stream = endpoint_sub.into_stream(); + let sendlib_stream = sendlib_sub.into_stream(); + + Ok((provider, endpoint_stream, sendlib_stream)) +} + +pub async fn build_executor_subscriptions( + config: &WorkerConfig, +) -> Result<( + RootProvider, + RootProvider, + SubscriptionStream, + SubscriptionStream, + SubscriptionStream, +)> { + // Create the source provider + let ws = WsConnect::new(&config.source_ws_rpc_url); + let source_provider = ProviderBuilder::new().on_ws(ws).await?; + // Create the target provider + let ws = WsConnect::new(&config.target_ws_rpc_url); + let target_provider = ProviderBuilder::new().on_ws(ws).await?; + + // PacketSent + let packet_sent_filter = Filter::new() + .address(config.source_endpoint) + .event(LayerZeroEvent::PacketSent.as_ref()) + .from_block(BlockNumberOrTag::Latest); + + let executor_fee_paid = Filter::new() + .address(config.source_sendlib) + .event(LayerZeroEvent::ExecutorFeePaid.as_ref()) + .from_block(BlockNumberOrTag::Latest); + + let packet_verified_filter = Filter::new() + .address(config.target_endpoint) + .event(LayerZeroEvent::PacketVerified.as_ref()) + .from_block(BlockNumberOrTag::Latest); + + let ps_stream = source_provider.subscribe_logs(&packet_sent_filter).await?.into_stream(); + let ef_stream = source_provider.subscribe_logs(&executor_fee_paid).await?.into_stream(); + let pv_stream = target_provider + .subscribe_logs(&packet_verified_filter) + .await? + .into_stream(); + + Ok((source_provider, target_provider, ps_stream, ef_stream, pv_stream)) +} + +/// Load the MessageLib ABI. The path must be relative to the project root. +pub fn get_abi_from_path(path: &str) -> Result { + let path_buf = PathBuf::from(path); + let artifact_path = project_root::get_project_root()?.join(path_buf); + // Get the SendLib ABI + let artifact = + std::fs::read(artifact_path).map_err(|e| eyre!("Cannot load config for offchain worker. Error: {:?}", e))?; + let json: serde_json::Value = serde_json::from_slice(&artifact)?; + // SAFETY: Assume `unwrap` is safe since the key has been harcoded + let abi_value = json.get("abi").ok_or_eyre("ABI not found in artifact")?; + let abi = serde_json::from_str(&abi_value.to_string())?; + Ok(abi) +} + +/// Construct an HTTP provider given the config. +pub fn get_http_provider(rpc_url: &str) -> Result { + let http_provider = ProviderBuilder::new().on_http(rpc_url.to_string().parse()?); + Ok(http_provider) +} + +#[cfg(test)] +mod tests { + use super::*; + use std::io::Write; + use tempfile::NamedTempFile; + + #[test] + fn test_expect_to_find_all_abis() { + get_abi_from_path("offchain/abi/ReceiveLibUln302.json").unwrap(); + get_abi_from_path("offchain/abi/SendLibUln302.json").unwrap(); + get_abi_from_path("offchain/abi/L0V2Endpoint.json").unwrap(); + } + + #[test] + fn test_get_abi_from_path() { + // Create a file inside of `env::temp_dir()`. + let mut temp_file = NamedTempFile::new_in(".").unwrap(); + + // Some mocked ABI info + let data = r#"{ + "abi": [ + { + "type": "function", + "name": "transfer", + "inputs": [ + { + "type": "address", + "name": "_to", + "internalType": "address" + }, + { + "type": "uint256", + "name": "_amount", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + } + ] + }"#; + writeln!(temp_file, "{}", data).unwrap(); + + get_abi_from_path(temp_file.path().to_str().unwrap()).unwrap(); + } +} diff --git a/offchain/src/chain/contracts.rs b/offchain/src/chain/contracts.rs new file mode 100644 index 00000000..65977076 --- /dev/null +++ b/offchain/src/chain/contracts.rs @@ -0,0 +1,278 @@ +//! Utilities for interacting with onchain contracts. + +use crate::{ + chain::{ContractInst, HttpProvider}, + data::packet_v1_codec::{guid, header, message, nonce, receiver, sender, src_eid}, +}; +use alloy::{ + contract::{ContractInstance, Interface}, + dyn_abi::DynSolValue, + json_abi::JsonAbi, + network::Ethereum, + primitives::{keccak256, Address, B256, U256}, + transports::http::{Client, Http}, +}; +use eyre::{eyre, OptionExt, Result}; +use tracing::{debug, error}; + +const MAX_RETRIES: u8 = 10; + +/// Create a contract instance from the ABI to interact with on-chain instance. +pub fn create_contract_instance(addr: Address, http_provider: HttpProvider, abi: JsonAbi) -> ContractInst { + let contract: ContractInstance, _, Ethereum> = + ContractInstance::new(addr, http_provider, Interface::new(abi)); + contract +} + +/// Get the address of the MessageLib on the destination chain +pub async fn get_messagelib_addr(contract: &ContractInst, eid: U256) -> Result
{ + // Call the `receiveLib` on the contract + let receive_library = contract + .function( + "getReceiveLibrary", + &[DynSolValue::Address(*contract.address()), DynSolValue::Uint(eid, 32)], + )? + .call() + .await?; + + match receive_library + .first() + .ok_or_eyre("ReceiveLibrary not found in contract")? + { + DynSolValue::Address(address) if address.len() == 20 => Ok(*address), + _ => { + error!("Failed to get a valid address"); + Err(eyre!("Failed to get a valid address")) + } + } +} + +/// Get the number of required confirmations defined in the ULN config. +/// +/// The function is defined as: +/// ```solidity +/// function getUlnConfig(address _oapp, uint32 _remoteEid) public view returns (UlnConfig memory rtnConfig); +/// ``` +/// +/// The value returned is a solidity `UlnConfig[]` with, at least, one value. +/// See: https://github.com/LayerZero-Labs/LayerZero-v2/blob/main/packages/layerzero-v2/evm/messagelib/contracts/uln/UlnBase.sol +pub async fn query_confirmations(contract: &ContractInst, eid: U256) -> Result { + let mut retries = 0; + + // Call the `getUlnConfig` function on the contract + let uln_config = loop { + if retries >= MAX_RETRIES { + break Err(eyre!("Max retries reached")); + } else { + retries += 1; + + match contract + .function( + "getUlnConfig", + &[DynSolValue::Address(*contract.address()), DynSolValue::Uint(eid, 32)], + )? + .call() + .await + { + Ok(config) => { + break Ok(config); + } + Err(e) => { + error!("Failed to get ULN config with error: {:?}. Retrying...", e); + continue; + } + } + } + }; + + match &uln_config?.first().ok_or_eyre("ULN config not found in contract")? { + DynSolValue::CustomStruct { tuple, .. } => tuple + .first() + .and_then(|t| t.as_uint().map(|u| u.0)) + .ok_or_eyre("Cannot parse response as `uint` from MessageLib"), + _ => { + error!("Failed to parse returned value from contract"); + Err(eyre!("Failed to parse returned value from contract")) + } + } +} + +/// Idempotent check to see if there's work to do for the DVN. +pub async fn query_already_verified( + contract: &ContractInst, + dvn_address: Address, + header_hash: &[u8], + payload_hash: &[u8], + required_confirmations: U256, +) -> Result { + // Call the `_verified` function on the 302 contract, to check if the DVN has already verified + // the packet. + debug!("Calling _verified on ReceiveLib"); + + let mut retries = 0; + + let verified = loop { + if retries >= MAX_RETRIES { + break Err(eyre!("Max retries reached")); + } else { + retries += 1; + + match contract + .function( + "_verified", + &[ + DynSolValue::Address(dvn_address), // DVN address + DynSolValue::Bytes(header_hash.to_vec()), // HeaderHash + DynSolValue::Bytes(payload_hash.to_vec()), // PayloadHash + DynSolValue::Uint(required_confirmations, 32), // confirmations + ], + )? + .call() + .await + { + Ok(verified) => { + break Ok(verified); + } + Err(e) => { + error!("Failed to get verified with error: {:?}. Retrying...", e); + continue; + } + } + } + }; + + match verified?.first() { + Some(DynSolValue::Bool(b)) => Ok(*b), + _ => { + error!("Failed to parse as bool the `_verified` response from ReceiveLib"); + Err(eyre!( + "Failed to parse as bool the `_verified` response from ReceiveLib" + )) + } + } +} + +/// Call the `verify` function on the contract. +pub async fn verify(contract: &ContractInst, packet_header: &[u8], payload: &[u8], confirmations: U256) -> Result<()> { + debug!("Calling `verify `on ReceiveLib"); + + // Create the hash of the payload + let payload_hash = keccak256(payload); + let mut retries = 0; + + // Call the `verified` function on the contract + loop { + if retries >= MAX_RETRIES { + break Err(eyre!("Max retries reached")); + } else { + retries += 1; + match contract + .function( + "verify", + &[ + DynSolValue::Bytes(packet_header.to_vec()), // PacketHeader + DynSolValue::FixedBytes(payload_hash, 32), // PayloadHash + DynSolValue::Uint(confirmations, 64), // Confirmations + //prepare_header(packet_header), // PacketHeader + ], + )? + .call() + .await + { + Ok(_) => { + break Ok(()); + } + Err(e) => { + error!("Failed to verify with error: {:?}. Retrying...", e); + tokio::time::sleep(std::time::Duration::from_millis(300)).await; + continue; + } + } + } + } +} + +/// Call the `commit` function on the contract. +pub async fn commit(contract: &ContractInst, packet_header: &[u8], payload: &[u8]) -> Result<()> { + debug!("Calling `commit `on ReceiveLib"); + + // Create the hash of the payload + let payload_hash = keccak256(payload); + let mut retries = 0; + + // Call the `verified` function on the contract + loop { + if retries >= MAX_RETRIES { + break Err(eyre!("Max retries reached")); + } else { + retries += 1; + match contract + .function( + "commitVerification", + &[ + DynSolValue::Bytes(packet_header.to_vec()), // PacketHeader + DynSolValue::FixedBytes(payload_hash, 32), // PayloadHash + ], + )? + .call() + .await + { + Ok(_) => { + break Ok(()); + } + Err(e) => { + error!("Failed to commit with error: {:?}. Retrying...", e); + tokio::time::sleep(std::time::Duration::from_millis(300)).await; + continue; + } + } + } + } +} + +/// If the state is `Executable`, your `Executor` should decode the packet's options +/// using the options.ts package and call the Endpoint's `lzReceive` function with +/// the packet information: +/// `endpoint.lzReceive(_origin, _receiver, _guid, _message, _extraData)` +pub async fn lz_receive(contract: &ContractInst, packet: &[u8]) -> Result<()> { + let guid = guid(packet); + let call_builder_result = contract.function( + "lzReceive", + &[ + prepare_header(header(packet)), + DynSolValue::Address(Address::from_slice(&receiver(packet)[0..20])), + DynSolValue::FixedBytes(B256::from_slice(guid.as_slice()), 32), + DynSolValue::Bytes(message(packet).to_vec()), + DynSolValue::Bytes(vec![]), + ], + ); + + if call_builder_result.is_err() { + error!("Failed to call lzReceive, because it doesn't exist in the contract/ABI."); + return Ok(()); + } + + call_builder_result.unwrap().call().await.map_err(|e| { + error!("Failed to call lzReceive for packet {:?}: {:?}", guid, e); + eyre!("lzReceive call failed: {}", e) + })?; + debug!("Successfully called lzReceive for packet {:?}", guid); + Ok(()) +} + +/// Converts `Origin` data structure from the received `PacketVerified` +/// to the `DynSolValue`, understandable by `alloy-rs`. +pub(crate) fn prepare_header(packet: &[u8]) -> DynSolValue { + const ORIGIN_STRUCT_NAME: &str = "Origin"; + const ORIGIN_PROPS: [&str; 3] = ["srcEid", "sender", "nonce"]; + + DynSolValue::CustomStruct { + name: String::from(ORIGIN_STRUCT_NAME), + prop_names: ORIGIN_PROPS.iter().map(|&s| String::from(s)).collect(), + tuple: vec![ + DynSolValue::Uint(U256::from(src_eid(packet)), 32), + DynSolValue::FixedBytes(B256::from_slice(sender(packet).as_ref()), 32), + DynSolValue::Uint(U256::from(nonce(packet)), 64), + ], + } +} diff --git a/offchain/src/chain/mod.rs b/offchain/src/chain/mod.rs new file mode 100644 index 00000000..578f7554 --- /dev/null +++ b/offchain/src/chain/mod.rs @@ -0,0 +1,38 @@ +//! Utilities for interacting with the blockchain. + +use alloy::{ + contract::ContractInstance, + network::Ethereum, + providers::RootProvider, + transports::http::{Client, Http}, +}; + +pub mod connections; +pub mod contracts; + +/// Alias for a contract instance in the Ethereum network. +pub type ContractInst = ContractInstance, RootProvider>, Ethereum>; + +/// Alias for an HTTP provider. +pub type HttpProvider = RootProvider>; + +/// Useful events for the DVN workflow. +pub enum LayerZeroEvent { + PacketSent, + DVNFeePaid, + ExecutorFeePaid, + PacketVerified, + PayloadVerified, +} + +impl AsRef for LayerZeroEvent { + fn as_ref(&self) -> &str { + match self { + Self::PacketSent => "PacketSent(bytes,bytes,address)", + Self::DVNFeePaid => "DVNFeePaid(address[],address[],uint256[])", + Self::ExecutorFeePaid => "ExecutorFeePaid(address,uint256)", + Self::PacketVerified => "PacketVerified((uint32,bytes32,uint64),address,bytes32)", + Self::PayloadVerified => "PayloadVerified(address,bytes,uint256,bytes32)", + } + } +} diff --git a/offchain/src/config.rs b/offchain/src/config.rs new file mode 100644 index 00000000..f2c23020 --- /dev/null +++ b/offchain/src/config.rs @@ -0,0 +1,75 @@ +//! Configuration for the DVN off-chain workflow. + +use alloy::primitives::Address; +use config::Config; +use eyre::{eyre, Result}; +use serde::Deserialize; +use std::path::PathBuf; + +const CONFIG_PATH: &str = "offchain/workers_config"; + +#[derive(Debug, Deserialize)] +pub struct WorkerConfig { + /// The Websocket RPC URL to connect to the Ethereum network for the source chain. + pub source_ws_rpc_url: String, + /// The HTTP RPC URL to connect to the Ethereum network for the source chain. + pub source_http_rpc_url: String, + /// The Websocket RPC URL to connect to the Ethereum network for the target chain. + pub target_ws_rpc_url: String, + /// The HTTP RPC URL to connect to the Ethereum network for the target chain. + pub target_http_rpc_url: String, + /// The LayerZero endpoint address on the source chain. + pub source_endpoint: Address, + /// The LayerZero endpoint address on the target chain. + pub target_endpoint: Address, + /// The SendLib Ultra Light Node 302 address on the source chain. + pub source_sendlib: Address, + /// The ReceiveLib Ultra Light Node 302 address on the target chain. + pub source_receivelib: Address, + /// The ReceiveLib Ultra Light Node 302 address on the target chain. + pub target_receivelib: Address, + /// The Ethereum network ID of the target chain. + pub target_network_eid: u64, + /// The address of the source DVN. Used to check when the DVN is assigned. + pub source_dvn: Address, + /// The address of the target DVN. Used to check when the DVN is assigned. + pub target_dvn: Address, + /// The address of the source Executor. Used to check when the Executor is assigned. + pub source_executor: Address, + /// The address of the target Executor. Used to check when the Executor is assigned. + pub target_executor: Address, + /// NFFL Aggregator URL + pub aggregator_url: String, +} + +impl WorkerConfig { + /// Load environment variables. + pub fn load_from_env() -> Result { + let path = project_root::get_project_root()?.join(PathBuf::from(CONFIG_PATH)); + let settings = Config::builder().add_source(config::File::from(path)).build()?; + settings + .try_deserialize::() + .map_err(|e| eyre!("Something happened with the worker's config: {:?}", e)) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn load_config_from_env() { + let _conf = WorkerConfig::load_from_env().unwrap(); + } + + #[test] + fn test_valid_config() { + let conf = WorkerConfig::load_from_env().unwrap(); + + assert!(conf.source_ws_rpc_url.starts_with("ws://") || conf.source_ws_rpc_url.starts_with("wss://")); + assert!(conf.source_http_rpc_url.starts_with("http://") || conf.source_http_rpc_url.starts_with("https://")); + assert!(conf.target_ws_rpc_url.starts_with("ws://") || conf.target_ws_rpc_url.starts_with("wss://")); + assert!(conf.target_http_rpc_url.starts_with("http://") || conf.target_http_rpc_url.starts_with("https://")); + assert!(conf.target_network_eid > 0); + } +} \ No newline at end of file diff --git a/workers/src/data/bytes_utils.rs b/offchain/src/data/bytes_utils.rs similarity index 100% rename from workers/src/data/bytes_utils.rs rename to offchain/src/data/bytes_utils.rs diff --git a/workers/src/data/mod.rs b/offchain/src/data/mod.rs similarity index 77% rename from workers/src/data/mod.rs rename to offchain/src/data/mod.rs index fd9b7559..e5654817 100644 --- a/workers/src/data/mod.rs +++ b/offchain/src/data/mod.rs @@ -1,3 +1,2 @@ pub mod bytes_utils; -pub mod dvn; pub mod packet_v1_codec; diff --git a/workers/src/data/packet_v1_codec.rs b/offchain/src/data/packet_v1_codec.rs similarity index 100% rename from workers/src/data/packet_v1_codec.rs rename to offchain/src/data/packet_v1_codec.rs diff --git a/offchain/src/lib.rs b/offchain/src/lib.rs new file mode 100644 index 00000000..954a0d45 --- /dev/null +++ b/offchain/src/lib.rs @@ -0,0 +1,8 @@ +//! Tools to build offchain offchain for the LayerZero protocol. + +pub mod abi; +pub mod chain; +pub mod config; +pub mod data; +pub mod verifier; +pub mod workers; diff --git a/workers/src/verifier.rs b/offchain/src/verifier.rs similarity index 98% rename from workers/src/verifier.rs rename to offchain/src/verifier.rs index 79982f24..784610c2 100644 --- a/workers/src/verifier.rs +++ b/offchain/src/verifier.rs @@ -1,4 +1,4 @@ -use crate::config::DVNConfig; +use crate::config::WorkerConfig; use alloy::eips::BlockNumberOrTag; use alloy::network::Ethereum; use alloy::primitives::B256; @@ -47,8 +47,8 @@ impl NFFLVerifier { }) } - pub async fn new_from_config(cfg: &DVNConfig) -> eyre::Result { - Self::new(&cfg.aggregator_url, &cfg.http_rpc_url, cfg.network_eid).await + pub async fn new_from_config(cfg: &WorkerConfig) -> eyre::Result { + Self::new(&cfg.aggregator_url, &cfg.source_http_rpc_url, cfg.target_network_eid).await } /// Verifies the state root of a block. In case any request future diff --git a/offchain/src/workers/dvn.rs b/offchain/src/workers/dvn.rs new file mode 100644 index 00000000..d07f732a --- /dev/null +++ b/offchain/src/workers/dvn.rs @@ -0,0 +1,256 @@ +use crate::{ + abi::{L0V2EndpointAbi::PacketSent, SendLibraryAbi::DVNFeePaid}, + chain::{ + connections::{build_dvn_subscriptions, get_abi_from_path, get_http_provider}, + contracts::{commit, create_contract_instance, query_confirmations, verify}, + ContractInst, + }, + config::WorkerConfig, + data::packet_v1_codec::{header, message}, + verifier::NFFLVerifier, +}; +use alloy::{ + primitives::{keccak256, B256, U256}, + rpc::types::Log, +}; +use eyre::{eyre, Result}; +use futures::StreamExt; +use std::collections::VecDeque; +use tracing::{debug, error, info}; + +const RECEIVELIB_ABI_PATH: &str = "offchain/abi/ReceiveLibUln302.json"; + +/// Entity in charge of running the DVN workflow. +pub struct Dvn { + pub config: WorkerConfig, + pub packet_queue: VecDeque, + pub target_receivelib: Option, + pub verifier: Option, +} + +impl Dvn { + /// Create a new DVN instance providing the configuration. + pub fn new(config: WorkerConfig) -> Self { + Self { + config, + packet_queue: VecDeque::new(), + target_receivelib: None, + verifier: None, + } + } + + /// Create a new DVN instance from the environment variables. + pub fn new_from_env() -> Result { + let conf = WorkerConfig::load_from_env()?; + Ok(Dvn::new(conf)) + } + + /// Listen to the corresponding events coming from the LayerZeroV2 contract and the SendLib + /// contract. + /// + /// The worflow pushes the received packets into the queue, which will then be verified if the + /// DVN fee is paid and thus assigned to its verification (otherwise, they will be dropped). + /// It is assumed that the packets and the fee-paid events arrive in the correct order (first + /// the packet to be verified, then the fee-paid event). + pub async fn listen(&mut self) -> Result<()> { + // Create the WS subscriptions for listening to the events. + let (_provider, mut endpoint_stream, mut sendlib_stream) = build_dvn_subscriptions(&self.config).await?; + self.target_receivelib = Some(self.create_receivelib_contract()?); + + info!("Configured DVN: {:?}", self.config.source_dvn); + info!("Listening to chain events..."); + + loop { + debug!("Queue with size: {:?}", self.packet_queue.len()); + tokio::select! { + // From the LayerZeroV2 Endpoint, the event `PacketSent`, which contains the message to be sent. + Some(log) = endpoint_stream.next() => { + if let Err(e) = self.endpoint_log_logic(&log) { + error!("Error processing Endpoint log. Error: {:?}", e); + } + }, + // From the SendLib, the event which triggers the verification: `DVNFeePaid`. + Some(log) = sendlib_stream.next() => { + if let Err(e) = self.sendlib_log_logic(&log).await { + error!("Error processing SendLib log. Error: {:?}", e); + } + }, + } + } + } + + /// Run the workflow when receiving a [`Log`] from the LayerZero endpoint. + /// + /// Store the packet at the end of the queue. + fn endpoint_log_logic(&mut self, log: &Log) -> Result<()> { + log.log_decode::().map_or_else( + |e| { + error!("Received a `PacketSent` event but failed to decode it: {:?}", e); + Err(eyre!(e)) + }, + |inner_log| { + self.packet_queue.push_back(inner_log.data().clone()); + debug!("Received packet added to queue."); + Ok(()) + }, + ) + } + + /// Run the worflow when receiving a [`Log`] from the SendLib. + /// + /// If the DVN is assigned, poco the packet from the queue (they are pushed to the back when + /// received, and popped from the front when processing them). + async fn sendlib_log_logic(&mut self, log: &Log) -> Result<()> { + match log.log_decode::() { + Err(e) => { + error!("Received a `DVNFeePaid` event but failed to decode it: {:?}", e); + Err(eyre!(e)) + } + Ok(inner_log) if inner_log.inner.requiredDVNs.contains(&self.config.source_dvn) => { + info!("DVN assigned. Starting verification process..."); + + // Get the stored packet. + let packet = self.packet_queue.pop_front().ok_or_else(|| { + error!("No packet stored to verify."); + eyre!("No packet stored to verify.") + })?; + + // Query the number of confirmations. + let required_confirmations = self.get_required_confirmations().await?; + + // Check if the info from the payload could have been extracted. + let header = self.get_header(&packet); + let _header_hash = self.get_header_hash(&packet); + let message_hash = self.get_message_hash(&packet); + + // FIXME: some contracts don't have `_verified` method, work around this + // + //let already_verified = query_already_verified( + // self.receivelib_contract.as_ref().ok_or_eyre("No ReceiveLib contract")?, + // self.config.source_dvn, + // header_hash.as_ref(), + // message_hash.as_ref(), + // required_confirmations, + //) + //.await?; + + // Verify the the message.. + //if !already_verified { + self.verify_message(log, message_hash, required_confirmations, &header) + .await?; + //} + + // NOTE: in the DVN docs, it's not said to commit the verification, somewhere + // else it's mentioned to do it by "any address". + // + // Commit the verification to the ReceiveLib contract. + //self.commit_verification(&header, message_hash).await?; + + info!("Verification process completed successfully."); + Ok(()) + } + Ok(_) => { + // Remove the packet from the queue, since we are not assigned to verify it. + debug!("Received `DVNFeePaid` event but configured DVN is not included. Dropping stored packet."); + self.packet_queue.pop_front(); + Ok(()) + } + } + } + + #[allow(dead_code)] // not used for now, might be necessary + /// Commit the verification to the ReceiveLib contract. + async fn commit_verification(&mut self, header: &[u8], message_hash: B256) -> Result<()> { + if let Some(contract) = &self.target_receivelib { + commit(contract, header, message_hash.as_ref()).await + } else { + error!("Cannot commit verification. Missing `ReceiveLib` contract"); + Err(eyre!("Cannot commit verification. Missing `ReceiveLib` contract")) + } + } + + /// Get the required confirmations from the ReceiveLib contract. + async fn get_required_confirmations(&mut self) -> Result { + // Check if there's a receive lib + let Some(receive_lib) = &self.target_receivelib else { + error!("No `ReceiveLib` contract present in worker to query confirmations"); + return Err(eyre!( + "No `ReceiveLib` contract present in worker to query confirmations" + )); + }; + + // Query how many confirmations are required. + let remote_eid = U256::from(self.config.target_network_eid); + + // Query the confirmations from the receive lib contract. + match query_confirmations(receive_lib, remote_eid).await { + Ok(confirmations) => Ok(confirmations), + Err(e) => { + error!("Failed to query confirmations. Error: {:?}", e); + Err(eyre!(e)) + } + } + } + + /// Verify the message by calling the `verify` function on the target chain's ReceiveLib contract. + pub(crate) async fn verify_message( + &mut self, + log: &Log, + message_hash: B256, + required_confirmations: U256, + header: &[u8], + ) -> Result<()> { + debug!("Packet NOT verified. Calling verification."); + + let Some(_block_height) = log.block_number else { + error!("Block number is `None`, can't verify packet."); + return Err(eyre!("Block number is `None`, can't verify packet.")); + }; + + // FIXME: for now, just verify everything. Uncomment when everything else works + // + //if let Some(verifier) = self.verifier.as_ref() { + // if let Err(report) = verifier.verify(block_height).await { + // error!("Failed to verify the state root. Error: {:?}", report); + // return; + // } else { + // info!("State root verified successfully."); + // } + //} else { + // error!("Verifier not present") + //} + + if let Some(contract) = &self.target_receivelib { + verify(contract, header, message_hash.as_ref(), required_confirmations).await + } else { + error!("Cannot verify packet. Missing `ReceiveLib` contract"); + Err(eyre!("Cannot verify packet. Missing `ReceiveLib` contract")) + } + } + + /// Create a handle to interact with the ReceiveLib contract in the target chain. + pub fn create_receivelib_contract(&self) -> Result { + // Create an HTTP provider to call the target ULN contract + let http_provider = get_http_provider(&self.config.target_http_rpc_url)?; + // Get the relevant contract ABI, and create contract + let abi = get_abi_from_path(RECEIVELIB_ABI_PATH)?; + // Create the contradt instance + let contract = create_contract_instance(self.config.target_receivelib, http_provider, abi); + Ok(contract) + } + + /// Extract the header from the packet. + pub fn get_header(&self, packet: &PacketSent) -> Vec { + header(packet.encodedPayload.as_ref()).to_vec() + } + + /// Get the hash of the packet's header. + pub fn get_header_hash(&self, packet: &PacketSent) -> B256 { + keccak256(header(packet.encodedPayload.as_ref())) + } + + /// Get the hash of the packet's message. + pub fn get_message_hash(&self, packet: &PacketSent) -> B256 { + keccak256(message(packet.encodedPayload.as_ref())) + } +} diff --git a/offchain/src/workers/executor.rs b/offchain/src/workers/executor.rs new file mode 100644 index 00000000..8b255902 --- /dev/null +++ b/offchain/src/workers/executor.rs @@ -0,0 +1,200 @@ +use crate::{ + abi::{ + L0V2EndpointAbi::{PacketSent, PacketVerified}, + SendLibraryAbi::ExecutorFeePaid, + }, + chain::{ + connections::{build_executor_subscriptions, get_abi_from_path, get_http_provider}, + contracts::{create_contract_instance, lz_receive, prepare_header}, + ContractInst, + }, + config::WorkerConfig, +}; +use alloy::{dyn_abi::DynSolValue, primitives::U256}; +use eyre::Result; +use futures::StreamExt; +use std::{collections::VecDeque, time::Duration}; +use tokio::{sync::mpsc, time::sleep}; +use tracing::{debug, error, warn}; + +#[derive(Debug, Clone, Copy, PartialEq)] +pub enum ExecutionState { + NotExecutable = 0, + VerifiedNotExecutable = 1, + Executable = 2, + Executed = 3, +} + +#[derive(Debug, Clone, PartialEq)] +pub enum ExecutorState { + /// Initialized but not waiting for anything. + Created, + /// Listening for a `PacketSent` event to be executed. + WaitingPacket, + /// Listening for a `ExecutorFeePaid` event assigning the executor. + WaitingAssignation, + /// Listening for a `PacketVerified` event that triggers execution. + WaitingVerification, + /// Finished flow. Will resume listening again. + Finish, +} + +// NOTE: [IMPROVEMENT]: could also rewrite the executor with a BundleCreator, that packs the info from the events and then checks at the streams if there's more info to process the bundles. + +pub struct NFFLExecutor { + config: WorkerConfig, + finish: bool, +} + +impl NFFLExecutor { + pub(crate) const MAX_EXECUTE_ATTEMPTS: usize = 3; + + pub fn new(config: WorkerConfig) -> Self { + NFFLExecutor { config, finish: false } + } + + pub fn finish(&mut self) { + self.finish = true; + } + + pub async fn listen(&mut self) -> Result<()> { + let (_sp, _tp, mut ps_stream, mut ef_stream, mut pv_stream) = + build_executor_subscriptions(&self.config).await?; + + let http_provider = get_http_provider(&self.config.target_http_rpc_url)?; + let l0_abi = get_abi_from_path("offchain/abi/L0V2Endpoint.json")?; + // Create a contract instance. + + // Verified packet handler task + let l0_addr = self.config.target_endpoint; + let (tx, mut rx) = mpsc::channel::<(PacketSent, PacketVerified)>(4); + tokio::spawn(async move { + let contract = create_contract_instance(l0_addr, http_provider, l0_abi); + while let Some((packet_sent, packet_verified)) = rx.recv().await { + debug!("Handler received PacketSent and PacketVerified"); + let _ = Self::handle_verified_packet(&contract, packet_sent, packet_verified).await; + } + }); + + let mut packet_queue: VecDeque = VecDeque::new(); + + // Network I/O handler + loop { + debug!("Iteration started, queue size {:?}", packet_queue.len()); + tokio::select! { + Some(log) = ps_stream.next() => { + match log.log_decode::() { + Ok(packet_log) => { + debug!("PacketSent received"); + packet_queue.push_back(packet_log.data().clone()); + }, + Err(e) => { error!("Failed to decode PacketSent event: {:?}", e);} + } + } + Some(log) = ef_stream.next() => { + match log.log_decode::() { + Ok(executor_fee_log) => { + debug!("ExecutorFeePaid received"); + if packet_queue.is_empty() { + continue; + } + + debug!("{:?} ~ {:?}", executor_fee_log.data().executor, &self.config.target_executor); + // if !executor_fee_log.data().executor.eq(&self.config.executor) { + // packet_queue.pop_front(); + //// self.packet_queue.clear(); + // continue; + // } + }, + Err(e) => { error!("Failed to decode ExecutorFeePaid event: {:?}", e);} + } + }, + Some(log) = pv_stream.next() => { + match log.log_decode::() { + Ok(inner_log) => { + if !packet_queue.is_empty() { + debug!("PacketSent and PacketVerified sent to handler"); + tx.send((packet_queue.pop_front().unwrap(), inner_log.data().clone())).await?; + } else { + warn!("PacketVerified event {:?} arrived for non-handled PacketSent", inner_log.log_index); + } + }, + Err(e) => { error!("Failed to decode PacketVerified event: {:?}", e);} + } + }, + } + if self.finish { + break; + } + } + Ok(()) + } + + pub async fn handle_verified_packet( + contract: &ContractInst, + packet_sent: PacketSent, + packet_verified: PacketVerified, + ) -> Result<()> { + // Despite being described with other arguments, the only real implementation of + // `executable` function is in the contract located here: https://shorturl.at/4H6Yz + // function executable(Origin memory _origin, address _receiver) returns (ExecutionState) + let call_builder = contract.function( + "executable", + &[ + prepare_header(&packet_sent.encodedPayload[..]), + DynSolValue::Address(packet_verified.receiver), + ], + )?; + + let mut retry_count = 0; + // status `Executable` is represented by the integer 2 in the enum. + // To read more: https://tinyurl.com/zur3btzs (line 9) + let not_executable = DynSolValue::Uint(U256::from(ExecutionState::NotExecutable as u8), 8); + let verified_not_executable = DynSolValue::Uint(U256::from(ExecutionState::VerifiedNotExecutable as u8), 8); + let executable = DynSolValue::Uint(U256::from(ExecutionState::Executable as u8), 8); + let executed = DynSolValue::Uint(U256::from(ExecutionState::Executed as u8), 8); + loop { + debug!("Attempt #{retry_count} to call 'executable'"); + if retry_count == Self::MAX_EXECUTE_ATTEMPTS { + error!("Maximum retries reached while waiting for `Executable` state."); + break; + } + + match call_builder.call().await { + Ok(call_result) => { + debug!("> {:?}", call_result); + if call_result.len() != 1 { + error!("`executable` function call returned invalid response."); + break; + } + debug!(">> {:?}", call_result[0]); + // Note: why not pattern matching here? fn calls are not allowed in patterns + if call_result[0].eq(¬_executable) || call_result[0].eq(&verified_not_executable) { + debug!("State: NotExecutable or VerifiedNotExecutable, await commits/verifications"); + sleep(Duration::from_secs(1)).await; + retry_count += 1; + continue; + } else if call_result[0].eq(&executable) { + debug!("State: Executable, fire and forget `lzReceive`"); + lz_receive(contract, &packet_sent.encodedPayload[..]).await?; + break; + } else if call_result[0].eq(&executed) { + debug!("State: Executed, free the executor"); + break; + } else { + error!("Unknown state for `executable` call"); + break; + } + } + Err(e) => { + warn!("Failed to call `executable` function: {:?}", e); + sleep(Duration::from_secs(1)).await; + retry_count += 1; + continue; + } + } + } + Ok(()) + } +} + diff --git a/offchain/src/workers/mod.rs b/offchain/src/workers/mod.rs new file mode 100644 index 00000000..f76b8db5 --- /dev/null +++ b/offchain/src/workers/mod.rs @@ -0,0 +1,2 @@ +pub mod dvn; +pub mod executor; diff --git a/offchain/tests/executor.rs b/offchain/tests/executor.rs new file mode 100644 index 00000000..dd5a37b5 --- /dev/null +++ b/offchain/tests/executor.rs @@ -0,0 +1,106 @@ +use alloy::{ + primitives::{address, Address, Bytes, FixedBytes}, + providers::ProviderBuilder, +}; +use axum::{routing::post, Json, Router}; +use offchain::{ + abi::L0V2EndpointAbi::{Origin, PacketSent, PacketVerified}, + chain::{connections::get_abi_from_path, contracts::create_contract_instance, ContractInst}, + workers::executor::NFFLExecutor, +}; +use std::{ + sync::atomic::{AtomicI32, Ordering}, + sync::Arc, +}; +use tokio::task::JoinHandle; +use tracing::{debug, level_filters::LevelFilter}; +use tracing_subscriber::EnvFilter; + +#[derive(serde::Serialize, serde::Deserialize, Debug)] +struct EthCallRequest { + method: String, + params: Vec, + id: u32, + jsonrpc: String, +} + +#[derive(serde::Serialize, serde::Deserialize, Debug)] +struct EthCallResponse { + result: String, + id: u32, + jsonrpc: String, +} + +#[tokio::test] +async fn test_handle_verified_packet_success() -> eyre::Result<()> { + // Initialize tracing + tracing_subscriber::fmt() + .with_target(true) + .with_env_filter( + EnvFilter::builder() + .with_default_directive(LevelFilter::DEBUG.into()) + .from_env_lossy(), + ) + .init(); + + let counter: Arc = Arc::new(AtomicI32::new(0)); + + let packet_sent = PacketSent { + encodedPayload: Bytes::from(&[1; 256]), + options: Bytes::from(&[1; 32]), + sendLibrary: Address::from_slice(&[2; 20]), + }; + + let verified_packet = PacketVerified { + origin: Origin { + srcEid: 1, + sender: FixedBytes::from(&[1; 32]), + nonce: 101010, + }, + receiver: Address::from_slice(&[1; 20]), + payloadHash: FixedBytes::from(&[2; 32]), + }; + + let _join_handle = prepare_server(counter.clone()).await; + let contract = setup_contract().await?; + + NFFLExecutor::handle_verified_packet(&contract, packet_sent, verified_packet).await?; + + assert_eq!(counter.load(Ordering::Acquire), 2); + Ok(()) +} + +async fn prepare_server(counter: Arc) -> JoinHandle<()> { + const SERVER_ADDRESS_SHORT: &str = "127.0.0.1:8081"; + + // Define the handler for the POST request. + let app = Router::new().route( + "/", + post(|| async move { + debug!("Server : POST request accepted"); + counter.fetch_add(1, Ordering::Release); + Json(EthCallResponse { + result: "0x0000000000000000000000000000000000000000000000000000000000000002".to_string(), + id: 1, + jsonrpc: "2.0".to_string(), + }) + }), + ); + // Spawn the server on a background task. + let listener = tokio::net::TcpListener::bind(SERVER_ADDRESS_SHORT).await.unwrap(); + + tokio::spawn(async move { axum::serve(listener, app).await.unwrap() }) +} + +async fn setup_contract() -> eyre::Result { + const SERVER_ADDRESS: &str = "http://127.0.0.1:8081"; + + let http_provider = ProviderBuilder::new().on_http(SERVER_ADDRESS.parse()?); + let l0_abi = get_abi_from_path("offchain/abi/L0V2Endpoint.json")?; + + create_contract_instance( + address!("d8da6bf26964af9d7eed9e03e53415d37aa96045"), + http_provider, + l0_abi, + ) +} \ No newline at end of file diff --git a/offchain/workers_config.toml b/offchain/workers_config.toml new file mode 100644 index 00000000..5ba1cdc8 --- /dev/null +++ b/offchain/workers_config.toml @@ -0,0 +1,19 @@ +AGGREGATOR_URL = "127.0.0.1:9091" + +## Holesky -> Arbitrum Sepolia +SOURCE_WS_RPC_URL = "wss://holesky.infura.io/ws/v3/a7d4a3dd6f774049bce5d61651549421" +SOURCE_HTTP_RPC_URL = "https://holesky.infura.io/v3/a7d4a3dd6f774049bce5d61651549421" +TARGET_WS_RPC_URL = "wss://arbitrum-sepolia.infura.io/ws/v3/a7d4a3dd6f774049bce5d61651549421" +TARGET_HTTP_RPC_URL = "https://arbitrum-sepolia.infura.io/v3/a7d4a3dd6f774049bce5d61651549421" +SOURCE_ENDPOINT = "0x6EDCE65403992e310A62460808c4b910D972f10f" +SOURCE_SENDLIB = "0x21F33EcF7F65D61f77e554B4B4380829908cD076" +TARGET_ENDPOINT = "0x6EDCE65403992e310A62460808c4b910D972f10f" +SOURCE_RECEIVELIB = "0xbAe52D605770aD2f0D17533ce56D146c7C964A0d" +TARGET_RECEIVELIB = "0x75Db67CDab2824970131D5aa9CECfC9F69c69636" +TARGET_NETWORK_EID = 40231 +SOURCE_DVN = "0xbe4bad49fe4c887f1ba0adf5287ab2408caad8cf" +TARGET_DVN = "0x8b1b58883d8a0fdde8cedea4520483e20578c5df" +SOURCE_EXECUTOR = "0xBc0C24E6f24eC2F1fd7E859B8322A1277F80aaD5" +TARGET_EXECUTOR = "0x31CAe3B7fB82d847621859fb1585353c5720660D" # old 0x5Df3a1cEbBD9c8BA7F8dF51Fd632A9aef8308897 +# SOURCE_EXECUTOR = "0x8bdc18bf33fd8643d70caccb684251e2a80130b2" +# TARGET_EXECUTOR = "0x77981c5ab32db61c2c67cbff8a3eae12c99671e3" diff --git a/tests/e2e/testing_oapp/.env.example b/tests/e2e/testing_oapp/.env.example new file mode 100644 index 00000000..197ba1d6 --- /dev/null +++ b/tests/e2e/testing_oapp/.env.example @@ -0,0 +1,15 @@ +# .-.-. .-.-. .-.-. .-.-. .-.-. .-.-. .-.-. .-.- +# / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \ +# `-' `-`-' `-`-' `-`-' `-`-' `-`-' `-`-' `-`-' +# +# Example environment configuration +# +# .-.-. .-.-. .-.-. .-.-. .-.-. .-.-. .-.-. .-.- +# / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \ +# `-' `-`-' `-`-' `-`-' `-`-' `-`-' `-`-' `-`-' + +# By default, the examples support both mnemonic-based and private key-based authentication +# +# You don't need to set both of these values, just pick the one that you prefer and set that one +MNEMONIC= +PRIVATE_KEY= \ No newline at end of file diff --git a/tests/e2e/testing_oapp/.eslintignore b/tests/e2e/testing_oapp/.eslintignore new file mode 100644 index 00000000..ee9f768f --- /dev/null +++ b/tests/e2e/testing_oapp/.eslintignore @@ -0,0 +1,10 @@ +artifacts +cache +dist +node_modules +out +*.log +*.sol +*.yaml +*.lock +package-lock.json \ No newline at end of file diff --git a/tests/e2e/testing_oapp/.eslintrc.js b/tests/e2e/testing_oapp/.eslintrc.js new file mode 100644 index 00000000..f0ea891f --- /dev/null +++ b/tests/e2e/testing_oapp/.eslintrc.js @@ -0,0 +1,10 @@ +require('@rushstack/eslint-patch/modern-module-resolution'); + +module.exports = { + extends: ['@layerzerolabs/eslint-config-next/recommended'], + rules: { + // @layerzerolabs/eslint-config-next defines rules for turborepo-based projects + // that are not relevant for this particular project + 'turbo/no-undeclared-env-vars': 'off', + }, +}; diff --git a/tests/e2e/testing_oapp/.gitignore b/tests/e2e/testing_oapp/.gitignore new file mode 100644 index 00000000..09d70f7b --- /dev/null +++ b/tests/e2e/testing_oapp/.gitignore @@ -0,0 +1,23 @@ +node_modules +.env +coverage +coverage.json +typechain +typechain-types + +# Hardhat files +cache +artifacts + +# LayerZero specific files +.layerzero + +# foundry test compilation files +out + +# pnpm +pnpm-error.log + +# Editor and OS files +.DS_Store +.idea diff --git a/tests/e2e/testing_oapp/.nvmrc b/tests/e2e/testing_oapp/.nvmrc new file mode 100644 index 00000000..b714151e --- /dev/null +++ b/tests/e2e/testing_oapp/.nvmrc @@ -0,0 +1 @@ +v18.18.0 \ No newline at end of file diff --git a/tests/e2e/testing_oapp/.prettierignore b/tests/e2e/testing_oapp/.prettierignore new file mode 100644 index 00000000..6e8232f5 --- /dev/null +++ b/tests/e2e/testing_oapp/.prettierignore @@ -0,0 +1,10 @@ +artifacts/ +cache/ +dist/ +node_modules/ +out/ +*.log +*ignore +*.yaml +*.lock +package-lock.json \ No newline at end of file diff --git a/tests/e2e/testing_oapp/.prettierrc.js b/tests/e2e/testing_oapp/.prettierrc.js new file mode 100644 index 00000000..6f55b401 --- /dev/null +++ b/tests/e2e/testing_oapp/.prettierrc.js @@ -0,0 +1,3 @@ +module.exports = { + ...require('@layerzerolabs/prettier-config-next'), +}; diff --git a/tests/e2e/testing_oapp/Makefile b/tests/e2e/testing_oapp/Makefile new file mode 100644 index 00000000..eae4fa70 --- /dev/null +++ b/tests/e2e/testing_oapp/Makefile @@ -0,0 +1,33 @@ +.PHONY: deploy wire e2e e2e-all e2e-simple e2e-simple-all + +deploy: + npx hardhat lz:deploy + @echo "================================================================" + @echo "=== Deployed the OApps for testing (both regular and simple) ===" + @echo "================================================================" + +wire: + npx hardhat lz:oapp:wire --oapp-config layerzero.config.ts + @echo "===================================" + @echo "=== Wired the OApps for testing ===" + @echo "===================================" + +wire-simple: + npx hardhat lz:oapp:wire --oapp-config layerzerosimple.config.ts + @echo "=============================================" + @echo "=== Wired the (simple) OApps for testing ===" + @echo "=============================================" + +e2e: + npx hardhat e2e --source holesky --target arbitrum-sepolia + +e2e-all: e2e + npx hardhat e2e --source holesky --target polygon-amoy + npx hardhat e2e --source arbitrum-sepolia --target polygon-amoy + +e2e-simple: + npx hardhat e2e:simple --source holesky --target arbitrum-sepolia + +e2e-simple-all: e2e-simple + npx hardhat e2e:simple --source holesky --target polygon-amoy + npx hardhat e2e:simple --source arbitrum-sepolia --target polygon-amoy diff --git a/tests/e2e/testing_oapp/README.md b/tests/e2e/testing_oapp/README.md new file mode 100644 index 00000000..b4c2fc5a --- /dev/null +++ b/tests/e2e/testing_oapp/README.md @@ -0,0 +1,108 @@ +

+ + LayerZero + +

+ +

+ Homepage | Docs | Developers +

+ +

OApp Example

+ +

+ Quickstart | Configuration | Message Execution Options | Endpoint Addresses +

+ +

Template project for getting started with LayerZero's OApp contract development.

+ +## 1) Developing Contracts + +#### Installing dependencies + +We recommend using `pnpm` as a package manager (but you can of course use a package manager of your choice): + +```bash +pnpm install +``` + +#### Compiling your contracts + +This project supports both `hardhat` and `forge` compilation. By default, the `compile` command will execute both: + +```bash +pnpm compile +``` + +If you prefer one over the other, you can use the tooling-specific commands: + +```bash +pnpm compile:forge +pnpm compile:hardhat +``` + +Or adjust the `package.json` to for example remove `forge` build: + +```diff +- "compile": "$npm_execpath run compile:forge && $npm_execpath run compile:hardhat", +- "compile:forge": "forge build", +- "compile:hardhat": "hardhat compile", ++ "compile": "hardhat compile" +``` + +#### Running tests + +Similarly to the contract compilation, we support both `hardhat` and `forge` tests. By default, the `test` command will execute both: + +```bash +pnpm test +``` + +If you prefer one over the other, you can use the tooling-specific commands: + +```bash +pnpm test:forge +pnpm test:hardhat +``` + +Or adjust the `package.json` to for example remove `hardhat` tests: + +```diff +- "test": "$npm_execpath test:forge && $npm_execpath test:hardhat", +- "test:forge": "forge test", +- "test:hardhat": "$npm_execpath hardhat test" ++ "test": "forge test" +``` + +## 2) Deploying Contracts + +Set up deployer wallet/account: + +- Rename `.env.example` -> `.env` +- Choose your preferred means of setting up your deployer wallet/account: + +``` +MNEMONIC="test test test test test test test test test test test junk" +or... +PRIVATE_KEY="0xabc...def" +``` + +To deploy your contracts to your desired blockchains, run the following command in your project's folder: + +```bash +npx hardhat lz:deploy +``` + +More information about available CLI arguments can be found using the `--help` flag: + +```bash +npx hardhat lz:deploy --help +``` + +By following these steps, you can focus more on creating innovative omnichain solutions and less on the complexities of cross-chain communication. + +

+ +

+ Join our community on Discord | Follow us on Twitter +

diff --git a/tests/e2e/testing_oapp/contracts/SimpleTestingOApp.sol b/tests/e2e/testing_oapp/contracts/SimpleTestingOApp.sol new file mode 100644 index 00000000..c6c9e6f9 --- /dev/null +++ b/tests/e2e/testing_oapp/contracts/SimpleTestingOApp.sol @@ -0,0 +1,70 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.22; + +import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; +import { OApp, MessagingFee, Origin } from "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol"; +import { MessagingReceipt } from "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol"; + +contract SimpleTestingOApp is OApp { + constructor(address _endpoint, address _delegate) OApp(_endpoint, _delegate) Ownable(_delegate) {} + + uint public data = 0; + + /** + * @notice Sends a message from the source chain to a destination chain. + * @param _dstEid The endpoint ID of the destination chain. + * @param _message The message string to be sent. + * @param _options Additional options for message execution. + * @dev Encodes the message as bytes and sends it using the `_lzSend` internal function. + * @return receipt A `MessagingReceipt` struct containing details of the message sent. + */ + function send( + uint32 _dstEid, + string memory _message, + bytes calldata _options + ) external payable returns (MessagingReceipt memory receipt) { + bytes memory _payload = abi.encode(_message); + receipt = _lzSend(_dstEid, _payload, _options, MessagingFee(msg.value, 0), payable(msg.sender)); + } + + /** + * @notice Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token. + * @param _dstEid Destination chain's endpoint ID. + * @param _message The message. + * @param _options Message execution options (e.g., for sending gas to destination). + * @param _payInLzToken Whether to return fee in ZRO token. + * @return fee A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token. + */ + function quote( + uint32 _dstEid, + string memory _message, + bytes memory _options, + bool _payInLzToken + ) public view returns (MessagingFee memory fee) { + bytes memory payload = abi.encode(_message); + fee = _quote(_dstEid, payload, _options, _payInLzToken); + } + + /** + * @dev Internal function override to handle incoming messages from another chain. + * @dev _origin A struct containing information about the message sender. + * @dev _guid A unique global packet identifier for the message. + * @param payload The encoded message payload being received. + * + * @dev The following params are unused in the current implementation of the OApp. + * @dev _executor The address of the Executor responsible for processing the message. + * @dev _extraData Arbitrary data appended by the Executor to the message. + * + * Decodes the received payload and processes it as per the business logic defined in the function. + */ + function _lzReceive( + Origin calldata /*_origin*/, + bytes32 /*_guid*/, + bytes calldata payload, + address /*_executor*/, + bytes calldata /*_extraData*/ + ) internal override { + data = abi.decode(payload, (uint)); + } +} diff --git a/tests/e2e/testing_oapp/contracts/TestingOApp.sol b/tests/e2e/testing_oapp/contracts/TestingOApp.sol new file mode 100644 index 00000000..67bf7116 --- /dev/null +++ b/tests/e2e/testing_oapp/contracts/TestingOApp.sol @@ -0,0 +1,70 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.22; + +import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; +import { OApp, MessagingFee, Origin } from "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol"; +import { MessagingReceipt } from "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol"; + +contract TestingOApp is OApp { + constructor(address _endpoint, address _delegate) OApp(_endpoint, _delegate) Ownable(_delegate) {} + + string public data = "nothing received yet"; + + /** + * @notice Sends a message from the source chain to a destination chain. + * @param _dstEid The endpoint ID of the destination chain. + * @param _message The message string to be sent. + * @param _options Additional options for message execution. + * @dev Encodes the message as bytes and sends it using the `_lzSend` internal function. + * @return receipt A `MessagingReceipt` struct containing details of the message sent. + */ + function send( + uint32 _dstEid, + string memory _message, + bytes calldata _options + ) external payable returns (MessagingReceipt memory receipt) { + bytes memory _payload = abi.encode(_message); + receipt = _lzSend(_dstEid, _payload, _options, MessagingFee(msg.value, 0), payable(msg.sender)); + } + + /** + * @notice Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token. + * @param _dstEid Destination chain's endpoint ID. + * @param _message The message. + * @param _options Message execution options (e.g., for sending gas to destination). + * @param _payInLzToken Whether to return fee in ZRO token. + * @return fee A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token. + */ + function quote( + uint32 _dstEid, + string memory _message, + bytes memory _options, + bool _payInLzToken + ) public view returns (MessagingFee memory fee) { + bytes memory payload = abi.encode(_message); + fee = _quote(_dstEid, payload, _options, _payInLzToken); + } + + /** + * @dev Internal function override to handle incoming messages from another chain. + * @dev _origin A struct containing information about the message sender. + * @dev _guid A unique global packet identifier for the message. + * @param payload The encoded message payload being received. + * + * @dev The following params are unused in the current implementation of the OApp. + * @dev _executor The address of the Executor responsible for processing the message. + * @dev _extraData Arbitrary data appended by the Executor to the message. + * + * Decodes the received payload and processes it as per the business logic defined in the function. + */ + function _lzReceive( + Origin calldata /*_origin*/, + bytes32 /*_guid*/, + bytes calldata payload, + address /*_executor*/, + bytes calldata /*_extraData*/ + ) internal override { + data = abi.decode(payload, (string)); + } +} diff --git a/tests/e2e/testing_oapp/deploy/SimpleTestingOApp.ts b/tests/e2e/testing_oapp/deploy/SimpleTestingOApp.ts new file mode 100644 index 00000000..b13f0535 --- /dev/null +++ b/tests/e2e/testing_oapp/deploy/SimpleTestingOApp.ts @@ -0,0 +1,50 @@ +import assert from 'assert' +import { type DeployFunction } from 'hardhat-deploy/types' + +const contractName = 'SimpleTestingOApp' + +const deploy: DeployFunction = async (hre) => { + const { getNamedAccounts, deployments } = hre + + const { deploy } = deployments + const { deployer } = await getNamedAccounts() + + assert(deployer, 'Missing named deployer account') + + console.log(`Network: ${hre.network.name}`) + console.log(`Deployer: ${deployer}`) + + // This is an external deployment pulled in from @layerzerolabs/lz-evm-sdk-v2 + // + // @layerzerolabs/toolbox-hardhat takes care of plugging in the external deployments + // from @layerzerolabs packages based on the configuration in your hardhat config + // + // For this to work correctly, your network config must define an eid property + // set to `EndpointId` as defined in @layerzerolabs/lz-definitions + // + // For example: + // + // networks: { + // fuji: { + // ... + // eid: EndpointId.AVALANCHE_V2_TESTNET + // } + // } + const endpointV2Deployment = await hre.deployments.get('EndpointV2') + + const { address } = await deploy(contractName, { + from: deployer, + args: [ + endpointV2Deployment.address, // LayerZero's EndpointV2 address + deployer, // owner + ], + log: true, + skipIfAlreadyDeployed: false, + }) + + console.log(`Deployed contract: ${contractName}, network: ${hre.network.name}, address: ${address}`) +} + +deploy.tags = [contractName] + +export default deploy diff --git a/tests/e2e/testing_oapp/deploy/TestingOApp.ts b/tests/e2e/testing_oapp/deploy/TestingOApp.ts new file mode 100644 index 00000000..a34f7941 --- /dev/null +++ b/tests/e2e/testing_oapp/deploy/TestingOApp.ts @@ -0,0 +1,50 @@ +import assert from 'assert' +import { type DeployFunction } from 'hardhat-deploy/types' + +const contractName = 'TestingOApp' + +const deploy: DeployFunction = async (hre) => { + const { getNamedAccounts, deployments } = hre + + const { deploy } = deployments + const { deployer } = await getNamedAccounts() + + assert(deployer, 'Missing named deployer account') + + console.log(`Network: ${hre.network.name}`) + console.log(`Deployer: ${deployer}`) + + // This is an external deployment pulled in from @layerzerolabs/lz-evm-sdk-v2 + // + // @layerzerolabs/toolbox-hardhat takes care of plugging in the external deployments + // from @layerzerolabs packages based on the configuration in your hardhat config + // + // For this to work correctly, your network config must define an eid property + // set to `EndpointId` as defined in @layerzerolabs/lz-definitions + // + // For example: + // + // networks: { + // fuji: { + // ... + // eid: EndpointId.AVALANCHE_V2_TESTNET + // } + // } + const endpointV2Deployment = await hre.deployments.get('EndpointV2') + + const { address } = await deploy(contractName, { + from: deployer, + args: [ + endpointV2Deployment.address, // LayerZero's EndpointV2 address + deployer, // owner + ], + log: true, + skipIfAlreadyDeployed: false, + }) + + console.log(`Deployed contract: ${contractName}, network: ${hre.network.name}, address: ${address}`) +} + +deploy.tags = [contractName] + +export default deploy diff --git a/tests/e2e/testing_oapp/deployed_addresses.json b/tests/e2e/testing_oapp/deployed_addresses.json new file mode 100644 index 00000000..e5ed8c64 --- /dev/null +++ b/tests/e2e/testing_oapp/deployed_addresses.json @@ -0,0 +1,30 @@ +{ + "dvn":{ + "holesky":{ + "simple":"0x25e8edce1bcf8d074f8af8838e9ceecd3e3e0268", + "regular":"0xbe4bad49fe4c887f1ba0adf5287ab2408caad8cf" + }, + "arbitrum-sepolia":{ + "simple":"0x539c696515fb90b1d399e4fa0ae56c94fc391649", + "regular":"0x8b1b58883d8a0fdde8cedea4520483e20578c5df" + }, + "amoy-testnet":{ + "simple":"0xd58388997b0ad8f7f4a035f6c159c9c2270170f4", + "regular":"0xb1593cfcf8bfce9aa28865c04eb5c30df0f47784" + } + }, + "oapp":{ + "holesky":{ + "simple":"0xF65450a2fC9817e956942b856b8c46139641Ea08", + "regular":"0x6246696Dba86622Dd624c276Da5AF61480bb4e6c" + }, + "arbitrum-sepolia":{ + "simple":"0x01ADf31F11501F424e67215A91FAB7100B68c518", + "regular":"0x6241a21419756E01574e1A4048D776b349C92E4A" + }, + "amoy-testnet":{ + "simple":"0x9c0b85420726a33Cf2Fd264f9353e4F143805CcB", + "regular":"0xf57CFDba0Ae3AE717ed87bA536A2060d326C5AC3" + } + } +} diff --git a/tests/e2e/testing_oapp/deployments/amoy-testnet/.chainId b/tests/e2e/testing_oapp/deployments/amoy-testnet/.chainId new file mode 100644 index 00000000..b8ca3095 --- /dev/null +++ b/tests/e2e/testing_oapp/deployments/amoy-testnet/.chainId @@ -0,0 +1 @@ +80002 \ No newline at end of file diff --git a/tests/e2e/testing_oapp/deployments/amoy-testnet/SimpleTestingOApp.json b/tests/e2e/testing_oapp/deployments/amoy-testnet/SimpleTestingOApp.json new file mode 100644 index 00000000..e9383897 --- /dev/null +++ b/tests/e2e/testing_oapp/deployments/amoy-testnet/SimpleTestingOApp.json @@ -0,0 +1,810 @@ +{ + "address": "0x9c0b85420726a33Cf2Fd264f9353e4F143805CcB", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_endpoint", + "type": "address" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "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" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "SafeERC20FailedOperation", + "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" + }, + { + "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": "data", + "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": [ + { + "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": [ + { + "internalType": "uint32", + "name": "_dstEid", + "type": "uint32" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + }, + { + "internalType": "bytes", + "name": "_options", + "type": "bytes" + }, + { + "internalType": "bool", + "name": "_payInLzToken", + "type": "bool" + } + ], + "name": "quote", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "nativeFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lzTokenFee", + "type": "uint256" + } + ], + "internalType": "struct MessagingFee", + "name": "fee", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_dstEid", + "type": "uint32" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + }, + { + "internalType": "bytes", + "name": "_options", + "type": "bytes" + } + ], + "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": "receipt", + "type": "tuple" + } + ], + "stateMutability": "payable", + "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" + } + ], + "transactionHash": "0xf82765206a0503606a761b10dffdb3693501483443ca9f49400f3946a1c5d4a2", + "receipt": { + "to": null, + "from": "0x96E341c7E7537333AFa153d196038C6D086d5d2b", + "contractAddress": "0x9c0b85420726a33Cf2Fd264f9353e4F143805CcB", + "transactionIndex": 2, + "gasUsed": "1074789", + "logsBloom": "0x0000000000000000000000000000000000000000000000000080000000000000000000000000000020000000000000000000c0020000000000000000000000000000000000000000000000000000008000010000000000000001000800000000000000000200000002000000000008000000000000000000800000000000004200002000000000a0000000000040000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004400000000000000000001000000000000000000000000400000100000000020000000000000000000000000000000000000000000000010000000000000100200", + "blockHash": "0xa91ed60003b2b938be2adc80ff774e0e9f30c3a70a33225b1addadac56a1657f", + "transactionHash": "0xf82765206a0503606a761b10dffdb3693501483443ca9f49400f3946a1c5d4a2", + "logs": [ + { + "transactionIndex": 2, + "blockNumber": 14100496, + "transactionHash": "0xf82765206a0503606a761b10dffdb3693501483443ca9f49400f3946a1c5d4a2", + "address": "0x9c0b85420726a33Cf2Fd264f9353e4F143805CcB", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "logIndex": 7, + "blockHash": "0xa91ed60003b2b938be2adc80ff774e0e9f30c3a70a33225b1addadac56a1657f" + }, + { + "transactionIndex": 2, + "blockNumber": 14100496, + "transactionHash": "0xf82765206a0503606a761b10dffdb3693501483443ca9f49400f3946a1c5d4a2", + "address": "0x6EDCE65403992e310A62460808c4b910D972f10f", + "topics": [ + "0x6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d7983981" + ], + "data": "0x0000000000000000000000009c0b85420726a33cf2fd264f9353e4f143805ccb00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "logIndex": 8, + "blockHash": "0xa91ed60003b2b938be2adc80ff774e0e9f30c3a70a33225b1addadac56a1657f" + }, + { + "transactionIndex": 2, + "blockNumber": 14100496, + "transactionHash": "0xf82765206a0503606a761b10dffdb3693501483443ca9f49400f3946a1c5d4a2", + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x0000000000000000000000006dc2dd54f24979ec26212794c71afefed722280c" + ], + "data": "0x000000000000000000000000000000000000000000000000008423fd32e01d7e00000000000000000000000000000000000000000000000077af87dc8eacd5010000000000000000000000000000000000000000000003cad9315eec6c5cb7b8000000000000000000000000000000000000000000000000772b63df5bccb7830000000000000000000000000000000000000000000003cad9b582e99f3cd536", + "logIndex": 9, + "blockHash": "0xa91ed60003b2b938be2adc80ff774e0e9f30c3a70a33225b1addadac56a1657f" + } + ], + "blockNumber": 14100496, + "cumulativeGasUsed": "1307167", + "status": 1, + "byzantium": true + }, + "args": [ + "0x6EDCE65403992e310A62460808c4b910D972f10f", + "0x96E341c7E7537333AFa153d196038C6D086d5d2b" + ], + "numDeployments": 1, + "solcInputHash": "d37a9b3218ba71b4f94ab0769ed50067", + "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_endpoint\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"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\"},{\"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\":\"data\",\"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\":[{\"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\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"string\",\"name\":\"_message\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"quote\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"fee\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"string\",\"name\":\"_message\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"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\":\"receipt\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"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\"}],\"devdoc\":{\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"details\":\"This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.\",\"params\":{\"origin\":\"The origin information containing the source endpoint and sender address.\"},\"returns\":{\"_0\":\"Whether the path has been initialized.\"}},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"details\":\"_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.\",\"params\":{\"_sender\":\"The sender address.\"},\"returns\":{\"_0\":\"isSender Is a valid sender.\"}},\"lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.\",\"params\":{\"_executor\":\"The address of the executor for the received message.\",\"_extraData\":\"Additional arbitrary data provided by the corresponding executor.\",\"_guid\":\"The unique identifier for the received LayerZero message.\",\"_message\":\"The payload of the received message.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"nextNonce(uint32,bytes32)\":{\"details\":\"_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\",\"returns\":{\"nonce\":\"The next nonce.\"}},\"oAppVersion()\":{\"returns\":{\"receiverVersion\":\"The version of the OAppReceiver.sol implementation.\",\"senderVersion\":\"The version of the OAppSender.sol implementation.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"quote(uint32,string,bytes,bool)\":{\"params\":{\"_dstEid\":\"Destination chain's endpoint ID.\",\"_message\":\"The message.\",\"_options\":\"Message execution options (e.g., for sending gas to destination).\",\"_payInLzToken\":\"Whether to return fee in ZRO token.\"},\"returns\":{\"fee\":\"A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"send(uint32,string,bytes)\":{\"details\":\"Encodes the message as bytes and sends it using the `_lzSend` internal function.\",\"params\":{\"_dstEid\":\"The endpoint ID of the destination chain.\",\"_message\":\"The message string to be sent.\",\"_options\":\"Additional options for message execution.\"},\"returns\":{\"receipt\":\"A `MessagingReceipt` struct containing details of the message sent.\"}},\"setDelegate(address)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\",\"params\":{\"_delegate\":\"The address of the delegate to be set.\"}},\"setPeer(uint32,bytes32)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_peer\":\"The address of the peer to be associated with the corresponding endpoint.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"notice\":\"Checks if the path initialization is allowed based on the provided origin.\"},\"endpoint()\":{\"notice\":\"Retrieves the LayerZero endpoint associated with the OApp.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"notice\":\"Indicates whether an address is an approved composeMsg sender to the Endpoint.\"},\"nextNonce(uint32,bytes32)\":{\"notice\":\"Retrieves the next nonce for a given source endpoint and sender address.\"},\"oAppVersion()\":{\"notice\":\"Retrieves the OApp version information.\"},\"peers(uint32)\":{\"notice\":\"Retrieves the peer (OApp) associated with a corresponding endpoint.\"},\"quote(uint32,string,bytes,bool)\":{\"notice\":\"Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token.\"},\"send(uint32,string,bytes)\":{\"notice\":\"Sends a message from the source chain to a destination chain.\"},\"setDelegate(address)\":{\"notice\":\"Sets the delegate address for the OApp.\"},\"setPeer(uint32,bytes32)\":{\"notice\":\"Sets the peer address (OApp instance) for a corresponding endpoint.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/SimpleTestingOApp.sol\":\"SimpleTestingOApp\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\n// @dev Import the 'MessagingFee' and 'MessagingReceipt' so it's exposed to OApp implementers\\n// solhint-disable-next-line no-unused-import\\nimport { OAppSender, MessagingFee, MessagingReceipt } from \\\"./OAppSender.sol\\\";\\n// @dev Import the 'Origin' so it's exposed to OApp implementers\\n// solhint-disable-next-line no-unused-import\\nimport { OAppReceiver, Origin } from \\\"./OAppReceiver.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OApp\\n * @dev Abstract contract serving as the base for OApp implementation, combining OAppSender and OAppReceiver functionality.\\n */\\nabstract contract OApp is OAppSender, OAppReceiver {\\n /**\\n * @dev Constructor to initialize the OApp with the provided endpoint and owner.\\n * @param _endpoint The address of the LOCAL LayerZero endpoint.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n */\\n constructor(address _endpoint, address _delegate) OAppCore(_endpoint, _delegate) {}\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol implementation.\\n * @return receiverVersion The version of the OAppReceiver.sol implementation.\\n */\\n function oAppVersion()\\n public\\n pure\\n virtual\\n override(OAppSender, OAppReceiver)\\n returns (uint64 senderVersion, uint64 receiverVersion)\\n {\\n return (SENDER_VERSION, RECEIVER_VERSION);\\n }\\n}\\n\",\"keccak256\":\"0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { IOAppCore, ILayerZeroEndpointV2 } from \\\"./interfaces/IOAppCore.sol\\\";\\n\\n/**\\n * @title OAppCore\\n * @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations.\\n */\\nabstract contract OAppCore is IOAppCore, Ownable {\\n // The LayerZero endpoint associated with the given OApp\\n ILayerZeroEndpointV2 public immutable endpoint;\\n\\n // Mapping to store peers associated with corresponding endpoints\\n mapping(uint32 eid => bytes32 peer) public peers;\\n\\n /**\\n * @dev Constructor to initialize the OAppCore with the provided endpoint and delegate.\\n * @param _endpoint The address of the LOCAL Layer Zero endpoint.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n *\\n * @dev The delegate typically should be set as the owner of the contract.\\n */\\n constructor(address _endpoint, address _delegate) {\\n endpoint = ILayerZeroEndpointV2(_endpoint);\\n\\n if (_delegate == address(0)) revert InvalidDelegate();\\n endpoint.setDelegate(_delegate);\\n }\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\\n * @dev Set this to bytes32(0) to remove the peer address.\\n * @dev Peer is a bytes32 to accommodate non-evm chains.\\n */\\n function setPeer(uint32 _eid, bytes32 _peer) public virtual onlyOwner {\\n _setPeer(_eid, _peer);\\n }\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n *\\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\\n * @dev Set this to bytes32(0) to remove the peer address.\\n * @dev Peer is a bytes32 to accommodate non-evm chains.\\n */\\n function _setPeer(uint32 _eid, bytes32 _peer) internal virtual {\\n peers[_eid] = _peer;\\n emit PeerSet(_eid, _peer);\\n }\\n\\n /**\\n * @notice Internal function to get the peer address associated with a specific endpoint; reverts if NOT set.\\n * ie. the peer is set to bytes32(0).\\n * @param _eid The endpoint ID.\\n * @return peer The address of the peer associated with the specified endpoint.\\n */\\n function _getPeerOrRevert(uint32 _eid) internal view virtual returns (bytes32) {\\n bytes32 peer = peers[_eid];\\n if (peer == bytes32(0)) revert NoPeer(_eid);\\n return peer;\\n }\\n\\n /**\\n * @notice Sets the delegate address for the OApp.\\n * @param _delegate The address of the delegate to be set.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\\n */\\n function setDelegate(address _delegate) public onlyOwner {\\n endpoint.setDelegate(_delegate);\\n }\\n}\\n\",\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { IOAppReceiver, Origin } from \\\"./interfaces/IOAppReceiver.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OAppReceiver\\n * @dev Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers.\\n */\\nabstract contract OAppReceiver is IOAppReceiver, OAppCore {\\n // Custom error message for when the caller is not the registered endpoint/\\n error OnlyEndpoint(address addr);\\n\\n // @dev The version of the OAppReceiver implementation.\\n // @dev Version is bumped when changes are made to this contract.\\n uint64 internal constant RECEIVER_VERSION = 2;\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n *\\n * @dev Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented.\\n * ie. this is a RECEIVE only OApp.\\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions.\\n */\\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\\n return (0, RECEIVER_VERSION);\\n }\\n\\n /**\\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\\n * @dev _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @dev _message The lzReceive payload.\\n * @param _sender The sender address.\\n * @return isSender Is a valid sender.\\n *\\n * @dev Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.\\n * @dev The default sender IS the OAppReceiver implementer.\\n */\\n function isComposeMsgSender(\\n Origin calldata /*_origin*/,\\n bytes calldata /*_message*/,\\n address _sender\\n ) public view virtual returns (bool) {\\n return _sender == address(this);\\n }\\n\\n /**\\n * @notice Checks if the path initialization is allowed based on the provided origin.\\n * @param origin The origin information containing the source endpoint and sender address.\\n * @return Whether the path has been initialized.\\n *\\n * @dev This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.\\n * @dev This defaults to assuming if a peer has been set, its initialized.\\n * Can be overridden by the OApp if there is other logic to determine this.\\n */\\n function allowInitializePath(Origin calldata origin) public view virtual returns (bool) {\\n return peers[origin.srcEid] == origin.sender;\\n }\\n\\n /**\\n * @notice Retrieves the next nonce for a given source endpoint and sender address.\\n * @dev _srcEid The source endpoint ID.\\n * @dev _sender The sender address.\\n * @return nonce The next nonce.\\n *\\n * @dev The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.\\n * @dev Is required by the off-chain executor to determine the OApp expects msg execution is ordered.\\n * @dev This is also enforced by the OApp.\\n * @dev By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\\n */\\n function nextNonce(uint32 /*_srcEid*/, bytes32 /*_sender*/) public view virtual returns (uint64 nonce) {\\n return 0;\\n }\\n\\n /**\\n * @dev Entry point for receiving messages or packets from the endpoint.\\n * @param _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @param _guid The unique identifier for the received LayerZero message.\\n * @param _message The payload of the received message.\\n * @param _executor The address of the executor for the received message.\\n * @param _extraData Additional arbitrary data provided by the corresponding executor.\\n *\\n * @dev Entry point for receiving msg/packet from the LayerZero endpoint.\\n */\\n function lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) public payable virtual {\\n // Ensures that only the endpoint can attempt to lzReceive() messages to this OApp.\\n if (address(endpoint) != msg.sender) revert OnlyEndpoint(msg.sender);\\n\\n // Ensure that the sender matches the expected peer for the source endpoint.\\n if (_getPeerOrRevert(_origin.srcEid) != _origin.sender) revert OnlyPeer(_origin.srcEid, _origin.sender);\\n\\n // Call the internal OApp implementation of lzReceive.\\n _lzReceive(_origin, _guid, _message, _executor, _extraData);\\n }\\n\\n /**\\n * @dev Internal function to implement lzReceive logic without needing to copy the basic parameter validation.\\n */\\n function _lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { SafeERC20, IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport { MessagingParams, MessagingFee, MessagingReceipt } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OAppSender\\n * @dev Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.\\n */\\nabstract contract OAppSender is OAppCore {\\n using SafeERC20 for IERC20;\\n\\n // Custom error messages\\n error NotEnoughNative(uint256 msgValue);\\n error LzTokenUnavailable();\\n\\n // @dev The version of the OAppSender implementation.\\n // @dev Version is bumped when changes are made to this contract.\\n uint64 internal constant SENDER_VERSION = 1;\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n *\\n * @dev Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented.\\n * ie. this is a SEND only OApp.\\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions\\n */\\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\\n return (SENDER_VERSION, 0);\\n }\\n\\n /**\\n * @dev Internal function to interact with the LayerZero EndpointV2.quote() for fee calculation.\\n * @param _dstEid The destination endpoint ID.\\n * @param _message The message payload.\\n * @param _options Additional options for the message.\\n * @param _payInLzToken Flag indicating whether to pay the fee in LZ tokens.\\n * @return fee The calculated MessagingFee for the message.\\n * - nativeFee: The native fee for the message.\\n * - lzTokenFee: The LZ token fee for the message.\\n */\\n function _quote(\\n uint32 _dstEid,\\n bytes memory _message,\\n bytes memory _options,\\n bool _payInLzToken\\n ) internal view virtual returns (MessagingFee memory fee) {\\n return\\n endpoint.quote(\\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _payInLzToken),\\n address(this)\\n );\\n }\\n\\n /**\\n * @dev Internal function to interact with the LayerZero EndpointV2.send() for sending a message.\\n * @param _dstEid The destination endpoint ID.\\n * @param _message The message payload.\\n * @param _options Additional options for the message.\\n * @param _fee The calculated LayerZero fee for the message.\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n * @param _refundAddress The address to receive any excess fee values sent to the endpoint.\\n * @return receipt The receipt for the sent message.\\n * - guid: The unique identifier for the sent message.\\n * - nonce: The nonce of the sent message.\\n * - fee: The LayerZero fee incurred for the message.\\n */\\n function _lzSend(\\n uint32 _dstEid,\\n bytes memory _message,\\n bytes memory _options,\\n MessagingFee memory _fee,\\n address _refundAddress\\n ) internal virtual returns (MessagingReceipt memory receipt) {\\n // @dev Push corresponding fees to the endpoint, any excess is sent back to the _refundAddress from the endpoint.\\n uint256 messageValue = _payNative(_fee.nativeFee);\\n if (_fee.lzTokenFee > 0) _payLzToken(_fee.lzTokenFee);\\n\\n return\\n // solhint-disable-next-line check-send-result\\n endpoint.send{ value: messageValue }(\\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _fee.lzTokenFee > 0),\\n _refundAddress\\n );\\n }\\n\\n /**\\n * @dev Internal function to pay the native fee associated with the message.\\n * @param _nativeFee The native fee to be paid.\\n * @return nativeFee The amount of native currency paid.\\n *\\n * @dev If the OApp needs to initiate MULTIPLE LayerZero messages in a single transaction,\\n * this will need to be overridden because msg.value would contain multiple lzFees.\\n * @dev Should be overridden in the event the LayerZero endpoint requires a different native currency.\\n * @dev Some EVMs use an ERC20 as a method for paying transactions/gasFees.\\n * @dev The endpoint is EITHER/OR, ie. it will NOT support both types of native payment at a time.\\n */\\n function _payNative(uint256 _nativeFee) internal virtual returns (uint256 nativeFee) {\\n if (msg.value != _nativeFee) revert NotEnoughNative(msg.value);\\n return _nativeFee;\\n }\\n\\n /**\\n * @dev Internal function to pay the LZ token fee associated with the message.\\n * @param _lzTokenFee The LZ token fee to be paid.\\n *\\n * @dev If the caller is trying to pay in the specified lzToken, then the lzTokenFee is passed to the endpoint.\\n * @dev Any excess sent, is passed back to the specified _refundAddress in the _lzSend().\\n */\\n function _payLzToken(uint256 _lzTokenFee) internal virtual {\\n // @dev Cannot cache the token because it is not immutable in the endpoint.\\n address lzToken = endpoint.lzToken();\\n if (lzToken == address(0)) revert LzTokenUnavailable();\\n\\n // Pay LZ token fee by sending tokens to the endpoint.\\n IERC20(lzToken).safeTransferFrom(msg.sender, address(endpoint), _lzTokenFee);\\n }\\n}\\n\",\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { ILayerZeroEndpointV2 } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\n\\n/**\\n * @title IOAppCore\\n */\\ninterface IOAppCore {\\n // Custom error messages\\n error OnlyPeer(uint32 eid, bytes32 sender);\\n error NoPeer(uint32 eid);\\n error InvalidEndpointCall();\\n error InvalidDelegate();\\n\\n // Event emitted when a peer (OApp) is set for a corresponding endpoint\\n event PeerSet(uint32 eid, bytes32 peer);\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n */\\n function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);\\n\\n /**\\n * @notice Retrieves the LayerZero endpoint associated with the OApp.\\n * @return iEndpoint The LayerZero endpoint as an interface.\\n */\\n function endpoint() external view returns (ILayerZeroEndpointV2 iEndpoint);\\n\\n /**\\n * @notice Retrieves the peer (OApp) associated with a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @return peer The peer address (OApp instance) associated with the corresponding endpoint.\\n */\\n function peers(uint32 _eid) external view returns (bytes32 peer);\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n */\\n function setPeer(uint32 _eid, bytes32 _peer) external;\\n\\n /**\\n * @notice Sets the delegate address for the OApp Core.\\n * @param _delegate The address of the delegate to be set.\\n */\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.20;\\n\\nimport { ILayerZeroReceiver, Origin } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\\\";\\n\\ninterface IOAppReceiver is ILayerZeroReceiver {\\n /**\\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\\n * @param _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @param _message The lzReceive payload.\\n * @param _sender The sender address.\\n * @return isSender Is a valid sender.\\n *\\n * @dev Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.\\n * @dev The default sender IS the OAppReceiver implementer.\\n */\\n function isComposeMsgSender(\\n Origin calldata _origin,\\n bytes calldata _message,\\n address _sender\\n ) external view returns (bool isSender);\\n}\\n\",\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IMessageLibManager } from \\\"./IMessageLibManager.sol\\\";\\nimport { IMessagingComposer } from \\\"./IMessagingComposer.sol\\\";\\nimport { IMessagingChannel } from \\\"./IMessagingChannel.sol\\\";\\nimport { IMessagingContext } from \\\"./IMessagingContext.sol\\\";\\n\\nstruct MessagingParams {\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes message;\\n bytes options;\\n bool payInLzToken;\\n}\\n\\nstruct MessagingReceipt {\\n bytes32 guid;\\n uint64 nonce;\\n MessagingFee fee;\\n}\\n\\nstruct MessagingFee {\\n uint256 nativeFee;\\n uint256 lzTokenFee;\\n}\\n\\nstruct Origin {\\n uint32 srcEid;\\n bytes32 sender;\\n uint64 nonce;\\n}\\n\\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\\n\\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\\n\\n event PacketDelivered(Origin origin, address receiver);\\n\\n event LzReceiveAlert(\\n address indexed receiver,\\n address indexed executor,\\n Origin origin,\\n bytes32 guid,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n event LzTokenSet(address token);\\n\\n event DelegateSet(address sender, address delegate);\\n\\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\\n\\n function send(\\n MessagingParams calldata _params,\\n address _refundAddress\\n ) external payable returns (MessagingReceipt memory);\\n\\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\\n\\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n address _receiver,\\n bytes32 _guid,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n\\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\\n\\n function setLzToken(address _lzToken) external;\\n\\n function lzToken() external view returns (address);\\n\\n function nativeToken() external view returns (address);\\n\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { Origin } from \\\"./ILayerZeroEndpointV2.sol\\\";\\n\\ninterface ILayerZeroReceiver {\\n function allowInitializePath(Origin calldata _origin) external view returns (bool);\\n\\n function nextNonce(uint32 _eid, bytes32 _sender) external view returns (uint64);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nstruct SetConfigParam {\\n uint32 eid;\\n uint32 configType;\\n bytes config;\\n}\\n\\ninterface IMessageLibManager {\\n struct Timeout {\\n address lib;\\n uint256 expiry;\\n }\\n\\n event LibraryRegistered(address newLib);\\n event DefaultSendLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\\n event SendLibrarySet(address sender, uint32 eid, address newLib);\\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\\n\\n function registerLibrary(address _lib) external;\\n\\n function isRegisteredLibrary(address _lib) external view returns (bool);\\n\\n function getRegisteredLibraries() external view returns (address[] memory);\\n\\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\\n\\n function defaultSendLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\\n\\n /// ------------------- OApp interfaces -------------------\\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\\n\\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\\n\\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\\n\\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\\n\\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\\n\\n function getConfig(\\n address _oapp,\\n address _lib,\\n uint32 _eid,\\n uint32 _configType\\n ) external view returns (bytes memory config);\\n}\\n\",\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingChannel {\\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n\\n function eid() external view returns (uint32);\\n\\n // this is an emergency function if a message cannot be verified for some reasons\\n // required to provide _nextNonce to avoid race condition\\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\\n\\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\\n\\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n\\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\\n\\n function inboundPayloadHash(\\n address _receiver,\\n uint32 _srcEid,\\n bytes32 _sender,\\n uint64 _nonce\\n ) external view returns (bytes32);\\n\\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n}\\n\",\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingComposer {\\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\\n event LzComposeAlert(\\n address indexed from,\\n address indexed to,\\n address indexed executor,\\n bytes32 guid,\\n uint16 index,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n function composeQueue(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index\\n ) external view returns (bytes32 messageHash);\\n\\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\\n\\n function lzCompose(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingContext {\\n function isSendingMessage() external view returns (bool);\\n\\n function getSendContext() external view returns (uint32 dstEid, address sender);\\n}\\n\",\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Context} from \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * The initial owner is set to the address provided by the deployer. This can\\n * later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n /**\\n * @dev The caller account is not authorized to perform an operation.\\n */\\n error OwnableUnauthorizedAccount(address account);\\n\\n /**\\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\\n */\\n error OwnableInvalidOwner(address owner);\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\\n */\\n constructor(address initialOwner) {\\n if (initialOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n if (owner() != _msgSender()) {\\n revert OwnableUnauthorizedAccount(_msgSender());\\n }\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby disabling any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n if (newOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"./IERC20.sol\\\";\\nimport {IERC165} from \\\"./IERC165.sol\\\";\\n\\n/**\\n * @title IERC1363\\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\\n *\\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\\n */\\ninterface IERC1363 is IERC20, IERC165 {\\n /*\\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\\n * 0xb0202a11 ===\\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\\n */\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferAndCall(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @param data Additional data with no specified format, sent in call to `to`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param from The address which you want to send tokens from.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param from The address which you want to send tokens from.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @param data Additional data with no specified format, sent in call to `to`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\\n * @param spender The address which will spend the funds.\\n * @param value The amount of tokens to be spent.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function approveAndCall(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\\n * @param spender The address which will spend the funds.\\n * @param value The amount of tokens to be spent.\\n * @param data Additional data with no specified format, sent in call to `spender`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC165} from \\\"../utils/introspection/IERC165.sol\\\";\\n\",\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../token/ERC20/IERC20.sol\\\";\\n\",\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../IERC20.sol\\\";\\nimport {IERC1363} from \\\"../../../interfaces/IERC1363.sol\\\";\\nimport {Address} from \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n /**\\n * @dev An operation with an ERC-20 token failed.\\n */\\n error SafeERC20FailedOperation(address token);\\n\\n /**\\n * @dev Indicates a failed `decreaseAllowance` request.\\n */\\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\\n\\n /**\\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful.\\n */\\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\\n }\\n\\n /**\\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\\n */\\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\\n }\\n\\n /**\\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful.\\n *\\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \\\"client\\\"\\n * smart contract uses ERC-7674 to set temporary allowances, then the \\\"client\\\" smart contract should avoid using\\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\\n */\\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n forceApprove(token, spender, oldAllowance + value);\\n }\\n\\n /**\\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\\n * value, non-reverting calls are assumed to be successful.\\n *\\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \\\"client\\\"\\n * smart contract uses ERC-7674 to set temporary allowances, then the \\\"client\\\" smart contract should avoid using\\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\\n */\\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\\n unchecked {\\n uint256 currentAllowance = token.allowance(address(this), spender);\\n if (currentAllowance < requestedDecrease) {\\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\\n }\\n forceApprove(token, spender, currentAllowance - requestedDecrease);\\n }\\n }\\n\\n /**\\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\\n * to be set to zero before setting it to a non-zero value, such as USDT.\\n *\\n * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\\n * only sets the \\\"standard\\\" allowance. Any temporary allowance will remain active, in addition to the value being\\n * set here.\\n */\\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\\n\\n if (!_callOptionalReturnBool(token, approvalCall)) {\\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\\n _callOptionalReturn(token, approvalCall);\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\\n if (to.code.length == 0) {\\n safeTransfer(token, to, value);\\n } else if (!token.transferAndCall(to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\\n * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function transferFromAndCallRelaxed(\\n IERC1363 token,\\n address from,\\n address to,\\n uint256 value,\\n bytes memory data\\n ) internal {\\n if (to.code.length == 0) {\\n safeTransferFrom(token, from, to, value);\\n } else if (!token.transferFromAndCall(from, to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\\n * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\\n * once without retrying, and relies on the returned value to be true.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\\n if (to.code.length == 0) {\\n forceApprove(token, to, value);\\n } else if (!token.approveAndCall(to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n *\\n * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n uint256 returnSize;\\n uint256 returnValue;\\n assembly (\\\"memory-safe\\\") {\\n let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n // bubble errors\\n if iszero(success) {\\n let ptr := mload(0x40)\\n returndatacopy(ptr, 0, returndatasize())\\n revert(ptr, returndatasize())\\n }\\n returnSize := returndatasize()\\n returnValue := mload(0)\\n }\\n\\n if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n *\\n * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\\n */\\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\\n bool success;\\n uint256 returnSize;\\n uint256 returnValue;\\n assembly (\\\"memory-safe\\\") {\\n success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n returnSize := returndatasize()\\n returnValue := mload(0)\\n }\\n return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\\n }\\n}\\n\",\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Errors} from \\\"./Errors.sol\\\";\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev There's no code at `target` (it is not a contract).\\n */\\n error AddressEmptyCode(address target);\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n if (address(this).balance < amount) {\\n revert Errors.InsufficientBalance(address(this).balance, amount);\\n }\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n if (!success) {\\n revert Errors.FailedCall();\\n }\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason or custom error, it is bubbled\\n * up by this function (like regular Solidity function calls). However, if\\n * the call reverted with no returned reason, this function reverts with a\\n * {Errors.FailedCall} error.\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n if (address(this).balance < value) {\\n revert Errors.InsufficientBalance(address(this).balance, value);\\n }\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\\n * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\\n * of an unsuccessful call.\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata\\n ) internal view returns (bytes memory) {\\n if (!success) {\\n _revert(returndata);\\n } else {\\n // only check if target is a contract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n if (returndata.length == 0 && target.code.length == 0) {\\n revert AddressEmptyCode(target);\\n }\\n return returndata;\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\\n * revert reason or with a default {Errors.FailedCall} error.\\n */\\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\\n if (!success) {\\n _revert(returndata);\\n } else {\\n return returndata;\\n }\\n }\\n\\n /**\\n * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\\n */\\n function _revert(bytes memory returndata) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n assembly (\\\"memory-safe\\\") {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert Errors.FailedCall();\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Collection of common custom errors used in multiple contracts\\n *\\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\\n * It is recommended to avoid relying on the error API for critical functionality.\\n *\\n * _Available since v5.1._\\n */\\nlibrary Errors {\\n /**\\n * @dev The ETH balance of the account is not enough to perform the operation.\\n */\\n error InsufficientBalance(uint256 balance, uint256 needed);\\n\\n /**\\n * @dev A call to an address target failed. The target may have reverted.\\n */\\n error FailedCall();\\n\\n /**\\n * @dev The deployment failed.\\n */\\n error FailedDeployment();\\n\\n /**\\n * @dev A necessary precompile is missing.\\n */\\n error MissingPrecompile(address);\\n}\\n\",\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\"},\"contracts/SimpleTestingOApp.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.22;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { OApp, MessagingFee, Origin } from \\\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol\\\";\\nimport { MessagingReceipt } from \\\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol\\\";\\n\\ncontract SimpleTestingOApp is OApp {\\n constructor(address _endpoint, address _delegate) OApp(_endpoint, _delegate) Ownable(_delegate) {}\\n\\n uint public data = 0;\\n\\n /**\\n * @notice Sends a message from the source chain to a destination chain.\\n * @param _dstEid The endpoint ID of the destination chain.\\n * @param _message The message string to be sent.\\n * @param _options Additional options for message execution.\\n * @dev Encodes the message as bytes and sends it using the `_lzSend` internal function.\\n * @return receipt A `MessagingReceipt` struct containing details of the message sent.\\n */\\n function send(\\n uint32 _dstEid,\\n string memory _message,\\n bytes calldata _options\\n ) external payable returns (MessagingReceipt memory receipt) {\\n bytes memory _payload = abi.encode(_message);\\n receipt = _lzSend(_dstEid, _payload, _options, MessagingFee(msg.value, 0), payable(msg.sender));\\n }\\n\\n /**\\n * @notice Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token.\\n * @param _dstEid Destination chain's endpoint ID.\\n * @param _message The message.\\n * @param _options Message execution options (e.g., for sending gas to destination).\\n * @param _payInLzToken Whether to return fee in ZRO token.\\n * @return fee A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token.\\n */\\n function quote(\\n uint32 _dstEid,\\n string memory _message,\\n bytes memory _options,\\n bool _payInLzToken\\n ) public view returns (MessagingFee memory fee) {\\n bytes memory payload = abi.encode(_message);\\n fee = _quote(_dstEid, payload, _options, _payInLzToken);\\n }\\n\\n /**\\n * @dev Internal function override to handle incoming messages from another chain.\\n * @dev _origin A struct containing information about the message sender.\\n * @dev _guid A unique global packet identifier for the message.\\n * @param payload The encoded message payload being received.\\n *\\n * @dev The following params are unused in the current implementation of the OApp.\\n * @dev _executor The address of the Executor responsible for processing the message.\\n * @dev _extraData Arbitrary data appended by the Executor to the message.\\n *\\n * Decodes the received payload and processes it as per the business logic defined in the function.\\n */\\n function _lzReceive(\\n Origin calldata /*_origin*/,\\n bytes32 /*_guid*/,\\n bytes calldata payload,\\n address /*_executor*/,\\n bytes calldata /*_extraData*/\\n ) internal override {\\n data = abi.decode(payload, (uint));\\n }\\n}\\n\",\"keccak256\":\"0x53a205d83471da540ed450de64e20ce478b841f0d0c24f15dcb73651085bb803\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x60a060405260006002553480156200001657600080fd5b506040516200136a3803806200136a833981016040819052620000399162000181565b81818181806001600160a01b0381166200006d57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000788162000114565b506001600160a01b038083166080528116620000a757604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e190602401600060405180830381600087803b158015620000ef57600080fd5b505af115801562000104573d6000803e3d6000fd5b50505050505050505050620001b9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200017c57600080fd5b919050565b600080604083850312156200019557600080fd5b620001a08362000164565b9150620001b06020840162000164565b90509250929050565b60805161116b620001ff6000396000818161015b0152818161034001528181610458015281816107510152818161083f0152818161093601526109ed015261116b6000f3fe6080604052600436106100e85760003560e01c806382413eac1161008a578063e0539e5811610059578063e0539e58146102b1578063f2fde38b146102d1578063f77e5dd3146102f1578063ff7bd03d1461031e57600080fd5b806382413eac146102075780638da5cb5b14610246578063bb0b6a5314610264578063ca5eb5e11461029157600080fd5b80635e280f11116100c65780635e280f1114610149578063715018a61461019557806373d4a13a146101aa5780637d25a05e146101ce57600080fd5b806313137d65146100ed57806317442b70146101025780633400288b14610129575b600080fd5b6101006100fb366004610b99565b61033e565b005b34801561010e57600080fd5b50604080516001815260026020820152015b60405180910390f35b34801561013557600080fd5b50610100610144366004610c52565b6103fe565b34801561015557600080fd5b5061017d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610120565b3480156101a157600080fd5b50610100610414565b3480156101b657600080fd5b506101c060025481565b604051908152602001610120565b3480156101da57600080fd5b506101ee6101e9366004610c52565b610428565b60405167ffffffffffffffff9091168152602001610120565b34801561021357600080fd5b50610236610222366004610c7c565b6001600160a01b0381163014949350505050565b6040519015158152602001610120565b34801561025257600080fd5b506000546001600160a01b031661017d565b34801561027057600080fd5b506101c061027f366004610ce3565b60016020526000908152604090205481565b34801561029d57600080fd5b506101006102ac366004610d05565b610431565b6102c46102bf366004610dce565b6104b7565b6040516101209190610e45565b3480156102dd57600080fd5b506101006102ec366004610d05565b610540565b3480156102fd57600080fd5b5061031161030c366004610e88565b61057e565b6040516101209190610f1d565b34801561032a57600080fd5b50610236610339366004610f34565b6105c2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316331461038e576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b602087018035906103a8906103a3908a610ce3565b6105f8565b146103e6576103ba6020880188610ce3565b60405163309afaf360e21b815263ffffffff909116600482015260208801356024820152604401610385565b6103f587878787878787610634565b50505050505050565b61040661064c565b6104108282610679565b5050565b61041c61064c565b61042660006106ce565b565b60005b92915050565b61043961064c565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561049c57600080fd5b505af11580156104b0573d6000803e3d6000fd5b5050505050565b6104bf610adb565b6000846040516020016104d29190610f96565b60408051601f198184030181526020601f8701819004810284018101909252858352925061053691889184919088908890819084018382808284376000920182905250604080518082019091523481526020810191909152925033915061071e9050565b9695505050505050565b61054861064c565b6001600160a01b03811661057257604051631e4fbdf760e01b815260006004820152602401610385565b61057b816106ce565b50565b60408051808201909152600080825260208201526000846040516020016105a59190610f96565b604051602081830303815290604052905061053686828686610829565b60006020820180359060019083906105da9086610ce3565b63ffffffff1681526020810191909152604001600020541492915050565b63ffffffff81166000908152600160205260408120548061042b5760405163f6ff4fb760e01b815263ffffffff84166004820152602401610385565b61064084860186610fa9565b60025550505050505050565b6000546001600160a01b031633146104265760405163118cdaa760e01b8152336004820152602401610385565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610726610adb565b6000610735846000015161090a565b60208501519091501561074f5761074f8460200151610932565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff16815260200161079f8c6105f8565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b81526004016107db929190610fc2565b60806040518083038185885af11580156107f9573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061081e919061108a565b979650505050505050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff16815260200161088c896105f8565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b81526004016108c1929190610fc2565b6040805180830381865afa1580156108dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090191906110fc565b95945050505050565b600081341461092e576040516304fb820960e51b8152346004820152602401610385565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610992573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b69190611118565b90506001600160a01b0381166109df576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03818116604485015260648085018890528551808603909101815260849094019094526020830180516001600160e01b03166323b872dd60e01b179052610410938516928690610a64908590610a6a565b50505050565b600080602060008451602086016000885af180610a8d576040513d6000823e3d81fd5b50506000513d91508115610aa5578060011415610ab2565b6001600160a01b0384163b155b15610a6457604051635274afe760e01b81526001600160a01b0385166004820152602401610385565b604051806060016040528060008019168152602001600067ffffffffffffffff168152602001610b1e604051806040016040528060008152602001600081525090565b905290565b600060608284031215610b3557600080fd5b50919050565b60008083601f840112610b4d57600080fd5b50813567ffffffffffffffff811115610b6557600080fd5b602083019150836020828501011115610b7d57600080fd5b9250929050565b6001600160a01b038116811461057b57600080fd5b600080600080600080600060e0888a031215610bb457600080fd5b610bbe8989610b23565b965060608801359550608088013567ffffffffffffffff80821115610be257600080fd5b610bee8b838c01610b3b565b909750955060a08a01359150610c0382610b84565b90935060c08901359080821115610c1957600080fd5b50610c268a828b01610b3b565b989b979a50959850939692959293505050565b803563ffffffff81168114610c4d57600080fd5b919050565b60008060408385031215610c6557600080fd5b610c6e83610c39565b946020939093013593505050565b60008060008060a08587031215610c9257600080fd5b610c9c8686610b23565b9350606085013567ffffffffffffffff811115610cb857600080fd5b610cc487828801610b3b565b9094509250506080850135610cd881610b84565b939692955090935050565b600060208284031215610cf557600080fd5b610cfe82610c39565b9392505050565b600060208284031215610d1757600080fd5b8135610cfe81610b84565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115610d5357610d53610d22565b604051601f8501601f19908116603f01168101908282118183101715610d7b57610d7b610d22565b81604052809350858152868686011115610d9457600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112610dbf57600080fd5b610cfe83833560208501610d38565b60008060008060608587031215610de457600080fd5b610ded85610c39565b9350602085013567ffffffffffffffff80821115610e0a57600080fd5b610e1688838901610dae565b94506040870135915080821115610e2c57600080fd5b50610e3987828801610b3b565b95989497509550505050565b60006080820190508251825267ffffffffffffffff60208401511660208301526040830151610e81604084018280518252602090810151910152565b5092915050565b60008060008060808587031215610e9e57600080fd5b610ea785610c39565b9350602085013567ffffffffffffffff80821115610ec457600080fd5b610ed088838901610dae565b94506040870135915080821115610ee657600080fd5b508501601f81018713610ef857600080fd5b610f0787823560208401610d38565b92505060608501358015158114610cd857600080fd5b81518152602080830151908201526040810161042b565b600060608284031215610f4657600080fd5b610cfe8383610b23565b6000815180845260005b81811015610f7657602081850181015186830182015201610f5a565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610cfe6020830184610f50565b600060208284031215610fbb57600080fd5b5035919050565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152610ff860e0840182610f50565b90506060850151603f198483030160a08501526110158282610f50565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b60006040828403121561104d57600080fd5b6040516040810181811067ffffffffffffffff8211171561107057611070610d22565b604052825181526020928301519281019290925250919050565b60006080828403121561109c57600080fd5b6040516060810167ffffffffffffffff82821081831117156110c0576110c0610d22565b81604052845183526020850151915080821682146110dd57600080fd5b5060208201526110f0846040850161103b565b60408201529392505050565b60006040828403121561110e57600080fd5b610cfe838361103b565b60006020828403121561112a57600080fd5b8151610cfe81610b8456fea264697066735822122028a3371f62607d76d2e01ad1e2205a7fabf153a5831a0440a76dcc77a058a52564736f6c63430008160033", + "deployedBytecode": "0x6080604052600436106100e85760003560e01c806382413eac1161008a578063e0539e5811610059578063e0539e58146102b1578063f2fde38b146102d1578063f77e5dd3146102f1578063ff7bd03d1461031e57600080fd5b806382413eac146102075780638da5cb5b14610246578063bb0b6a5314610264578063ca5eb5e11461029157600080fd5b80635e280f11116100c65780635e280f1114610149578063715018a61461019557806373d4a13a146101aa5780637d25a05e146101ce57600080fd5b806313137d65146100ed57806317442b70146101025780633400288b14610129575b600080fd5b6101006100fb366004610b99565b61033e565b005b34801561010e57600080fd5b50604080516001815260026020820152015b60405180910390f35b34801561013557600080fd5b50610100610144366004610c52565b6103fe565b34801561015557600080fd5b5061017d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610120565b3480156101a157600080fd5b50610100610414565b3480156101b657600080fd5b506101c060025481565b604051908152602001610120565b3480156101da57600080fd5b506101ee6101e9366004610c52565b610428565b60405167ffffffffffffffff9091168152602001610120565b34801561021357600080fd5b50610236610222366004610c7c565b6001600160a01b0381163014949350505050565b6040519015158152602001610120565b34801561025257600080fd5b506000546001600160a01b031661017d565b34801561027057600080fd5b506101c061027f366004610ce3565b60016020526000908152604090205481565b34801561029d57600080fd5b506101006102ac366004610d05565b610431565b6102c46102bf366004610dce565b6104b7565b6040516101209190610e45565b3480156102dd57600080fd5b506101006102ec366004610d05565b610540565b3480156102fd57600080fd5b5061031161030c366004610e88565b61057e565b6040516101209190610f1d565b34801561032a57600080fd5b50610236610339366004610f34565b6105c2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316331461038e576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b602087018035906103a8906103a3908a610ce3565b6105f8565b146103e6576103ba6020880188610ce3565b60405163309afaf360e21b815263ffffffff909116600482015260208801356024820152604401610385565b6103f587878787878787610634565b50505050505050565b61040661064c565b6104108282610679565b5050565b61041c61064c565b61042660006106ce565b565b60005b92915050565b61043961064c565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561049c57600080fd5b505af11580156104b0573d6000803e3d6000fd5b5050505050565b6104bf610adb565b6000846040516020016104d29190610f96565b60408051601f198184030181526020601f8701819004810284018101909252858352925061053691889184919088908890819084018382808284376000920182905250604080518082019091523481526020810191909152925033915061071e9050565b9695505050505050565b61054861064c565b6001600160a01b03811661057257604051631e4fbdf760e01b815260006004820152602401610385565b61057b816106ce565b50565b60408051808201909152600080825260208201526000846040516020016105a59190610f96565b604051602081830303815290604052905061053686828686610829565b60006020820180359060019083906105da9086610ce3565b63ffffffff1681526020810191909152604001600020541492915050565b63ffffffff81166000908152600160205260408120548061042b5760405163f6ff4fb760e01b815263ffffffff84166004820152602401610385565b61064084860186610fa9565b60025550505050505050565b6000546001600160a01b031633146104265760405163118cdaa760e01b8152336004820152602401610385565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610726610adb565b6000610735846000015161090a565b60208501519091501561074f5761074f8460200151610932565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff16815260200161079f8c6105f8565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b81526004016107db929190610fc2565b60806040518083038185885af11580156107f9573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061081e919061108a565b979650505050505050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff16815260200161088c896105f8565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b81526004016108c1929190610fc2565b6040805180830381865afa1580156108dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090191906110fc565b95945050505050565b600081341461092e576040516304fb820960e51b8152346004820152602401610385565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610992573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b69190611118565b90506001600160a01b0381166109df576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03818116604485015260648085018890528551808603909101815260849094019094526020830180516001600160e01b03166323b872dd60e01b179052610410938516928690610a64908590610a6a565b50505050565b600080602060008451602086016000885af180610a8d576040513d6000823e3d81fd5b50506000513d91508115610aa5578060011415610ab2565b6001600160a01b0384163b155b15610a6457604051635274afe760e01b81526001600160a01b0385166004820152602401610385565b604051806060016040528060008019168152602001600067ffffffffffffffff168152602001610b1e604051806040016040528060008152602001600081525090565b905290565b600060608284031215610b3557600080fd5b50919050565b60008083601f840112610b4d57600080fd5b50813567ffffffffffffffff811115610b6557600080fd5b602083019150836020828501011115610b7d57600080fd5b9250929050565b6001600160a01b038116811461057b57600080fd5b600080600080600080600060e0888a031215610bb457600080fd5b610bbe8989610b23565b965060608801359550608088013567ffffffffffffffff80821115610be257600080fd5b610bee8b838c01610b3b565b909750955060a08a01359150610c0382610b84565b90935060c08901359080821115610c1957600080fd5b50610c268a828b01610b3b565b989b979a50959850939692959293505050565b803563ffffffff81168114610c4d57600080fd5b919050565b60008060408385031215610c6557600080fd5b610c6e83610c39565b946020939093013593505050565b60008060008060a08587031215610c9257600080fd5b610c9c8686610b23565b9350606085013567ffffffffffffffff811115610cb857600080fd5b610cc487828801610b3b565b9094509250506080850135610cd881610b84565b939692955090935050565b600060208284031215610cf557600080fd5b610cfe82610c39565b9392505050565b600060208284031215610d1757600080fd5b8135610cfe81610b84565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115610d5357610d53610d22565b604051601f8501601f19908116603f01168101908282118183101715610d7b57610d7b610d22565b81604052809350858152868686011115610d9457600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112610dbf57600080fd5b610cfe83833560208501610d38565b60008060008060608587031215610de457600080fd5b610ded85610c39565b9350602085013567ffffffffffffffff80821115610e0a57600080fd5b610e1688838901610dae565b94506040870135915080821115610e2c57600080fd5b50610e3987828801610b3b565b95989497509550505050565b60006080820190508251825267ffffffffffffffff60208401511660208301526040830151610e81604084018280518252602090810151910152565b5092915050565b60008060008060808587031215610e9e57600080fd5b610ea785610c39565b9350602085013567ffffffffffffffff80821115610ec457600080fd5b610ed088838901610dae565b94506040870135915080821115610ee657600080fd5b508501601f81018713610ef857600080fd5b610f0787823560208401610d38565b92505060608501358015158114610cd857600080fd5b81518152602080830151908201526040810161042b565b600060608284031215610f4657600080fd5b610cfe8383610b23565b6000815180845260005b81811015610f7657602081850181015186830182015201610f5a565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610cfe6020830184610f50565b600060208284031215610fbb57600080fd5b5035919050565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152610ff860e0840182610f50565b90506060850151603f198483030160a08501526110158282610f50565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b60006040828403121561104d57600080fd5b6040516040810181811067ffffffffffffffff8211171561107057611070610d22565b604052825181526020928301519281019290925250919050565b60006080828403121561109c57600080fd5b6040516060810167ffffffffffffffff82821081831117156110c0576110c0610d22565b81604052845183526020850151915080821682146110dd57600080fd5b5060208201526110f0846040850161103b565b60408201529392505050565b60006040828403121561110e57600080fd5b610cfe838361103b565b60006020828403121561112a57600080fd5b8151610cfe81610b8456fea264697066735822122028a3371f62607d76d2e01ad1e2205a7fabf153a5831a0440a76dcc77a058a52564736f6c63430008160033", + "devdoc": { + "errors": { + "OwnableInvalidOwner(address)": [ + { + "details": "The owner is not a valid owner account. (eg. `address(0)`)" + } + ], + "OwnableUnauthorizedAccount(address)": [ + { + "details": "The caller account is not authorized to perform an operation." + } + ], + "SafeERC20FailedOperation(address)": [ + { + "details": "An operation with an ERC-20 token failed." + } + ] + }, + "kind": "dev", + "methods": { + "allowInitializePath((uint32,bytes32,uint64))": { + "details": "This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.", + "params": { + "origin": "The origin information containing the source endpoint and sender address." + }, + "returns": { + "_0": "Whether the path has been initialized." + } + }, + "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { + "details": "_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.", + "params": { + "_sender": "The sender address." + }, + "returns": { + "_0": "isSender Is a valid sender." + } + }, + "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": { + "details": "Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.", + "params": { + "_executor": "The address of the executor for the received message.", + "_extraData": "Additional arbitrary data provided by the corresponding executor.", + "_guid": "The unique identifier for the received LayerZero message.", + "_message": "The payload of the received message.", + "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message." + } + }, + "nextNonce(uint32,bytes32)": { + "details": "_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.", + "returns": { + "nonce": "The next nonce." + } + }, + "oAppVersion()": { + "returns": { + "receiverVersion": "The version of the OAppReceiver.sol implementation.", + "senderVersion": "The version of the OAppSender.sol implementation." + } + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "quote(uint32,string,bytes,bool)": { + "params": { + "_dstEid": "Destination chain's endpoint ID.", + "_message": "The message.", + "_options": "Message execution options (e.g., for sending gas to destination).", + "_payInLzToken": "Whether to return fee in ZRO token." + }, + "returns": { + "fee": "A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token." + } + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." + }, + "send(uint32,string,bytes)": { + "details": "Encodes the message as bytes and sends it using the `_lzSend` internal function.", + "params": { + "_dstEid": "The endpoint ID of the destination chain.", + "_message": "The message string to be sent.", + "_options": "Additional options for message execution." + }, + "returns": { + "receipt": "A `MessagingReceipt` struct containing details of the message sent." + } + }, + "setDelegate(address)": { + "details": "Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.", + "params": { + "_delegate": "The address of the delegate to be set." + } + }, + "setPeer(uint32,bytes32)": { + "details": "Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.", + "params": { + "_eid": "The endpoint ID.", + "_peer": "The address of the peer to be associated with the corresponding endpoint." + } + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "allowInitializePath((uint32,bytes32,uint64))": { + "notice": "Checks if the path initialization is allowed based on the provided origin." + }, + "endpoint()": { + "notice": "Retrieves the LayerZero endpoint associated with the OApp." + }, + "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { + "notice": "Indicates whether an address is an approved composeMsg sender to the Endpoint." + }, + "nextNonce(uint32,bytes32)": { + "notice": "Retrieves the next nonce for a given source endpoint and sender address." + }, + "oAppVersion()": { + "notice": "Retrieves the OApp version information." + }, + "peers(uint32)": { + "notice": "Retrieves the peer (OApp) associated with a corresponding endpoint." + }, + "quote(uint32,string,bytes,bool)": { + "notice": "Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token." + }, + "send(uint32,string,bytes)": { + "notice": "Sends a message from the source chain to a destination chain." + }, + "setDelegate(address)": { + "notice": "Sets the delegate address for the OApp." + }, + "setPeer(uint32,bytes32)": { + "notice": "Sets the peer address (OApp instance) for a corresponding endpoint." + } + }, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 1327, + "contract": "contracts/SimpleTestingOApp.sol:SimpleTestingOApp", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 64, + "contract": "contracts/SimpleTestingOApp.sol:SimpleTestingOApp", + "label": "peers", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_uint32,t_bytes32)" + }, + { + "astId": 2398, + "contract": "contracts/SimpleTestingOApp.sol:SimpleTestingOApp", + "label": "data", + "offset": 0, + "slot": "2", + "type": "t_uint256" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_uint32,t_bytes32)": { + "encoding": "mapping", + "key": "t_uint32", + "label": "mapping(uint32 => bytes32)", + "numberOfBytes": "32", + "value": "t_bytes32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "encoding": "inplace", + "label": "uint32", + "numberOfBytes": "4" + } + } + } +} \ No newline at end of file diff --git a/tests/e2e/testing_oapp/deployments/amoy-testnet/TestingOApp.json b/tests/e2e/testing_oapp/deployments/amoy-testnet/TestingOApp.json new file mode 100644 index 00000000..0b894c96 --- /dev/null +++ b/tests/e2e/testing_oapp/deployments/amoy-testnet/TestingOApp.json @@ -0,0 +1,810 @@ +{ + "address": "0xf934fdeA4aB0A3Ddf29df3f0203131E7d5d7bc7E", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_endpoint", + "type": "address" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "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" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "SafeERC20FailedOperation", + "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" + }, + { + "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": "data", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "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": [ + { + "internalType": "uint32", + "name": "_dstEid", + "type": "uint32" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + }, + { + "internalType": "bytes", + "name": "_options", + "type": "bytes" + }, + { + "internalType": "bool", + "name": "_payInLzToken", + "type": "bool" + } + ], + "name": "quote", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "nativeFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lzTokenFee", + "type": "uint256" + } + ], + "internalType": "struct MessagingFee", + "name": "fee", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_dstEid", + "type": "uint32" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + }, + { + "internalType": "bytes", + "name": "_options", + "type": "bytes" + } + ], + "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": "receipt", + "type": "tuple" + } + ], + "stateMutability": "payable", + "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" + } + ], + "transactionHash": "0xac286133702ab3bfdccafbe74ca47f2cd397707931b6999b3314a670d78fcccb", + "receipt": { + "to": null, + "from": "0x96E341c7E7537333AFa153d196038C6D086d5d2b", + "contractAddress": "0xf934fdeA4aB0A3Ddf29df3f0203131E7d5d7bc7E", + "transactionIndex": 1, + "gasUsed": "1212200", + "logsBloom": "0x0000000000000000000000000000000000000000200000000080000000000000000000000000000020000000000000000000c002020000000000000040000000000000000000000000000000000000800001000000000000000100000008000000000000020000100200000000000800000004000000000080000000000000400000200000000020000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004400000000000000000001000000000000000000000000400000100000000020000000000000000000000000000000000000000000000000000000000000100000", + "blockHash": "0x948c6c16e1b412cca8c7f60289df073802f8203f4fea88fbe7acabb4998f9eae", + "transactionHash": "0xac286133702ab3bfdccafbe74ca47f2cd397707931b6999b3314a670d78fcccb", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 14454089, + "transactionHash": "0xac286133702ab3bfdccafbe74ca47f2cd397707931b6999b3314a670d78fcccb", + "address": "0xf934fdeA4aB0A3Ddf29df3f0203131E7d5d7bc7E", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "logIndex": 3, + "blockHash": "0x948c6c16e1b412cca8c7f60289df073802f8203f4fea88fbe7acabb4998f9eae" + }, + { + "transactionIndex": 1, + "blockNumber": 14454089, + "transactionHash": "0xac286133702ab3bfdccafbe74ca47f2cd397707931b6999b3314a670d78fcccb", + "address": "0x6EDCE65403992e310A62460808c4b910D972f10f", + "topics": [ + "0x6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d7983981" + ], + "data": "0x000000000000000000000000f934fdea4ab0a3ddf29df3f0203131e7d5d7bc7e00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "logIndex": 4, + "blockHash": "0x948c6c16e1b412cca8c7f60289df073802f8203f4fea88fbe7acabb4998f9eae" + }, + { + "transactionIndex": 1, + "blockNumber": 14454089, + "transactionHash": "0xac286133702ab3bfdccafbe74ca47f2cd397707931b6999b3314a670d78fcccb", + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "0x0000000000000000000000004631753190f2f5a15a7ba172bbac102b7d95fa22" + ], + "data": "0x000000000000000000000000000000000000000000000000011bab89b4ad2ce8000000000000000000000000000000000000000000000000756186e38bac41030000000000000000000000000000000000000000000002fd9ce87564f154cfc30000000000000000000000000000000000000000000000007445db59d6ff141b0000000000000000000000000000000000000000000002fd9e0420eea601fcab", + "logIndex": 5, + "blockHash": "0x948c6c16e1b412cca8c7f60289df073802f8203f4fea88fbe7acabb4998f9eae" + } + ], + "blockNumber": 14454089, + "cumulativeGasUsed": "1320802", + "status": 1, + "byzantium": true + }, + "args": [ + "0x6EDCE65403992e310A62460808c4b910D972f10f", + "0x96E341c7E7537333AFa153d196038C6D086d5d2b" + ], + "numDeployments": 3, + "solcInputHash": "6e267ad209b523b5db9591b68bbd936f", + "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_endpoint\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"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\"},{\"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\":\"data\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"string\",\"name\":\"_message\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"quote\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"fee\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"string\",\"name\":\"_message\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"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\":\"receipt\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"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\"}],\"devdoc\":{\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"details\":\"This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.\",\"params\":{\"origin\":\"The origin information containing the source endpoint and sender address.\"},\"returns\":{\"_0\":\"Whether the path has been initialized.\"}},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"details\":\"_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.\",\"params\":{\"_sender\":\"The sender address.\"},\"returns\":{\"_0\":\"isSender Is a valid sender.\"}},\"lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.\",\"params\":{\"_executor\":\"The address of the executor for the received message.\",\"_extraData\":\"Additional arbitrary data provided by the corresponding executor.\",\"_guid\":\"The unique identifier for the received LayerZero message.\",\"_message\":\"The payload of the received message.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"nextNonce(uint32,bytes32)\":{\"details\":\"_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\",\"returns\":{\"nonce\":\"The next nonce.\"}},\"oAppVersion()\":{\"returns\":{\"receiverVersion\":\"The version of the OAppReceiver.sol implementation.\",\"senderVersion\":\"The version of the OAppSender.sol implementation.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"quote(uint32,string,bytes,bool)\":{\"params\":{\"_dstEid\":\"Destination chain's endpoint ID.\",\"_message\":\"The message.\",\"_options\":\"Message execution options (e.g., for sending gas to destination).\",\"_payInLzToken\":\"Whether to return fee in ZRO token.\"},\"returns\":{\"fee\":\"A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"send(uint32,string,bytes)\":{\"details\":\"Encodes the message as bytes and sends it using the `_lzSend` internal function.\",\"params\":{\"_dstEid\":\"The endpoint ID of the destination chain.\",\"_message\":\"The message string to be sent.\",\"_options\":\"Additional options for message execution.\"},\"returns\":{\"receipt\":\"A `MessagingReceipt` struct containing details of the message sent.\"}},\"setDelegate(address)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\",\"params\":{\"_delegate\":\"The address of the delegate to be set.\"}},\"setPeer(uint32,bytes32)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_peer\":\"The address of the peer to be associated with the corresponding endpoint.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"notice\":\"Checks if the path initialization is allowed based on the provided origin.\"},\"endpoint()\":{\"notice\":\"Retrieves the LayerZero endpoint associated with the OApp.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"notice\":\"Indicates whether an address is an approved composeMsg sender to the Endpoint.\"},\"nextNonce(uint32,bytes32)\":{\"notice\":\"Retrieves the next nonce for a given source endpoint and sender address.\"},\"oAppVersion()\":{\"notice\":\"Retrieves the OApp version information.\"},\"peers(uint32)\":{\"notice\":\"Retrieves the peer (OApp) associated with a corresponding endpoint.\"},\"quote(uint32,string,bytes,bool)\":{\"notice\":\"Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token.\"},\"send(uint32,string,bytes)\":{\"notice\":\"Sends a message from the source chain to a destination chain.\"},\"setDelegate(address)\":{\"notice\":\"Sets the delegate address for the OApp.\"},\"setPeer(uint32,bytes32)\":{\"notice\":\"Sets the peer address (OApp instance) for a corresponding endpoint.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/TestingOApp.sol\":\"TestingOApp\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\n// @dev Import the 'MessagingFee' and 'MessagingReceipt' so it's exposed to OApp implementers\\n// solhint-disable-next-line no-unused-import\\nimport { OAppSender, MessagingFee, MessagingReceipt } from \\\"./OAppSender.sol\\\";\\n// @dev Import the 'Origin' so it's exposed to OApp implementers\\n// solhint-disable-next-line no-unused-import\\nimport { OAppReceiver, Origin } from \\\"./OAppReceiver.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OApp\\n * @dev Abstract contract serving as the base for OApp implementation, combining OAppSender and OAppReceiver functionality.\\n */\\nabstract contract OApp is OAppSender, OAppReceiver {\\n /**\\n * @dev Constructor to initialize the OApp with the provided endpoint and owner.\\n * @param _endpoint The address of the LOCAL LayerZero endpoint.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n */\\n constructor(address _endpoint, address _delegate) OAppCore(_endpoint, _delegate) {}\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol implementation.\\n * @return receiverVersion The version of the OAppReceiver.sol implementation.\\n */\\n function oAppVersion()\\n public\\n pure\\n virtual\\n override(OAppSender, OAppReceiver)\\n returns (uint64 senderVersion, uint64 receiverVersion)\\n {\\n return (SENDER_VERSION, RECEIVER_VERSION);\\n }\\n}\\n\",\"keccak256\":\"0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { IOAppCore, ILayerZeroEndpointV2 } from \\\"./interfaces/IOAppCore.sol\\\";\\n\\n/**\\n * @title OAppCore\\n * @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations.\\n */\\nabstract contract OAppCore is IOAppCore, Ownable {\\n // The LayerZero endpoint associated with the given OApp\\n ILayerZeroEndpointV2 public immutable endpoint;\\n\\n // Mapping to store peers associated with corresponding endpoints\\n mapping(uint32 eid => bytes32 peer) public peers;\\n\\n /**\\n * @dev Constructor to initialize the OAppCore with the provided endpoint and delegate.\\n * @param _endpoint The address of the LOCAL Layer Zero endpoint.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n *\\n * @dev The delegate typically should be set as the owner of the contract.\\n */\\n constructor(address _endpoint, address _delegate) {\\n endpoint = ILayerZeroEndpointV2(_endpoint);\\n\\n if (_delegate == address(0)) revert InvalidDelegate();\\n endpoint.setDelegate(_delegate);\\n }\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\\n * @dev Set this to bytes32(0) to remove the peer address.\\n * @dev Peer is a bytes32 to accommodate non-evm chains.\\n */\\n function setPeer(uint32 _eid, bytes32 _peer) public virtual onlyOwner {\\n _setPeer(_eid, _peer);\\n }\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n *\\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\\n * @dev Set this to bytes32(0) to remove the peer address.\\n * @dev Peer is a bytes32 to accommodate non-evm chains.\\n */\\n function _setPeer(uint32 _eid, bytes32 _peer) internal virtual {\\n peers[_eid] = _peer;\\n emit PeerSet(_eid, _peer);\\n }\\n\\n /**\\n * @notice Internal function to get the peer address associated with a specific endpoint; reverts if NOT set.\\n * ie. the peer is set to bytes32(0).\\n * @param _eid The endpoint ID.\\n * @return peer The address of the peer associated with the specified endpoint.\\n */\\n function _getPeerOrRevert(uint32 _eid) internal view virtual returns (bytes32) {\\n bytes32 peer = peers[_eid];\\n if (peer == bytes32(0)) revert NoPeer(_eid);\\n return peer;\\n }\\n\\n /**\\n * @notice Sets the delegate address for the OApp.\\n * @param _delegate The address of the delegate to be set.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\\n */\\n function setDelegate(address _delegate) public onlyOwner {\\n endpoint.setDelegate(_delegate);\\n }\\n}\\n\",\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { IOAppReceiver, Origin } from \\\"./interfaces/IOAppReceiver.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OAppReceiver\\n * @dev Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers.\\n */\\nabstract contract OAppReceiver is IOAppReceiver, OAppCore {\\n // Custom error message for when the caller is not the registered endpoint/\\n error OnlyEndpoint(address addr);\\n\\n // @dev The version of the OAppReceiver implementation.\\n // @dev Version is bumped when changes are made to this contract.\\n uint64 internal constant RECEIVER_VERSION = 2;\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n *\\n * @dev Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented.\\n * ie. this is a RECEIVE only OApp.\\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions.\\n */\\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\\n return (0, RECEIVER_VERSION);\\n }\\n\\n /**\\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\\n * @dev _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @dev _message The lzReceive payload.\\n * @param _sender The sender address.\\n * @return isSender Is a valid sender.\\n *\\n * @dev Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.\\n * @dev The default sender IS the OAppReceiver implementer.\\n */\\n function isComposeMsgSender(\\n Origin calldata /*_origin*/,\\n bytes calldata /*_message*/,\\n address _sender\\n ) public view virtual returns (bool) {\\n return _sender == address(this);\\n }\\n\\n /**\\n * @notice Checks if the path initialization is allowed based on the provided origin.\\n * @param origin The origin information containing the source endpoint and sender address.\\n * @return Whether the path has been initialized.\\n *\\n * @dev This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.\\n * @dev This defaults to assuming if a peer has been set, its initialized.\\n * Can be overridden by the OApp if there is other logic to determine this.\\n */\\n function allowInitializePath(Origin calldata origin) public view virtual returns (bool) {\\n return peers[origin.srcEid] == origin.sender;\\n }\\n\\n /**\\n * @notice Retrieves the next nonce for a given source endpoint and sender address.\\n * @dev _srcEid The source endpoint ID.\\n * @dev _sender The sender address.\\n * @return nonce The next nonce.\\n *\\n * @dev The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.\\n * @dev Is required by the off-chain executor to determine the OApp expects msg execution is ordered.\\n * @dev This is also enforced by the OApp.\\n * @dev By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\\n */\\n function nextNonce(uint32 /*_srcEid*/, bytes32 /*_sender*/) public view virtual returns (uint64 nonce) {\\n return 0;\\n }\\n\\n /**\\n * @dev Entry point for receiving messages or packets from the endpoint.\\n * @param _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @param _guid The unique identifier for the received LayerZero message.\\n * @param _message The payload of the received message.\\n * @param _executor The address of the executor for the received message.\\n * @param _extraData Additional arbitrary data provided by the corresponding executor.\\n *\\n * @dev Entry point for receiving msg/packet from the LayerZero endpoint.\\n */\\n function lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) public payable virtual {\\n // Ensures that only the endpoint can attempt to lzReceive() messages to this OApp.\\n if (address(endpoint) != msg.sender) revert OnlyEndpoint(msg.sender);\\n\\n // Ensure that the sender matches the expected peer for the source endpoint.\\n if (_getPeerOrRevert(_origin.srcEid) != _origin.sender) revert OnlyPeer(_origin.srcEid, _origin.sender);\\n\\n // Call the internal OApp implementation of lzReceive.\\n _lzReceive(_origin, _guid, _message, _executor, _extraData);\\n }\\n\\n /**\\n * @dev Internal function to implement lzReceive logic without needing to copy the basic parameter validation.\\n */\\n function _lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { SafeERC20, IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport { MessagingParams, MessagingFee, MessagingReceipt } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OAppSender\\n * @dev Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.\\n */\\nabstract contract OAppSender is OAppCore {\\n using SafeERC20 for IERC20;\\n\\n // Custom error messages\\n error NotEnoughNative(uint256 msgValue);\\n error LzTokenUnavailable();\\n\\n // @dev The version of the OAppSender implementation.\\n // @dev Version is bumped when changes are made to this contract.\\n uint64 internal constant SENDER_VERSION = 1;\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n *\\n * @dev Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented.\\n * ie. this is a SEND only OApp.\\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions\\n */\\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\\n return (SENDER_VERSION, 0);\\n }\\n\\n /**\\n * @dev Internal function to interact with the LayerZero EndpointV2.quote() for fee calculation.\\n * @param _dstEid The destination endpoint ID.\\n * @param _message The message payload.\\n * @param _options Additional options for the message.\\n * @param _payInLzToken Flag indicating whether to pay the fee in LZ tokens.\\n * @return fee The calculated MessagingFee for the message.\\n * - nativeFee: The native fee for the message.\\n * - lzTokenFee: The LZ token fee for the message.\\n */\\n function _quote(\\n uint32 _dstEid,\\n bytes memory _message,\\n bytes memory _options,\\n bool _payInLzToken\\n ) internal view virtual returns (MessagingFee memory fee) {\\n return\\n endpoint.quote(\\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _payInLzToken),\\n address(this)\\n );\\n }\\n\\n /**\\n * @dev Internal function to interact with the LayerZero EndpointV2.send() for sending a message.\\n * @param _dstEid The destination endpoint ID.\\n * @param _message The message payload.\\n * @param _options Additional options for the message.\\n * @param _fee The calculated LayerZero fee for the message.\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n * @param _refundAddress The address to receive any excess fee values sent to the endpoint.\\n * @return receipt The receipt for the sent message.\\n * - guid: The unique identifier for the sent message.\\n * - nonce: The nonce of the sent message.\\n * - fee: The LayerZero fee incurred for the message.\\n */\\n function _lzSend(\\n uint32 _dstEid,\\n bytes memory _message,\\n bytes memory _options,\\n MessagingFee memory _fee,\\n address _refundAddress\\n ) internal virtual returns (MessagingReceipt memory receipt) {\\n // @dev Push corresponding fees to the endpoint, any excess is sent back to the _refundAddress from the endpoint.\\n uint256 messageValue = _payNative(_fee.nativeFee);\\n if (_fee.lzTokenFee > 0) _payLzToken(_fee.lzTokenFee);\\n\\n return\\n // solhint-disable-next-line check-send-result\\n endpoint.send{ value: messageValue }(\\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _fee.lzTokenFee > 0),\\n _refundAddress\\n );\\n }\\n\\n /**\\n * @dev Internal function to pay the native fee associated with the message.\\n * @param _nativeFee The native fee to be paid.\\n * @return nativeFee The amount of native currency paid.\\n *\\n * @dev If the OApp needs to initiate MULTIPLE LayerZero messages in a single transaction,\\n * this will need to be overridden because msg.value would contain multiple lzFees.\\n * @dev Should be overridden in the event the LayerZero endpoint requires a different native currency.\\n * @dev Some EVMs use an ERC20 as a method for paying transactions/gasFees.\\n * @dev The endpoint is EITHER/OR, ie. it will NOT support both types of native payment at a time.\\n */\\n function _payNative(uint256 _nativeFee) internal virtual returns (uint256 nativeFee) {\\n if (msg.value != _nativeFee) revert NotEnoughNative(msg.value);\\n return _nativeFee;\\n }\\n\\n /**\\n * @dev Internal function to pay the LZ token fee associated with the message.\\n * @param _lzTokenFee The LZ token fee to be paid.\\n *\\n * @dev If the caller is trying to pay in the specified lzToken, then the lzTokenFee is passed to the endpoint.\\n * @dev Any excess sent, is passed back to the specified _refundAddress in the _lzSend().\\n */\\n function _payLzToken(uint256 _lzTokenFee) internal virtual {\\n // @dev Cannot cache the token because it is not immutable in the endpoint.\\n address lzToken = endpoint.lzToken();\\n if (lzToken == address(0)) revert LzTokenUnavailable();\\n\\n // Pay LZ token fee by sending tokens to the endpoint.\\n IERC20(lzToken).safeTransferFrom(msg.sender, address(endpoint), _lzTokenFee);\\n }\\n}\\n\",\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { ILayerZeroEndpointV2 } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\n\\n/**\\n * @title IOAppCore\\n */\\ninterface IOAppCore {\\n // Custom error messages\\n error OnlyPeer(uint32 eid, bytes32 sender);\\n error NoPeer(uint32 eid);\\n error InvalidEndpointCall();\\n error InvalidDelegate();\\n\\n // Event emitted when a peer (OApp) is set for a corresponding endpoint\\n event PeerSet(uint32 eid, bytes32 peer);\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n */\\n function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);\\n\\n /**\\n * @notice Retrieves the LayerZero endpoint associated with the OApp.\\n * @return iEndpoint The LayerZero endpoint as an interface.\\n */\\n function endpoint() external view returns (ILayerZeroEndpointV2 iEndpoint);\\n\\n /**\\n * @notice Retrieves the peer (OApp) associated with a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @return peer The peer address (OApp instance) associated with the corresponding endpoint.\\n */\\n function peers(uint32 _eid) external view returns (bytes32 peer);\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n */\\n function setPeer(uint32 _eid, bytes32 _peer) external;\\n\\n /**\\n * @notice Sets the delegate address for the OApp Core.\\n * @param _delegate The address of the delegate to be set.\\n */\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.20;\\n\\nimport { ILayerZeroReceiver, Origin } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\\\";\\n\\ninterface IOAppReceiver is ILayerZeroReceiver {\\n /**\\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\\n * @param _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @param _message The lzReceive payload.\\n * @param _sender The sender address.\\n * @return isSender Is a valid sender.\\n *\\n * @dev Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.\\n * @dev The default sender IS the OAppReceiver implementer.\\n */\\n function isComposeMsgSender(\\n Origin calldata _origin,\\n bytes calldata _message,\\n address _sender\\n ) external view returns (bool isSender);\\n}\\n\",\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IMessageLibManager } from \\\"./IMessageLibManager.sol\\\";\\nimport { IMessagingComposer } from \\\"./IMessagingComposer.sol\\\";\\nimport { IMessagingChannel } from \\\"./IMessagingChannel.sol\\\";\\nimport { IMessagingContext } from \\\"./IMessagingContext.sol\\\";\\n\\nstruct MessagingParams {\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes message;\\n bytes options;\\n bool payInLzToken;\\n}\\n\\nstruct MessagingReceipt {\\n bytes32 guid;\\n uint64 nonce;\\n MessagingFee fee;\\n}\\n\\nstruct MessagingFee {\\n uint256 nativeFee;\\n uint256 lzTokenFee;\\n}\\n\\nstruct Origin {\\n uint32 srcEid;\\n bytes32 sender;\\n uint64 nonce;\\n}\\n\\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\\n\\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\\n\\n event PacketDelivered(Origin origin, address receiver);\\n\\n event LzReceiveAlert(\\n address indexed receiver,\\n address indexed executor,\\n Origin origin,\\n bytes32 guid,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n event LzTokenSet(address token);\\n\\n event DelegateSet(address sender, address delegate);\\n\\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\\n\\n function send(\\n MessagingParams calldata _params,\\n address _refundAddress\\n ) external payable returns (MessagingReceipt memory);\\n\\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\\n\\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n address _receiver,\\n bytes32 _guid,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n\\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\\n\\n function setLzToken(address _lzToken) external;\\n\\n function lzToken() external view returns (address);\\n\\n function nativeToken() external view returns (address);\\n\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { Origin } from \\\"./ILayerZeroEndpointV2.sol\\\";\\n\\ninterface ILayerZeroReceiver {\\n function allowInitializePath(Origin calldata _origin) external view returns (bool);\\n\\n function nextNonce(uint32 _eid, bytes32 _sender) external view returns (uint64);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nstruct SetConfigParam {\\n uint32 eid;\\n uint32 configType;\\n bytes config;\\n}\\n\\ninterface IMessageLibManager {\\n struct Timeout {\\n address lib;\\n uint256 expiry;\\n }\\n\\n event LibraryRegistered(address newLib);\\n event DefaultSendLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\\n event SendLibrarySet(address sender, uint32 eid, address newLib);\\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\\n\\n function registerLibrary(address _lib) external;\\n\\n function isRegisteredLibrary(address _lib) external view returns (bool);\\n\\n function getRegisteredLibraries() external view returns (address[] memory);\\n\\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\\n\\n function defaultSendLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\\n\\n /// ------------------- OApp interfaces -------------------\\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\\n\\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\\n\\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\\n\\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\\n\\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\\n\\n function getConfig(\\n address _oapp,\\n address _lib,\\n uint32 _eid,\\n uint32 _configType\\n ) external view returns (bytes memory config);\\n}\\n\",\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingChannel {\\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n\\n function eid() external view returns (uint32);\\n\\n // this is an emergency function if a message cannot be verified for some reasons\\n // required to provide _nextNonce to avoid race condition\\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\\n\\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\\n\\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n\\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\\n\\n function inboundPayloadHash(\\n address _receiver,\\n uint32 _srcEid,\\n bytes32 _sender,\\n uint64 _nonce\\n ) external view returns (bytes32);\\n\\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n}\\n\",\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingComposer {\\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\\n event LzComposeAlert(\\n address indexed from,\\n address indexed to,\\n address indexed executor,\\n bytes32 guid,\\n uint16 index,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n function composeQueue(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index\\n ) external view returns (bytes32 messageHash);\\n\\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\\n\\n function lzCompose(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingContext {\\n function isSendingMessage() external view returns (bool);\\n\\n function getSendContext() external view returns (uint32 dstEid, address sender);\\n}\\n\",\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Context} from \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * The initial owner is set to the address provided by the deployer. This can\\n * later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n /**\\n * @dev The caller account is not authorized to perform an operation.\\n */\\n error OwnableUnauthorizedAccount(address account);\\n\\n /**\\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\\n */\\n error OwnableInvalidOwner(address owner);\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\\n */\\n constructor(address initialOwner) {\\n if (initialOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n if (owner() != _msgSender()) {\\n revert OwnableUnauthorizedAccount(_msgSender());\\n }\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby disabling any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n if (newOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"./IERC20.sol\\\";\\nimport {IERC165} from \\\"./IERC165.sol\\\";\\n\\n/**\\n * @title IERC1363\\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\\n *\\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\\n */\\ninterface IERC1363 is IERC20, IERC165 {\\n /*\\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\\n * 0xb0202a11 ===\\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\\n */\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferAndCall(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @param data Additional data with no specified format, sent in call to `to`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param from The address which you want to send tokens from.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param from The address which you want to send tokens from.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @param data Additional data with no specified format, sent in call to `to`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\\n * @param spender The address which will spend the funds.\\n * @param value The amount of tokens to be spent.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function approveAndCall(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\\n * @param spender The address which will spend the funds.\\n * @param value The amount of tokens to be spent.\\n * @param data Additional data with no specified format, sent in call to `spender`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC165} from \\\"../utils/introspection/IERC165.sol\\\";\\n\",\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../token/ERC20/IERC20.sol\\\";\\n\",\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../IERC20.sol\\\";\\nimport {IERC1363} from \\\"../../../interfaces/IERC1363.sol\\\";\\nimport {Address} from \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n /**\\n * @dev An operation with an ERC-20 token failed.\\n */\\n error SafeERC20FailedOperation(address token);\\n\\n /**\\n * @dev Indicates a failed `decreaseAllowance` request.\\n */\\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\\n\\n /**\\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful.\\n */\\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\\n }\\n\\n /**\\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\\n */\\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\\n }\\n\\n /**\\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful.\\n *\\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \\\"client\\\"\\n * smart contract uses ERC-7674 to set temporary allowances, then the \\\"client\\\" smart contract should avoid using\\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\\n */\\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n forceApprove(token, spender, oldAllowance + value);\\n }\\n\\n /**\\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\\n * value, non-reverting calls are assumed to be successful.\\n *\\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \\\"client\\\"\\n * smart contract uses ERC-7674 to set temporary allowances, then the \\\"client\\\" smart contract should avoid using\\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\\n */\\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\\n unchecked {\\n uint256 currentAllowance = token.allowance(address(this), spender);\\n if (currentAllowance < requestedDecrease) {\\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\\n }\\n forceApprove(token, spender, currentAllowance - requestedDecrease);\\n }\\n }\\n\\n /**\\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\\n * to be set to zero before setting it to a non-zero value, such as USDT.\\n *\\n * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\\n * only sets the \\\"standard\\\" allowance. Any temporary allowance will remain active, in addition to the value being\\n * set here.\\n */\\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\\n\\n if (!_callOptionalReturnBool(token, approvalCall)) {\\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\\n _callOptionalReturn(token, approvalCall);\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\\n if (to.code.length == 0) {\\n safeTransfer(token, to, value);\\n } else if (!token.transferAndCall(to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\\n * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function transferFromAndCallRelaxed(\\n IERC1363 token,\\n address from,\\n address to,\\n uint256 value,\\n bytes memory data\\n ) internal {\\n if (to.code.length == 0) {\\n safeTransferFrom(token, from, to, value);\\n } else if (!token.transferFromAndCall(from, to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\\n * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\\n * once without retrying, and relies on the returned value to be true.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\\n if (to.code.length == 0) {\\n forceApprove(token, to, value);\\n } else if (!token.approveAndCall(to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n *\\n * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n uint256 returnSize;\\n uint256 returnValue;\\n assembly (\\\"memory-safe\\\") {\\n let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n // bubble errors\\n if iszero(success) {\\n let ptr := mload(0x40)\\n returndatacopy(ptr, 0, returndatasize())\\n revert(ptr, returndatasize())\\n }\\n returnSize := returndatasize()\\n returnValue := mload(0)\\n }\\n\\n if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n *\\n * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\\n */\\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\\n bool success;\\n uint256 returnSize;\\n uint256 returnValue;\\n assembly (\\\"memory-safe\\\") {\\n success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n returnSize := returndatasize()\\n returnValue := mload(0)\\n }\\n return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\\n }\\n}\\n\",\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Errors} from \\\"./Errors.sol\\\";\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev There's no code at `target` (it is not a contract).\\n */\\n error AddressEmptyCode(address target);\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n if (address(this).balance < amount) {\\n revert Errors.InsufficientBalance(address(this).balance, amount);\\n }\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n if (!success) {\\n revert Errors.FailedCall();\\n }\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason or custom error, it is bubbled\\n * up by this function (like regular Solidity function calls). However, if\\n * the call reverted with no returned reason, this function reverts with a\\n * {Errors.FailedCall} error.\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n if (address(this).balance < value) {\\n revert Errors.InsufficientBalance(address(this).balance, value);\\n }\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\\n * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\\n * of an unsuccessful call.\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata\\n ) internal view returns (bytes memory) {\\n if (!success) {\\n _revert(returndata);\\n } else {\\n // only check if target is a contract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n if (returndata.length == 0 && target.code.length == 0) {\\n revert AddressEmptyCode(target);\\n }\\n return returndata;\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\\n * revert reason or with a default {Errors.FailedCall} error.\\n */\\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\\n if (!success) {\\n _revert(returndata);\\n } else {\\n return returndata;\\n }\\n }\\n\\n /**\\n * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\\n */\\n function _revert(bytes memory returndata) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n assembly (\\\"memory-safe\\\") {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert Errors.FailedCall();\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Collection of common custom errors used in multiple contracts\\n *\\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\\n * It is recommended to avoid relying on the error API for critical functionality.\\n *\\n * _Available since v5.1._\\n */\\nlibrary Errors {\\n /**\\n * @dev The ETH balance of the account is not enough to perform the operation.\\n */\\n error InsufficientBalance(uint256 balance, uint256 needed);\\n\\n /**\\n * @dev A call to an address target failed. The target may have reverted.\\n */\\n error FailedCall();\\n\\n /**\\n * @dev The deployment failed.\\n */\\n error FailedDeployment();\\n\\n /**\\n * @dev A necessary precompile is missing.\\n */\\n error MissingPrecompile(address);\\n}\\n\",\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\"},\"contracts/TestingOApp.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.22;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { OApp, MessagingFee, Origin } from \\\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol\\\";\\nimport { MessagingReceipt } from \\\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol\\\";\\n\\ncontract TestingOApp is OApp {\\n constructor(address _endpoint, address _delegate) OApp(_endpoint, _delegate) Ownable(_delegate) {}\\n\\n string public data = \\\"nothing received yet\\\";\\n\\n /**\\n * @notice Sends a message from the source chain to a destination chain.\\n * @param _dstEid The endpoint ID of the destination chain.\\n * @param _message The message string to be sent.\\n * @param _options Additional options for message execution.\\n * @dev Encodes the message as bytes and sends it using the `_lzSend` internal function.\\n * @return receipt A `MessagingReceipt` struct containing details of the message sent.\\n */\\n function send(\\n uint32 _dstEid,\\n string memory _message,\\n bytes calldata _options\\n ) external payable returns (MessagingReceipt memory receipt) {\\n bytes memory _payload = abi.encode(_message);\\n receipt = _lzSend(_dstEid, _payload, _options, MessagingFee(msg.value, 0), payable(msg.sender));\\n }\\n\\n /**\\n * @notice Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token.\\n * @param _dstEid Destination chain's endpoint ID.\\n * @param _message The message.\\n * @param _options Message execution options (e.g., for sending gas to destination).\\n * @param _payInLzToken Whether to return fee in ZRO token.\\n * @return fee A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token.\\n */\\n function quote(\\n uint32 _dstEid,\\n string memory _message,\\n bytes memory _options,\\n bool _payInLzToken\\n ) public view returns (MessagingFee memory fee) {\\n bytes memory payload = abi.encode(_message);\\n fee = _quote(_dstEid, payload, _options, _payInLzToken);\\n }\\n\\n /**\\n * @dev Internal function override to handle incoming messages from another chain.\\n * @dev _origin A struct containing information about the message sender.\\n * @dev _guid A unique global packet identifier for the message.\\n * @param payload The encoded message payload being received.\\n *\\n * @dev The following params are unused in the current implementation of the OApp.\\n * @dev _executor The address of the Executor responsible for processing the message.\\n * @dev _extraData Arbitrary data appended by the Executor to the message.\\n *\\n * Decodes the received payload and processes it as per the business logic defined in the function.\\n */\\n function _lzReceive(\\n Origin calldata /*_origin*/,\\n bytes32 /*_guid*/,\\n bytes calldata payload,\\n address /*_executor*/,\\n bytes calldata /*_extraData*/\\n ) internal override {\\n data = abi.decode(payload, (string));\\n }\\n}\\n\",\"keccak256\":\"0xeb1cc77e7b61bb8532270b2e3df333a10272d9ec0b44be6212039d7ebb69e193\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x60e0604052601460a09081527f6e6f7468696e672072656365697665642079657400000000000000000000000060c0526002906200003e908262000241565b503480156200004c57600080fd5b5060405162001714380380620017148339810160408190526200006f916200032a565b81818181806001600160a01b038116620000a357604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000ae816200014a565b506001600160a01b038083166080528116620000dd57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e190602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b5050505050505050505062000362565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001c557607f821691505b602082108103620001e657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200023c576000816000526020600020601f850160051c81016020861015620002175750805b601f850160051c820191505b81811015620002385782815560010162000223565b5050505b505050565b81516001600160401b038111156200025d576200025d6200019a565b62000275816200026e8454620001b0565b84620001ec565b602080601f831160018114620002ad5760008415620002945750858301515b600019600386901b1c1916600185901b17855562000238565b600085815260208120601f198616915b82811015620002de57888601518255948401946001909101908401620002bd565b5085821015620002fd5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80516001600160a01b03811681146200032557600080fd5b919050565b600080604083850312156200033e57600080fd5b62000349836200030d565b915062000359602084016200030d565b90509250929050565b60805161136c620003a86000396000818161015b0152818161034b015281816104f1015281816107f5015281816108e3015281816109da0152610a91015261136c6000f3fe6080604052600436106100e85760003560e01c806382413eac1161008a578063e0539e5811610059578063e0539e58146102bc578063f2fde38b146102dc578063f77e5dd3146102fc578063ff7bd03d1461032957600080fd5b806382413eac146102045780638da5cb5b14610243578063bb0b6a5314610261578063ca5eb5e11461029c57600080fd5b80635e280f11116100c65780635e280f1114610149578063715018a61461019557806373d4a13a146101aa5780637d25a05e146101cc57600080fd5b806313137d65146100ed57806317442b70146101025780633400288b14610129575b600080fd5b6101006100fb366004610c3b565b610349565b005b34801561010e57600080fd5b50604080516001815260026020820152015b60405180910390f35b34801561013557600080fd5b50610100610144366004610cf3565b610409565b34801561015557600080fd5b5061017d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610120565b3480156101a157600080fd5b5061010061041f565b3480156101b657600080fd5b506101bf610433565b6040516101209190610d63565b3480156101d857600080fd5b506101ec6101e7366004610cf3565b6104c1565b6040516001600160401b039091168152602001610120565b34801561021057600080fd5b5061023361021f366004610d7d565b6001600160a01b0381163014949350505050565b6040519015158152602001610120565b34801561024f57600080fd5b506000546001600160a01b031661017d565b34801561026d57600080fd5b5061028e61027c366004610de3565b60016020526000908152604090205481565b604051908152602001610120565b3480156102a857600080fd5b506101006102b7366004610dfe565b6104ca565b6102cf6102ca366004610ec6565b610550565b6040516101209190610f3c565b3480156102e857600080fd5b506101006102f7366004610dfe565b6105d9565b34801561030857600080fd5b5061031c610317366004610f7e565b610617565b6040516101209190611012565b34801561033557600080fd5b50610233610344366004611029565b61065b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610399576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b602087018035906103b3906103ae908a610de3565b610691565b146103f1576103c56020880188610de3565b60405163309afaf360e21b815263ffffffff909116600482015260208801356024820152604401610390565b610400878787878787876106cd565b50505050505050565b6104116106f0565b61041b828261071d565b5050565b6104276106f0565b6104316000610772565b565b6002805461044090611045565b80601f016020809104026020016040519081016040528092919081815260200182805461046c90611045565b80156104b95780601f1061048e576101008083540402835291602001916104b9565b820191906000526020600020905b81548152906001019060200180831161049c57829003601f168201915b505050505081565b60005b92915050565b6104d26106f0565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561053557600080fd5b505af1158015610549573d6000803e3d6000fd5b5050505050565b610558610b7f565b60008460405160200161056b9190610d63565b60408051601f198184030181526020601f870181900481028401810190925285835292506105cf9188918491908890889081908401838280828437600092018290525060408051808201909152348152602081019190915292503391506107c29050565b9695505050505050565b6105e16106f0565b6001600160a01b03811661060b57604051631e4fbdf760e01b815260006004820152602401610390565b61061481610772565b50565b604080518082019091526000808252602082015260008460405160200161063e9190610d63565b60405160208183030381529060405290506105cf868286866108cd565b60006020820180359060019083906106739086610de3565b63ffffffff1681526020810191909152604001600020541492915050565b63ffffffff8116600090815260016020526040812054806104c45760405163f6ff4fb760e01b815263ffffffff84166004820152602401610390565b6106d984860186611079565b6002906106e69082611106565b5050505050505050565b6000546001600160a01b031633146104315760405163118cdaa760e01b8152336004820152602401610390565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6107ca610b7f565b60006107d984600001516109ae565b6020850151909150156107f3576107f384602001516109d6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff1681526020016108438c610691565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b815260040161087f9291906111c5565b60806040518083038185885af115801561089d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906108c2919061128c565b979650505050505050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff16815260200161093089610691565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b81526004016109659291906111c5565b6040805180830381865afa158015610981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a591906112fd565b95945050505050565b60008134146109d2576040516304fb820960e51b8152346004820152602401610390565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5a9190611319565b90506001600160a01b038116610a83576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03818116604485015260648085018890528551808603909101815260849094019094526020830180516001600160e01b03166323b872dd60e01b17905261041b938516928690610b08908590610b0e565b50505050565b600080602060008451602086016000885af180610b31576040513d6000823e3d81fd5b50506000513d91508115610b49578060011415610b56565b6001600160a01b0384163b155b15610b0857604051635274afe760e01b81526001600160a01b0385166004820152602401610390565b60405180606001604052806000801916815260200160006001600160401b03168152602001610bc1604051806040016040528060008152602001600081525090565b905290565b600060608284031215610bd857600080fd5b50919050565b60008083601f840112610bf057600080fd5b5081356001600160401b03811115610c0757600080fd5b602083019150836020828501011115610c1f57600080fd5b9250929050565b6001600160a01b038116811461061457600080fd5b600080600080600080600060e0888a031215610c5657600080fd5b610c608989610bc6565b96506060880135955060808801356001600160401b0380821115610c8357600080fd5b610c8f8b838c01610bde565b909750955060a08a01359150610ca482610c26565b90935060c08901359080821115610cba57600080fd5b50610cc78a828b01610bde565b989b979a50959850939692959293505050565b803563ffffffff81168114610cee57600080fd5b919050565b60008060408385031215610d0657600080fd5b610d0f83610cda565b946020939093013593505050565b6000815180845260005b81811015610d4357602081850181015186830182015201610d27565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610d766020830184610d1d565b9392505050565b60008060008060a08587031215610d9357600080fd5b610d9d8686610bc6565b935060608501356001600160401b03811115610db857600080fd5b610dc487828801610bde565b9094509250506080850135610dd881610c26565b939692955090935050565b600060208284031215610df557600080fd5b610d7682610cda565b600060208284031215610e1057600080fd5b8135610d7681610c26565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115610e4b57610e4b610e1b565b604051601f8501601f19908116603f01168101908282118183101715610e7357610e73610e1b565b81604052809350858152868686011115610e8c57600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112610eb757600080fd5b610d7683833560208501610e31565b60008060008060608587031215610edc57600080fd5b610ee585610cda565b935060208501356001600160401b0380821115610f0157600080fd5b610f0d88838901610ea6565b94506040870135915080821115610f2357600080fd5b50610f3087828801610bde565b95989497509550505050565b6000608082019050825182526001600160401b0360208401511660208301526040830151610f77604084018280518252602090810151910152565b5092915050565b60008060008060808587031215610f9457600080fd5b610f9d85610cda565b935060208501356001600160401b0380821115610fb957600080fd5b610fc588838901610ea6565b94506040870135915080821115610fdb57600080fd5b508501601f81018713610fed57600080fd5b610ffc87823560208401610e31565b92505060608501358015158114610dd857600080fd5b8151815260208083015190820152604081016104c4565b60006060828403121561103b57600080fd5b610d768383610bc6565b600181811c9082168061105957607f821691505b602082108103610bd857634e487b7160e01b600052602260045260246000fd5b60006020828403121561108b57600080fd5b81356001600160401b038111156110a157600080fd5b6110ad84828501610ea6565b949350505050565b601f821115611101576000816000526020600020601f850160051c810160208610156110de5750805b601f850160051c820191505b818110156110fd578281556001016110ea565b5050505b505050565b81516001600160401b0381111561111f5761111f610e1b565b6111338161112d8454611045565b846110b5565b602080601f83116001811461116857600084156111505750858301515b600019600386901b1c1916600185901b1785556110fd565b600085815260208120601f198616915b8281101561119757888601518255948401946001909101908401611178565b50858210156111b55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a060808401526111fb60e0840182610d1d565b90506060850151603f198483030160a08501526112188282610d1d565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b60006040828403121561125057600080fd5b604051604081018181106001600160401b038211171561127257611272610e1b565b604052825181526020928301519281019290925250919050565b60006080828403121561129e57600080fd5b604051606081016001600160401b0382821081831117156112c1576112c1610e1b565b81604052845183526020850151915080821682146112de57600080fd5b5060208201526112f1846040850161123e565b60408201529392505050565b60006040828403121561130f57600080fd5b610d76838361123e565b60006020828403121561132b57600080fd5b8151610d7681610c2656fea26469706673582212203017c944155c3f234bb3739e3866ebf99c20e7b7c0028c651c3564360cf944be64736f6c63430008160033", + "deployedBytecode": "0x6080604052600436106100e85760003560e01c806382413eac1161008a578063e0539e5811610059578063e0539e58146102bc578063f2fde38b146102dc578063f77e5dd3146102fc578063ff7bd03d1461032957600080fd5b806382413eac146102045780638da5cb5b14610243578063bb0b6a5314610261578063ca5eb5e11461029c57600080fd5b80635e280f11116100c65780635e280f1114610149578063715018a61461019557806373d4a13a146101aa5780637d25a05e146101cc57600080fd5b806313137d65146100ed57806317442b70146101025780633400288b14610129575b600080fd5b6101006100fb366004610c3b565b610349565b005b34801561010e57600080fd5b50604080516001815260026020820152015b60405180910390f35b34801561013557600080fd5b50610100610144366004610cf3565b610409565b34801561015557600080fd5b5061017d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610120565b3480156101a157600080fd5b5061010061041f565b3480156101b657600080fd5b506101bf610433565b6040516101209190610d63565b3480156101d857600080fd5b506101ec6101e7366004610cf3565b6104c1565b6040516001600160401b039091168152602001610120565b34801561021057600080fd5b5061023361021f366004610d7d565b6001600160a01b0381163014949350505050565b6040519015158152602001610120565b34801561024f57600080fd5b506000546001600160a01b031661017d565b34801561026d57600080fd5b5061028e61027c366004610de3565b60016020526000908152604090205481565b604051908152602001610120565b3480156102a857600080fd5b506101006102b7366004610dfe565b6104ca565b6102cf6102ca366004610ec6565b610550565b6040516101209190610f3c565b3480156102e857600080fd5b506101006102f7366004610dfe565b6105d9565b34801561030857600080fd5b5061031c610317366004610f7e565b610617565b6040516101209190611012565b34801561033557600080fd5b50610233610344366004611029565b61065b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610399576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b602087018035906103b3906103ae908a610de3565b610691565b146103f1576103c56020880188610de3565b60405163309afaf360e21b815263ffffffff909116600482015260208801356024820152604401610390565b610400878787878787876106cd565b50505050505050565b6104116106f0565b61041b828261071d565b5050565b6104276106f0565b6104316000610772565b565b6002805461044090611045565b80601f016020809104026020016040519081016040528092919081815260200182805461046c90611045565b80156104b95780601f1061048e576101008083540402835291602001916104b9565b820191906000526020600020905b81548152906001019060200180831161049c57829003601f168201915b505050505081565b60005b92915050565b6104d26106f0565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561053557600080fd5b505af1158015610549573d6000803e3d6000fd5b5050505050565b610558610b7f565b60008460405160200161056b9190610d63565b60408051601f198184030181526020601f870181900481028401810190925285835292506105cf9188918491908890889081908401838280828437600092018290525060408051808201909152348152602081019190915292503391506107c29050565b9695505050505050565b6105e16106f0565b6001600160a01b03811661060b57604051631e4fbdf760e01b815260006004820152602401610390565b61061481610772565b50565b604080518082019091526000808252602082015260008460405160200161063e9190610d63565b60405160208183030381529060405290506105cf868286866108cd565b60006020820180359060019083906106739086610de3565b63ffffffff1681526020810191909152604001600020541492915050565b63ffffffff8116600090815260016020526040812054806104c45760405163f6ff4fb760e01b815263ffffffff84166004820152602401610390565b6106d984860186611079565b6002906106e69082611106565b5050505050505050565b6000546001600160a01b031633146104315760405163118cdaa760e01b8152336004820152602401610390565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6107ca610b7f565b60006107d984600001516109ae565b6020850151909150156107f3576107f384602001516109d6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff1681526020016108438c610691565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b815260040161087f9291906111c5565b60806040518083038185885af115801561089d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906108c2919061128c565b979650505050505050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff16815260200161093089610691565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b81526004016109659291906111c5565b6040805180830381865afa158015610981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a591906112fd565b95945050505050565b60008134146109d2576040516304fb820960e51b8152346004820152602401610390565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5a9190611319565b90506001600160a01b038116610a83576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03818116604485015260648085018890528551808603909101815260849094019094526020830180516001600160e01b03166323b872dd60e01b17905261041b938516928690610b08908590610b0e565b50505050565b600080602060008451602086016000885af180610b31576040513d6000823e3d81fd5b50506000513d91508115610b49578060011415610b56565b6001600160a01b0384163b155b15610b0857604051635274afe760e01b81526001600160a01b0385166004820152602401610390565b60405180606001604052806000801916815260200160006001600160401b03168152602001610bc1604051806040016040528060008152602001600081525090565b905290565b600060608284031215610bd857600080fd5b50919050565b60008083601f840112610bf057600080fd5b5081356001600160401b03811115610c0757600080fd5b602083019150836020828501011115610c1f57600080fd5b9250929050565b6001600160a01b038116811461061457600080fd5b600080600080600080600060e0888a031215610c5657600080fd5b610c608989610bc6565b96506060880135955060808801356001600160401b0380821115610c8357600080fd5b610c8f8b838c01610bde565b909750955060a08a01359150610ca482610c26565b90935060c08901359080821115610cba57600080fd5b50610cc78a828b01610bde565b989b979a50959850939692959293505050565b803563ffffffff81168114610cee57600080fd5b919050565b60008060408385031215610d0657600080fd5b610d0f83610cda565b946020939093013593505050565b6000815180845260005b81811015610d4357602081850181015186830182015201610d27565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610d766020830184610d1d565b9392505050565b60008060008060a08587031215610d9357600080fd5b610d9d8686610bc6565b935060608501356001600160401b03811115610db857600080fd5b610dc487828801610bde565b9094509250506080850135610dd881610c26565b939692955090935050565b600060208284031215610df557600080fd5b610d7682610cda565b600060208284031215610e1057600080fd5b8135610d7681610c26565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115610e4b57610e4b610e1b565b604051601f8501601f19908116603f01168101908282118183101715610e7357610e73610e1b565b81604052809350858152868686011115610e8c57600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112610eb757600080fd5b610d7683833560208501610e31565b60008060008060608587031215610edc57600080fd5b610ee585610cda565b935060208501356001600160401b0380821115610f0157600080fd5b610f0d88838901610ea6565b94506040870135915080821115610f2357600080fd5b50610f3087828801610bde565b95989497509550505050565b6000608082019050825182526001600160401b0360208401511660208301526040830151610f77604084018280518252602090810151910152565b5092915050565b60008060008060808587031215610f9457600080fd5b610f9d85610cda565b935060208501356001600160401b0380821115610fb957600080fd5b610fc588838901610ea6565b94506040870135915080821115610fdb57600080fd5b508501601f81018713610fed57600080fd5b610ffc87823560208401610e31565b92505060608501358015158114610dd857600080fd5b8151815260208083015190820152604081016104c4565b60006060828403121561103b57600080fd5b610d768383610bc6565b600181811c9082168061105957607f821691505b602082108103610bd857634e487b7160e01b600052602260045260246000fd5b60006020828403121561108b57600080fd5b81356001600160401b038111156110a157600080fd5b6110ad84828501610ea6565b949350505050565b601f821115611101576000816000526020600020601f850160051c810160208610156110de5750805b601f850160051c820191505b818110156110fd578281556001016110ea565b5050505b505050565b81516001600160401b0381111561111f5761111f610e1b565b6111338161112d8454611045565b846110b5565b602080601f83116001811461116857600084156111505750858301515b600019600386901b1c1916600185901b1785556110fd565b600085815260208120601f198616915b8281101561119757888601518255948401946001909101908401611178565b50858210156111b55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a060808401526111fb60e0840182610d1d565b90506060850151603f198483030160a08501526112188282610d1d565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b60006040828403121561125057600080fd5b604051604081018181106001600160401b038211171561127257611272610e1b565b604052825181526020928301519281019290925250919050565b60006080828403121561129e57600080fd5b604051606081016001600160401b0382821081831117156112c1576112c1610e1b565b81604052845183526020850151915080821682146112de57600080fd5b5060208201526112f1846040850161123e565b60408201529392505050565b60006040828403121561130f57600080fd5b610d76838361123e565b60006020828403121561132b57600080fd5b8151610d7681610c2656fea26469706673582212203017c944155c3f234bb3739e3866ebf99c20e7b7c0028c651c3564360cf944be64736f6c63430008160033", + "devdoc": { + "errors": { + "OwnableInvalidOwner(address)": [ + { + "details": "The owner is not a valid owner account. (eg. `address(0)`)" + } + ], + "OwnableUnauthorizedAccount(address)": [ + { + "details": "The caller account is not authorized to perform an operation." + } + ], + "SafeERC20FailedOperation(address)": [ + { + "details": "An operation with an ERC-20 token failed." + } + ] + }, + "kind": "dev", + "methods": { + "allowInitializePath((uint32,bytes32,uint64))": { + "details": "This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.", + "params": { + "origin": "The origin information containing the source endpoint and sender address." + }, + "returns": { + "_0": "Whether the path has been initialized." + } + }, + "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { + "details": "_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.", + "params": { + "_sender": "The sender address." + }, + "returns": { + "_0": "isSender Is a valid sender." + } + }, + "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": { + "details": "Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.", + "params": { + "_executor": "The address of the executor for the received message.", + "_extraData": "Additional arbitrary data provided by the corresponding executor.", + "_guid": "The unique identifier for the received LayerZero message.", + "_message": "The payload of the received message.", + "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message." + } + }, + "nextNonce(uint32,bytes32)": { + "details": "_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.", + "returns": { + "nonce": "The next nonce." + } + }, + "oAppVersion()": { + "returns": { + "receiverVersion": "The version of the OAppReceiver.sol implementation.", + "senderVersion": "The version of the OAppSender.sol implementation." + } + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "quote(uint32,string,bytes,bool)": { + "params": { + "_dstEid": "Destination chain's endpoint ID.", + "_message": "The message.", + "_options": "Message execution options (e.g., for sending gas to destination).", + "_payInLzToken": "Whether to return fee in ZRO token." + }, + "returns": { + "fee": "A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token." + } + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." + }, + "send(uint32,string,bytes)": { + "details": "Encodes the message as bytes and sends it using the `_lzSend` internal function.", + "params": { + "_dstEid": "The endpoint ID of the destination chain.", + "_message": "The message string to be sent.", + "_options": "Additional options for message execution." + }, + "returns": { + "receipt": "A `MessagingReceipt` struct containing details of the message sent." + } + }, + "setDelegate(address)": { + "details": "Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.", + "params": { + "_delegate": "The address of the delegate to be set." + } + }, + "setPeer(uint32,bytes32)": { + "details": "Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.", + "params": { + "_eid": "The endpoint ID.", + "_peer": "The address of the peer to be associated with the corresponding endpoint." + } + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "allowInitializePath((uint32,bytes32,uint64))": { + "notice": "Checks if the path initialization is allowed based on the provided origin." + }, + "endpoint()": { + "notice": "Retrieves the LayerZero endpoint associated with the OApp." + }, + "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { + "notice": "Indicates whether an address is an approved composeMsg sender to the Endpoint." + }, + "nextNonce(uint32,bytes32)": { + "notice": "Retrieves the next nonce for a given source endpoint and sender address." + }, + "oAppVersion()": { + "notice": "Retrieves the OApp version information." + }, + "peers(uint32)": { + "notice": "Retrieves the peer (OApp) associated with a corresponding endpoint." + }, + "quote(uint32,string,bytes,bool)": { + "notice": "Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token." + }, + "send(uint32,string,bytes)": { + "notice": "Sends a message from the source chain to a destination chain." + }, + "setDelegate(address)": { + "notice": "Sets the delegate address for the OApp." + }, + "setPeer(uint32,bytes32)": { + "notice": "Sets the peer address (OApp instance) for a corresponding endpoint." + } + }, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 1327, + "contract": "contracts/TestingOApp.sol:TestingOApp", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 64, + "contract": "contracts/TestingOApp.sol:TestingOApp", + "label": "peers", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_uint32,t_bytes32)" + }, + { + "astId": 2398, + "contract": "contracts/TestingOApp.sol:TestingOApp", + "label": "data", + "offset": 0, + "slot": "2", + "type": "t_string_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_uint32,t_bytes32)": { + "encoding": "mapping", + "key": "t_uint32", + "label": "mapping(uint32 => bytes32)", + "numberOfBytes": "32", + "value": "t_bytes32" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_uint32": { + "encoding": "inplace", + "label": "uint32", + "numberOfBytes": "4" + } + } + } +} \ No newline at end of file diff --git a/tests/e2e/testing_oapp/deployments/amoy-testnet/solcInputs/1c9f1ad99bb202d886a57bde06909cce.json b/tests/e2e/testing_oapp/deployments/amoy-testnet/solcInputs/1c9f1ad99bb202d886a57bde06909cce.json new file mode 100644 index 00000000..5112a94e --- /dev/null +++ b/tests/e2e/testing_oapp/deployments/amoy-testnet/solcInputs/1c9f1ad99bb202d886a57bde06909cce.json @@ -0,0 +1,102 @@ +{ + "language": "Solidity", + "sources": { + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppCore.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { ILayerZeroEndpointV2 } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\";\n\n/**\n * @title IOAppCore\n */\ninterface IOAppCore {\n // Custom error messages\n error OnlyPeer(uint32 eid, bytes32 sender);\n error NoPeer(uint32 eid);\n error InvalidEndpointCall();\n error InvalidDelegate();\n\n // Event emitted when a peer (OApp) is set for a corresponding endpoint\n event PeerSet(uint32 eid, bytes32 peer);\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n */\n function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);\n\n /**\n * @notice Retrieves the LayerZero endpoint associated with the OApp.\n * @return iEndpoint The LayerZero endpoint as an interface.\n */\n function endpoint() external view returns (ILayerZeroEndpointV2 iEndpoint);\n\n /**\n * @notice Retrieves the peer (OApp) associated with a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @return peer The peer address (OApp instance) associated with the corresponding endpoint.\n */\n function peers(uint32 _eid) external view returns (bytes32 peer);\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n */\n function setPeer(uint32 _eid, bytes32 _peer) external;\n\n /**\n * @notice Sets the delegate address for the OApp Core.\n * @param _delegate The address of the delegate to be set.\n */\n function setDelegate(address _delegate) external;\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.20;\n\nimport { ILayerZeroReceiver, Origin } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\";\n\ninterface IOAppReceiver is ILayerZeroReceiver {\n /**\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\n * @param _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @param _message The lzReceive payload.\n * @param _sender The sender address.\n * @return isSender Is a valid sender.\n *\n * @dev Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.\n * @dev The default sender IS the OAppReceiver implementer.\n */\n function isComposeMsgSender(\n Origin calldata _origin,\n bytes calldata _message,\n address _sender\n ) external view returns (bool isSender);\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\n// @dev Import the 'MessagingFee' and 'MessagingReceipt' so it's exposed to OApp implementers\n// solhint-disable-next-line no-unused-import\nimport { OAppSender, MessagingFee, MessagingReceipt } from \"./OAppSender.sol\";\n// @dev Import the 'Origin' so it's exposed to OApp implementers\n// solhint-disable-next-line no-unused-import\nimport { OAppReceiver, Origin } from \"./OAppReceiver.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OApp\n * @dev Abstract contract serving as the base for OApp implementation, combining OAppSender and OAppReceiver functionality.\n */\nabstract contract OApp is OAppSender, OAppReceiver {\n /**\n * @dev Constructor to initialize the OApp with the provided endpoint and owner.\n * @param _endpoint The address of the LOCAL LayerZero endpoint.\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\n */\n constructor(address _endpoint, address _delegate) OAppCore(_endpoint, _delegate) {}\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol implementation.\n * @return receiverVersion The version of the OAppReceiver.sol implementation.\n */\n function oAppVersion()\n public\n pure\n virtual\n override(OAppSender, OAppReceiver)\n returns (uint64 senderVersion, uint64 receiverVersion)\n {\n return (SENDER_VERSION, RECEIVER_VERSION);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppCore.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { IOAppCore, ILayerZeroEndpointV2 } from \"./interfaces/IOAppCore.sol\";\n\n/**\n * @title OAppCore\n * @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations.\n */\nabstract contract OAppCore is IOAppCore, Ownable {\n // The LayerZero endpoint associated with the given OApp\n ILayerZeroEndpointV2 public immutable endpoint;\n\n // Mapping to store peers associated with corresponding endpoints\n mapping(uint32 eid => bytes32 peer) public peers;\n\n /**\n * @dev Constructor to initialize the OAppCore with the provided endpoint and delegate.\n * @param _endpoint The address of the LOCAL Layer Zero endpoint.\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\n *\n * @dev The delegate typically should be set as the owner of the contract.\n */\n constructor(address _endpoint, address _delegate) {\n endpoint = ILayerZeroEndpointV2(_endpoint);\n\n if (_delegate == address(0)) revert InvalidDelegate();\n endpoint.setDelegate(_delegate);\n }\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n *\n * @dev Only the owner/admin of the OApp can call this function.\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\n * @dev Set this to bytes32(0) to remove the peer address.\n * @dev Peer is a bytes32 to accommodate non-evm chains.\n */\n function setPeer(uint32 _eid, bytes32 _peer) public virtual onlyOwner {\n _setPeer(_eid, _peer);\n }\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n *\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\n * @dev Set this to bytes32(0) to remove the peer address.\n * @dev Peer is a bytes32 to accommodate non-evm chains.\n */\n function _setPeer(uint32 _eid, bytes32 _peer) internal virtual {\n peers[_eid] = _peer;\n emit PeerSet(_eid, _peer);\n }\n\n /**\n * @notice Internal function to get the peer address associated with a specific endpoint; reverts if NOT set.\n * ie. the peer is set to bytes32(0).\n * @param _eid The endpoint ID.\n * @return peer The address of the peer associated with the specified endpoint.\n */\n function _getPeerOrRevert(uint32 _eid) internal view virtual returns (bytes32) {\n bytes32 peer = peers[_eid];\n if (peer == bytes32(0)) revert NoPeer(_eid);\n return peer;\n }\n\n /**\n * @notice Sets the delegate address for the OApp.\n * @param _delegate The address of the delegate to be set.\n *\n * @dev Only the owner/admin of the OApp can call this function.\n * @dev Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\n */\n function setDelegate(address _delegate) public onlyOwner {\n endpoint.setDelegate(_delegate);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { IOAppReceiver, Origin } from \"./interfaces/IOAppReceiver.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OAppReceiver\n * @dev Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers.\n */\nabstract contract OAppReceiver is IOAppReceiver, OAppCore {\n // Custom error message for when the caller is not the registered endpoint/\n error OnlyEndpoint(address addr);\n\n // @dev The version of the OAppReceiver implementation.\n // @dev Version is bumped when changes are made to this contract.\n uint64 internal constant RECEIVER_VERSION = 2;\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n *\n * @dev Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented.\n * ie. this is a RECEIVE only OApp.\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions.\n */\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\n return (0, RECEIVER_VERSION);\n }\n\n /**\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\n * @dev _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @dev _message The lzReceive payload.\n * @param _sender The sender address.\n * @return isSender Is a valid sender.\n *\n * @dev Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.\n * @dev The default sender IS the OAppReceiver implementer.\n */\n function isComposeMsgSender(\n Origin calldata /*_origin*/,\n bytes calldata /*_message*/,\n address _sender\n ) public view virtual returns (bool) {\n return _sender == address(this);\n }\n\n /**\n * @notice Checks if the path initialization is allowed based on the provided origin.\n * @param origin The origin information containing the source endpoint and sender address.\n * @return Whether the path has been initialized.\n *\n * @dev This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.\n * @dev This defaults to assuming if a peer has been set, its initialized.\n * Can be overridden by the OApp if there is other logic to determine this.\n */\n function allowInitializePath(Origin calldata origin) public view virtual returns (bool) {\n return peers[origin.srcEid] == origin.sender;\n }\n\n /**\n * @notice Retrieves the next nonce for a given source endpoint and sender address.\n * @dev _srcEid The source endpoint ID.\n * @dev _sender The sender address.\n * @return nonce The next nonce.\n *\n * @dev The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.\n * @dev Is required by the off-chain executor to determine the OApp expects msg execution is ordered.\n * @dev This is also enforced by the OApp.\n * @dev By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\n */\n function nextNonce(uint32 /*_srcEid*/, bytes32 /*_sender*/) public view virtual returns (uint64 nonce) {\n return 0;\n }\n\n /**\n * @dev Entry point for receiving messages or packets from the endpoint.\n * @param _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @param _guid The unique identifier for the received LayerZero message.\n * @param _message The payload of the received message.\n * @param _executor The address of the executor for the received message.\n * @param _extraData Additional arbitrary data provided by the corresponding executor.\n *\n * @dev Entry point for receiving msg/packet from the LayerZero endpoint.\n */\n function lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) public payable virtual {\n // Ensures that only the endpoint can attempt to lzReceive() messages to this OApp.\n if (address(endpoint) != msg.sender) revert OnlyEndpoint(msg.sender);\n\n // Ensure that the sender matches the expected peer for the source endpoint.\n if (_getPeerOrRevert(_origin.srcEid) != _origin.sender) revert OnlyPeer(_origin.srcEid, _origin.sender);\n\n // Call the internal OApp implementation of lzReceive.\n _lzReceive(_origin, _guid, _message, _executor, _extraData);\n }\n\n /**\n * @dev Internal function to implement lzReceive logic without needing to copy the basic parameter validation.\n */\n function _lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) internal virtual;\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { SafeERC20, IERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { MessagingParams, MessagingFee, MessagingReceipt } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OAppSender\n * @dev Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.\n */\nabstract contract OAppSender is OAppCore {\n using SafeERC20 for IERC20;\n\n // Custom error messages\n error NotEnoughNative(uint256 msgValue);\n error LzTokenUnavailable();\n\n // @dev The version of the OAppSender implementation.\n // @dev Version is bumped when changes are made to this contract.\n uint64 internal constant SENDER_VERSION = 1;\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n *\n * @dev Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented.\n * ie. this is a SEND only OApp.\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions\n */\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\n return (SENDER_VERSION, 0);\n }\n\n /**\n * @dev Internal function to interact with the LayerZero EndpointV2.quote() for fee calculation.\n * @param _dstEid The destination endpoint ID.\n * @param _message The message payload.\n * @param _options Additional options for the message.\n * @param _payInLzToken Flag indicating whether to pay the fee in LZ tokens.\n * @return fee The calculated MessagingFee for the message.\n * - nativeFee: The native fee for the message.\n * - lzTokenFee: The LZ token fee for the message.\n */\n function _quote(\n uint32 _dstEid,\n bytes memory _message,\n bytes memory _options,\n bool _payInLzToken\n ) internal view virtual returns (MessagingFee memory fee) {\n return\n endpoint.quote(\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _payInLzToken),\n address(this)\n );\n }\n\n /**\n * @dev Internal function to interact with the LayerZero EndpointV2.send() for sending a message.\n * @param _dstEid The destination endpoint ID.\n * @param _message The message payload.\n * @param _options Additional options for the message.\n * @param _fee The calculated LayerZero fee for the message.\n * - nativeFee: The native fee.\n * - lzTokenFee: The lzToken fee.\n * @param _refundAddress The address to receive any excess fee values sent to the endpoint.\n * @return receipt The receipt for the sent message.\n * - guid: The unique identifier for the sent message.\n * - nonce: The nonce of the sent message.\n * - fee: The LayerZero fee incurred for the message.\n */\n function _lzSend(\n uint32 _dstEid,\n bytes memory _message,\n bytes memory _options,\n MessagingFee memory _fee,\n address _refundAddress\n ) internal virtual returns (MessagingReceipt memory receipt) {\n // @dev Push corresponding fees to the endpoint, any excess is sent back to the _refundAddress from the endpoint.\n uint256 messageValue = _payNative(_fee.nativeFee);\n if (_fee.lzTokenFee > 0) _payLzToken(_fee.lzTokenFee);\n\n return\n // solhint-disable-next-line check-send-result\n endpoint.send{ value: messageValue }(\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _fee.lzTokenFee > 0),\n _refundAddress\n );\n }\n\n /**\n * @dev Internal function to pay the native fee associated with the message.\n * @param _nativeFee The native fee to be paid.\n * @return nativeFee The amount of native currency paid.\n *\n * @dev If the OApp needs to initiate MULTIPLE LayerZero messages in a single transaction,\n * this will need to be overridden because msg.value would contain multiple lzFees.\n * @dev Should be overridden in the event the LayerZero endpoint requires a different native currency.\n * @dev Some EVMs use an ERC20 as a method for paying transactions/gasFees.\n * @dev The endpoint is EITHER/OR, ie. it will NOT support both types of native payment at a time.\n */\n function _payNative(uint256 _nativeFee) internal virtual returns (uint256 nativeFee) {\n if (msg.value != _nativeFee) revert NotEnoughNative(msg.value);\n return _nativeFee;\n }\n\n /**\n * @dev Internal function to pay the LZ token fee associated with the message.\n * @param _lzTokenFee The LZ token fee to be paid.\n *\n * @dev If the caller is trying to pay in the specified lzToken, then the lzTokenFee is passed to the endpoint.\n * @dev Any excess sent, is passed back to the specified _refundAddress in the _lzSend().\n */\n function _payLzToken(uint256 _lzTokenFee) internal virtual {\n // @dev Cannot cache the token because it is not immutable in the endpoint.\n address lzToken = endpoint.lzToken();\n if (lzToken == address(0)) revert LzTokenUnavailable();\n\n // Pay LZ token fee by sending tokens to the endpoint.\n IERC20(lzToken).safeTransferFrom(msg.sender, address(endpoint), _lzTokenFee);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nimport { IMessageLibManager } from \"./IMessageLibManager.sol\";\nimport { IMessagingComposer } from \"./IMessagingComposer.sol\";\nimport { IMessagingChannel } from \"./IMessagingChannel.sol\";\nimport { IMessagingContext } from \"./IMessagingContext.sol\";\n\nstruct MessagingParams {\n uint32 dstEid;\n bytes32 receiver;\n bytes message;\n bytes options;\n bool payInLzToken;\n}\n\nstruct MessagingReceipt {\n bytes32 guid;\n uint64 nonce;\n MessagingFee fee;\n}\n\nstruct MessagingFee {\n uint256 nativeFee;\n uint256 lzTokenFee;\n}\n\nstruct Origin {\n uint32 srcEid;\n bytes32 sender;\n uint64 nonce;\n}\n\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\n\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\n\n event PacketDelivered(Origin origin, address receiver);\n\n event LzReceiveAlert(\n address indexed receiver,\n address indexed executor,\n Origin origin,\n bytes32 guid,\n uint256 gas,\n uint256 value,\n bytes message,\n bytes extraData,\n bytes reason\n );\n\n event LzTokenSet(address token);\n\n event DelegateSet(address sender, address delegate);\n\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\n\n function send(\n MessagingParams calldata _params,\n address _refundAddress\n ) external payable returns (MessagingReceipt memory);\n\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\n\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\n\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\n\n function lzReceive(\n Origin calldata _origin,\n address _receiver,\n bytes32 _guid,\n bytes calldata _message,\n bytes calldata _extraData\n ) external payable;\n\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\n\n function setLzToken(address _lzToken) external;\n\n function lzToken() external view returns (address);\n\n function nativeToken() external view returns (address);\n\n function setDelegate(address _delegate) external;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nimport { Origin } from \"./ILayerZeroEndpointV2.sol\";\n\ninterface ILayerZeroReceiver {\n function allowInitializePath(Origin calldata _origin) external view returns (bool);\n\n function nextNonce(uint32 _eid, bytes32 _sender) external view returns (uint64);\n\n function lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) external payable;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nstruct SetConfigParam {\n uint32 eid;\n uint32 configType;\n bytes config;\n}\n\ninterface IMessageLibManager {\n struct Timeout {\n address lib;\n uint256 expiry;\n }\n\n event LibraryRegistered(address newLib);\n event DefaultSendLibrarySet(uint32 eid, address newLib);\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\n event SendLibrarySet(address sender, uint32 eid, address newLib);\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\n\n function registerLibrary(address _lib) external;\n\n function isRegisteredLibrary(address _lib) external view returns (bool);\n\n function getRegisteredLibraries() external view returns (address[] memory);\n\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\n\n function defaultSendLibrary(uint32 _eid) external view returns (address);\n\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\n\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\n\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\n\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\n\n function isSupportedEid(uint32 _eid) external view returns (bool);\n\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\n\n /// ------------------- OApp interfaces -------------------\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\n\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\n\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\n\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\n\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\n\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\n\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\n\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\n\n function getConfig(\n address _oapp,\n address _lib,\n uint32 _eid,\n uint32 _configType\n ) external view returns (bytes memory config);\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingChannel {\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\n\n function eid() external view returns (uint32);\n\n // this is an emergency function if a message cannot be verified for some reasons\n // required to provide _nextNonce to avoid race condition\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\n\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\n\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\n\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\n\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\n\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\n\n function inboundPayloadHash(\n address _receiver,\n uint32 _srcEid,\n bytes32 _sender,\n uint64 _nonce\n ) external view returns (bytes32);\n\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingComposer {\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\n event LzComposeAlert(\n address indexed from,\n address indexed to,\n address indexed executor,\n bytes32 guid,\n uint16 index,\n uint256 gas,\n uint256 value,\n bytes message,\n bytes extraData,\n bytes reason\n );\n\n function composeQueue(\n address _from,\n address _to,\n bytes32 _guid,\n uint16 _index\n ) external view returns (bytes32 messageHash);\n\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\n\n function lzCompose(\n address _from,\n address _to,\n bytes32 _guid,\n uint16 _index,\n bytes calldata _message,\n bytes calldata _extraData\n ) external payable;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingContext {\n function isSendingMessage() external view returns (bool);\n\n function getSendContext() external view returns (uint32 dstEid, address sender);\n}\n" + }, + "@openzeppelin/contracts/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {Context} from \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n /**\n * @dev The caller account is not authorized to perform an operation.\n */\n error OwnableUnauthorizedAccount(address account);\n\n /**\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\n */\n error OwnableInvalidOwner(address owner);\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n */\n constructor(address initialOwner) {\n if (initialOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n if (owner() != _msgSender()) {\n revert OwnableUnauthorizedAccount(_msgSender());\n }\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby disabling any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n if (newOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "@openzeppelin/contracts/interfaces/IERC1363.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC165} from \"./IERC165.sol\";\n\n/**\n * @title IERC1363\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\n *\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\n */\ninterface IERC1363 is IERC20, IERC165 {\n /*\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\n * 0xb0202a11 ===\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\n */\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @param data Additional data with no specified format, sent in call to `spender`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\n}\n" + }, + "@openzeppelin/contracts/interfaces/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"../utils/introspection/IERC165.sol\";\n" + }, + "@openzeppelin/contracts/interfaces/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\n" + }, + "@openzeppelin/contracts/token/ERC20/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-20 standard as defined in the ERC.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the value of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the value of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\n * allowance mechanism. `value` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n" + }, + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\nimport {IERC1363} from \"../../../interfaces/IERC1363.sol\";\nimport {Address} from \"../../../utils/Address.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n /**\n * @dev An operation with an ERC-20 token failed.\n */\n error SafeERC20FailedOperation(address token);\n\n /**\n * @dev Indicates a failed `decreaseAllowance` request.\n */\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\n\n /**\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\n }\n\n /**\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\n */\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n }\n\n /**\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n uint256 oldAllowance = token.allowance(address(this), spender);\n forceApprove(token, spender, oldAllowance + value);\n }\n\n /**\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n * value, non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\n unchecked {\n uint256 currentAllowance = token.allowance(address(this), spender);\n if (currentAllowance < requestedDecrease) {\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\n }\n forceApprove(token, spender, currentAllowance - requestedDecrease);\n }\n }\n\n /**\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n * to be set to zero before setting it to a non-zero value, such as USDT.\n *\n * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\n * only sets the \"standard\" allowance. Any temporary allowance will remain active, in addition to the value being\n * set here.\n */\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\n\n if (!_callOptionalReturnBool(token, approvalCall)) {\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\n _callOptionalReturn(token, approvalCall);\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n safeTransfer(token, to, value);\n } else if (!token.transferAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\n * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferFromAndCallRelaxed(\n IERC1363 token,\n address from,\n address to,\n uint256 value,\n bytes memory data\n ) internal {\n if (to.code.length == 0) {\n safeTransferFrom(token, from, to, value);\n } else if (!token.transferFromAndCall(from, to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\n * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\n * once without retrying, and relies on the returned value to be true.\n *\n * Reverts if the returned value is other than `true`.\n */\n function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n forceApprove(token, to, value);\n } else if (!token.approveAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\n */\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n // bubble errors\n if iszero(success) {\n let ptr := mload(0x40)\n returndatacopy(ptr, 0, returndatasize())\n revert(ptr, returndatasize())\n }\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n\n if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\n */\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\n bool success;\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\nimport {Errors} from \"./Errors.sol\";\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev There's no code at `target` (it is not a contract).\n */\n error AddressEmptyCode(address target);\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n if (address(this).balance < amount) {\n revert Errors.InsufficientBalance(address(this).balance, amount);\n }\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n if (!success) {\n revert Errors.FailedCall();\n }\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason or custom error, it is bubbled\n * up by this function (like regular Solidity function calls). However, if\n * the call reverted with no returned reason, this function reverts with a\n * {Errors.FailedCall} error.\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n if (address(this).balance < value) {\n revert Errors.InsufficientBalance(address(this).balance, value);\n }\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\n * of an unsuccessful call.\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata\n ) internal view returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n // only check if target is a contract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n if (returndata.length == 0 && target.code.length == 0) {\n revert AddressEmptyCode(target);\n }\n return returndata;\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n * revert reason or with a default {Errors.FailedCall} error.\n */\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n return returndata;\n }\n }\n\n /**\n * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\n */\n function _revert(bytes memory returndata) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n assembly (\"memory-safe\") {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert Errors.FailedCall();\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n function _contextSuffixLength() internal view virtual returns (uint256) {\n return 0;\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Errors.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of common custom errors used in multiple contracts\n *\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\n * It is recommended to avoid relying on the error API for critical functionality.\n *\n * _Available since v5.1._\n */\nlibrary Errors {\n /**\n * @dev The ETH balance of the account is not enough to perform the operation.\n */\n error InsufficientBalance(uint256 balance, uint256 needed);\n\n /**\n * @dev A call to an address target failed. The target may have reverted.\n */\n error FailedCall();\n\n /**\n * @dev The deployment failed.\n */\n error FailedDeployment();\n\n /**\n * @dev A necessary precompile is missing.\n */\n error MissingPrecompile(address);\n}\n" + }, + "@openzeppelin/contracts/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "contracts/TestingOApp.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.22;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { OApp, MessagingFee, Origin } from \"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol\";\nimport { MessagingReceipt } from \"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol\";\n\ncontract TestingOApp is OApp {\n constructor(address _endpoint, address _delegate) OApp(_endpoint, _delegate) Ownable(_delegate) {}\n\n uint public data = 0;\n\n /**\n * @notice Sends a message from the source chain to a destination chain.\n * @param _dstEid The endpoint ID of the destination chain.\n * @param _message The message string to be sent.\n * @param _options Additional options for message execution.\n * @dev Encodes the message as bytes and sends it using the `_lzSend` internal function.\n * @return receipt A `MessagingReceipt` struct containing details of the message sent.\n */\n function send(\n uint32 _dstEid,\n string memory _message,\n bytes calldata _options\n ) external payable returns (MessagingReceipt memory receipt) {\n bytes memory _payload = abi.encode(_message);\n receipt = _lzSend(_dstEid, _payload, _options, MessagingFee(msg.value, 0), payable(msg.sender));\n }\n\n /**\n * @notice Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token.\n * @param _dstEid Destination chain's endpoint ID.\n * @param _message The message.\n * @param _options Message execution options (e.g., for sending gas to destination).\n * @param _payInLzToken Whether to return fee in ZRO token.\n * @return fee A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token.\n */\n function quote(\n uint32 _dstEid,\n string memory _message,\n bytes memory _options,\n bool _payInLzToken\n ) public view returns (MessagingFee memory fee) {\n bytes memory payload = abi.encode(_message);\n fee = _quote(_dstEid, payload, _options, _payInLzToken);\n }\n\n /**\n * @dev Internal function override to handle incoming messages from another chain.\n * @dev _origin A struct containing information about the message sender.\n * @dev _guid A unique global packet identifier for the message.\n * @param payload The encoded message payload being received.\n *\n * @dev The following params are unused in the current implementation of the OApp.\n * @dev _executor The address of the Executor responsible for processing the message.\n * @dev _extraData Arbitrary data appended by the Executor to the message.\n *\n * Decodes the received payload and processes it as per the business logic defined in the function.\n */\n function _lzReceive(\n Origin calldata /*_origin*/,\n bytes32 /*_guid*/,\n bytes calldata payload,\n address /*_executor*/,\n bytes calldata /*_extraData*/\n ) internal override {\n data = abi.decode(payload, (uint));\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "evmVersion": "paris", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/tests/e2e/testing_oapp/deployments/amoy-testnet/solcInputs/6e267ad209b523b5db9591b68bbd936f.json b/tests/e2e/testing_oapp/deployments/amoy-testnet/solcInputs/6e267ad209b523b5db9591b68bbd936f.json new file mode 100644 index 00000000..bbc0519e --- /dev/null +++ b/tests/e2e/testing_oapp/deployments/amoy-testnet/solcInputs/6e267ad209b523b5db9591b68bbd936f.json @@ -0,0 +1,102 @@ +{ + "language": "Solidity", + "sources": { + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppCore.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { ILayerZeroEndpointV2 } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\";\n\n/**\n * @title IOAppCore\n */\ninterface IOAppCore {\n // Custom error messages\n error OnlyPeer(uint32 eid, bytes32 sender);\n error NoPeer(uint32 eid);\n error InvalidEndpointCall();\n error InvalidDelegate();\n\n // Event emitted when a peer (OApp) is set for a corresponding endpoint\n event PeerSet(uint32 eid, bytes32 peer);\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n */\n function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);\n\n /**\n * @notice Retrieves the LayerZero endpoint associated with the OApp.\n * @return iEndpoint The LayerZero endpoint as an interface.\n */\n function endpoint() external view returns (ILayerZeroEndpointV2 iEndpoint);\n\n /**\n * @notice Retrieves the peer (OApp) associated with a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @return peer The peer address (OApp instance) associated with the corresponding endpoint.\n */\n function peers(uint32 _eid) external view returns (bytes32 peer);\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n */\n function setPeer(uint32 _eid, bytes32 _peer) external;\n\n /**\n * @notice Sets the delegate address for the OApp Core.\n * @param _delegate The address of the delegate to be set.\n */\n function setDelegate(address _delegate) external;\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.20;\n\nimport { ILayerZeroReceiver, Origin } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\";\n\ninterface IOAppReceiver is ILayerZeroReceiver {\n /**\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\n * @param _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @param _message The lzReceive payload.\n * @param _sender The sender address.\n * @return isSender Is a valid sender.\n *\n * @dev Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.\n * @dev The default sender IS the OAppReceiver implementer.\n */\n function isComposeMsgSender(\n Origin calldata _origin,\n bytes calldata _message,\n address _sender\n ) external view returns (bool isSender);\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\n// @dev Import the 'MessagingFee' and 'MessagingReceipt' so it's exposed to OApp implementers\n// solhint-disable-next-line no-unused-import\nimport { OAppSender, MessagingFee, MessagingReceipt } from \"./OAppSender.sol\";\n// @dev Import the 'Origin' so it's exposed to OApp implementers\n// solhint-disable-next-line no-unused-import\nimport { OAppReceiver, Origin } from \"./OAppReceiver.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OApp\n * @dev Abstract contract serving as the base for OApp implementation, combining OAppSender and OAppReceiver functionality.\n */\nabstract contract OApp is OAppSender, OAppReceiver {\n /**\n * @dev Constructor to initialize the OApp with the provided endpoint and owner.\n * @param _endpoint The address of the LOCAL LayerZero endpoint.\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\n */\n constructor(address _endpoint, address _delegate) OAppCore(_endpoint, _delegate) {}\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol implementation.\n * @return receiverVersion The version of the OAppReceiver.sol implementation.\n */\n function oAppVersion()\n public\n pure\n virtual\n override(OAppSender, OAppReceiver)\n returns (uint64 senderVersion, uint64 receiverVersion)\n {\n return (SENDER_VERSION, RECEIVER_VERSION);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppCore.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { IOAppCore, ILayerZeroEndpointV2 } from \"./interfaces/IOAppCore.sol\";\n\n/**\n * @title OAppCore\n * @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations.\n */\nabstract contract OAppCore is IOAppCore, Ownable {\n // The LayerZero endpoint associated with the given OApp\n ILayerZeroEndpointV2 public immutable endpoint;\n\n // Mapping to store peers associated with corresponding endpoints\n mapping(uint32 eid => bytes32 peer) public peers;\n\n /**\n * @dev Constructor to initialize the OAppCore with the provided endpoint and delegate.\n * @param _endpoint The address of the LOCAL Layer Zero endpoint.\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\n *\n * @dev The delegate typically should be set as the owner of the contract.\n */\n constructor(address _endpoint, address _delegate) {\n endpoint = ILayerZeroEndpointV2(_endpoint);\n\n if (_delegate == address(0)) revert InvalidDelegate();\n endpoint.setDelegate(_delegate);\n }\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n *\n * @dev Only the owner/admin of the OApp can call this function.\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\n * @dev Set this to bytes32(0) to remove the peer address.\n * @dev Peer is a bytes32 to accommodate non-evm chains.\n */\n function setPeer(uint32 _eid, bytes32 _peer) public virtual onlyOwner {\n _setPeer(_eid, _peer);\n }\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n *\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\n * @dev Set this to bytes32(0) to remove the peer address.\n * @dev Peer is a bytes32 to accommodate non-evm chains.\n */\n function _setPeer(uint32 _eid, bytes32 _peer) internal virtual {\n peers[_eid] = _peer;\n emit PeerSet(_eid, _peer);\n }\n\n /**\n * @notice Internal function to get the peer address associated with a specific endpoint; reverts if NOT set.\n * ie. the peer is set to bytes32(0).\n * @param _eid The endpoint ID.\n * @return peer The address of the peer associated with the specified endpoint.\n */\n function _getPeerOrRevert(uint32 _eid) internal view virtual returns (bytes32) {\n bytes32 peer = peers[_eid];\n if (peer == bytes32(0)) revert NoPeer(_eid);\n return peer;\n }\n\n /**\n * @notice Sets the delegate address for the OApp.\n * @param _delegate The address of the delegate to be set.\n *\n * @dev Only the owner/admin of the OApp can call this function.\n * @dev Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\n */\n function setDelegate(address _delegate) public onlyOwner {\n endpoint.setDelegate(_delegate);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { IOAppReceiver, Origin } from \"./interfaces/IOAppReceiver.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OAppReceiver\n * @dev Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers.\n */\nabstract contract OAppReceiver is IOAppReceiver, OAppCore {\n // Custom error message for when the caller is not the registered endpoint/\n error OnlyEndpoint(address addr);\n\n // @dev The version of the OAppReceiver implementation.\n // @dev Version is bumped when changes are made to this contract.\n uint64 internal constant RECEIVER_VERSION = 2;\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n *\n * @dev Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented.\n * ie. this is a RECEIVE only OApp.\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions.\n */\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\n return (0, RECEIVER_VERSION);\n }\n\n /**\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\n * @dev _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @dev _message The lzReceive payload.\n * @param _sender The sender address.\n * @return isSender Is a valid sender.\n *\n * @dev Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.\n * @dev The default sender IS the OAppReceiver implementer.\n */\n function isComposeMsgSender(\n Origin calldata /*_origin*/,\n bytes calldata /*_message*/,\n address _sender\n ) public view virtual returns (bool) {\n return _sender == address(this);\n }\n\n /**\n * @notice Checks if the path initialization is allowed based on the provided origin.\n * @param origin The origin information containing the source endpoint and sender address.\n * @return Whether the path has been initialized.\n *\n * @dev This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.\n * @dev This defaults to assuming if a peer has been set, its initialized.\n * Can be overridden by the OApp if there is other logic to determine this.\n */\n function allowInitializePath(Origin calldata origin) public view virtual returns (bool) {\n return peers[origin.srcEid] == origin.sender;\n }\n\n /**\n * @notice Retrieves the next nonce for a given source endpoint and sender address.\n * @dev _srcEid The source endpoint ID.\n * @dev _sender The sender address.\n * @return nonce The next nonce.\n *\n * @dev The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.\n * @dev Is required by the off-chain executor to determine the OApp expects msg execution is ordered.\n * @dev This is also enforced by the OApp.\n * @dev By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\n */\n function nextNonce(uint32 /*_srcEid*/, bytes32 /*_sender*/) public view virtual returns (uint64 nonce) {\n return 0;\n }\n\n /**\n * @dev Entry point for receiving messages or packets from the endpoint.\n * @param _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @param _guid The unique identifier for the received LayerZero message.\n * @param _message The payload of the received message.\n * @param _executor The address of the executor for the received message.\n * @param _extraData Additional arbitrary data provided by the corresponding executor.\n *\n * @dev Entry point for receiving msg/packet from the LayerZero endpoint.\n */\n function lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) public payable virtual {\n // Ensures that only the endpoint can attempt to lzReceive() messages to this OApp.\n if (address(endpoint) != msg.sender) revert OnlyEndpoint(msg.sender);\n\n // Ensure that the sender matches the expected peer for the source endpoint.\n if (_getPeerOrRevert(_origin.srcEid) != _origin.sender) revert OnlyPeer(_origin.srcEid, _origin.sender);\n\n // Call the internal OApp implementation of lzReceive.\n _lzReceive(_origin, _guid, _message, _executor, _extraData);\n }\n\n /**\n * @dev Internal function to implement lzReceive logic without needing to copy the basic parameter validation.\n */\n function _lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) internal virtual;\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { SafeERC20, IERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { MessagingParams, MessagingFee, MessagingReceipt } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OAppSender\n * @dev Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.\n */\nabstract contract OAppSender is OAppCore {\n using SafeERC20 for IERC20;\n\n // Custom error messages\n error NotEnoughNative(uint256 msgValue);\n error LzTokenUnavailable();\n\n // @dev The version of the OAppSender implementation.\n // @dev Version is bumped when changes are made to this contract.\n uint64 internal constant SENDER_VERSION = 1;\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n *\n * @dev Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented.\n * ie. this is a SEND only OApp.\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions\n */\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\n return (SENDER_VERSION, 0);\n }\n\n /**\n * @dev Internal function to interact with the LayerZero EndpointV2.quote() for fee calculation.\n * @param _dstEid The destination endpoint ID.\n * @param _message The message payload.\n * @param _options Additional options for the message.\n * @param _payInLzToken Flag indicating whether to pay the fee in LZ tokens.\n * @return fee The calculated MessagingFee for the message.\n * - nativeFee: The native fee for the message.\n * - lzTokenFee: The LZ token fee for the message.\n */\n function _quote(\n uint32 _dstEid,\n bytes memory _message,\n bytes memory _options,\n bool _payInLzToken\n ) internal view virtual returns (MessagingFee memory fee) {\n return\n endpoint.quote(\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _payInLzToken),\n address(this)\n );\n }\n\n /**\n * @dev Internal function to interact with the LayerZero EndpointV2.send() for sending a message.\n * @param _dstEid The destination endpoint ID.\n * @param _message The message payload.\n * @param _options Additional options for the message.\n * @param _fee The calculated LayerZero fee for the message.\n * - nativeFee: The native fee.\n * - lzTokenFee: The lzToken fee.\n * @param _refundAddress The address to receive any excess fee values sent to the endpoint.\n * @return receipt The receipt for the sent message.\n * - guid: The unique identifier for the sent message.\n * - nonce: The nonce of the sent message.\n * - fee: The LayerZero fee incurred for the message.\n */\n function _lzSend(\n uint32 _dstEid,\n bytes memory _message,\n bytes memory _options,\n MessagingFee memory _fee,\n address _refundAddress\n ) internal virtual returns (MessagingReceipt memory receipt) {\n // @dev Push corresponding fees to the endpoint, any excess is sent back to the _refundAddress from the endpoint.\n uint256 messageValue = _payNative(_fee.nativeFee);\n if (_fee.lzTokenFee > 0) _payLzToken(_fee.lzTokenFee);\n\n return\n // solhint-disable-next-line check-send-result\n endpoint.send{ value: messageValue }(\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _fee.lzTokenFee > 0),\n _refundAddress\n );\n }\n\n /**\n * @dev Internal function to pay the native fee associated with the message.\n * @param _nativeFee The native fee to be paid.\n * @return nativeFee The amount of native currency paid.\n *\n * @dev If the OApp needs to initiate MULTIPLE LayerZero messages in a single transaction,\n * this will need to be overridden because msg.value would contain multiple lzFees.\n * @dev Should be overridden in the event the LayerZero endpoint requires a different native currency.\n * @dev Some EVMs use an ERC20 as a method for paying transactions/gasFees.\n * @dev The endpoint is EITHER/OR, ie. it will NOT support both types of native payment at a time.\n */\n function _payNative(uint256 _nativeFee) internal virtual returns (uint256 nativeFee) {\n if (msg.value != _nativeFee) revert NotEnoughNative(msg.value);\n return _nativeFee;\n }\n\n /**\n * @dev Internal function to pay the LZ token fee associated with the message.\n * @param _lzTokenFee The LZ token fee to be paid.\n *\n * @dev If the caller is trying to pay in the specified lzToken, then the lzTokenFee is passed to the endpoint.\n * @dev Any excess sent, is passed back to the specified _refundAddress in the _lzSend().\n */\n function _payLzToken(uint256 _lzTokenFee) internal virtual {\n // @dev Cannot cache the token because it is not immutable in the endpoint.\n address lzToken = endpoint.lzToken();\n if (lzToken == address(0)) revert LzTokenUnavailable();\n\n // Pay LZ token fee by sending tokens to the endpoint.\n IERC20(lzToken).safeTransferFrom(msg.sender, address(endpoint), _lzTokenFee);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nimport { IMessageLibManager } from \"./IMessageLibManager.sol\";\nimport { IMessagingComposer } from \"./IMessagingComposer.sol\";\nimport { IMessagingChannel } from \"./IMessagingChannel.sol\";\nimport { IMessagingContext } from \"./IMessagingContext.sol\";\n\nstruct MessagingParams {\n uint32 dstEid;\n bytes32 receiver;\n bytes message;\n bytes options;\n bool payInLzToken;\n}\n\nstruct MessagingReceipt {\n bytes32 guid;\n uint64 nonce;\n MessagingFee fee;\n}\n\nstruct MessagingFee {\n uint256 nativeFee;\n uint256 lzTokenFee;\n}\n\nstruct Origin {\n uint32 srcEid;\n bytes32 sender;\n uint64 nonce;\n}\n\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\n\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\n\n event PacketDelivered(Origin origin, address receiver);\n\n event LzReceiveAlert(\n address indexed receiver,\n address indexed executor,\n Origin origin,\n bytes32 guid,\n uint256 gas,\n uint256 value,\n bytes message,\n bytes extraData,\n bytes reason\n );\n\n event LzTokenSet(address token);\n\n event DelegateSet(address sender, address delegate);\n\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\n\n function send(\n MessagingParams calldata _params,\n address _refundAddress\n ) external payable returns (MessagingReceipt memory);\n\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\n\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\n\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\n\n function lzReceive(\n Origin calldata _origin,\n address _receiver,\n bytes32 _guid,\n bytes calldata _message,\n bytes calldata _extraData\n ) external payable;\n\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\n\n function setLzToken(address _lzToken) external;\n\n function lzToken() external view returns (address);\n\n function nativeToken() external view returns (address);\n\n function setDelegate(address _delegate) external;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nimport { Origin } from \"./ILayerZeroEndpointV2.sol\";\n\ninterface ILayerZeroReceiver {\n function allowInitializePath(Origin calldata _origin) external view returns (bool);\n\n function nextNonce(uint32 _eid, bytes32 _sender) external view returns (uint64);\n\n function lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) external payable;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nstruct SetConfigParam {\n uint32 eid;\n uint32 configType;\n bytes config;\n}\n\ninterface IMessageLibManager {\n struct Timeout {\n address lib;\n uint256 expiry;\n }\n\n event LibraryRegistered(address newLib);\n event DefaultSendLibrarySet(uint32 eid, address newLib);\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\n event SendLibrarySet(address sender, uint32 eid, address newLib);\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\n\n function registerLibrary(address _lib) external;\n\n function isRegisteredLibrary(address _lib) external view returns (bool);\n\n function getRegisteredLibraries() external view returns (address[] memory);\n\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\n\n function defaultSendLibrary(uint32 _eid) external view returns (address);\n\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\n\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\n\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\n\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\n\n function isSupportedEid(uint32 _eid) external view returns (bool);\n\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\n\n /// ------------------- OApp interfaces -------------------\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\n\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\n\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\n\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\n\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\n\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\n\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\n\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\n\n function getConfig(\n address _oapp,\n address _lib,\n uint32 _eid,\n uint32 _configType\n ) external view returns (bytes memory config);\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingChannel {\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\n\n function eid() external view returns (uint32);\n\n // this is an emergency function if a message cannot be verified for some reasons\n // required to provide _nextNonce to avoid race condition\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\n\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\n\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\n\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\n\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\n\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\n\n function inboundPayloadHash(\n address _receiver,\n uint32 _srcEid,\n bytes32 _sender,\n uint64 _nonce\n ) external view returns (bytes32);\n\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingComposer {\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\n event LzComposeAlert(\n address indexed from,\n address indexed to,\n address indexed executor,\n bytes32 guid,\n uint16 index,\n uint256 gas,\n uint256 value,\n bytes message,\n bytes extraData,\n bytes reason\n );\n\n function composeQueue(\n address _from,\n address _to,\n bytes32 _guid,\n uint16 _index\n ) external view returns (bytes32 messageHash);\n\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\n\n function lzCompose(\n address _from,\n address _to,\n bytes32 _guid,\n uint16 _index,\n bytes calldata _message,\n bytes calldata _extraData\n ) external payable;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingContext {\n function isSendingMessage() external view returns (bool);\n\n function getSendContext() external view returns (uint32 dstEid, address sender);\n}\n" + }, + "@openzeppelin/contracts/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {Context} from \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n /**\n * @dev The caller account is not authorized to perform an operation.\n */\n error OwnableUnauthorizedAccount(address account);\n\n /**\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\n */\n error OwnableInvalidOwner(address owner);\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n */\n constructor(address initialOwner) {\n if (initialOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n if (owner() != _msgSender()) {\n revert OwnableUnauthorizedAccount(_msgSender());\n }\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby disabling any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n if (newOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "@openzeppelin/contracts/interfaces/IERC1363.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC165} from \"./IERC165.sol\";\n\n/**\n * @title IERC1363\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\n *\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\n */\ninterface IERC1363 is IERC20, IERC165 {\n /*\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\n * 0xb0202a11 ===\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\n */\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @param data Additional data with no specified format, sent in call to `spender`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\n}\n" + }, + "@openzeppelin/contracts/interfaces/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"../utils/introspection/IERC165.sol\";\n" + }, + "@openzeppelin/contracts/interfaces/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\n" + }, + "@openzeppelin/contracts/token/ERC20/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-20 standard as defined in the ERC.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the value of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the value of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\n * allowance mechanism. `value` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n" + }, + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\nimport {IERC1363} from \"../../../interfaces/IERC1363.sol\";\nimport {Address} from \"../../../utils/Address.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n /**\n * @dev An operation with an ERC-20 token failed.\n */\n error SafeERC20FailedOperation(address token);\n\n /**\n * @dev Indicates a failed `decreaseAllowance` request.\n */\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\n\n /**\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\n }\n\n /**\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\n */\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n }\n\n /**\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n uint256 oldAllowance = token.allowance(address(this), spender);\n forceApprove(token, spender, oldAllowance + value);\n }\n\n /**\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n * value, non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\n unchecked {\n uint256 currentAllowance = token.allowance(address(this), spender);\n if (currentAllowance < requestedDecrease) {\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\n }\n forceApprove(token, spender, currentAllowance - requestedDecrease);\n }\n }\n\n /**\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n * to be set to zero before setting it to a non-zero value, such as USDT.\n *\n * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\n * only sets the \"standard\" allowance. Any temporary allowance will remain active, in addition to the value being\n * set here.\n */\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\n\n if (!_callOptionalReturnBool(token, approvalCall)) {\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\n _callOptionalReturn(token, approvalCall);\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n safeTransfer(token, to, value);\n } else if (!token.transferAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\n * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferFromAndCallRelaxed(\n IERC1363 token,\n address from,\n address to,\n uint256 value,\n bytes memory data\n ) internal {\n if (to.code.length == 0) {\n safeTransferFrom(token, from, to, value);\n } else if (!token.transferFromAndCall(from, to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\n * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\n * once without retrying, and relies on the returned value to be true.\n *\n * Reverts if the returned value is other than `true`.\n */\n function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n forceApprove(token, to, value);\n } else if (!token.approveAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\n */\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n // bubble errors\n if iszero(success) {\n let ptr := mload(0x40)\n returndatacopy(ptr, 0, returndatasize())\n revert(ptr, returndatasize())\n }\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n\n if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\n */\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\n bool success;\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\nimport {Errors} from \"./Errors.sol\";\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev There's no code at `target` (it is not a contract).\n */\n error AddressEmptyCode(address target);\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n if (address(this).balance < amount) {\n revert Errors.InsufficientBalance(address(this).balance, amount);\n }\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n if (!success) {\n revert Errors.FailedCall();\n }\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason or custom error, it is bubbled\n * up by this function (like regular Solidity function calls). However, if\n * the call reverted with no returned reason, this function reverts with a\n * {Errors.FailedCall} error.\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n if (address(this).balance < value) {\n revert Errors.InsufficientBalance(address(this).balance, value);\n }\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\n * of an unsuccessful call.\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata\n ) internal view returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n // only check if target is a contract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n if (returndata.length == 0 && target.code.length == 0) {\n revert AddressEmptyCode(target);\n }\n return returndata;\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n * revert reason or with a default {Errors.FailedCall} error.\n */\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n return returndata;\n }\n }\n\n /**\n * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\n */\n function _revert(bytes memory returndata) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n assembly (\"memory-safe\") {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert Errors.FailedCall();\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n function _contextSuffixLength() internal view virtual returns (uint256) {\n return 0;\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Errors.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of common custom errors used in multiple contracts\n *\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\n * It is recommended to avoid relying on the error API for critical functionality.\n *\n * _Available since v5.1._\n */\nlibrary Errors {\n /**\n * @dev The ETH balance of the account is not enough to perform the operation.\n */\n error InsufficientBalance(uint256 balance, uint256 needed);\n\n /**\n * @dev A call to an address target failed. The target may have reverted.\n */\n error FailedCall();\n\n /**\n * @dev The deployment failed.\n */\n error FailedDeployment();\n\n /**\n * @dev A necessary precompile is missing.\n */\n error MissingPrecompile(address);\n}\n" + }, + "@openzeppelin/contracts/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "contracts/TestingOApp.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.22;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { OApp, MessagingFee, Origin } from \"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol\";\nimport { MessagingReceipt } from \"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol\";\n\ncontract TestingOApp is OApp {\n constructor(address _endpoint, address _delegate) OApp(_endpoint, _delegate) Ownable(_delegate) {}\n\n string public data = \"nothing received yet\";\n\n /**\n * @notice Sends a message from the source chain to a destination chain.\n * @param _dstEid The endpoint ID of the destination chain.\n * @param _message The message string to be sent.\n * @param _options Additional options for message execution.\n * @dev Encodes the message as bytes and sends it using the `_lzSend` internal function.\n * @return receipt A `MessagingReceipt` struct containing details of the message sent.\n */\n function send(\n uint32 _dstEid,\n string memory _message,\n bytes calldata _options\n ) external payable returns (MessagingReceipt memory receipt) {\n bytes memory _payload = abi.encode(_message);\n receipt = _lzSend(_dstEid, _payload, _options, MessagingFee(msg.value, 0), payable(msg.sender));\n }\n\n /**\n * @notice Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token.\n * @param _dstEid Destination chain's endpoint ID.\n * @param _message The message.\n * @param _options Message execution options (e.g., for sending gas to destination).\n * @param _payInLzToken Whether to return fee in ZRO token.\n * @return fee A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token.\n */\n function quote(\n uint32 _dstEid,\n string memory _message,\n bytes memory _options,\n bool _payInLzToken\n ) public view returns (MessagingFee memory fee) {\n bytes memory payload = abi.encode(_message);\n fee = _quote(_dstEid, payload, _options, _payInLzToken);\n }\n\n /**\n * @dev Internal function override to handle incoming messages from another chain.\n * @dev _origin A struct containing information about the message sender.\n * @dev _guid A unique global packet identifier for the message.\n * @param payload The encoded message payload being received.\n *\n * @dev The following params are unused in the current implementation of the OApp.\n * @dev _executor The address of the Executor responsible for processing the message.\n * @dev _extraData Arbitrary data appended by the Executor to the message.\n *\n * Decodes the received payload and processes it as per the business logic defined in the function.\n */\n function _lzReceive(\n Origin calldata /*_origin*/,\n bytes32 /*_guid*/,\n bytes calldata payload,\n address /*_executor*/,\n bytes calldata /*_extraData*/\n ) internal override {\n data = abi.decode(payload, (string));\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "evmVersion": "paris", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/tests/e2e/testing_oapp/deployments/amoy-testnet/solcInputs/be3116508cd88579ce80b9b651ebd93f.json b/tests/e2e/testing_oapp/deployments/amoy-testnet/solcInputs/be3116508cd88579ce80b9b651ebd93f.json new file mode 100644 index 00000000..efc8973c --- /dev/null +++ b/tests/e2e/testing_oapp/deployments/amoy-testnet/solcInputs/be3116508cd88579ce80b9b651ebd93f.json @@ -0,0 +1,102 @@ +{ + "language": "Solidity", + "sources": { + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppCore.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { ILayerZeroEndpointV2 } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\";\n\n/**\n * @title IOAppCore\n */\ninterface IOAppCore {\n // Custom error messages\n error OnlyPeer(uint32 eid, bytes32 sender);\n error NoPeer(uint32 eid);\n error InvalidEndpointCall();\n error InvalidDelegate();\n\n // Event emitted when a peer (OApp) is set for a corresponding endpoint\n event PeerSet(uint32 eid, bytes32 peer);\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n */\n function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);\n\n /**\n * @notice Retrieves the LayerZero endpoint associated with the OApp.\n * @return iEndpoint The LayerZero endpoint as an interface.\n */\n function endpoint() external view returns (ILayerZeroEndpointV2 iEndpoint);\n\n /**\n * @notice Retrieves the peer (OApp) associated with a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @return peer The peer address (OApp instance) associated with the corresponding endpoint.\n */\n function peers(uint32 _eid) external view returns (bytes32 peer);\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n */\n function setPeer(uint32 _eid, bytes32 _peer) external;\n\n /**\n * @notice Sets the delegate address for the OApp Core.\n * @param _delegate The address of the delegate to be set.\n */\n function setDelegate(address _delegate) external;\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.20;\n\nimport { ILayerZeroReceiver, Origin } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\";\n\ninterface IOAppReceiver is ILayerZeroReceiver {\n /**\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\n * @param _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @param _message The lzReceive payload.\n * @param _sender The sender address.\n * @return isSender Is a valid sender.\n *\n * @dev Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.\n * @dev The default sender IS the OAppReceiver implementer.\n */\n function isComposeMsgSender(\n Origin calldata _origin,\n bytes calldata _message,\n address _sender\n ) external view returns (bool isSender);\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\n// @dev Import the 'MessagingFee' and 'MessagingReceipt' so it's exposed to OApp implementers\n// solhint-disable-next-line no-unused-import\nimport { OAppSender, MessagingFee, MessagingReceipt } from \"./OAppSender.sol\";\n// @dev Import the 'Origin' so it's exposed to OApp implementers\n// solhint-disable-next-line no-unused-import\nimport { OAppReceiver, Origin } from \"./OAppReceiver.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OApp\n * @dev Abstract contract serving as the base for OApp implementation, combining OAppSender and OAppReceiver functionality.\n */\nabstract contract OApp is OAppSender, OAppReceiver {\n /**\n * @dev Constructor to initialize the OApp with the provided endpoint and owner.\n * @param _endpoint The address of the LOCAL LayerZero endpoint.\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\n */\n constructor(address _endpoint, address _delegate) OAppCore(_endpoint, _delegate) {}\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol implementation.\n * @return receiverVersion The version of the OAppReceiver.sol implementation.\n */\n function oAppVersion()\n public\n pure\n virtual\n override(OAppSender, OAppReceiver)\n returns (uint64 senderVersion, uint64 receiverVersion)\n {\n return (SENDER_VERSION, RECEIVER_VERSION);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppCore.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { IOAppCore, ILayerZeroEndpointV2 } from \"./interfaces/IOAppCore.sol\";\n\n/**\n * @title OAppCore\n * @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations.\n */\nabstract contract OAppCore is IOAppCore, Ownable {\n // The LayerZero endpoint associated with the given OApp\n ILayerZeroEndpointV2 public immutable endpoint;\n\n // Mapping to store peers associated with corresponding endpoints\n mapping(uint32 eid => bytes32 peer) public peers;\n\n /**\n * @dev Constructor to initialize the OAppCore with the provided endpoint and delegate.\n * @param _endpoint The address of the LOCAL Layer Zero endpoint.\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\n *\n * @dev The delegate typically should be set as the owner of the contract.\n */\n constructor(address _endpoint, address _delegate) {\n endpoint = ILayerZeroEndpointV2(_endpoint);\n\n if (_delegate == address(0)) revert InvalidDelegate();\n endpoint.setDelegate(_delegate);\n }\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n *\n * @dev Only the owner/admin of the OApp can call this function.\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\n * @dev Set this to bytes32(0) to remove the peer address.\n * @dev Peer is a bytes32 to accommodate non-evm chains.\n */\n function setPeer(uint32 _eid, bytes32 _peer) public virtual onlyOwner {\n _setPeer(_eid, _peer);\n }\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n *\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\n * @dev Set this to bytes32(0) to remove the peer address.\n * @dev Peer is a bytes32 to accommodate non-evm chains.\n */\n function _setPeer(uint32 _eid, bytes32 _peer) internal virtual {\n peers[_eid] = _peer;\n emit PeerSet(_eid, _peer);\n }\n\n /**\n * @notice Internal function to get the peer address associated with a specific endpoint; reverts if NOT set.\n * ie. the peer is set to bytes32(0).\n * @param _eid The endpoint ID.\n * @return peer The address of the peer associated with the specified endpoint.\n */\n function _getPeerOrRevert(uint32 _eid) internal view virtual returns (bytes32) {\n bytes32 peer = peers[_eid];\n if (peer == bytes32(0)) revert NoPeer(_eid);\n return peer;\n }\n\n /**\n * @notice Sets the delegate address for the OApp.\n * @param _delegate The address of the delegate to be set.\n *\n * @dev Only the owner/admin of the OApp can call this function.\n * @dev Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\n */\n function setDelegate(address _delegate) public onlyOwner {\n endpoint.setDelegate(_delegate);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { IOAppReceiver, Origin } from \"./interfaces/IOAppReceiver.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OAppReceiver\n * @dev Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers.\n */\nabstract contract OAppReceiver is IOAppReceiver, OAppCore {\n // Custom error message for when the caller is not the registered endpoint/\n error OnlyEndpoint(address addr);\n\n // @dev The version of the OAppReceiver implementation.\n // @dev Version is bumped when changes are made to this contract.\n uint64 internal constant RECEIVER_VERSION = 2;\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n *\n * @dev Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented.\n * ie. this is a RECEIVE only OApp.\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions.\n */\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\n return (0, RECEIVER_VERSION);\n }\n\n /**\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\n * @dev _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @dev _message The lzReceive payload.\n * @param _sender The sender address.\n * @return isSender Is a valid sender.\n *\n * @dev Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.\n * @dev The default sender IS the OAppReceiver implementer.\n */\n function isComposeMsgSender(\n Origin calldata /*_origin*/,\n bytes calldata /*_message*/,\n address _sender\n ) public view virtual returns (bool) {\n return _sender == address(this);\n }\n\n /**\n * @notice Checks if the path initialization is allowed based on the provided origin.\n * @param origin The origin information containing the source endpoint and sender address.\n * @return Whether the path has been initialized.\n *\n * @dev This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.\n * @dev This defaults to assuming if a peer has been set, its initialized.\n * Can be overridden by the OApp if there is other logic to determine this.\n */\n function allowInitializePath(Origin calldata origin) public view virtual returns (bool) {\n return peers[origin.srcEid] == origin.sender;\n }\n\n /**\n * @notice Retrieves the next nonce for a given source endpoint and sender address.\n * @dev _srcEid The source endpoint ID.\n * @dev _sender The sender address.\n * @return nonce The next nonce.\n *\n * @dev The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.\n * @dev Is required by the off-chain executor to determine the OApp expects msg execution is ordered.\n * @dev This is also enforced by the OApp.\n * @dev By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\n */\n function nextNonce(uint32 /*_srcEid*/, bytes32 /*_sender*/) public view virtual returns (uint64 nonce) {\n return 0;\n }\n\n /**\n * @dev Entry point for receiving messages or packets from the endpoint.\n * @param _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @param _guid The unique identifier for the received LayerZero message.\n * @param _message The payload of the received message.\n * @param _executor The address of the executor for the received message.\n * @param _extraData Additional arbitrary data provided by the corresponding executor.\n *\n * @dev Entry point for receiving msg/packet from the LayerZero endpoint.\n */\n function lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) public payable virtual {\n // Ensures that only the endpoint can attempt to lzReceive() messages to this OApp.\n if (address(endpoint) != msg.sender) revert OnlyEndpoint(msg.sender);\n\n // Ensure that the sender matches the expected peer for the source endpoint.\n if (_getPeerOrRevert(_origin.srcEid) != _origin.sender) revert OnlyPeer(_origin.srcEid, _origin.sender);\n\n // Call the internal OApp implementation of lzReceive.\n _lzReceive(_origin, _guid, _message, _executor, _extraData);\n }\n\n /**\n * @dev Internal function to implement lzReceive logic without needing to copy the basic parameter validation.\n */\n function _lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) internal virtual;\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { SafeERC20, IERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { MessagingParams, MessagingFee, MessagingReceipt } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OAppSender\n * @dev Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.\n */\nabstract contract OAppSender is OAppCore {\n using SafeERC20 for IERC20;\n\n // Custom error messages\n error NotEnoughNative(uint256 msgValue);\n error LzTokenUnavailable();\n\n // @dev The version of the OAppSender implementation.\n // @dev Version is bumped when changes are made to this contract.\n uint64 internal constant SENDER_VERSION = 1;\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n *\n * @dev Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented.\n * ie. this is a SEND only OApp.\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions\n */\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\n return (SENDER_VERSION, 0);\n }\n\n /**\n * @dev Internal function to interact with the LayerZero EndpointV2.quote() for fee calculation.\n * @param _dstEid The destination endpoint ID.\n * @param _message The message payload.\n * @param _options Additional options for the message.\n * @param _payInLzToken Flag indicating whether to pay the fee in LZ tokens.\n * @return fee The calculated MessagingFee for the message.\n * - nativeFee: The native fee for the message.\n * - lzTokenFee: The LZ token fee for the message.\n */\n function _quote(\n uint32 _dstEid,\n bytes memory _message,\n bytes memory _options,\n bool _payInLzToken\n ) internal view virtual returns (MessagingFee memory fee) {\n return\n endpoint.quote(\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _payInLzToken),\n address(this)\n );\n }\n\n /**\n * @dev Internal function to interact with the LayerZero EndpointV2.send() for sending a message.\n * @param _dstEid The destination endpoint ID.\n * @param _message The message payload.\n * @param _options Additional options for the message.\n * @param _fee The calculated LayerZero fee for the message.\n * - nativeFee: The native fee.\n * - lzTokenFee: The lzToken fee.\n * @param _refundAddress The address to receive any excess fee values sent to the endpoint.\n * @return receipt The receipt for the sent message.\n * - guid: The unique identifier for the sent message.\n * - nonce: The nonce of the sent message.\n * - fee: The LayerZero fee incurred for the message.\n */\n function _lzSend(\n uint32 _dstEid,\n bytes memory _message,\n bytes memory _options,\n MessagingFee memory _fee,\n address _refundAddress\n ) internal virtual returns (MessagingReceipt memory receipt) {\n // @dev Push corresponding fees to the endpoint, any excess is sent back to the _refundAddress from the endpoint.\n uint256 messageValue = _payNative(_fee.nativeFee);\n if (_fee.lzTokenFee > 0) _payLzToken(_fee.lzTokenFee);\n\n return\n // solhint-disable-next-line check-send-result\n endpoint.send{ value: messageValue }(\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _fee.lzTokenFee > 0),\n _refundAddress\n );\n }\n\n /**\n * @dev Internal function to pay the native fee associated with the message.\n * @param _nativeFee The native fee to be paid.\n * @return nativeFee The amount of native currency paid.\n *\n * @dev If the OApp needs to initiate MULTIPLE LayerZero messages in a single transaction,\n * this will need to be overridden because msg.value would contain multiple lzFees.\n * @dev Should be overridden in the event the LayerZero endpoint requires a different native currency.\n * @dev Some EVMs use an ERC20 as a method for paying transactions/gasFees.\n * @dev The endpoint is EITHER/OR, ie. it will NOT support both types of native payment at a time.\n */\n function _payNative(uint256 _nativeFee) internal virtual returns (uint256 nativeFee) {\n if (msg.value != _nativeFee) revert NotEnoughNative(msg.value);\n return _nativeFee;\n }\n\n /**\n * @dev Internal function to pay the LZ token fee associated with the message.\n * @param _lzTokenFee The LZ token fee to be paid.\n *\n * @dev If the caller is trying to pay in the specified lzToken, then the lzTokenFee is passed to the endpoint.\n * @dev Any excess sent, is passed back to the specified _refundAddress in the _lzSend().\n */\n function _payLzToken(uint256 _lzTokenFee) internal virtual {\n // @dev Cannot cache the token because it is not immutable in the endpoint.\n address lzToken = endpoint.lzToken();\n if (lzToken == address(0)) revert LzTokenUnavailable();\n\n // Pay LZ token fee by sending tokens to the endpoint.\n IERC20(lzToken).safeTransferFrom(msg.sender, address(endpoint), _lzTokenFee);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nimport { IMessageLibManager } from \"./IMessageLibManager.sol\";\nimport { IMessagingComposer } from \"./IMessagingComposer.sol\";\nimport { IMessagingChannel } from \"./IMessagingChannel.sol\";\nimport { IMessagingContext } from \"./IMessagingContext.sol\";\n\nstruct MessagingParams {\n uint32 dstEid;\n bytes32 receiver;\n bytes message;\n bytes options;\n bool payInLzToken;\n}\n\nstruct MessagingReceipt {\n bytes32 guid;\n uint64 nonce;\n MessagingFee fee;\n}\n\nstruct MessagingFee {\n uint256 nativeFee;\n uint256 lzTokenFee;\n}\n\nstruct Origin {\n uint32 srcEid;\n bytes32 sender;\n uint64 nonce;\n}\n\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\n\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\n\n event PacketDelivered(Origin origin, address receiver);\n\n event LzReceiveAlert(\n address indexed receiver,\n address indexed executor,\n Origin origin,\n bytes32 guid,\n uint256 gas,\n uint256 value,\n bytes message,\n bytes extraData,\n bytes reason\n );\n\n event LzTokenSet(address token);\n\n event DelegateSet(address sender, address delegate);\n\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\n\n function send(\n MessagingParams calldata _params,\n address _refundAddress\n ) external payable returns (MessagingReceipt memory);\n\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\n\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\n\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\n\n function lzReceive(\n Origin calldata _origin,\n address _receiver,\n bytes32 _guid,\n bytes calldata _message,\n bytes calldata _extraData\n ) external payable;\n\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\n\n function setLzToken(address _lzToken) external;\n\n function lzToken() external view returns (address);\n\n function nativeToken() external view returns (address);\n\n function setDelegate(address _delegate) external;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nimport { Origin } from \"./ILayerZeroEndpointV2.sol\";\n\ninterface ILayerZeroReceiver {\n function allowInitializePath(Origin calldata _origin) external view returns (bool);\n\n function nextNonce(uint32 _eid, bytes32 _sender) external view returns (uint64);\n\n function lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) external payable;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nstruct SetConfigParam {\n uint32 eid;\n uint32 configType;\n bytes config;\n}\n\ninterface IMessageLibManager {\n struct Timeout {\n address lib;\n uint256 expiry;\n }\n\n event LibraryRegistered(address newLib);\n event DefaultSendLibrarySet(uint32 eid, address newLib);\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\n event SendLibrarySet(address sender, uint32 eid, address newLib);\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\n\n function registerLibrary(address _lib) external;\n\n function isRegisteredLibrary(address _lib) external view returns (bool);\n\n function getRegisteredLibraries() external view returns (address[] memory);\n\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\n\n function defaultSendLibrary(uint32 _eid) external view returns (address);\n\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\n\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\n\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\n\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\n\n function isSupportedEid(uint32 _eid) external view returns (bool);\n\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\n\n /// ------------------- OApp interfaces -------------------\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\n\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\n\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\n\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\n\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\n\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\n\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\n\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\n\n function getConfig(\n address _oapp,\n address _lib,\n uint32 _eid,\n uint32 _configType\n ) external view returns (bytes memory config);\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingChannel {\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\n\n function eid() external view returns (uint32);\n\n // this is an emergency function if a message cannot be verified for some reasons\n // required to provide _nextNonce to avoid race condition\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\n\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\n\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\n\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\n\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\n\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\n\n function inboundPayloadHash(\n address _receiver,\n uint32 _srcEid,\n bytes32 _sender,\n uint64 _nonce\n ) external view returns (bytes32);\n\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingComposer {\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\n event LzComposeAlert(\n address indexed from,\n address indexed to,\n address indexed executor,\n bytes32 guid,\n uint16 index,\n uint256 gas,\n uint256 value,\n bytes message,\n bytes extraData,\n bytes reason\n );\n\n function composeQueue(\n address _from,\n address _to,\n bytes32 _guid,\n uint16 _index\n ) external view returns (bytes32 messageHash);\n\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\n\n function lzCompose(\n address _from,\n address _to,\n bytes32 _guid,\n uint16 _index,\n bytes calldata _message,\n bytes calldata _extraData\n ) external payable;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingContext {\n function isSendingMessage() external view returns (bool);\n\n function getSendContext() external view returns (uint32 dstEid, address sender);\n}\n" + }, + "@openzeppelin/contracts/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {Context} from \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n /**\n * @dev The caller account is not authorized to perform an operation.\n */\n error OwnableUnauthorizedAccount(address account);\n\n /**\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\n */\n error OwnableInvalidOwner(address owner);\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n */\n constructor(address initialOwner) {\n if (initialOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n if (owner() != _msgSender()) {\n revert OwnableUnauthorizedAccount(_msgSender());\n }\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby disabling any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n if (newOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "@openzeppelin/contracts/interfaces/IERC1363.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC165} from \"./IERC165.sol\";\n\n/**\n * @title IERC1363\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\n *\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\n */\ninterface IERC1363 is IERC20, IERC165 {\n /*\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\n * 0xb0202a11 ===\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\n */\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @param data Additional data with no specified format, sent in call to `spender`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\n}\n" + }, + "@openzeppelin/contracts/interfaces/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"../utils/introspection/IERC165.sol\";\n" + }, + "@openzeppelin/contracts/interfaces/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\n" + }, + "@openzeppelin/contracts/token/ERC20/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-20 standard as defined in the ERC.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the value of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the value of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\n * allowance mechanism. `value` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n" + }, + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\nimport {IERC1363} from \"../../../interfaces/IERC1363.sol\";\nimport {Address} from \"../../../utils/Address.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n /**\n * @dev An operation with an ERC-20 token failed.\n */\n error SafeERC20FailedOperation(address token);\n\n /**\n * @dev Indicates a failed `decreaseAllowance` request.\n */\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\n\n /**\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\n }\n\n /**\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\n */\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n }\n\n /**\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n uint256 oldAllowance = token.allowance(address(this), spender);\n forceApprove(token, spender, oldAllowance + value);\n }\n\n /**\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n * value, non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\n unchecked {\n uint256 currentAllowance = token.allowance(address(this), spender);\n if (currentAllowance < requestedDecrease) {\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\n }\n forceApprove(token, spender, currentAllowance - requestedDecrease);\n }\n }\n\n /**\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n * to be set to zero before setting it to a non-zero value, such as USDT.\n *\n * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\n * only sets the \"standard\" allowance. Any temporary allowance will remain active, in addition to the value being\n * set here.\n */\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\n\n if (!_callOptionalReturnBool(token, approvalCall)) {\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\n _callOptionalReturn(token, approvalCall);\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n safeTransfer(token, to, value);\n } else if (!token.transferAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\n * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferFromAndCallRelaxed(\n IERC1363 token,\n address from,\n address to,\n uint256 value,\n bytes memory data\n ) internal {\n if (to.code.length == 0) {\n safeTransferFrom(token, from, to, value);\n } else if (!token.transferFromAndCall(from, to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\n * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\n * once without retrying, and relies on the returned value to be true.\n *\n * Reverts if the returned value is other than `true`.\n */\n function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n forceApprove(token, to, value);\n } else if (!token.approveAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\n */\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n // bubble errors\n if iszero(success) {\n let ptr := mload(0x40)\n returndatacopy(ptr, 0, returndatasize())\n revert(ptr, returndatasize())\n }\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n\n if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\n */\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\n bool success;\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\nimport {Errors} from \"./Errors.sol\";\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev There's no code at `target` (it is not a contract).\n */\n error AddressEmptyCode(address target);\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n if (address(this).balance < amount) {\n revert Errors.InsufficientBalance(address(this).balance, amount);\n }\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n if (!success) {\n revert Errors.FailedCall();\n }\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason or custom error, it is bubbled\n * up by this function (like regular Solidity function calls). However, if\n * the call reverted with no returned reason, this function reverts with a\n * {Errors.FailedCall} error.\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n if (address(this).balance < value) {\n revert Errors.InsufficientBalance(address(this).balance, value);\n }\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\n * of an unsuccessful call.\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata\n ) internal view returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n // only check if target is a contract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n if (returndata.length == 0 && target.code.length == 0) {\n revert AddressEmptyCode(target);\n }\n return returndata;\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n * revert reason or with a default {Errors.FailedCall} error.\n */\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n return returndata;\n }\n }\n\n /**\n * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\n */\n function _revert(bytes memory returndata) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n assembly (\"memory-safe\") {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert Errors.FailedCall();\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n function _contextSuffixLength() internal view virtual returns (uint256) {\n return 0;\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Errors.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of common custom errors used in multiple contracts\n *\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\n * It is recommended to avoid relying on the error API for critical functionality.\n *\n * _Available since v5.1._\n */\nlibrary Errors {\n /**\n * @dev The ETH balance of the account is not enough to perform the operation.\n */\n error InsufficientBalance(uint256 balance, uint256 needed);\n\n /**\n * @dev A call to an address target failed. The target may have reverted.\n */\n error FailedCall();\n\n /**\n * @dev The deployment failed.\n */\n error FailedDeployment();\n\n /**\n * @dev A necessary precompile is missing.\n */\n error MissingPrecompile(address);\n}\n" + }, + "@openzeppelin/contracts/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "contracts/TestingOApp.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.22;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { OApp, MessagingFee, Origin } from \"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol\";\nimport { MessagingReceipt } from \"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol\";\n\ncontract TestingOApp is OApp {\n constructor(address _endpoint, address _delegate) OApp(_endpoint, _delegate) Ownable(_delegate) {}\n\n string public data = \"Nothing received yet.\";\n\n /**\n * @notice Sends a message from the source chain to a destination chain.\n * @param _dstEid The endpoint ID of the destination chain.\n * @param _message The message string to be sent.\n * @param _options Additional options for message execution.\n * @dev Encodes the message as bytes and sends it using the `_lzSend` internal function.\n * @return receipt A `MessagingReceipt` struct containing details of the message sent.\n */\n function send(\n uint32 _dstEid,\n string memory _message,\n bytes calldata _options\n ) external payable returns (MessagingReceipt memory receipt) {\n bytes memory _payload = abi.encode(_message);\n receipt = _lzSend(_dstEid, _payload, _options, MessagingFee(msg.value, 0), payable(msg.sender));\n }\n\n /**\n * @notice Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token.\n * @param _dstEid Destination chain's endpoint ID.\n * @param _message The message.\n * @param _options Message execution options (e.g., for sending gas to destination).\n * @param _payInLzToken Whether to return fee in ZRO token.\n * @return fee A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token.\n */\n function quote(\n uint32 _dstEid,\n string memory _message,\n bytes memory _options,\n bool _payInLzToken\n ) public view returns (MessagingFee memory fee) {\n bytes memory payload = abi.encode(_message);\n fee = _quote(_dstEid, payload, _options, _payInLzToken);\n }\n\n /**\n * @dev Internal function override to handle incoming messages from another chain.\n * @dev _origin A struct containing information about the message sender.\n * @dev _guid A unique global packet identifier for the message.\n * @param payload The encoded message payload being received.\n *\n * @dev The following params are unused in the current implementation of the OApp.\n * @dev _executor The address of the Executor responsible for processing the message.\n * @dev _extraData Arbitrary data appended by the Executor to the message.\n *\n * Decodes the received payload and processes it as per the business logic defined in the function.\n */\n function _lzReceive(\n Origin calldata /*_origin*/,\n bytes32 /*_guid*/,\n bytes calldata payload,\n address /*_executor*/,\n bytes calldata /*_extraData*/\n ) internal override {\n data = abi.decode(payload, (string));\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "evmVersion": "paris", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/tests/e2e/testing_oapp/deployments/amoy-testnet/solcInputs/d37a9b3218ba71b4f94ab0769ed50067.json b/tests/e2e/testing_oapp/deployments/amoy-testnet/solcInputs/d37a9b3218ba71b4f94ab0769ed50067.json new file mode 100644 index 00000000..588779fa --- /dev/null +++ b/tests/e2e/testing_oapp/deployments/amoy-testnet/solcInputs/d37a9b3218ba71b4f94ab0769ed50067.json @@ -0,0 +1,102 @@ +{ + "language": "Solidity", + "sources": { + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppCore.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { ILayerZeroEndpointV2 } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\";\n\n/**\n * @title IOAppCore\n */\ninterface IOAppCore {\n // Custom error messages\n error OnlyPeer(uint32 eid, bytes32 sender);\n error NoPeer(uint32 eid);\n error InvalidEndpointCall();\n error InvalidDelegate();\n\n // Event emitted when a peer (OApp) is set for a corresponding endpoint\n event PeerSet(uint32 eid, bytes32 peer);\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n */\n function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);\n\n /**\n * @notice Retrieves the LayerZero endpoint associated with the OApp.\n * @return iEndpoint The LayerZero endpoint as an interface.\n */\n function endpoint() external view returns (ILayerZeroEndpointV2 iEndpoint);\n\n /**\n * @notice Retrieves the peer (OApp) associated with a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @return peer The peer address (OApp instance) associated with the corresponding endpoint.\n */\n function peers(uint32 _eid) external view returns (bytes32 peer);\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n */\n function setPeer(uint32 _eid, bytes32 _peer) external;\n\n /**\n * @notice Sets the delegate address for the OApp Core.\n * @param _delegate The address of the delegate to be set.\n */\n function setDelegate(address _delegate) external;\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.20;\n\nimport { ILayerZeroReceiver, Origin } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\";\n\ninterface IOAppReceiver is ILayerZeroReceiver {\n /**\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\n * @param _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @param _message The lzReceive payload.\n * @param _sender The sender address.\n * @return isSender Is a valid sender.\n *\n * @dev Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.\n * @dev The default sender IS the OAppReceiver implementer.\n */\n function isComposeMsgSender(\n Origin calldata _origin,\n bytes calldata _message,\n address _sender\n ) external view returns (bool isSender);\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\n// @dev Import the 'MessagingFee' and 'MessagingReceipt' so it's exposed to OApp implementers\n// solhint-disable-next-line no-unused-import\nimport { OAppSender, MessagingFee, MessagingReceipt } from \"./OAppSender.sol\";\n// @dev Import the 'Origin' so it's exposed to OApp implementers\n// solhint-disable-next-line no-unused-import\nimport { OAppReceiver, Origin } from \"./OAppReceiver.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OApp\n * @dev Abstract contract serving as the base for OApp implementation, combining OAppSender and OAppReceiver functionality.\n */\nabstract contract OApp is OAppSender, OAppReceiver {\n /**\n * @dev Constructor to initialize the OApp with the provided endpoint and owner.\n * @param _endpoint The address of the LOCAL LayerZero endpoint.\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\n */\n constructor(address _endpoint, address _delegate) OAppCore(_endpoint, _delegate) {}\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol implementation.\n * @return receiverVersion The version of the OAppReceiver.sol implementation.\n */\n function oAppVersion()\n public\n pure\n virtual\n override(OAppSender, OAppReceiver)\n returns (uint64 senderVersion, uint64 receiverVersion)\n {\n return (SENDER_VERSION, RECEIVER_VERSION);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppCore.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { IOAppCore, ILayerZeroEndpointV2 } from \"./interfaces/IOAppCore.sol\";\n\n/**\n * @title OAppCore\n * @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations.\n */\nabstract contract OAppCore is IOAppCore, Ownable {\n // The LayerZero endpoint associated with the given OApp\n ILayerZeroEndpointV2 public immutable endpoint;\n\n // Mapping to store peers associated with corresponding endpoints\n mapping(uint32 eid => bytes32 peer) public peers;\n\n /**\n * @dev Constructor to initialize the OAppCore with the provided endpoint and delegate.\n * @param _endpoint The address of the LOCAL Layer Zero endpoint.\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\n *\n * @dev The delegate typically should be set as the owner of the contract.\n */\n constructor(address _endpoint, address _delegate) {\n endpoint = ILayerZeroEndpointV2(_endpoint);\n\n if (_delegate == address(0)) revert InvalidDelegate();\n endpoint.setDelegate(_delegate);\n }\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n *\n * @dev Only the owner/admin of the OApp can call this function.\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\n * @dev Set this to bytes32(0) to remove the peer address.\n * @dev Peer is a bytes32 to accommodate non-evm chains.\n */\n function setPeer(uint32 _eid, bytes32 _peer) public virtual onlyOwner {\n _setPeer(_eid, _peer);\n }\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n *\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\n * @dev Set this to bytes32(0) to remove the peer address.\n * @dev Peer is a bytes32 to accommodate non-evm chains.\n */\n function _setPeer(uint32 _eid, bytes32 _peer) internal virtual {\n peers[_eid] = _peer;\n emit PeerSet(_eid, _peer);\n }\n\n /**\n * @notice Internal function to get the peer address associated with a specific endpoint; reverts if NOT set.\n * ie. the peer is set to bytes32(0).\n * @param _eid The endpoint ID.\n * @return peer The address of the peer associated with the specified endpoint.\n */\n function _getPeerOrRevert(uint32 _eid) internal view virtual returns (bytes32) {\n bytes32 peer = peers[_eid];\n if (peer == bytes32(0)) revert NoPeer(_eid);\n return peer;\n }\n\n /**\n * @notice Sets the delegate address for the OApp.\n * @param _delegate The address of the delegate to be set.\n *\n * @dev Only the owner/admin of the OApp can call this function.\n * @dev Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\n */\n function setDelegate(address _delegate) public onlyOwner {\n endpoint.setDelegate(_delegate);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { IOAppReceiver, Origin } from \"./interfaces/IOAppReceiver.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OAppReceiver\n * @dev Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers.\n */\nabstract contract OAppReceiver is IOAppReceiver, OAppCore {\n // Custom error message for when the caller is not the registered endpoint/\n error OnlyEndpoint(address addr);\n\n // @dev The version of the OAppReceiver implementation.\n // @dev Version is bumped when changes are made to this contract.\n uint64 internal constant RECEIVER_VERSION = 2;\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n *\n * @dev Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented.\n * ie. this is a RECEIVE only OApp.\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions.\n */\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\n return (0, RECEIVER_VERSION);\n }\n\n /**\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\n * @dev _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @dev _message The lzReceive payload.\n * @param _sender The sender address.\n * @return isSender Is a valid sender.\n *\n * @dev Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.\n * @dev The default sender IS the OAppReceiver implementer.\n */\n function isComposeMsgSender(\n Origin calldata /*_origin*/,\n bytes calldata /*_message*/,\n address _sender\n ) public view virtual returns (bool) {\n return _sender == address(this);\n }\n\n /**\n * @notice Checks if the path initialization is allowed based on the provided origin.\n * @param origin The origin information containing the source endpoint and sender address.\n * @return Whether the path has been initialized.\n *\n * @dev This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.\n * @dev This defaults to assuming if a peer has been set, its initialized.\n * Can be overridden by the OApp if there is other logic to determine this.\n */\n function allowInitializePath(Origin calldata origin) public view virtual returns (bool) {\n return peers[origin.srcEid] == origin.sender;\n }\n\n /**\n * @notice Retrieves the next nonce for a given source endpoint and sender address.\n * @dev _srcEid The source endpoint ID.\n * @dev _sender The sender address.\n * @return nonce The next nonce.\n *\n * @dev The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.\n * @dev Is required by the off-chain executor to determine the OApp expects msg execution is ordered.\n * @dev This is also enforced by the OApp.\n * @dev By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\n */\n function nextNonce(uint32 /*_srcEid*/, bytes32 /*_sender*/) public view virtual returns (uint64 nonce) {\n return 0;\n }\n\n /**\n * @dev Entry point for receiving messages or packets from the endpoint.\n * @param _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @param _guid The unique identifier for the received LayerZero message.\n * @param _message The payload of the received message.\n * @param _executor The address of the executor for the received message.\n * @param _extraData Additional arbitrary data provided by the corresponding executor.\n *\n * @dev Entry point for receiving msg/packet from the LayerZero endpoint.\n */\n function lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) public payable virtual {\n // Ensures that only the endpoint can attempt to lzReceive() messages to this OApp.\n if (address(endpoint) != msg.sender) revert OnlyEndpoint(msg.sender);\n\n // Ensure that the sender matches the expected peer for the source endpoint.\n if (_getPeerOrRevert(_origin.srcEid) != _origin.sender) revert OnlyPeer(_origin.srcEid, _origin.sender);\n\n // Call the internal OApp implementation of lzReceive.\n _lzReceive(_origin, _guid, _message, _executor, _extraData);\n }\n\n /**\n * @dev Internal function to implement lzReceive logic without needing to copy the basic parameter validation.\n */\n function _lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) internal virtual;\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { SafeERC20, IERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { MessagingParams, MessagingFee, MessagingReceipt } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OAppSender\n * @dev Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.\n */\nabstract contract OAppSender is OAppCore {\n using SafeERC20 for IERC20;\n\n // Custom error messages\n error NotEnoughNative(uint256 msgValue);\n error LzTokenUnavailable();\n\n // @dev The version of the OAppSender implementation.\n // @dev Version is bumped when changes are made to this contract.\n uint64 internal constant SENDER_VERSION = 1;\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n *\n * @dev Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented.\n * ie. this is a SEND only OApp.\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions\n */\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\n return (SENDER_VERSION, 0);\n }\n\n /**\n * @dev Internal function to interact with the LayerZero EndpointV2.quote() for fee calculation.\n * @param _dstEid The destination endpoint ID.\n * @param _message The message payload.\n * @param _options Additional options for the message.\n * @param _payInLzToken Flag indicating whether to pay the fee in LZ tokens.\n * @return fee The calculated MessagingFee for the message.\n * - nativeFee: The native fee for the message.\n * - lzTokenFee: The LZ token fee for the message.\n */\n function _quote(\n uint32 _dstEid,\n bytes memory _message,\n bytes memory _options,\n bool _payInLzToken\n ) internal view virtual returns (MessagingFee memory fee) {\n return\n endpoint.quote(\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _payInLzToken),\n address(this)\n );\n }\n\n /**\n * @dev Internal function to interact with the LayerZero EndpointV2.send() for sending a message.\n * @param _dstEid The destination endpoint ID.\n * @param _message The message payload.\n * @param _options Additional options for the message.\n * @param _fee The calculated LayerZero fee for the message.\n * - nativeFee: The native fee.\n * - lzTokenFee: The lzToken fee.\n * @param _refundAddress The address to receive any excess fee values sent to the endpoint.\n * @return receipt The receipt for the sent message.\n * - guid: The unique identifier for the sent message.\n * - nonce: The nonce of the sent message.\n * - fee: The LayerZero fee incurred for the message.\n */\n function _lzSend(\n uint32 _dstEid,\n bytes memory _message,\n bytes memory _options,\n MessagingFee memory _fee,\n address _refundAddress\n ) internal virtual returns (MessagingReceipt memory receipt) {\n // @dev Push corresponding fees to the endpoint, any excess is sent back to the _refundAddress from the endpoint.\n uint256 messageValue = _payNative(_fee.nativeFee);\n if (_fee.lzTokenFee > 0) _payLzToken(_fee.lzTokenFee);\n\n return\n // solhint-disable-next-line check-send-result\n endpoint.send{ value: messageValue }(\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _fee.lzTokenFee > 0),\n _refundAddress\n );\n }\n\n /**\n * @dev Internal function to pay the native fee associated with the message.\n * @param _nativeFee The native fee to be paid.\n * @return nativeFee The amount of native currency paid.\n *\n * @dev If the OApp needs to initiate MULTIPLE LayerZero messages in a single transaction,\n * this will need to be overridden because msg.value would contain multiple lzFees.\n * @dev Should be overridden in the event the LayerZero endpoint requires a different native currency.\n * @dev Some EVMs use an ERC20 as a method for paying transactions/gasFees.\n * @dev The endpoint is EITHER/OR, ie. it will NOT support both types of native payment at a time.\n */\n function _payNative(uint256 _nativeFee) internal virtual returns (uint256 nativeFee) {\n if (msg.value != _nativeFee) revert NotEnoughNative(msg.value);\n return _nativeFee;\n }\n\n /**\n * @dev Internal function to pay the LZ token fee associated with the message.\n * @param _lzTokenFee The LZ token fee to be paid.\n *\n * @dev If the caller is trying to pay in the specified lzToken, then the lzTokenFee is passed to the endpoint.\n * @dev Any excess sent, is passed back to the specified _refundAddress in the _lzSend().\n */\n function _payLzToken(uint256 _lzTokenFee) internal virtual {\n // @dev Cannot cache the token because it is not immutable in the endpoint.\n address lzToken = endpoint.lzToken();\n if (lzToken == address(0)) revert LzTokenUnavailable();\n\n // Pay LZ token fee by sending tokens to the endpoint.\n IERC20(lzToken).safeTransferFrom(msg.sender, address(endpoint), _lzTokenFee);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nimport { IMessageLibManager } from \"./IMessageLibManager.sol\";\nimport { IMessagingComposer } from \"./IMessagingComposer.sol\";\nimport { IMessagingChannel } from \"./IMessagingChannel.sol\";\nimport { IMessagingContext } from \"./IMessagingContext.sol\";\n\nstruct MessagingParams {\n uint32 dstEid;\n bytes32 receiver;\n bytes message;\n bytes options;\n bool payInLzToken;\n}\n\nstruct MessagingReceipt {\n bytes32 guid;\n uint64 nonce;\n MessagingFee fee;\n}\n\nstruct MessagingFee {\n uint256 nativeFee;\n uint256 lzTokenFee;\n}\n\nstruct Origin {\n uint32 srcEid;\n bytes32 sender;\n uint64 nonce;\n}\n\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\n\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\n\n event PacketDelivered(Origin origin, address receiver);\n\n event LzReceiveAlert(\n address indexed receiver,\n address indexed executor,\n Origin origin,\n bytes32 guid,\n uint256 gas,\n uint256 value,\n bytes message,\n bytes extraData,\n bytes reason\n );\n\n event LzTokenSet(address token);\n\n event DelegateSet(address sender, address delegate);\n\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\n\n function send(\n MessagingParams calldata _params,\n address _refundAddress\n ) external payable returns (MessagingReceipt memory);\n\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\n\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\n\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\n\n function lzReceive(\n Origin calldata _origin,\n address _receiver,\n bytes32 _guid,\n bytes calldata _message,\n bytes calldata _extraData\n ) external payable;\n\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\n\n function setLzToken(address _lzToken) external;\n\n function lzToken() external view returns (address);\n\n function nativeToken() external view returns (address);\n\n function setDelegate(address _delegate) external;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nimport { Origin } from \"./ILayerZeroEndpointV2.sol\";\n\ninterface ILayerZeroReceiver {\n function allowInitializePath(Origin calldata _origin) external view returns (bool);\n\n function nextNonce(uint32 _eid, bytes32 _sender) external view returns (uint64);\n\n function lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) external payable;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nstruct SetConfigParam {\n uint32 eid;\n uint32 configType;\n bytes config;\n}\n\ninterface IMessageLibManager {\n struct Timeout {\n address lib;\n uint256 expiry;\n }\n\n event LibraryRegistered(address newLib);\n event DefaultSendLibrarySet(uint32 eid, address newLib);\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\n event SendLibrarySet(address sender, uint32 eid, address newLib);\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\n\n function registerLibrary(address _lib) external;\n\n function isRegisteredLibrary(address _lib) external view returns (bool);\n\n function getRegisteredLibraries() external view returns (address[] memory);\n\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\n\n function defaultSendLibrary(uint32 _eid) external view returns (address);\n\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\n\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\n\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\n\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\n\n function isSupportedEid(uint32 _eid) external view returns (bool);\n\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\n\n /// ------------------- OApp interfaces -------------------\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\n\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\n\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\n\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\n\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\n\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\n\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\n\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\n\n function getConfig(\n address _oapp,\n address _lib,\n uint32 _eid,\n uint32 _configType\n ) external view returns (bytes memory config);\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingChannel {\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\n\n function eid() external view returns (uint32);\n\n // this is an emergency function if a message cannot be verified for some reasons\n // required to provide _nextNonce to avoid race condition\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\n\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\n\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\n\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\n\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\n\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\n\n function inboundPayloadHash(\n address _receiver,\n uint32 _srcEid,\n bytes32 _sender,\n uint64 _nonce\n ) external view returns (bytes32);\n\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingComposer {\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\n event LzComposeAlert(\n address indexed from,\n address indexed to,\n address indexed executor,\n bytes32 guid,\n uint16 index,\n uint256 gas,\n uint256 value,\n bytes message,\n bytes extraData,\n bytes reason\n );\n\n function composeQueue(\n address _from,\n address _to,\n bytes32 _guid,\n uint16 _index\n ) external view returns (bytes32 messageHash);\n\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\n\n function lzCompose(\n address _from,\n address _to,\n bytes32 _guid,\n uint16 _index,\n bytes calldata _message,\n bytes calldata _extraData\n ) external payable;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingContext {\n function isSendingMessage() external view returns (bool);\n\n function getSendContext() external view returns (uint32 dstEid, address sender);\n}\n" + }, + "@openzeppelin/contracts/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {Context} from \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n /**\n * @dev The caller account is not authorized to perform an operation.\n */\n error OwnableUnauthorizedAccount(address account);\n\n /**\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\n */\n error OwnableInvalidOwner(address owner);\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n */\n constructor(address initialOwner) {\n if (initialOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n if (owner() != _msgSender()) {\n revert OwnableUnauthorizedAccount(_msgSender());\n }\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby disabling any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n if (newOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "@openzeppelin/contracts/interfaces/IERC1363.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC165} from \"./IERC165.sol\";\n\n/**\n * @title IERC1363\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\n *\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\n */\ninterface IERC1363 is IERC20, IERC165 {\n /*\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\n * 0xb0202a11 ===\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\n */\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @param data Additional data with no specified format, sent in call to `spender`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\n}\n" + }, + "@openzeppelin/contracts/interfaces/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"../utils/introspection/IERC165.sol\";\n" + }, + "@openzeppelin/contracts/interfaces/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\n" + }, + "@openzeppelin/contracts/token/ERC20/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-20 standard as defined in the ERC.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the value of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the value of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\n * allowance mechanism. `value` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n" + }, + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\nimport {IERC1363} from \"../../../interfaces/IERC1363.sol\";\nimport {Address} from \"../../../utils/Address.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n /**\n * @dev An operation with an ERC-20 token failed.\n */\n error SafeERC20FailedOperation(address token);\n\n /**\n * @dev Indicates a failed `decreaseAllowance` request.\n */\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\n\n /**\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\n }\n\n /**\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\n */\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n }\n\n /**\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n uint256 oldAllowance = token.allowance(address(this), spender);\n forceApprove(token, spender, oldAllowance + value);\n }\n\n /**\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n * value, non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\n unchecked {\n uint256 currentAllowance = token.allowance(address(this), spender);\n if (currentAllowance < requestedDecrease) {\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\n }\n forceApprove(token, spender, currentAllowance - requestedDecrease);\n }\n }\n\n /**\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n * to be set to zero before setting it to a non-zero value, such as USDT.\n *\n * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\n * only sets the \"standard\" allowance. Any temporary allowance will remain active, in addition to the value being\n * set here.\n */\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\n\n if (!_callOptionalReturnBool(token, approvalCall)) {\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\n _callOptionalReturn(token, approvalCall);\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n safeTransfer(token, to, value);\n } else if (!token.transferAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\n * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferFromAndCallRelaxed(\n IERC1363 token,\n address from,\n address to,\n uint256 value,\n bytes memory data\n ) internal {\n if (to.code.length == 0) {\n safeTransferFrom(token, from, to, value);\n } else if (!token.transferFromAndCall(from, to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\n * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\n * once without retrying, and relies on the returned value to be true.\n *\n * Reverts if the returned value is other than `true`.\n */\n function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n forceApprove(token, to, value);\n } else if (!token.approveAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\n */\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n // bubble errors\n if iszero(success) {\n let ptr := mload(0x40)\n returndatacopy(ptr, 0, returndatasize())\n revert(ptr, returndatasize())\n }\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n\n if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\n */\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\n bool success;\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\nimport {Errors} from \"./Errors.sol\";\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev There's no code at `target` (it is not a contract).\n */\n error AddressEmptyCode(address target);\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n if (address(this).balance < amount) {\n revert Errors.InsufficientBalance(address(this).balance, amount);\n }\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n if (!success) {\n revert Errors.FailedCall();\n }\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason or custom error, it is bubbled\n * up by this function (like regular Solidity function calls). However, if\n * the call reverted with no returned reason, this function reverts with a\n * {Errors.FailedCall} error.\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n if (address(this).balance < value) {\n revert Errors.InsufficientBalance(address(this).balance, value);\n }\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\n * of an unsuccessful call.\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata\n ) internal view returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n // only check if target is a contract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n if (returndata.length == 0 && target.code.length == 0) {\n revert AddressEmptyCode(target);\n }\n return returndata;\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n * revert reason or with a default {Errors.FailedCall} error.\n */\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n return returndata;\n }\n }\n\n /**\n * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\n */\n function _revert(bytes memory returndata) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n assembly (\"memory-safe\") {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert Errors.FailedCall();\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n function _contextSuffixLength() internal view virtual returns (uint256) {\n return 0;\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Errors.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of common custom errors used in multiple contracts\n *\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\n * It is recommended to avoid relying on the error API for critical functionality.\n *\n * _Available since v5.1._\n */\nlibrary Errors {\n /**\n * @dev The ETH balance of the account is not enough to perform the operation.\n */\n error InsufficientBalance(uint256 balance, uint256 needed);\n\n /**\n * @dev A call to an address target failed. The target may have reverted.\n */\n error FailedCall();\n\n /**\n * @dev The deployment failed.\n */\n error FailedDeployment();\n\n /**\n * @dev A necessary precompile is missing.\n */\n error MissingPrecompile(address);\n}\n" + }, + "@openzeppelin/contracts/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "contracts/SimpleTestingOApp.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.22;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { OApp, MessagingFee, Origin } from \"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol\";\nimport { MessagingReceipt } from \"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol\";\n\ncontract SimpleTestingOApp is OApp {\n constructor(address _endpoint, address _delegate) OApp(_endpoint, _delegate) Ownable(_delegate) {}\n\n uint public data = 0;\n\n /**\n * @notice Sends a message from the source chain to a destination chain.\n * @param _dstEid The endpoint ID of the destination chain.\n * @param _message The message string to be sent.\n * @param _options Additional options for message execution.\n * @dev Encodes the message as bytes and sends it using the `_lzSend` internal function.\n * @return receipt A `MessagingReceipt` struct containing details of the message sent.\n */\n function send(\n uint32 _dstEid,\n string memory _message,\n bytes calldata _options\n ) external payable returns (MessagingReceipt memory receipt) {\n bytes memory _payload = abi.encode(_message);\n receipt = _lzSend(_dstEid, _payload, _options, MessagingFee(msg.value, 0), payable(msg.sender));\n }\n\n /**\n * @notice Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token.\n * @param _dstEid Destination chain's endpoint ID.\n * @param _message The message.\n * @param _options Message execution options (e.g., for sending gas to destination).\n * @param _payInLzToken Whether to return fee in ZRO token.\n * @return fee A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token.\n */\n function quote(\n uint32 _dstEid,\n string memory _message,\n bytes memory _options,\n bool _payInLzToken\n ) public view returns (MessagingFee memory fee) {\n bytes memory payload = abi.encode(_message);\n fee = _quote(_dstEid, payload, _options, _payInLzToken);\n }\n\n /**\n * @dev Internal function override to handle incoming messages from another chain.\n * @dev _origin A struct containing information about the message sender.\n * @dev _guid A unique global packet identifier for the message.\n * @param payload The encoded message payload being received.\n *\n * @dev The following params are unused in the current implementation of the OApp.\n * @dev _executor The address of the Executor responsible for processing the message.\n * @dev _extraData Arbitrary data appended by the Executor to the message.\n *\n * Decodes the received payload and processes it as per the business logic defined in the function.\n */\n function _lzReceive(\n Origin calldata /*_origin*/,\n bytes32 /*_guid*/,\n bytes calldata payload,\n address /*_executor*/,\n bytes calldata /*_extraData*/\n ) internal override {\n data = abi.decode(payload, (uint));\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "evmVersion": "paris", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/tests/e2e/testing_oapp/deployments/arbitrum-sepolia/.chainId b/tests/e2e/testing_oapp/deployments/arbitrum-sepolia/.chainId new file mode 100644 index 00000000..71ba4d63 --- /dev/null +++ b/tests/e2e/testing_oapp/deployments/arbitrum-sepolia/.chainId @@ -0,0 +1 @@ +421614 \ No newline at end of file diff --git a/tests/e2e/testing_oapp/deployments/arbitrum-sepolia/SimpleTestingOApp.json b/tests/e2e/testing_oapp/deployments/arbitrum-sepolia/SimpleTestingOApp.json new file mode 100644 index 00000000..a2473c36 --- /dev/null +++ b/tests/e2e/testing_oapp/deployments/arbitrum-sepolia/SimpleTestingOApp.json @@ -0,0 +1,795 @@ +{ + "address": "0x01ADf31F11501F424e67215A91FAB7100B68c518", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_endpoint", + "type": "address" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "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" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "SafeERC20FailedOperation", + "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" + }, + { + "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": "data", + "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": [ + { + "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": [ + { + "internalType": "uint32", + "name": "_dstEid", + "type": "uint32" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + }, + { + "internalType": "bytes", + "name": "_options", + "type": "bytes" + }, + { + "internalType": "bool", + "name": "_payInLzToken", + "type": "bool" + } + ], + "name": "quote", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "nativeFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lzTokenFee", + "type": "uint256" + } + ], + "internalType": "struct MessagingFee", + "name": "fee", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_dstEid", + "type": "uint32" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + }, + { + "internalType": "bytes", + "name": "_options", + "type": "bytes" + } + ], + "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": "receipt", + "type": "tuple" + } + ], + "stateMutability": "payable", + "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" + } + ], + "transactionHash": "0x57c5f3d65f18caf6ea04788d31bda3db70a24c6f26129d6d0a6ed20e3414873b", + "receipt": { + "to": null, + "from": "0x96E341c7E7537333AFa153d196038C6D086d5d2b", + "contractAddress": "0x01ADf31F11501F424e67215A91FAB7100B68c518", + "transactionIndex": 2, + "gasUsed": "1097159", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000200000000000000000004002000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000200000000000800000000000800000000000000000000400000200000000020000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000400000000000000020000000000000000000000000000000000000000000000000000000000000000200", + "blockHash": "0xbf199aacdd38bc17f09202cab73e90f88b736b5706efb02ef394f4d3eb2398c4", + "transactionHash": "0x57c5f3d65f18caf6ea04788d31bda3db70a24c6f26129d6d0a6ed20e3414873b", + "logs": [ + { + "transactionIndex": 2, + "blockNumber": 94946596, + "transactionHash": "0x57c5f3d65f18caf6ea04788d31bda3db70a24c6f26129d6d0a6ed20e3414873b", + "address": "0x01ADf31F11501F424e67215A91FAB7100B68c518", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xbf199aacdd38bc17f09202cab73e90f88b736b5706efb02ef394f4d3eb2398c4" + }, + { + "transactionIndex": 2, + "blockNumber": 94946596, + "transactionHash": "0x57c5f3d65f18caf6ea04788d31bda3db70a24c6f26129d6d0a6ed20e3414873b", + "address": "0x6EDCE65403992e310A62460808c4b910D972f10f", + "topics": [ + "0x6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d7983981" + ], + "data": "0x00000000000000000000000001adf31f11501f424e67215a91fab7100b68c51800000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "logIndex": 2, + "blockHash": "0xbf199aacdd38bc17f09202cab73e90f88b736b5706efb02ef394f4d3eb2398c4" + } + ], + "blockNumber": 94946596, + "cumulativeGasUsed": "1178797", + "status": 1, + "byzantium": true + }, + "args": [ + "0x6EDCE65403992e310A62460808c4b910D972f10f", + "0x96E341c7E7537333AFa153d196038C6D086d5d2b" + ], + "numDeployments": 1, + "solcInputHash": "d37a9b3218ba71b4f94ab0769ed50067", + "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_endpoint\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"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\"},{\"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\":\"data\",\"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\":[{\"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\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"string\",\"name\":\"_message\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"quote\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"fee\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"string\",\"name\":\"_message\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"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\":\"receipt\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"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\"}],\"devdoc\":{\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"details\":\"This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.\",\"params\":{\"origin\":\"The origin information containing the source endpoint and sender address.\"},\"returns\":{\"_0\":\"Whether the path has been initialized.\"}},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"details\":\"_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.\",\"params\":{\"_sender\":\"The sender address.\"},\"returns\":{\"_0\":\"isSender Is a valid sender.\"}},\"lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.\",\"params\":{\"_executor\":\"The address of the executor for the received message.\",\"_extraData\":\"Additional arbitrary data provided by the corresponding executor.\",\"_guid\":\"The unique identifier for the received LayerZero message.\",\"_message\":\"The payload of the received message.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"nextNonce(uint32,bytes32)\":{\"details\":\"_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\",\"returns\":{\"nonce\":\"The next nonce.\"}},\"oAppVersion()\":{\"returns\":{\"receiverVersion\":\"The version of the OAppReceiver.sol implementation.\",\"senderVersion\":\"The version of the OAppSender.sol implementation.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"quote(uint32,string,bytes,bool)\":{\"params\":{\"_dstEid\":\"Destination chain's endpoint ID.\",\"_message\":\"The message.\",\"_options\":\"Message execution options (e.g., for sending gas to destination).\",\"_payInLzToken\":\"Whether to return fee in ZRO token.\"},\"returns\":{\"fee\":\"A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"send(uint32,string,bytes)\":{\"details\":\"Encodes the message as bytes and sends it using the `_lzSend` internal function.\",\"params\":{\"_dstEid\":\"The endpoint ID of the destination chain.\",\"_message\":\"The message string to be sent.\",\"_options\":\"Additional options for message execution.\"},\"returns\":{\"receipt\":\"A `MessagingReceipt` struct containing details of the message sent.\"}},\"setDelegate(address)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\",\"params\":{\"_delegate\":\"The address of the delegate to be set.\"}},\"setPeer(uint32,bytes32)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_peer\":\"The address of the peer to be associated with the corresponding endpoint.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"notice\":\"Checks if the path initialization is allowed based on the provided origin.\"},\"endpoint()\":{\"notice\":\"Retrieves the LayerZero endpoint associated with the OApp.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"notice\":\"Indicates whether an address is an approved composeMsg sender to the Endpoint.\"},\"nextNonce(uint32,bytes32)\":{\"notice\":\"Retrieves the next nonce for a given source endpoint and sender address.\"},\"oAppVersion()\":{\"notice\":\"Retrieves the OApp version information.\"},\"peers(uint32)\":{\"notice\":\"Retrieves the peer (OApp) associated with a corresponding endpoint.\"},\"quote(uint32,string,bytes,bool)\":{\"notice\":\"Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token.\"},\"send(uint32,string,bytes)\":{\"notice\":\"Sends a message from the source chain to a destination chain.\"},\"setDelegate(address)\":{\"notice\":\"Sets the delegate address for the OApp.\"},\"setPeer(uint32,bytes32)\":{\"notice\":\"Sets the peer address (OApp instance) for a corresponding endpoint.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/SimpleTestingOApp.sol\":\"SimpleTestingOApp\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\n// @dev Import the 'MessagingFee' and 'MessagingReceipt' so it's exposed to OApp implementers\\n// solhint-disable-next-line no-unused-import\\nimport { OAppSender, MessagingFee, MessagingReceipt } from \\\"./OAppSender.sol\\\";\\n// @dev Import the 'Origin' so it's exposed to OApp implementers\\n// solhint-disable-next-line no-unused-import\\nimport { OAppReceiver, Origin } from \\\"./OAppReceiver.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OApp\\n * @dev Abstract contract serving as the base for OApp implementation, combining OAppSender and OAppReceiver functionality.\\n */\\nabstract contract OApp is OAppSender, OAppReceiver {\\n /**\\n * @dev Constructor to initialize the OApp with the provided endpoint and owner.\\n * @param _endpoint The address of the LOCAL LayerZero endpoint.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n */\\n constructor(address _endpoint, address _delegate) OAppCore(_endpoint, _delegate) {}\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol implementation.\\n * @return receiverVersion The version of the OAppReceiver.sol implementation.\\n */\\n function oAppVersion()\\n public\\n pure\\n virtual\\n override(OAppSender, OAppReceiver)\\n returns (uint64 senderVersion, uint64 receiverVersion)\\n {\\n return (SENDER_VERSION, RECEIVER_VERSION);\\n }\\n}\\n\",\"keccak256\":\"0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { IOAppCore, ILayerZeroEndpointV2 } from \\\"./interfaces/IOAppCore.sol\\\";\\n\\n/**\\n * @title OAppCore\\n * @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations.\\n */\\nabstract contract OAppCore is IOAppCore, Ownable {\\n // The LayerZero endpoint associated with the given OApp\\n ILayerZeroEndpointV2 public immutable endpoint;\\n\\n // Mapping to store peers associated with corresponding endpoints\\n mapping(uint32 eid => bytes32 peer) public peers;\\n\\n /**\\n * @dev Constructor to initialize the OAppCore with the provided endpoint and delegate.\\n * @param _endpoint The address of the LOCAL Layer Zero endpoint.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n *\\n * @dev The delegate typically should be set as the owner of the contract.\\n */\\n constructor(address _endpoint, address _delegate) {\\n endpoint = ILayerZeroEndpointV2(_endpoint);\\n\\n if (_delegate == address(0)) revert InvalidDelegate();\\n endpoint.setDelegate(_delegate);\\n }\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\\n * @dev Set this to bytes32(0) to remove the peer address.\\n * @dev Peer is a bytes32 to accommodate non-evm chains.\\n */\\n function setPeer(uint32 _eid, bytes32 _peer) public virtual onlyOwner {\\n _setPeer(_eid, _peer);\\n }\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n *\\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\\n * @dev Set this to bytes32(0) to remove the peer address.\\n * @dev Peer is a bytes32 to accommodate non-evm chains.\\n */\\n function _setPeer(uint32 _eid, bytes32 _peer) internal virtual {\\n peers[_eid] = _peer;\\n emit PeerSet(_eid, _peer);\\n }\\n\\n /**\\n * @notice Internal function to get the peer address associated with a specific endpoint; reverts if NOT set.\\n * ie. the peer is set to bytes32(0).\\n * @param _eid The endpoint ID.\\n * @return peer The address of the peer associated with the specified endpoint.\\n */\\n function _getPeerOrRevert(uint32 _eid) internal view virtual returns (bytes32) {\\n bytes32 peer = peers[_eid];\\n if (peer == bytes32(0)) revert NoPeer(_eid);\\n return peer;\\n }\\n\\n /**\\n * @notice Sets the delegate address for the OApp.\\n * @param _delegate The address of the delegate to be set.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\\n */\\n function setDelegate(address _delegate) public onlyOwner {\\n endpoint.setDelegate(_delegate);\\n }\\n}\\n\",\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { IOAppReceiver, Origin } from \\\"./interfaces/IOAppReceiver.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OAppReceiver\\n * @dev Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers.\\n */\\nabstract contract OAppReceiver is IOAppReceiver, OAppCore {\\n // Custom error message for when the caller is not the registered endpoint/\\n error OnlyEndpoint(address addr);\\n\\n // @dev The version of the OAppReceiver implementation.\\n // @dev Version is bumped when changes are made to this contract.\\n uint64 internal constant RECEIVER_VERSION = 2;\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n *\\n * @dev Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented.\\n * ie. this is a RECEIVE only OApp.\\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions.\\n */\\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\\n return (0, RECEIVER_VERSION);\\n }\\n\\n /**\\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\\n * @dev _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @dev _message The lzReceive payload.\\n * @param _sender The sender address.\\n * @return isSender Is a valid sender.\\n *\\n * @dev Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.\\n * @dev The default sender IS the OAppReceiver implementer.\\n */\\n function isComposeMsgSender(\\n Origin calldata /*_origin*/,\\n bytes calldata /*_message*/,\\n address _sender\\n ) public view virtual returns (bool) {\\n return _sender == address(this);\\n }\\n\\n /**\\n * @notice Checks if the path initialization is allowed based on the provided origin.\\n * @param origin The origin information containing the source endpoint and sender address.\\n * @return Whether the path has been initialized.\\n *\\n * @dev This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.\\n * @dev This defaults to assuming if a peer has been set, its initialized.\\n * Can be overridden by the OApp if there is other logic to determine this.\\n */\\n function allowInitializePath(Origin calldata origin) public view virtual returns (bool) {\\n return peers[origin.srcEid] == origin.sender;\\n }\\n\\n /**\\n * @notice Retrieves the next nonce for a given source endpoint and sender address.\\n * @dev _srcEid The source endpoint ID.\\n * @dev _sender The sender address.\\n * @return nonce The next nonce.\\n *\\n * @dev The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.\\n * @dev Is required by the off-chain executor to determine the OApp expects msg execution is ordered.\\n * @dev This is also enforced by the OApp.\\n * @dev By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\\n */\\n function nextNonce(uint32 /*_srcEid*/, bytes32 /*_sender*/) public view virtual returns (uint64 nonce) {\\n return 0;\\n }\\n\\n /**\\n * @dev Entry point for receiving messages or packets from the endpoint.\\n * @param _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @param _guid The unique identifier for the received LayerZero message.\\n * @param _message The payload of the received message.\\n * @param _executor The address of the executor for the received message.\\n * @param _extraData Additional arbitrary data provided by the corresponding executor.\\n *\\n * @dev Entry point for receiving msg/packet from the LayerZero endpoint.\\n */\\n function lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) public payable virtual {\\n // Ensures that only the endpoint can attempt to lzReceive() messages to this OApp.\\n if (address(endpoint) != msg.sender) revert OnlyEndpoint(msg.sender);\\n\\n // Ensure that the sender matches the expected peer for the source endpoint.\\n if (_getPeerOrRevert(_origin.srcEid) != _origin.sender) revert OnlyPeer(_origin.srcEid, _origin.sender);\\n\\n // Call the internal OApp implementation of lzReceive.\\n _lzReceive(_origin, _guid, _message, _executor, _extraData);\\n }\\n\\n /**\\n * @dev Internal function to implement lzReceive logic without needing to copy the basic parameter validation.\\n */\\n function _lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { SafeERC20, IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport { MessagingParams, MessagingFee, MessagingReceipt } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OAppSender\\n * @dev Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.\\n */\\nabstract contract OAppSender is OAppCore {\\n using SafeERC20 for IERC20;\\n\\n // Custom error messages\\n error NotEnoughNative(uint256 msgValue);\\n error LzTokenUnavailable();\\n\\n // @dev The version of the OAppSender implementation.\\n // @dev Version is bumped when changes are made to this contract.\\n uint64 internal constant SENDER_VERSION = 1;\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n *\\n * @dev Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented.\\n * ie. this is a SEND only OApp.\\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions\\n */\\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\\n return (SENDER_VERSION, 0);\\n }\\n\\n /**\\n * @dev Internal function to interact with the LayerZero EndpointV2.quote() for fee calculation.\\n * @param _dstEid The destination endpoint ID.\\n * @param _message The message payload.\\n * @param _options Additional options for the message.\\n * @param _payInLzToken Flag indicating whether to pay the fee in LZ tokens.\\n * @return fee The calculated MessagingFee for the message.\\n * - nativeFee: The native fee for the message.\\n * - lzTokenFee: The LZ token fee for the message.\\n */\\n function _quote(\\n uint32 _dstEid,\\n bytes memory _message,\\n bytes memory _options,\\n bool _payInLzToken\\n ) internal view virtual returns (MessagingFee memory fee) {\\n return\\n endpoint.quote(\\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _payInLzToken),\\n address(this)\\n );\\n }\\n\\n /**\\n * @dev Internal function to interact with the LayerZero EndpointV2.send() for sending a message.\\n * @param _dstEid The destination endpoint ID.\\n * @param _message The message payload.\\n * @param _options Additional options for the message.\\n * @param _fee The calculated LayerZero fee for the message.\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n * @param _refundAddress The address to receive any excess fee values sent to the endpoint.\\n * @return receipt The receipt for the sent message.\\n * - guid: The unique identifier for the sent message.\\n * - nonce: The nonce of the sent message.\\n * - fee: The LayerZero fee incurred for the message.\\n */\\n function _lzSend(\\n uint32 _dstEid,\\n bytes memory _message,\\n bytes memory _options,\\n MessagingFee memory _fee,\\n address _refundAddress\\n ) internal virtual returns (MessagingReceipt memory receipt) {\\n // @dev Push corresponding fees to the endpoint, any excess is sent back to the _refundAddress from the endpoint.\\n uint256 messageValue = _payNative(_fee.nativeFee);\\n if (_fee.lzTokenFee > 0) _payLzToken(_fee.lzTokenFee);\\n\\n return\\n // solhint-disable-next-line check-send-result\\n endpoint.send{ value: messageValue }(\\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _fee.lzTokenFee > 0),\\n _refundAddress\\n );\\n }\\n\\n /**\\n * @dev Internal function to pay the native fee associated with the message.\\n * @param _nativeFee The native fee to be paid.\\n * @return nativeFee The amount of native currency paid.\\n *\\n * @dev If the OApp needs to initiate MULTIPLE LayerZero messages in a single transaction,\\n * this will need to be overridden because msg.value would contain multiple lzFees.\\n * @dev Should be overridden in the event the LayerZero endpoint requires a different native currency.\\n * @dev Some EVMs use an ERC20 as a method for paying transactions/gasFees.\\n * @dev The endpoint is EITHER/OR, ie. it will NOT support both types of native payment at a time.\\n */\\n function _payNative(uint256 _nativeFee) internal virtual returns (uint256 nativeFee) {\\n if (msg.value != _nativeFee) revert NotEnoughNative(msg.value);\\n return _nativeFee;\\n }\\n\\n /**\\n * @dev Internal function to pay the LZ token fee associated with the message.\\n * @param _lzTokenFee The LZ token fee to be paid.\\n *\\n * @dev If the caller is trying to pay in the specified lzToken, then the lzTokenFee is passed to the endpoint.\\n * @dev Any excess sent, is passed back to the specified _refundAddress in the _lzSend().\\n */\\n function _payLzToken(uint256 _lzTokenFee) internal virtual {\\n // @dev Cannot cache the token because it is not immutable in the endpoint.\\n address lzToken = endpoint.lzToken();\\n if (lzToken == address(0)) revert LzTokenUnavailable();\\n\\n // Pay LZ token fee by sending tokens to the endpoint.\\n IERC20(lzToken).safeTransferFrom(msg.sender, address(endpoint), _lzTokenFee);\\n }\\n}\\n\",\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { ILayerZeroEndpointV2 } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\n\\n/**\\n * @title IOAppCore\\n */\\ninterface IOAppCore {\\n // Custom error messages\\n error OnlyPeer(uint32 eid, bytes32 sender);\\n error NoPeer(uint32 eid);\\n error InvalidEndpointCall();\\n error InvalidDelegate();\\n\\n // Event emitted when a peer (OApp) is set for a corresponding endpoint\\n event PeerSet(uint32 eid, bytes32 peer);\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n */\\n function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);\\n\\n /**\\n * @notice Retrieves the LayerZero endpoint associated with the OApp.\\n * @return iEndpoint The LayerZero endpoint as an interface.\\n */\\n function endpoint() external view returns (ILayerZeroEndpointV2 iEndpoint);\\n\\n /**\\n * @notice Retrieves the peer (OApp) associated with a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @return peer The peer address (OApp instance) associated with the corresponding endpoint.\\n */\\n function peers(uint32 _eid) external view returns (bytes32 peer);\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n */\\n function setPeer(uint32 _eid, bytes32 _peer) external;\\n\\n /**\\n * @notice Sets the delegate address for the OApp Core.\\n * @param _delegate The address of the delegate to be set.\\n */\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.20;\\n\\nimport { ILayerZeroReceiver, Origin } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\\\";\\n\\ninterface IOAppReceiver is ILayerZeroReceiver {\\n /**\\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\\n * @param _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @param _message The lzReceive payload.\\n * @param _sender The sender address.\\n * @return isSender Is a valid sender.\\n *\\n * @dev Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.\\n * @dev The default sender IS the OAppReceiver implementer.\\n */\\n function isComposeMsgSender(\\n Origin calldata _origin,\\n bytes calldata _message,\\n address _sender\\n ) external view returns (bool isSender);\\n}\\n\",\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IMessageLibManager } from \\\"./IMessageLibManager.sol\\\";\\nimport { IMessagingComposer } from \\\"./IMessagingComposer.sol\\\";\\nimport { IMessagingChannel } from \\\"./IMessagingChannel.sol\\\";\\nimport { IMessagingContext } from \\\"./IMessagingContext.sol\\\";\\n\\nstruct MessagingParams {\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes message;\\n bytes options;\\n bool payInLzToken;\\n}\\n\\nstruct MessagingReceipt {\\n bytes32 guid;\\n uint64 nonce;\\n MessagingFee fee;\\n}\\n\\nstruct MessagingFee {\\n uint256 nativeFee;\\n uint256 lzTokenFee;\\n}\\n\\nstruct Origin {\\n uint32 srcEid;\\n bytes32 sender;\\n uint64 nonce;\\n}\\n\\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\\n\\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\\n\\n event PacketDelivered(Origin origin, address receiver);\\n\\n event LzReceiveAlert(\\n address indexed receiver,\\n address indexed executor,\\n Origin origin,\\n bytes32 guid,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n event LzTokenSet(address token);\\n\\n event DelegateSet(address sender, address delegate);\\n\\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\\n\\n function send(\\n MessagingParams calldata _params,\\n address _refundAddress\\n ) external payable returns (MessagingReceipt memory);\\n\\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\\n\\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n address _receiver,\\n bytes32 _guid,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n\\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\\n\\n function setLzToken(address _lzToken) external;\\n\\n function lzToken() external view returns (address);\\n\\n function nativeToken() external view returns (address);\\n\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { Origin } from \\\"./ILayerZeroEndpointV2.sol\\\";\\n\\ninterface ILayerZeroReceiver {\\n function allowInitializePath(Origin calldata _origin) external view returns (bool);\\n\\n function nextNonce(uint32 _eid, bytes32 _sender) external view returns (uint64);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nstruct SetConfigParam {\\n uint32 eid;\\n uint32 configType;\\n bytes config;\\n}\\n\\ninterface IMessageLibManager {\\n struct Timeout {\\n address lib;\\n uint256 expiry;\\n }\\n\\n event LibraryRegistered(address newLib);\\n event DefaultSendLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\\n event SendLibrarySet(address sender, uint32 eid, address newLib);\\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\\n\\n function registerLibrary(address _lib) external;\\n\\n function isRegisteredLibrary(address _lib) external view returns (bool);\\n\\n function getRegisteredLibraries() external view returns (address[] memory);\\n\\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\\n\\n function defaultSendLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\\n\\n /// ------------------- OApp interfaces -------------------\\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\\n\\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\\n\\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\\n\\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\\n\\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\\n\\n function getConfig(\\n address _oapp,\\n address _lib,\\n uint32 _eid,\\n uint32 _configType\\n ) external view returns (bytes memory config);\\n}\\n\",\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingChannel {\\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n\\n function eid() external view returns (uint32);\\n\\n // this is an emergency function if a message cannot be verified for some reasons\\n // required to provide _nextNonce to avoid race condition\\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\\n\\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\\n\\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n\\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\\n\\n function inboundPayloadHash(\\n address _receiver,\\n uint32 _srcEid,\\n bytes32 _sender,\\n uint64 _nonce\\n ) external view returns (bytes32);\\n\\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n}\\n\",\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingComposer {\\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\\n event LzComposeAlert(\\n address indexed from,\\n address indexed to,\\n address indexed executor,\\n bytes32 guid,\\n uint16 index,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n function composeQueue(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index\\n ) external view returns (bytes32 messageHash);\\n\\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\\n\\n function lzCompose(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingContext {\\n function isSendingMessage() external view returns (bool);\\n\\n function getSendContext() external view returns (uint32 dstEid, address sender);\\n}\\n\",\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Context} from \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * The initial owner is set to the address provided by the deployer. This can\\n * later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n /**\\n * @dev The caller account is not authorized to perform an operation.\\n */\\n error OwnableUnauthorizedAccount(address account);\\n\\n /**\\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\\n */\\n error OwnableInvalidOwner(address owner);\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\\n */\\n constructor(address initialOwner) {\\n if (initialOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n if (owner() != _msgSender()) {\\n revert OwnableUnauthorizedAccount(_msgSender());\\n }\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby disabling any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n if (newOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"./IERC20.sol\\\";\\nimport {IERC165} from \\\"./IERC165.sol\\\";\\n\\n/**\\n * @title IERC1363\\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\\n *\\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\\n */\\ninterface IERC1363 is IERC20, IERC165 {\\n /*\\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\\n * 0xb0202a11 ===\\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\\n */\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferAndCall(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @param data Additional data with no specified format, sent in call to `to`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param from The address which you want to send tokens from.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param from The address which you want to send tokens from.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @param data Additional data with no specified format, sent in call to `to`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\\n * @param spender The address which will spend the funds.\\n * @param value The amount of tokens to be spent.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function approveAndCall(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\\n * @param spender The address which will spend the funds.\\n * @param value The amount of tokens to be spent.\\n * @param data Additional data with no specified format, sent in call to `spender`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC165} from \\\"../utils/introspection/IERC165.sol\\\";\\n\",\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../token/ERC20/IERC20.sol\\\";\\n\",\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../IERC20.sol\\\";\\nimport {IERC1363} from \\\"../../../interfaces/IERC1363.sol\\\";\\nimport {Address} from \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n /**\\n * @dev An operation with an ERC-20 token failed.\\n */\\n error SafeERC20FailedOperation(address token);\\n\\n /**\\n * @dev Indicates a failed `decreaseAllowance` request.\\n */\\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\\n\\n /**\\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful.\\n */\\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\\n }\\n\\n /**\\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\\n */\\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\\n }\\n\\n /**\\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful.\\n *\\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \\\"client\\\"\\n * smart contract uses ERC-7674 to set temporary allowances, then the \\\"client\\\" smart contract should avoid using\\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\\n */\\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n forceApprove(token, spender, oldAllowance + value);\\n }\\n\\n /**\\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\\n * value, non-reverting calls are assumed to be successful.\\n *\\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \\\"client\\\"\\n * smart contract uses ERC-7674 to set temporary allowances, then the \\\"client\\\" smart contract should avoid using\\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\\n */\\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\\n unchecked {\\n uint256 currentAllowance = token.allowance(address(this), spender);\\n if (currentAllowance < requestedDecrease) {\\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\\n }\\n forceApprove(token, spender, currentAllowance - requestedDecrease);\\n }\\n }\\n\\n /**\\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\\n * to be set to zero before setting it to a non-zero value, such as USDT.\\n *\\n * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\\n * only sets the \\\"standard\\\" allowance. Any temporary allowance will remain active, in addition to the value being\\n * set here.\\n */\\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\\n\\n if (!_callOptionalReturnBool(token, approvalCall)) {\\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\\n _callOptionalReturn(token, approvalCall);\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\\n if (to.code.length == 0) {\\n safeTransfer(token, to, value);\\n } else if (!token.transferAndCall(to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\\n * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function transferFromAndCallRelaxed(\\n IERC1363 token,\\n address from,\\n address to,\\n uint256 value,\\n bytes memory data\\n ) internal {\\n if (to.code.length == 0) {\\n safeTransferFrom(token, from, to, value);\\n } else if (!token.transferFromAndCall(from, to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\\n * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\\n * once without retrying, and relies on the returned value to be true.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\\n if (to.code.length == 0) {\\n forceApprove(token, to, value);\\n } else if (!token.approveAndCall(to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n *\\n * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n uint256 returnSize;\\n uint256 returnValue;\\n assembly (\\\"memory-safe\\\") {\\n let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n // bubble errors\\n if iszero(success) {\\n let ptr := mload(0x40)\\n returndatacopy(ptr, 0, returndatasize())\\n revert(ptr, returndatasize())\\n }\\n returnSize := returndatasize()\\n returnValue := mload(0)\\n }\\n\\n if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n *\\n * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\\n */\\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\\n bool success;\\n uint256 returnSize;\\n uint256 returnValue;\\n assembly (\\\"memory-safe\\\") {\\n success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n returnSize := returndatasize()\\n returnValue := mload(0)\\n }\\n return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\\n }\\n}\\n\",\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Errors} from \\\"./Errors.sol\\\";\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev There's no code at `target` (it is not a contract).\\n */\\n error AddressEmptyCode(address target);\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n if (address(this).balance < amount) {\\n revert Errors.InsufficientBalance(address(this).balance, amount);\\n }\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n if (!success) {\\n revert Errors.FailedCall();\\n }\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason or custom error, it is bubbled\\n * up by this function (like regular Solidity function calls). However, if\\n * the call reverted with no returned reason, this function reverts with a\\n * {Errors.FailedCall} error.\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n if (address(this).balance < value) {\\n revert Errors.InsufficientBalance(address(this).balance, value);\\n }\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\\n * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\\n * of an unsuccessful call.\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata\\n ) internal view returns (bytes memory) {\\n if (!success) {\\n _revert(returndata);\\n } else {\\n // only check if target is a contract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n if (returndata.length == 0 && target.code.length == 0) {\\n revert AddressEmptyCode(target);\\n }\\n return returndata;\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\\n * revert reason or with a default {Errors.FailedCall} error.\\n */\\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\\n if (!success) {\\n _revert(returndata);\\n } else {\\n return returndata;\\n }\\n }\\n\\n /**\\n * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\\n */\\n function _revert(bytes memory returndata) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n assembly (\\\"memory-safe\\\") {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert Errors.FailedCall();\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Collection of common custom errors used in multiple contracts\\n *\\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\\n * It is recommended to avoid relying on the error API for critical functionality.\\n *\\n * _Available since v5.1._\\n */\\nlibrary Errors {\\n /**\\n * @dev The ETH balance of the account is not enough to perform the operation.\\n */\\n error InsufficientBalance(uint256 balance, uint256 needed);\\n\\n /**\\n * @dev A call to an address target failed. The target may have reverted.\\n */\\n error FailedCall();\\n\\n /**\\n * @dev The deployment failed.\\n */\\n error FailedDeployment();\\n\\n /**\\n * @dev A necessary precompile is missing.\\n */\\n error MissingPrecompile(address);\\n}\\n\",\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\"},\"contracts/SimpleTestingOApp.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.22;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { OApp, MessagingFee, Origin } from \\\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol\\\";\\nimport { MessagingReceipt } from \\\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol\\\";\\n\\ncontract SimpleTestingOApp is OApp {\\n constructor(address _endpoint, address _delegate) OApp(_endpoint, _delegate) Ownable(_delegate) {}\\n\\n uint public data = 0;\\n\\n /**\\n * @notice Sends a message from the source chain to a destination chain.\\n * @param _dstEid The endpoint ID of the destination chain.\\n * @param _message The message string to be sent.\\n * @param _options Additional options for message execution.\\n * @dev Encodes the message as bytes and sends it using the `_lzSend` internal function.\\n * @return receipt A `MessagingReceipt` struct containing details of the message sent.\\n */\\n function send(\\n uint32 _dstEid,\\n string memory _message,\\n bytes calldata _options\\n ) external payable returns (MessagingReceipt memory receipt) {\\n bytes memory _payload = abi.encode(_message);\\n receipt = _lzSend(_dstEid, _payload, _options, MessagingFee(msg.value, 0), payable(msg.sender));\\n }\\n\\n /**\\n * @notice Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token.\\n * @param _dstEid Destination chain's endpoint ID.\\n * @param _message The message.\\n * @param _options Message execution options (e.g., for sending gas to destination).\\n * @param _payInLzToken Whether to return fee in ZRO token.\\n * @return fee A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token.\\n */\\n function quote(\\n uint32 _dstEid,\\n string memory _message,\\n bytes memory _options,\\n bool _payInLzToken\\n ) public view returns (MessagingFee memory fee) {\\n bytes memory payload = abi.encode(_message);\\n fee = _quote(_dstEid, payload, _options, _payInLzToken);\\n }\\n\\n /**\\n * @dev Internal function override to handle incoming messages from another chain.\\n * @dev _origin A struct containing information about the message sender.\\n * @dev _guid A unique global packet identifier for the message.\\n * @param payload The encoded message payload being received.\\n *\\n * @dev The following params are unused in the current implementation of the OApp.\\n * @dev _executor The address of the Executor responsible for processing the message.\\n * @dev _extraData Arbitrary data appended by the Executor to the message.\\n *\\n * Decodes the received payload and processes it as per the business logic defined in the function.\\n */\\n function _lzReceive(\\n Origin calldata /*_origin*/,\\n bytes32 /*_guid*/,\\n bytes calldata payload,\\n address /*_executor*/,\\n bytes calldata /*_extraData*/\\n ) internal override {\\n data = abi.decode(payload, (uint));\\n }\\n}\\n\",\"keccak256\":\"0x53a205d83471da540ed450de64e20ce478b841f0d0c24f15dcb73651085bb803\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x60a060405260006002553480156200001657600080fd5b506040516200136a3803806200136a833981016040819052620000399162000181565b81818181806001600160a01b0381166200006d57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000788162000114565b506001600160a01b038083166080528116620000a757604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e190602401600060405180830381600087803b158015620000ef57600080fd5b505af115801562000104573d6000803e3d6000fd5b50505050505050505050620001b9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200017c57600080fd5b919050565b600080604083850312156200019557600080fd5b620001a08362000164565b9150620001b06020840162000164565b90509250929050565b60805161116b620001ff6000396000818161015b0152818161034001528181610458015281816107510152818161083f0152818161093601526109ed015261116b6000f3fe6080604052600436106100e85760003560e01c806382413eac1161008a578063e0539e5811610059578063e0539e58146102b1578063f2fde38b146102d1578063f77e5dd3146102f1578063ff7bd03d1461031e57600080fd5b806382413eac146102075780638da5cb5b14610246578063bb0b6a5314610264578063ca5eb5e11461029157600080fd5b80635e280f11116100c65780635e280f1114610149578063715018a61461019557806373d4a13a146101aa5780637d25a05e146101ce57600080fd5b806313137d65146100ed57806317442b70146101025780633400288b14610129575b600080fd5b6101006100fb366004610b99565b61033e565b005b34801561010e57600080fd5b50604080516001815260026020820152015b60405180910390f35b34801561013557600080fd5b50610100610144366004610c52565b6103fe565b34801561015557600080fd5b5061017d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610120565b3480156101a157600080fd5b50610100610414565b3480156101b657600080fd5b506101c060025481565b604051908152602001610120565b3480156101da57600080fd5b506101ee6101e9366004610c52565b610428565b60405167ffffffffffffffff9091168152602001610120565b34801561021357600080fd5b50610236610222366004610c7c565b6001600160a01b0381163014949350505050565b6040519015158152602001610120565b34801561025257600080fd5b506000546001600160a01b031661017d565b34801561027057600080fd5b506101c061027f366004610ce3565b60016020526000908152604090205481565b34801561029d57600080fd5b506101006102ac366004610d05565b610431565b6102c46102bf366004610dce565b6104b7565b6040516101209190610e45565b3480156102dd57600080fd5b506101006102ec366004610d05565b610540565b3480156102fd57600080fd5b5061031161030c366004610e88565b61057e565b6040516101209190610f1d565b34801561032a57600080fd5b50610236610339366004610f34565b6105c2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316331461038e576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b602087018035906103a8906103a3908a610ce3565b6105f8565b146103e6576103ba6020880188610ce3565b60405163309afaf360e21b815263ffffffff909116600482015260208801356024820152604401610385565b6103f587878787878787610634565b50505050505050565b61040661064c565b6104108282610679565b5050565b61041c61064c565b61042660006106ce565b565b60005b92915050565b61043961064c565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561049c57600080fd5b505af11580156104b0573d6000803e3d6000fd5b5050505050565b6104bf610adb565b6000846040516020016104d29190610f96565b60408051601f198184030181526020601f8701819004810284018101909252858352925061053691889184919088908890819084018382808284376000920182905250604080518082019091523481526020810191909152925033915061071e9050565b9695505050505050565b61054861064c565b6001600160a01b03811661057257604051631e4fbdf760e01b815260006004820152602401610385565b61057b816106ce565b50565b60408051808201909152600080825260208201526000846040516020016105a59190610f96565b604051602081830303815290604052905061053686828686610829565b60006020820180359060019083906105da9086610ce3565b63ffffffff1681526020810191909152604001600020541492915050565b63ffffffff81166000908152600160205260408120548061042b5760405163f6ff4fb760e01b815263ffffffff84166004820152602401610385565b61064084860186610fa9565b60025550505050505050565b6000546001600160a01b031633146104265760405163118cdaa760e01b8152336004820152602401610385565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610726610adb565b6000610735846000015161090a565b60208501519091501561074f5761074f8460200151610932565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff16815260200161079f8c6105f8565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b81526004016107db929190610fc2565b60806040518083038185885af11580156107f9573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061081e919061108a565b979650505050505050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff16815260200161088c896105f8565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b81526004016108c1929190610fc2565b6040805180830381865afa1580156108dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090191906110fc565b95945050505050565b600081341461092e576040516304fb820960e51b8152346004820152602401610385565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610992573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b69190611118565b90506001600160a01b0381166109df576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03818116604485015260648085018890528551808603909101815260849094019094526020830180516001600160e01b03166323b872dd60e01b179052610410938516928690610a64908590610a6a565b50505050565b600080602060008451602086016000885af180610a8d576040513d6000823e3d81fd5b50506000513d91508115610aa5578060011415610ab2565b6001600160a01b0384163b155b15610a6457604051635274afe760e01b81526001600160a01b0385166004820152602401610385565b604051806060016040528060008019168152602001600067ffffffffffffffff168152602001610b1e604051806040016040528060008152602001600081525090565b905290565b600060608284031215610b3557600080fd5b50919050565b60008083601f840112610b4d57600080fd5b50813567ffffffffffffffff811115610b6557600080fd5b602083019150836020828501011115610b7d57600080fd5b9250929050565b6001600160a01b038116811461057b57600080fd5b600080600080600080600060e0888a031215610bb457600080fd5b610bbe8989610b23565b965060608801359550608088013567ffffffffffffffff80821115610be257600080fd5b610bee8b838c01610b3b565b909750955060a08a01359150610c0382610b84565b90935060c08901359080821115610c1957600080fd5b50610c268a828b01610b3b565b989b979a50959850939692959293505050565b803563ffffffff81168114610c4d57600080fd5b919050565b60008060408385031215610c6557600080fd5b610c6e83610c39565b946020939093013593505050565b60008060008060a08587031215610c9257600080fd5b610c9c8686610b23565b9350606085013567ffffffffffffffff811115610cb857600080fd5b610cc487828801610b3b565b9094509250506080850135610cd881610b84565b939692955090935050565b600060208284031215610cf557600080fd5b610cfe82610c39565b9392505050565b600060208284031215610d1757600080fd5b8135610cfe81610b84565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115610d5357610d53610d22565b604051601f8501601f19908116603f01168101908282118183101715610d7b57610d7b610d22565b81604052809350858152868686011115610d9457600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112610dbf57600080fd5b610cfe83833560208501610d38565b60008060008060608587031215610de457600080fd5b610ded85610c39565b9350602085013567ffffffffffffffff80821115610e0a57600080fd5b610e1688838901610dae565b94506040870135915080821115610e2c57600080fd5b50610e3987828801610b3b565b95989497509550505050565b60006080820190508251825267ffffffffffffffff60208401511660208301526040830151610e81604084018280518252602090810151910152565b5092915050565b60008060008060808587031215610e9e57600080fd5b610ea785610c39565b9350602085013567ffffffffffffffff80821115610ec457600080fd5b610ed088838901610dae565b94506040870135915080821115610ee657600080fd5b508501601f81018713610ef857600080fd5b610f0787823560208401610d38565b92505060608501358015158114610cd857600080fd5b81518152602080830151908201526040810161042b565b600060608284031215610f4657600080fd5b610cfe8383610b23565b6000815180845260005b81811015610f7657602081850181015186830182015201610f5a565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610cfe6020830184610f50565b600060208284031215610fbb57600080fd5b5035919050565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152610ff860e0840182610f50565b90506060850151603f198483030160a08501526110158282610f50565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b60006040828403121561104d57600080fd5b6040516040810181811067ffffffffffffffff8211171561107057611070610d22565b604052825181526020928301519281019290925250919050565b60006080828403121561109c57600080fd5b6040516060810167ffffffffffffffff82821081831117156110c0576110c0610d22565b81604052845183526020850151915080821682146110dd57600080fd5b5060208201526110f0846040850161103b565b60408201529392505050565b60006040828403121561110e57600080fd5b610cfe838361103b565b60006020828403121561112a57600080fd5b8151610cfe81610b8456fea264697066735822122028a3371f62607d76d2e01ad1e2205a7fabf153a5831a0440a76dcc77a058a52564736f6c63430008160033", + "deployedBytecode": "0x6080604052600436106100e85760003560e01c806382413eac1161008a578063e0539e5811610059578063e0539e58146102b1578063f2fde38b146102d1578063f77e5dd3146102f1578063ff7bd03d1461031e57600080fd5b806382413eac146102075780638da5cb5b14610246578063bb0b6a5314610264578063ca5eb5e11461029157600080fd5b80635e280f11116100c65780635e280f1114610149578063715018a61461019557806373d4a13a146101aa5780637d25a05e146101ce57600080fd5b806313137d65146100ed57806317442b70146101025780633400288b14610129575b600080fd5b6101006100fb366004610b99565b61033e565b005b34801561010e57600080fd5b50604080516001815260026020820152015b60405180910390f35b34801561013557600080fd5b50610100610144366004610c52565b6103fe565b34801561015557600080fd5b5061017d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610120565b3480156101a157600080fd5b50610100610414565b3480156101b657600080fd5b506101c060025481565b604051908152602001610120565b3480156101da57600080fd5b506101ee6101e9366004610c52565b610428565b60405167ffffffffffffffff9091168152602001610120565b34801561021357600080fd5b50610236610222366004610c7c565b6001600160a01b0381163014949350505050565b6040519015158152602001610120565b34801561025257600080fd5b506000546001600160a01b031661017d565b34801561027057600080fd5b506101c061027f366004610ce3565b60016020526000908152604090205481565b34801561029d57600080fd5b506101006102ac366004610d05565b610431565b6102c46102bf366004610dce565b6104b7565b6040516101209190610e45565b3480156102dd57600080fd5b506101006102ec366004610d05565b610540565b3480156102fd57600080fd5b5061031161030c366004610e88565b61057e565b6040516101209190610f1d565b34801561032a57600080fd5b50610236610339366004610f34565b6105c2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316331461038e576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b602087018035906103a8906103a3908a610ce3565b6105f8565b146103e6576103ba6020880188610ce3565b60405163309afaf360e21b815263ffffffff909116600482015260208801356024820152604401610385565b6103f587878787878787610634565b50505050505050565b61040661064c565b6104108282610679565b5050565b61041c61064c565b61042660006106ce565b565b60005b92915050565b61043961064c565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561049c57600080fd5b505af11580156104b0573d6000803e3d6000fd5b5050505050565b6104bf610adb565b6000846040516020016104d29190610f96565b60408051601f198184030181526020601f8701819004810284018101909252858352925061053691889184919088908890819084018382808284376000920182905250604080518082019091523481526020810191909152925033915061071e9050565b9695505050505050565b61054861064c565b6001600160a01b03811661057257604051631e4fbdf760e01b815260006004820152602401610385565b61057b816106ce565b50565b60408051808201909152600080825260208201526000846040516020016105a59190610f96565b604051602081830303815290604052905061053686828686610829565b60006020820180359060019083906105da9086610ce3565b63ffffffff1681526020810191909152604001600020541492915050565b63ffffffff81166000908152600160205260408120548061042b5760405163f6ff4fb760e01b815263ffffffff84166004820152602401610385565b61064084860186610fa9565b60025550505050505050565b6000546001600160a01b031633146104265760405163118cdaa760e01b8152336004820152602401610385565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610726610adb565b6000610735846000015161090a565b60208501519091501561074f5761074f8460200151610932565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff16815260200161079f8c6105f8565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b81526004016107db929190610fc2565b60806040518083038185885af11580156107f9573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061081e919061108a565b979650505050505050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff16815260200161088c896105f8565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b81526004016108c1929190610fc2565b6040805180830381865afa1580156108dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090191906110fc565b95945050505050565b600081341461092e576040516304fb820960e51b8152346004820152602401610385565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610992573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b69190611118565b90506001600160a01b0381166109df576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03818116604485015260648085018890528551808603909101815260849094019094526020830180516001600160e01b03166323b872dd60e01b179052610410938516928690610a64908590610a6a565b50505050565b600080602060008451602086016000885af180610a8d576040513d6000823e3d81fd5b50506000513d91508115610aa5578060011415610ab2565b6001600160a01b0384163b155b15610a6457604051635274afe760e01b81526001600160a01b0385166004820152602401610385565b604051806060016040528060008019168152602001600067ffffffffffffffff168152602001610b1e604051806040016040528060008152602001600081525090565b905290565b600060608284031215610b3557600080fd5b50919050565b60008083601f840112610b4d57600080fd5b50813567ffffffffffffffff811115610b6557600080fd5b602083019150836020828501011115610b7d57600080fd5b9250929050565b6001600160a01b038116811461057b57600080fd5b600080600080600080600060e0888a031215610bb457600080fd5b610bbe8989610b23565b965060608801359550608088013567ffffffffffffffff80821115610be257600080fd5b610bee8b838c01610b3b565b909750955060a08a01359150610c0382610b84565b90935060c08901359080821115610c1957600080fd5b50610c268a828b01610b3b565b989b979a50959850939692959293505050565b803563ffffffff81168114610c4d57600080fd5b919050565b60008060408385031215610c6557600080fd5b610c6e83610c39565b946020939093013593505050565b60008060008060a08587031215610c9257600080fd5b610c9c8686610b23565b9350606085013567ffffffffffffffff811115610cb857600080fd5b610cc487828801610b3b565b9094509250506080850135610cd881610b84565b939692955090935050565b600060208284031215610cf557600080fd5b610cfe82610c39565b9392505050565b600060208284031215610d1757600080fd5b8135610cfe81610b84565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115610d5357610d53610d22565b604051601f8501601f19908116603f01168101908282118183101715610d7b57610d7b610d22565b81604052809350858152868686011115610d9457600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112610dbf57600080fd5b610cfe83833560208501610d38565b60008060008060608587031215610de457600080fd5b610ded85610c39565b9350602085013567ffffffffffffffff80821115610e0a57600080fd5b610e1688838901610dae565b94506040870135915080821115610e2c57600080fd5b50610e3987828801610b3b565b95989497509550505050565b60006080820190508251825267ffffffffffffffff60208401511660208301526040830151610e81604084018280518252602090810151910152565b5092915050565b60008060008060808587031215610e9e57600080fd5b610ea785610c39565b9350602085013567ffffffffffffffff80821115610ec457600080fd5b610ed088838901610dae565b94506040870135915080821115610ee657600080fd5b508501601f81018713610ef857600080fd5b610f0787823560208401610d38565b92505060608501358015158114610cd857600080fd5b81518152602080830151908201526040810161042b565b600060608284031215610f4657600080fd5b610cfe8383610b23565b6000815180845260005b81811015610f7657602081850181015186830182015201610f5a565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610cfe6020830184610f50565b600060208284031215610fbb57600080fd5b5035919050565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152610ff860e0840182610f50565b90506060850151603f198483030160a08501526110158282610f50565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b60006040828403121561104d57600080fd5b6040516040810181811067ffffffffffffffff8211171561107057611070610d22565b604052825181526020928301519281019290925250919050565b60006080828403121561109c57600080fd5b6040516060810167ffffffffffffffff82821081831117156110c0576110c0610d22565b81604052845183526020850151915080821682146110dd57600080fd5b5060208201526110f0846040850161103b565b60408201529392505050565b60006040828403121561110e57600080fd5b610cfe838361103b565b60006020828403121561112a57600080fd5b8151610cfe81610b8456fea264697066735822122028a3371f62607d76d2e01ad1e2205a7fabf153a5831a0440a76dcc77a058a52564736f6c63430008160033", + "devdoc": { + "errors": { + "OwnableInvalidOwner(address)": [ + { + "details": "The owner is not a valid owner account. (eg. `address(0)`)" + } + ], + "OwnableUnauthorizedAccount(address)": [ + { + "details": "The caller account is not authorized to perform an operation." + } + ], + "SafeERC20FailedOperation(address)": [ + { + "details": "An operation with an ERC-20 token failed." + } + ] + }, + "kind": "dev", + "methods": { + "allowInitializePath((uint32,bytes32,uint64))": { + "details": "This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.", + "params": { + "origin": "The origin information containing the source endpoint and sender address." + }, + "returns": { + "_0": "Whether the path has been initialized." + } + }, + "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { + "details": "_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.", + "params": { + "_sender": "The sender address." + }, + "returns": { + "_0": "isSender Is a valid sender." + } + }, + "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": { + "details": "Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.", + "params": { + "_executor": "The address of the executor for the received message.", + "_extraData": "Additional arbitrary data provided by the corresponding executor.", + "_guid": "The unique identifier for the received LayerZero message.", + "_message": "The payload of the received message.", + "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message." + } + }, + "nextNonce(uint32,bytes32)": { + "details": "_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.", + "returns": { + "nonce": "The next nonce." + } + }, + "oAppVersion()": { + "returns": { + "receiverVersion": "The version of the OAppReceiver.sol implementation.", + "senderVersion": "The version of the OAppSender.sol implementation." + } + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "quote(uint32,string,bytes,bool)": { + "params": { + "_dstEid": "Destination chain's endpoint ID.", + "_message": "The message.", + "_options": "Message execution options (e.g., for sending gas to destination).", + "_payInLzToken": "Whether to return fee in ZRO token." + }, + "returns": { + "fee": "A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token." + } + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." + }, + "send(uint32,string,bytes)": { + "details": "Encodes the message as bytes and sends it using the `_lzSend` internal function.", + "params": { + "_dstEid": "The endpoint ID of the destination chain.", + "_message": "The message string to be sent.", + "_options": "Additional options for message execution." + }, + "returns": { + "receipt": "A `MessagingReceipt` struct containing details of the message sent." + } + }, + "setDelegate(address)": { + "details": "Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.", + "params": { + "_delegate": "The address of the delegate to be set." + } + }, + "setPeer(uint32,bytes32)": { + "details": "Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.", + "params": { + "_eid": "The endpoint ID.", + "_peer": "The address of the peer to be associated with the corresponding endpoint." + } + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "allowInitializePath((uint32,bytes32,uint64))": { + "notice": "Checks if the path initialization is allowed based on the provided origin." + }, + "endpoint()": { + "notice": "Retrieves the LayerZero endpoint associated with the OApp." + }, + "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { + "notice": "Indicates whether an address is an approved composeMsg sender to the Endpoint." + }, + "nextNonce(uint32,bytes32)": { + "notice": "Retrieves the next nonce for a given source endpoint and sender address." + }, + "oAppVersion()": { + "notice": "Retrieves the OApp version information." + }, + "peers(uint32)": { + "notice": "Retrieves the peer (OApp) associated with a corresponding endpoint." + }, + "quote(uint32,string,bytes,bool)": { + "notice": "Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token." + }, + "send(uint32,string,bytes)": { + "notice": "Sends a message from the source chain to a destination chain." + }, + "setDelegate(address)": { + "notice": "Sets the delegate address for the OApp." + }, + "setPeer(uint32,bytes32)": { + "notice": "Sets the peer address (OApp instance) for a corresponding endpoint." + } + }, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 1327, + "contract": "contracts/SimpleTestingOApp.sol:SimpleTestingOApp", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 64, + "contract": "contracts/SimpleTestingOApp.sol:SimpleTestingOApp", + "label": "peers", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_uint32,t_bytes32)" + }, + { + "astId": 2398, + "contract": "contracts/SimpleTestingOApp.sol:SimpleTestingOApp", + "label": "data", + "offset": 0, + "slot": "2", + "type": "t_uint256" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_uint32,t_bytes32)": { + "encoding": "mapping", + "key": "t_uint32", + "label": "mapping(uint32 => bytes32)", + "numberOfBytes": "32", + "value": "t_bytes32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "encoding": "inplace", + "label": "uint32", + "numberOfBytes": "4" + } + } + } +} \ No newline at end of file diff --git a/tests/e2e/testing_oapp/deployments/arbitrum-sepolia/TestingOApp.json b/tests/e2e/testing_oapp/deployments/arbitrum-sepolia/TestingOApp.json new file mode 100644 index 00000000..755ff00f --- /dev/null +++ b/tests/e2e/testing_oapp/deployments/arbitrum-sepolia/TestingOApp.json @@ -0,0 +1,795 @@ +{ + "address": "0x224037b0481DD00196cD6E2Eb3769e3762E83247", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_endpoint", + "type": "address" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "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" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "SafeERC20FailedOperation", + "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" + }, + { + "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": "data", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "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": [ + { + "internalType": "uint32", + "name": "_dstEid", + "type": "uint32" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + }, + { + "internalType": "bytes", + "name": "_options", + "type": "bytes" + }, + { + "internalType": "bool", + "name": "_payInLzToken", + "type": "bool" + } + ], + "name": "quote", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "nativeFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lzTokenFee", + "type": "uint256" + } + ], + "internalType": "struct MessagingFee", + "name": "fee", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_dstEid", + "type": "uint32" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + }, + { + "internalType": "bytes", + "name": "_options", + "type": "bytes" + } + ], + "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": "receipt", + "type": "tuple" + } + ], + "stateMutability": "payable", + "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" + } + ], + "transactionHash": "0xd7322b7c7b5291a05aac66cc395ccd0b9125854e3e1b881de43246f49c22aee2", + "receipt": { + "to": null, + "from": "0x96E341c7E7537333AFa153d196038C6D086d5d2b", + "contractAddress": "0x224037b0481DD00196cD6E2Eb3769e3762E83247", + "transactionIndex": 2, + "gasUsed": "1304350", + "logsBloom": "0x00000000000000000000000001000000000000000000000000800000000000000000000000000000200000000000000000004002000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000200000000000800000000000000000000000000000000400000200000000020000000000000000000000000000000040000000000000000000100000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000400000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xe570b03d1ae1094b523529f482050a6644a290e6af3880fdfd97d55e082cbbeb", + "transactionHash": "0xd7322b7c7b5291a05aac66cc395ccd0b9125854e3e1b881de43246f49c22aee2", + "logs": [ + { + "transactionIndex": 2, + "blockNumber": 97574033, + "transactionHash": "0xd7322b7c7b5291a05aac66cc395ccd0b9125854e3e1b881de43246f49c22aee2", + "address": "0x224037b0481DD00196cD6E2Eb3769e3762E83247", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xe570b03d1ae1094b523529f482050a6644a290e6af3880fdfd97d55e082cbbeb" + }, + { + "transactionIndex": 2, + "blockNumber": 97574033, + "transactionHash": "0xd7322b7c7b5291a05aac66cc395ccd0b9125854e3e1b881de43246f49c22aee2", + "address": "0x6EDCE65403992e310A62460808c4b910D972f10f", + "topics": [ + "0x6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d7983981" + ], + "data": "0x000000000000000000000000224037b0481dd00196cd6e2eb3769e3762e8324700000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "logIndex": 2, + "blockHash": "0xe570b03d1ae1094b523529f482050a6644a290e6af3880fdfd97d55e082cbbeb" + } + ], + "blockNumber": 97574033, + "cumulativeGasUsed": "1381966", + "status": 1, + "byzantium": true + }, + "args": [ + "0x6EDCE65403992e310A62460808c4b910D972f10f", + "0x96E341c7E7537333AFa153d196038C6D086d5d2b" + ], + "numDeployments": 3, + "solcInputHash": "6e267ad209b523b5db9591b68bbd936f", + "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_endpoint\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"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\"},{\"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\":\"data\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"string\",\"name\":\"_message\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"quote\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"fee\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"string\",\"name\":\"_message\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"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\":\"receipt\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"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\"}],\"devdoc\":{\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"details\":\"This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.\",\"params\":{\"origin\":\"The origin information containing the source endpoint and sender address.\"},\"returns\":{\"_0\":\"Whether the path has been initialized.\"}},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"details\":\"_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.\",\"params\":{\"_sender\":\"The sender address.\"},\"returns\":{\"_0\":\"isSender Is a valid sender.\"}},\"lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.\",\"params\":{\"_executor\":\"The address of the executor for the received message.\",\"_extraData\":\"Additional arbitrary data provided by the corresponding executor.\",\"_guid\":\"The unique identifier for the received LayerZero message.\",\"_message\":\"The payload of the received message.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"nextNonce(uint32,bytes32)\":{\"details\":\"_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\",\"returns\":{\"nonce\":\"The next nonce.\"}},\"oAppVersion()\":{\"returns\":{\"receiverVersion\":\"The version of the OAppReceiver.sol implementation.\",\"senderVersion\":\"The version of the OAppSender.sol implementation.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"quote(uint32,string,bytes,bool)\":{\"params\":{\"_dstEid\":\"Destination chain's endpoint ID.\",\"_message\":\"The message.\",\"_options\":\"Message execution options (e.g., for sending gas to destination).\",\"_payInLzToken\":\"Whether to return fee in ZRO token.\"},\"returns\":{\"fee\":\"A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"send(uint32,string,bytes)\":{\"details\":\"Encodes the message as bytes and sends it using the `_lzSend` internal function.\",\"params\":{\"_dstEid\":\"The endpoint ID of the destination chain.\",\"_message\":\"The message string to be sent.\",\"_options\":\"Additional options for message execution.\"},\"returns\":{\"receipt\":\"A `MessagingReceipt` struct containing details of the message sent.\"}},\"setDelegate(address)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\",\"params\":{\"_delegate\":\"The address of the delegate to be set.\"}},\"setPeer(uint32,bytes32)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_peer\":\"The address of the peer to be associated with the corresponding endpoint.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"notice\":\"Checks if the path initialization is allowed based on the provided origin.\"},\"endpoint()\":{\"notice\":\"Retrieves the LayerZero endpoint associated with the OApp.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"notice\":\"Indicates whether an address is an approved composeMsg sender to the Endpoint.\"},\"nextNonce(uint32,bytes32)\":{\"notice\":\"Retrieves the next nonce for a given source endpoint and sender address.\"},\"oAppVersion()\":{\"notice\":\"Retrieves the OApp version information.\"},\"peers(uint32)\":{\"notice\":\"Retrieves the peer (OApp) associated with a corresponding endpoint.\"},\"quote(uint32,string,bytes,bool)\":{\"notice\":\"Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token.\"},\"send(uint32,string,bytes)\":{\"notice\":\"Sends a message from the source chain to a destination chain.\"},\"setDelegate(address)\":{\"notice\":\"Sets the delegate address for the OApp.\"},\"setPeer(uint32,bytes32)\":{\"notice\":\"Sets the peer address (OApp instance) for a corresponding endpoint.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/TestingOApp.sol\":\"TestingOApp\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\n// @dev Import the 'MessagingFee' and 'MessagingReceipt' so it's exposed to OApp implementers\\n// solhint-disable-next-line no-unused-import\\nimport { OAppSender, MessagingFee, MessagingReceipt } from \\\"./OAppSender.sol\\\";\\n// @dev Import the 'Origin' so it's exposed to OApp implementers\\n// solhint-disable-next-line no-unused-import\\nimport { OAppReceiver, Origin } from \\\"./OAppReceiver.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OApp\\n * @dev Abstract contract serving as the base for OApp implementation, combining OAppSender and OAppReceiver functionality.\\n */\\nabstract contract OApp is OAppSender, OAppReceiver {\\n /**\\n * @dev Constructor to initialize the OApp with the provided endpoint and owner.\\n * @param _endpoint The address of the LOCAL LayerZero endpoint.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n */\\n constructor(address _endpoint, address _delegate) OAppCore(_endpoint, _delegate) {}\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol implementation.\\n * @return receiverVersion The version of the OAppReceiver.sol implementation.\\n */\\n function oAppVersion()\\n public\\n pure\\n virtual\\n override(OAppSender, OAppReceiver)\\n returns (uint64 senderVersion, uint64 receiverVersion)\\n {\\n return (SENDER_VERSION, RECEIVER_VERSION);\\n }\\n}\\n\",\"keccak256\":\"0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { IOAppCore, ILayerZeroEndpointV2 } from \\\"./interfaces/IOAppCore.sol\\\";\\n\\n/**\\n * @title OAppCore\\n * @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations.\\n */\\nabstract contract OAppCore is IOAppCore, Ownable {\\n // The LayerZero endpoint associated with the given OApp\\n ILayerZeroEndpointV2 public immutable endpoint;\\n\\n // Mapping to store peers associated with corresponding endpoints\\n mapping(uint32 eid => bytes32 peer) public peers;\\n\\n /**\\n * @dev Constructor to initialize the OAppCore with the provided endpoint and delegate.\\n * @param _endpoint The address of the LOCAL Layer Zero endpoint.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n *\\n * @dev The delegate typically should be set as the owner of the contract.\\n */\\n constructor(address _endpoint, address _delegate) {\\n endpoint = ILayerZeroEndpointV2(_endpoint);\\n\\n if (_delegate == address(0)) revert InvalidDelegate();\\n endpoint.setDelegate(_delegate);\\n }\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\\n * @dev Set this to bytes32(0) to remove the peer address.\\n * @dev Peer is a bytes32 to accommodate non-evm chains.\\n */\\n function setPeer(uint32 _eid, bytes32 _peer) public virtual onlyOwner {\\n _setPeer(_eid, _peer);\\n }\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n *\\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\\n * @dev Set this to bytes32(0) to remove the peer address.\\n * @dev Peer is a bytes32 to accommodate non-evm chains.\\n */\\n function _setPeer(uint32 _eid, bytes32 _peer) internal virtual {\\n peers[_eid] = _peer;\\n emit PeerSet(_eid, _peer);\\n }\\n\\n /**\\n * @notice Internal function to get the peer address associated with a specific endpoint; reverts if NOT set.\\n * ie. the peer is set to bytes32(0).\\n * @param _eid The endpoint ID.\\n * @return peer The address of the peer associated with the specified endpoint.\\n */\\n function _getPeerOrRevert(uint32 _eid) internal view virtual returns (bytes32) {\\n bytes32 peer = peers[_eid];\\n if (peer == bytes32(0)) revert NoPeer(_eid);\\n return peer;\\n }\\n\\n /**\\n * @notice Sets the delegate address for the OApp.\\n * @param _delegate The address of the delegate to be set.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\\n */\\n function setDelegate(address _delegate) public onlyOwner {\\n endpoint.setDelegate(_delegate);\\n }\\n}\\n\",\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { IOAppReceiver, Origin } from \\\"./interfaces/IOAppReceiver.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OAppReceiver\\n * @dev Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers.\\n */\\nabstract contract OAppReceiver is IOAppReceiver, OAppCore {\\n // Custom error message for when the caller is not the registered endpoint/\\n error OnlyEndpoint(address addr);\\n\\n // @dev The version of the OAppReceiver implementation.\\n // @dev Version is bumped when changes are made to this contract.\\n uint64 internal constant RECEIVER_VERSION = 2;\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n *\\n * @dev Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented.\\n * ie. this is a RECEIVE only OApp.\\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions.\\n */\\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\\n return (0, RECEIVER_VERSION);\\n }\\n\\n /**\\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\\n * @dev _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @dev _message The lzReceive payload.\\n * @param _sender The sender address.\\n * @return isSender Is a valid sender.\\n *\\n * @dev Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.\\n * @dev The default sender IS the OAppReceiver implementer.\\n */\\n function isComposeMsgSender(\\n Origin calldata /*_origin*/,\\n bytes calldata /*_message*/,\\n address _sender\\n ) public view virtual returns (bool) {\\n return _sender == address(this);\\n }\\n\\n /**\\n * @notice Checks if the path initialization is allowed based on the provided origin.\\n * @param origin The origin information containing the source endpoint and sender address.\\n * @return Whether the path has been initialized.\\n *\\n * @dev This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.\\n * @dev This defaults to assuming if a peer has been set, its initialized.\\n * Can be overridden by the OApp if there is other logic to determine this.\\n */\\n function allowInitializePath(Origin calldata origin) public view virtual returns (bool) {\\n return peers[origin.srcEid] == origin.sender;\\n }\\n\\n /**\\n * @notice Retrieves the next nonce for a given source endpoint and sender address.\\n * @dev _srcEid The source endpoint ID.\\n * @dev _sender The sender address.\\n * @return nonce The next nonce.\\n *\\n * @dev The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.\\n * @dev Is required by the off-chain executor to determine the OApp expects msg execution is ordered.\\n * @dev This is also enforced by the OApp.\\n * @dev By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\\n */\\n function nextNonce(uint32 /*_srcEid*/, bytes32 /*_sender*/) public view virtual returns (uint64 nonce) {\\n return 0;\\n }\\n\\n /**\\n * @dev Entry point for receiving messages or packets from the endpoint.\\n * @param _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @param _guid The unique identifier for the received LayerZero message.\\n * @param _message The payload of the received message.\\n * @param _executor The address of the executor for the received message.\\n * @param _extraData Additional arbitrary data provided by the corresponding executor.\\n *\\n * @dev Entry point for receiving msg/packet from the LayerZero endpoint.\\n */\\n function lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) public payable virtual {\\n // Ensures that only the endpoint can attempt to lzReceive() messages to this OApp.\\n if (address(endpoint) != msg.sender) revert OnlyEndpoint(msg.sender);\\n\\n // Ensure that the sender matches the expected peer for the source endpoint.\\n if (_getPeerOrRevert(_origin.srcEid) != _origin.sender) revert OnlyPeer(_origin.srcEid, _origin.sender);\\n\\n // Call the internal OApp implementation of lzReceive.\\n _lzReceive(_origin, _guid, _message, _executor, _extraData);\\n }\\n\\n /**\\n * @dev Internal function to implement lzReceive logic without needing to copy the basic parameter validation.\\n */\\n function _lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { SafeERC20, IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport { MessagingParams, MessagingFee, MessagingReceipt } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OAppSender\\n * @dev Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.\\n */\\nabstract contract OAppSender is OAppCore {\\n using SafeERC20 for IERC20;\\n\\n // Custom error messages\\n error NotEnoughNative(uint256 msgValue);\\n error LzTokenUnavailable();\\n\\n // @dev The version of the OAppSender implementation.\\n // @dev Version is bumped when changes are made to this contract.\\n uint64 internal constant SENDER_VERSION = 1;\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n *\\n * @dev Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented.\\n * ie. this is a SEND only OApp.\\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions\\n */\\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\\n return (SENDER_VERSION, 0);\\n }\\n\\n /**\\n * @dev Internal function to interact with the LayerZero EndpointV2.quote() for fee calculation.\\n * @param _dstEid The destination endpoint ID.\\n * @param _message The message payload.\\n * @param _options Additional options for the message.\\n * @param _payInLzToken Flag indicating whether to pay the fee in LZ tokens.\\n * @return fee The calculated MessagingFee for the message.\\n * - nativeFee: The native fee for the message.\\n * - lzTokenFee: The LZ token fee for the message.\\n */\\n function _quote(\\n uint32 _dstEid,\\n bytes memory _message,\\n bytes memory _options,\\n bool _payInLzToken\\n ) internal view virtual returns (MessagingFee memory fee) {\\n return\\n endpoint.quote(\\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _payInLzToken),\\n address(this)\\n );\\n }\\n\\n /**\\n * @dev Internal function to interact with the LayerZero EndpointV2.send() for sending a message.\\n * @param _dstEid The destination endpoint ID.\\n * @param _message The message payload.\\n * @param _options Additional options for the message.\\n * @param _fee The calculated LayerZero fee for the message.\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n * @param _refundAddress The address to receive any excess fee values sent to the endpoint.\\n * @return receipt The receipt for the sent message.\\n * - guid: The unique identifier for the sent message.\\n * - nonce: The nonce of the sent message.\\n * - fee: The LayerZero fee incurred for the message.\\n */\\n function _lzSend(\\n uint32 _dstEid,\\n bytes memory _message,\\n bytes memory _options,\\n MessagingFee memory _fee,\\n address _refundAddress\\n ) internal virtual returns (MessagingReceipt memory receipt) {\\n // @dev Push corresponding fees to the endpoint, any excess is sent back to the _refundAddress from the endpoint.\\n uint256 messageValue = _payNative(_fee.nativeFee);\\n if (_fee.lzTokenFee > 0) _payLzToken(_fee.lzTokenFee);\\n\\n return\\n // solhint-disable-next-line check-send-result\\n endpoint.send{ value: messageValue }(\\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _fee.lzTokenFee > 0),\\n _refundAddress\\n );\\n }\\n\\n /**\\n * @dev Internal function to pay the native fee associated with the message.\\n * @param _nativeFee The native fee to be paid.\\n * @return nativeFee The amount of native currency paid.\\n *\\n * @dev If the OApp needs to initiate MULTIPLE LayerZero messages in a single transaction,\\n * this will need to be overridden because msg.value would contain multiple lzFees.\\n * @dev Should be overridden in the event the LayerZero endpoint requires a different native currency.\\n * @dev Some EVMs use an ERC20 as a method for paying transactions/gasFees.\\n * @dev The endpoint is EITHER/OR, ie. it will NOT support both types of native payment at a time.\\n */\\n function _payNative(uint256 _nativeFee) internal virtual returns (uint256 nativeFee) {\\n if (msg.value != _nativeFee) revert NotEnoughNative(msg.value);\\n return _nativeFee;\\n }\\n\\n /**\\n * @dev Internal function to pay the LZ token fee associated with the message.\\n * @param _lzTokenFee The LZ token fee to be paid.\\n *\\n * @dev If the caller is trying to pay in the specified lzToken, then the lzTokenFee is passed to the endpoint.\\n * @dev Any excess sent, is passed back to the specified _refundAddress in the _lzSend().\\n */\\n function _payLzToken(uint256 _lzTokenFee) internal virtual {\\n // @dev Cannot cache the token because it is not immutable in the endpoint.\\n address lzToken = endpoint.lzToken();\\n if (lzToken == address(0)) revert LzTokenUnavailable();\\n\\n // Pay LZ token fee by sending tokens to the endpoint.\\n IERC20(lzToken).safeTransferFrom(msg.sender, address(endpoint), _lzTokenFee);\\n }\\n}\\n\",\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { ILayerZeroEndpointV2 } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\n\\n/**\\n * @title IOAppCore\\n */\\ninterface IOAppCore {\\n // Custom error messages\\n error OnlyPeer(uint32 eid, bytes32 sender);\\n error NoPeer(uint32 eid);\\n error InvalidEndpointCall();\\n error InvalidDelegate();\\n\\n // Event emitted when a peer (OApp) is set for a corresponding endpoint\\n event PeerSet(uint32 eid, bytes32 peer);\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n */\\n function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);\\n\\n /**\\n * @notice Retrieves the LayerZero endpoint associated with the OApp.\\n * @return iEndpoint The LayerZero endpoint as an interface.\\n */\\n function endpoint() external view returns (ILayerZeroEndpointV2 iEndpoint);\\n\\n /**\\n * @notice Retrieves the peer (OApp) associated with a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @return peer The peer address (OApp instance) associated with the corresponding endpoint.\\n */\\n function peers(uint32 _eid) external view returns (bytes32 peer);\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n */\\n function setPeer(uint32 _eid, bytes32 _peer) external;\\n\\n /**\\n * @notice Sets the delegate address for the OApp Core.\\n * @param _delegate The address of the delegate to be set.\\n */\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.20;\\n\\nimport { ILayerZeroReceiver, Origin } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\\\";\\n\\ninterface IOAppReceiver is ILayerZeroReceiver {\\n /**\\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\\n * @param _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @param _message The lzReceive payload.\\n * @param _sender The sender address.\\n * @return isSender Is a valid sender.\\n *\\n * @dev Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.\\n * @dev The default sender IS the OAppReceiver implementer.\\n */\\n function isComposeMsgSender(\\n Origin calldata _origin,\\n bytes calldata _message,\\n address _sender\\n ) external view returns (bool isSender);\\n}\\n\",\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IMessageLibManager } from \\\"./IMessageLibManager.sol\\\";\\nimport { IMessagingComposer } from \\\"./IMessagingComposer.sol\\\";\\nimport { IMessagingChannel } from \\\"./IMessagingChannel.sol\\\";\\nimport { IMessagingContext } from \\\"./IMessagingContext.sol\\\";\\n\\nstruct MessagingParams {\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes message;\\n bytes options;\\n bool payInLzToken;\\n}\\n\\nstruct MessagingReceipt {\\n bytes32 guid;\\n uint64 nonce;\\n MessagingFee fee;\\n}\\n\\nstruct MessagingFee {\\n uint256 nativeFee;\\n uint256 lzTokenFee;\\n}\\n\\nstruct Origin {\\n uint32 srcEid;\\n bytes32 sender;\\n uint64 nonce;\\n}\\n\\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\\n\\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\\n\\n event PacketDelivered(Origin origin, address receiver);\\n\\n event LzReceiveAlert(\\n address indexed receiver,\\n address indexed executor,\\n Origin origin,\\n bytes32 guid,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n event LzTokenSet(address token);\\n\\n event DelegateSet(address sender, address delegate);\\n\\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\\n\\n function send(\\n MessagingParams calldata _params,\\n address _refundAddress\\n ) external payable returns (MessagingReceipt memory);\\n\\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\\n\\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n address _receiver,\\n bytes32 _guid,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n\\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\\n\\n function setLzToken(address _lzToken) external;\\n\\n function lzToken() external view returns (address);\\n\\n function nativeToken() external view returns (address);\\n\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { Origin } from \\\"./ILayerZeroEndpointV2.sol\\\";\\n\\ninterface ILayerZeroReceiver {\\n function allowInitializePath(Origin calldata _origin) external view returns (bool);\\n\\n function nextNonce(uint32 _eid, bytes32 _sender) external view returns (uint64);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nstruct SetConfigParam {\\n uint32 eid;\\n uint32 configType;\\n bytes config;\\n}\\n\\ninterface IMessageLibManager {\\n struct Timeout {\\n address lib;\\n uint256 expiry;\\n }\\n\\n event LibraryRegistered(address newLib);\\n event DefaultSendLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\\n event SendLibrarySet(address sender, uint32 eid, address newLib);\\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\\n\\n function registerLibrary(address _lib) external;\\n\\n function isRegisteredLibrary(address _lib) external view returns (bool);\\n\\n function getRegisteredLibraries() external view returns (address[] memory);\\n\\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\\n\\n function defaultSendLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\\n\\n /// ------------------- OApp interfaces -------------------\\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\\n\\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\\n\\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\\n\\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\\n\\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\\n\\n function getConfig(\\n address _oapp,\\n address _lib,\\n uint32 _eid,\\n uint32 _configType\\n ) external view returns (bytes memory config);\\n}\\n\",\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingChannel {\\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n\\n function eid() external view returns (uint32);\\n\\n // this is an emergency function if a message cannot be verified for some reasons\\n // required to provide _nextNonce to avoid race condition\\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\\n\\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\\n\\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n\\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\\n\\n function inboundPayloadHash(\\n address _receiver,\\n uint32 _srcEid,\\n bytes32 _sender,\\n uint64 _nonce\\n ) external view returns (bytes32);\\n\\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n}\\n\",\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingComposer {\\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\\n event LzComposeAlert(\\n address indexed from,\\n address indexed to,\\n address indexed executor,\\n bytes32 guid,\\n uint16 index,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n function composeQueue(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index\\n ) external view returns (bytes32 messageHash);\\n\\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\\n\\n function lzCompose(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingContext {\\n function isSendingMessage() external view returns (bool);\\n\\n function getSendContext() external view returns (uint32 dstEid, address sender);\\n}\\n\",\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Context} from \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * The initial owner is set to the address provided by the deployer. This can\\n * later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n /**\\n * @dev The caller account is not authorized to perform an operation.\\n */\\n error OwnableUnauthorizedAccount(address account);\\n\\n /**\\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\\n */\\n error OwnableInvalidOwner(address owner);\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\\n */\\n constructor(address initialOwner) {\\n if (initialOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n if (owner() != _msgSender()) {\\n revert OwnableUnauthorizedAccount(_msgSender());\\n }\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby disabling any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n if (newOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"./IERC20.sol\\\";\\nimport {IERC165} from \\\"./IERC165.sol\\\";\\n\\n/**\\n * @title IERC1363\\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\\n *\\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\\n */\\ninterface IERC1363 is IERC20, IERC165 {\\n /*\\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\\n * 0xb0202a11 ===\\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\\n */\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferAndCall(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @param data Additional data with no specified format, sent in call to `to`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param from The address which you want to send tokens from.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param from The address which you want to send tokens from.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @param data Additional data with no specified format, sent in call to `to`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\\n * @param spender The address which will spend the funds.\\n * @param value The amount of tokens to be spent.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function approveAndCall(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\\n * @param spender The address which will spend the funds.\\n * @param value The amount of tokens to be spent.\\n * @param data Additional data with no specified format, sent in call to `spender`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC165} from \\\"../utils/introspection/IERC165.sol\\\";\\n\",\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../token/ERC20/IERC20.sol\\\";\\n\",\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../IERC20.sol\\\";\\nimport {IERC1363} from \\\"../../../interfaces/IERC1363.sol\\\";\\nimport {Address} from \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n /**\\n * @dev An operation with an ERC-20 token failed.\\n */\\n error SafeERC20FailedOperation(address token);\\n\\n /**\\n * @dev Indicates a failed `decreaseAllowance` request.\\n */\\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\\n\\n /**\\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful.\\n */\\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\\n }\\n\\n /**\\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\\n */\\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\\n }\\n\\n /**\\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful.\\n *\\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \\\"client\\\"\\n * smart contract uses ERC-7674 to set temporary allowances, then the \\\"client\\\" smart contract should avoid using\\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\\n */\\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n forceApprove(token, spender, oldAllowance + value);\\n }\\n\\n /**\\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\\n * value, non-reverting calls are assumed to be successful.\\n *\\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \\\"client\\\"\\n * smart contract uses ERC-7674 to set temporary allowances, then the \\\"client\\\" smart contract should avoid using\\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\\n */\\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\\n unchecked {\\n uint256 currentAllowance = token.allowance(address(this), spender);\\n if (currentAllowance < requestedDecrease) {\\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\\n }\\n forceApprove(token, spender, currentAllowance - requestedDecrease);\\n }\\n }\\n\\n /**\\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\\n * to be set to zero before setting it to a non-zero value, such as USDT.\\n *\\n * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\\n * only sets the \\\"standard\\\" allowance. Any temporary allowance will remain active, in addition to the value being\\n * set here.\\n */\\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\\n\\n if (!_callOptionalReturnBool(token, approvalCall)) {\\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\\n _callOptionalReturn(token, approvalCall);\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\\n if (to.code.length == 0) {\\n safeTransfer(token, to, value);\\n } else if (!token.transferAndCall(to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\\n * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function transferFromAndCallRelaxed(\\n IERC1363 token,\\n address from,\\n address to,\\n uint256 value,\\n bytes memory data\\n ) internal {\\n if (to.code.length == 0) {\\n safeTransferFrom(token, from, to, value);\\n } else if (!token.transferFromAndCall(from, to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\\n * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\\n * once without retrying, and relies on the returned value to be true.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\\n if (to.code.length == 0) {\\n forceApprove(token, to, value);\\n } else if (!token.approveAndCall(to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n *\\n * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n uint256 returnSize;\\n uint256 returnValue;\\n assembly (\\\"memory-safe\\\") {\\n let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n // bubble errors\\n if iszero(success) {\\n let ptr := mload(0x40)\\n returndatacopy(ptr, 0, returndatasize())\\n revert(ptr, returndatasize())\\n }\\n returnSize := returndatasize()\\n returnValue := mload(0)\\n }\\n\\n if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n *\\n * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\\n */\\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\\n bool success;\\n uint256 returnSize;\\n uint256 returnValue;\\n assembly (\\\"memory-safe\\\") {\\n success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n returnSize := returndatasize()\\n returnValue := mload(0)\\n }\\n return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\\n }\\n}\\n\",\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Errors} from \\\"./Errors.sol\\\";\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev There's no code at `target` (it is not a contract).\\n */\\n error AddressEmptyCode(address target);\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n if (address(this).balance < amount) {\\n revert Errors.InsufficientBalance(address(this).balance, amount);\\n }\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n if (!success) {\\n revert Errors.FailedCall();\\n }\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason or custom error, it is bubbled\\n * up by this function (like regular Solidity function calls). However, if\\n * the call reverted with no returned reason, this function reverts with a\\n * {Errors.FailedCall} error.\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n if (address(this).balance < value) {\\n revert Errors.InsufficientBalance(address(this).balance, value);\\n }\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\\n * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\\n * of an unsuccessful call.\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata\\n ) internal view returns (bytes memory) {\\n if (!success) {\\n _revert(returndata);\\n } else {\\n // only check if target is a contract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n if (returndata.length == 0 && target.code.length == 0) {\\n revert AddressEmptyCode(target);\\n }\\n return returndata;\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\\n * revert reason or with a default {Errors.FailedCall} error.\\n */\\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\\n if (!success) {\\n _revert(returndata);\\n } else {\\n return returndata;\\n }\\n }\\n\\n /**\\n * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\\n */\\n function _revert(bytes memory returndata) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n assembly (\\\"memory-safe\\\") {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert Errors.FailedCall();\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Collection of common custom errors used in multiple contracts\\n *\\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\\n * It is recommended to avoid relying on the error API for critical functionality.\\n *\\n * _Available since v5.1._\\n */\\nlibrary Errors {\\n /**\\n * @dev The ETH balance of the account is not enough to perform the operation.\\n */\\n error InsufficientBalance(uint256 balance, uint256 needed);\\n\\n /**\\n * @dev A call to an address target failed. The target may have reverted.\\n */\\n error FailedCall();\\n\\n /**\\n * @dev The deployment failed.\\n */\\n error FailedDeployment();\\n\\n /**\\n * @dev A necessary precompile is missing.\\n */\\n error MissingPrecompile(address);\\n}\\n\",\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\"},\"contracts/TestingOApp.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.22;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { OApp, MessagingFee, Origin } from \\\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol\\\";\\nimport { MessagingReceipt } from \\\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol\\\";\\n\\ncontract TestingOApp is OApp {\\n constructor(address _endpoint, address _delegate) OApp(_endpoint, _delegate) Ownable(_delegate) {}\\n\\n string public data = \\\"nothing received yet\\\";\\n\\n /**\\n * @notice Sends a message from the source chain to a destination chain.\\n * @param _dstEid The endpoint ID of the destination chain.\\n * @param _message The message string to be sent.\\n * @param _options Additional options for message execution.\\n * @dev Encodes the message as bytes and sends it using the `_lzSend` internal function.\\n * @return receipt A `MessagingReceipt` struct containing details of the message sent.\\n */\\n function send(\\n uint32 _dstEid,\\n string memory _message,\\n bytes calldata _options\\n ) external payable returns (MessagingReceipt memory receipt) {\\n bytes memory _payload = abi.encode(_message);\\n receipt = _lzSend(_dstEid, _payload, _options, MessagingFee(msg.value, 0), payable(msg.sender));\\n }\\n\\n /**\\n * @notice Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token.\\n * @param _dstEid Destination chain's endpoint ID.\\n * @param _message The message.\\n * @param _options Message execution options (e.g., for sending gas to destination).\\n * @param _payInLzToken Whether to return fee in ZRO token.\\n * @return fee A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token.\\n */\\n function quote(\\n uint32 _dstEid,\\n string memory _message,\\n bytes memory _options,\\n bool _payInLzToken\\n ) public view returns (MessagingFee memory fee) {\\n bytes memory payload = abi.encode(_message);\\n fee = _quote(_dstEid, payload, _options, _payInLzToken);\\n }\\n\\n /**\\n * @dev Internal function override to handle incoming messages from another chain.\\n * @dev _origin A struct containing information about the message sender.\\n * @dev _guid A unique global packet identifier for the message.\\n * @param payload The encoded message payload being received.\\n *\\n * @dev The following params are unused in the current implementation of the OApp.\\n * @dev _executor The address of the Executor responsible for processing the message.\\n * @dev _extraData Arbitrary data appended by the Executor to the message.\\n *\\n * Decodes the received payload and processes it as per the business logic defined in the function.\\n */\\n function _lzReceive(\\n Origin calldata /*_origin*/,\\n bytes32 /*_guid*/,\\n bytes calldata payload,\\n address /*_executor*/,\\n bytes calldata /*_extraData*/\\n ) internal override {\\n data = abi.decode(payload, (string));\\n }\\n}\\n\",\"keccak256\":\"0xeb1cc77e7b61bb8532270b2e3df333a10272d9ec0b44be6212039d7ebb69e193\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x60e0604052601460a09081527f6e6f7468696e672072656365697665642079657400000000000000000000000060c0526002906200003e908262000241565b503480156200004c57600080fd5b5060405162001714380380620017148339810160408190526200006f916200032a565b81818181806001600160a01b038116620000a357604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000ae816200014a565b506001600160a01b038083166080528116620000dd57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e190602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b5050505050505050505062000362565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001c557607f821691505b602082108103620001e657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200023c576000816000526020600020601f850160051c81016020861015620002175750805b601f850160051c820191505b81811015620002385782815560010162000223565b5050505b505050565b81516001600160401b038111156200025d576200025d6200019a565b62000275816200026e8454620001b0565b84620001ec565b602080601f831160018114620002ad5760008415620002945750858301515b600019600386901b1c1916600185901b17855562000238565b600085815260208120601f198616915b82811015620002de57888601518255948401946001909101908401620002bd565b5085821015620002fd5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80516001600160a01b03811681146200032557600080fd5b919050565b600080604083850312156200033e57600080fd5b62000349836200030d565b915062000359602084016200030d565b90509250929050565b60805161136c620003a86000396000818161015b0152818161034b015281816104f1015281816107f5015281816108e3015281816109da0152610a91015261136c6000f3fe6080604052600436106100e85760003560e01c806382413eac1161008a578063e0539e5811610059578063e0539e58146102bc578063f2fde38b146102dc578063f77e5dd3146102fc578063ff7bd03d1461032957600080fd5b806382413eac146102045780638da5cb5b14610243578063bb0b6a5314610261578063ca5eb5e11461029c57600080fd5b80635e280f11116100c65780635e280f1114610149578063715018a61461019557806373d4a13a146101aa5780637d25a05e146101cc57600080fd5b806313137d65146100ed57806317442b70146101025780633400288b14610129575b600080fd5b6101006100fb366004610c3b565b610349565b005b34801561010e57600080fd5b50604080516001815260026020820152015b60405180910390f35b34801561013557600080fd5b50610100610144366004610cf3565b610409565b34801561015557600080fd5b5061017d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610120565b3480156101a157600080fd5b5061010061041f565b3480156101b657600080fd5b506101bf610433565b6040516101209190610d63565b3480156101d857600080fd5b506101ec6101e7366004610cf3565b6104c1565b6040516001600160401b039091168152602001610120565b34801561021057600080fd5b5061023361021f366004610d7d565b6001600160a01b0381163014949350505050565b6040519015158152602001610120565b34801561024f57600080fd5b506000546001600160a01b031661017d565b34801561026d57600080fd5b5061028e61027c366004610de3565b60016020526000908152604090205481565b604051908152602001610120565b3480156102a857600080fd5b506101006102b7366004610dfe565b6104ca565b6102cf6102ca366004610ec6565b610550565b6040516101209190610f3c565b3480156102e857600080fd5b506101006102f7366004610dfe565b6105d9565b34801561030857600080fd5b5061031c610317366004610f7e565b610617565b6040516101209190611012565b34801561033557600080fd5b50610233610344366004611029565b61065b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610399576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b602087018035906103b3906103ae908a610de3565b610691565b146103f1576103c56020880188610de3565b60405163309afaf360e21b815263ffffffff909116600482015260208801356024820152604401610390565b610400878787878787876106cd565b50505050505050565b6104116106f0565b61041b828261071d565b5050565b6104276106f0565b6104316000610772565b565b6002805461044090611045565b80601f016020809104026020016040519081016040528092919081815260200182805461046c90611045565b80156104b95780601f1061048e576101008083540402835291602001916104b9565b820191906000526020600020905b81548152906001019060200180831161049c57829003601f168201915b505050505081565b60005b92915050565b6104d26106f0565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561053557600080fd5b505af1158015610549573d6000803e3d6000fd5b5050505050565b610558610b7f565b60008460405160200161056b9190610d63565b60408051601f198184030181526020601f870181900481028401810190925285835292506105cf9188918491908890889081908401838280828437600092018290525060408051808201909152348152602081019190915292503391506107c29050565b9695505050505050565b6105e16106f0565b6001600160a01b03811661060b57604051631e4fbdf760e01b815260006004820152602401610390565b61061481610772565b50565b604080518082019091526000808252602082015260008460405160200161063e9190610d63565b60405160208183030381529060405290506105cf868286866108cd565b60006020820180359060019083906106739086610de3565b63ffffffff1681526020810191909152604001600020541492915050565b63ffffffff8116600090815260016020526040812054806104c45760405163f6ff4fb760e01b815263ffffffff84166004820152602401610390565b6106d984860186611079565b6002906106e69082611106565b5050505050505050565b6000546001600160a01b031633146104315760405163118cdaa760e01b8152336004820152602401610390565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6107ca610b7f565b60006107d984600001516109ae565b6020850151909150156107f3576107f384602001516109d6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff1681526020016108438c610691565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b815260040161087f9291906111c5565b60806040518083038185885af115801561089d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906108c2919061128c565b979650505050505050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff16815260200161093089610691565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b81526004016109659291906111c5565b6040805180830381865afa158015610981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a591906112fd565b95945050505050565b60008134146109d2576040516304fb820960e51b8152346004820152602401610390565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5a9190611319565b90506001600160a01b038116610a83576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03818116604485015260648085018890528551808603909101815260849094019094526020830180516001600160e01b03166323b872dd60e01b17905261041b938516928690610b08908590610b0e565b50505050565b600080602060008451602086016000885af180610b31576040513d6000823e3d81fd5b50506000513d91508115610b49578060011415610b56565b6001600160a01b0384163b155b15610b0857604051635274afe760e01b81526001600160a01b0385166004820152602401610390565b60405180606001604052806000801916815260200160006001600160401b03168152602001610bc1604051806040016040528060008152602001600081525090565b905290565b600060608284031215610bd857600080fd5b50919050565b60008083601f840112610bf057600080fd5b5081356001600160401b03811115610c0757600080fd5b602083019150836020828501011115610c1f57600080fd5b9250929050565b6001600160a01b038116811461061457600080fd5b600080600080600080600060e0888a031215610c5657600080fd5b610c608989610bc6565b96506060880135955060808801356001600160401b0380821115610c8357600080fd5b610c8f8b838c01610bde565b909750955060a08a01359150610ca482610c26565b90935060c08901359080821115610cba57600080fd5b50610cc78a828b01610bde565b989b979a50959850939692959293505050565b803563ffffffff81168114610cee57600080fd5b919050565b60008060408385031215610d0657600080fd5b610d0f83610cda565b946020939093013593505050565b6000815180845260005b81811015610d4357602081850181015186830182015201610d27565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610d766020830184610d1d565b9392505050565b60008060008060a08587031215610d9357600080fd5b610d9d8686610bc6565b935060608501356001600160401b03811115610db857600080fd5b610dc487828801610bde565b9094509250506080850135610dd881610c26565b939692955090935050565b600060208284031215610df557600080fd5b610d7682610cda565b600060208284031215610e1057600080fd5b8135610d7681610c26565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115610e4b57610e4b610e1b565b604051601f8501601f19908116603f01168101908282118183101715610e7357610e73610e1b565b81604052809350858152868686011115610e8c57600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112610eb757600080fd5b610d7683833560208501610e31565b60008060008060608587031215610edc57600080fd5b610ee585610cda565b935060208501356001600160401b0380821115610f0157600080fd5b610f0d88838901610ea6565b94506040870135915080821115610f2357600080fd5b50610f3087828801610bde565b95989497509550505050565b6000608082019050825182526001600160401b0360208401511660208301526040830151610f77604084018280518252602090810151910152565b5092915050565b60008060008060808587031215610f9457600080fd5b610f9d85610cda565b935060208501356001600160401b0380821115610fb957600080fd5b610fc588838901610ea6565b94506040870135915080821115610fdb57600080fd5b508501601f81018713610fed57600080fd5b610ffc87823560208401610e31565b92505060608501358015158114610dd857600080fd5b8151815260208083015190820152604081016104c4565b60006060828403121561103b57600080fd5b610d768383610bc6565b600181811c9082168061105957607f821691505b602082108103610bd857634e487b7160e01b600052602260045260246000fd5b60006020828403121561108b57600080fd5b81356001600160401b038111156110a157600080fd5b6110ad84828501610ea6565b949350505050565b601f821115611101576000816000526020600020601f850160051c810160208610156110de5750805b601f850160051c820191505b818110156110fd578281556001016110ea565b5050505b505050565b81516001600160401b0381111561111f5761111f610e1b565b6111338161112d8454611045565b846110b5565b602080601f83116001811461116857600084156111505750858301515b600019600386901b1c1916600185901b1785556110fd565b600085815260208120601f198616915b8281101561119757888601518255948401946001909101908401611178565b50858210156111b55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a060808401526111fb60e0840182610d1d565b90506060850151603f198483030160a08501526112188282610d1d565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b60006040828403121561125057600080fd5b604051604081018181106001600160401b038211171561127257611272610e1b565b604052825181526020928301519281019290925250919050565b60006080828403121561129e57600080fd5b604051606081016001600160401b0382821081831117156112c1576112c1610e1b565b81604052845183526020850151915080821682146112de57600080fd5b5060208201526112f1846040850161123e565b60408201529392505050565b60006040828403121561130f57600080fd5b610d76838361123e565b60006020828403121561132b57600080fd5b8151610d7681610c2656fea26469706673582212203017c944155c3f234bb3739e3866ebf99c20e7b7c0028c651c3564360cf944be64736f6c63430008160033", + "deployedBytecode": "0x6080604052600436106100e85760003560e01c806382413eac1161008a578063e0539e5811610059578063e0539e58146102bc578063f2fde38b146102dc578063f77e5dd3146102fc578063ff7bd03d1461032957600080fd5b806382413eac146102045780638da5cb5b14610243578063bb0b6a5314610261578063ca5eb5e11461029c57600080fd5b80635e280f11116100c65780635e280f1114610149578063715018a61461019557806373d4a13a146101aa5780637d25a05e146101cc57600080fd5b806313137d65146100ed57806317442b70146101025780633400288b14610129575b600080fd5b6101006100fb366004610c3b565b610349565b005b34801561010e57600080fd5b50604080516001815260026020820152015b60405180910390f35b34801561013557600080fd5b50610100610144366004610cf3565b610409565b34801561015557600080fd5b5061017d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610120565b3480156101a157600080fd5b5061010061041f565b3480156101b657600080fd5b506101bf610433565b6040516101209190610d63565b3480156101d857600080fd5b506101ec6101e7366004610cf3565b6104c1565b6040516001600160401b039091168152602001610120565b34801561021057600080fd5b5061023361021f366004610d7d565b6001600160a01b0381163014949350505050565b6040519015158152602001610120565b34801561024f57600080fd5b506000546001600160a01b031661017d565b34801561026d57600080fd5b5061028e61027c366004610de3565b60016020526000908152604090205481565b604051908152602001610120565b3480156102a857600080fd5b506101006102b7366004610dfe565b6104ca565b6102cf6102ca366004610ec6565b610550565b6040516101209190610f3c565b3480156102e857600080fd5b506101006102f7366004610dfe565b6105d9565b34801561030857600080fd5b5061031c610317366004610f7e565b610617565b6040516101209190611012565b34801561033557600080fd5b50610233610344366004611029565b61065b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610399576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b602087018035906103b3906103ae908a610de3565b610691565b146103f1576103c56020880188610de3565b60405163309afaf360e21b815263ffffffff909116600482015260208801356024820152604401610390565b610400878787878787876106cd565b50505050505050565b6104116106f0565b61041b828261071d565b5050565b6104276106f0565b6104316000610772565b565b6002805461044090611045565b80601f016020809104026020016040519081016040528092919081815260200182805461046c90611045565b80156104b95780601f1061048e576101008083540402835291602001916104b9565b820191906000526020600020905b81548152906001019060200180831161049c57829003601f168201915b505050505081565b60005b92915050565b6104d26106f0565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561053557600080fd5b505af1158015610549573d6000803e3d6000fd5b5050505050565b610558610b7f565b60008460405160200161056b9190610d63565b60408051601f198184030181526020601f870181900481028401810190925285835292506105cf9188918491908890889081908401838280828437600092018290525060408051808201909152348152602081019190915292503391506107c29050565b9695505050505050565b6105e16106f0565b6001600160a01b03811661060b57604051631e4fbdf760e01b815260006004820152602401610390565b61061481610772565b50565b604080518082019091526000808252602082015260008460405160200161063e9190610d63565b60405160208183030381529060405290506105cf868286866108cd565b60006020820180359060019083906106739086610de3565b63ffffffff1681526020810191909152604001600020541492915050565b63ffffffff8116600090815260016020526040812054806104c45760405163f6ff4fb760e01b815263ffffffff84166004820152602401610390565b6106d984860186611079565b6002906106e69082611106565b5050505050505050565b6000546001600160a01b031633146104315760405163118cdaa760e01b8152336004820152602401610390565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6107ca610b7f565b60006107d984600001516109ae565b6020850151909150156107f3576107f384602001516109d6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff1681526020016108438c610691565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b815260040161087f9291906111c5565b60806040518083038185885af115801561089d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906108c2919061128c565b979650505050505050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff16815260200161093089610691565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b81526004016109659291906111c5565b6040805180830381865afa158015610981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a591906112fd565b95945050505050565b60008134146109d2576040516304fb820960e51b8152346004820152602401610390565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5a9190611319565b90506001600160a01b038116610a83576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03818116604485015260648085018890528551808603909101815260849094019094526020830180516001600160e01b03166323b872dd60e01b17905261041b938516928690610b08908590610b0e565b50505050565b600080602060008451602086016000885af180610b31576040513d6000823e3d81fd5b50506000513d91508115610b49578060011415610b56565b6001600160a01b0384163b155b15610b0857604051635274afe760e01b81526001600160a01b0385166004820152602401610390565b60405180606001604052806000801916815260200160006001600160401b03168152602001610bc1604051806040016040528060008152602001600081525090565b905290565b600060608284031215610bd857600080fd5b50919050565b60008083601f840112610bf057600080fd5b5081356001600160401b03811115610c0757600080fd5b602083019150836020828501011115610c1f57600080fd5b9250929050565b6001600160a01b038116811461061457600080fd5b600080600080600080600060e0888a031215610c5657600080fd5b610c608989610bc6565b96506060880135955060808801356001600160401b0380821115610c8357600080fd5b610c8f8b838c01610bde565b909750955060a08a01359150610ca482610c26565b90935060c08901359080821115610cba57600080fd5b50610cc78a828b01610bde565b989b979a50959850939692959293505050565b803563ffffffff81168114610cee57600080fd5b919050565b60008060408385031215610d0657600080fd5b610d0f83610cda565b946020939093013593505050565b6000815180845260005b81811015610d4357602081850181015186830182015201610d27565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610d766020830184610d1d565b9392505050565b60008060008060a08587031215610d9357600080fd5b610d9d8686610bc6565b935060608501356001600160401b03811115610db857600080fd5b610dc487828801610bde565b9094509250506080850135610dd881610c26565b939692955090935050565b600060208284031215610df557600080fd5b610d7682610cda565b600060208284031215610e1057600080fd5b8135610d7681610c26565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115610e4b57610e4b610e1b565b604051601f8501601f19908116603f01168101908282118183101715610e7357610e73610e1b565b81604052809350858152868686011115610e8c57600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112610eb757600080fd5b610d7683833560208501610e31565b60008060008060608587031215610edc57600080fd5b610ee585610cda565b935060208501356001600160401b0380821115610f0157600080fd5b610f0d88838901610ea6565b94506040870135915080821115610f2357600080fd5b50610f3087828801610bde565b95989497509550505050565b6000608082019050825182526001600160401b0360208401511660208301526040830151610f77604084018280518252602090810151910152565b5092915050565b60008060008060808587031215610f9457600080fd5b610f9d85610cda565b935060208501356001600160401b0380821115610fb957600080fd5b610fc588838901610ea6565b94506040870135915080821115610fdb57600080fd5b508501601f81018713610fed57600080fd5b610ffc87823560208401610e31565b92505060608501358015158114610dd857600080fd5b8151815260208083015190820152604081016104c4565b60006060828403121561103b57600080fd5b610d768383610bc6565b600181811c9082168061105957607f821691505b602082108103610bd857634e487b7160e01b600052602260045260246000fd5b60006020828403121561108b57600080fd5b81356001600160401b038111156110a157600080fd5b6110ad84828501610ea6565b949350505050565b601f821115611101576000816000526020600020601f850160051c810160208610156110de5750805b601f850160051c820191505b818110156110fd578281556001016110ea565b5050505b505050565b81516001600160401b0381111561111f5761111f610e1b565b6111338161112d8454611045565b846110b5565b602080601f83116001811461116857600084156111505750858301515b600019600386901b1c1916600185901b1785556110fd565b600085815260208120601f198616915b8281101561119757888601518255948401946001909101908401611178565b50858210156111b55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a060808401526111fb60e0840182610d1d565b90506060850151603f198483030160a08501526112188282610d1d565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b60006040828403121561125057600080fd5b604051604081018181106001600160401b038211171561127257611272610e1b565b604052825181526020928301519281019290925250919050565b60006080828403121561129e57600080fd5b604051606081016001600160401b0382821081831117156112c1576112c1610e1b565b81604052845183526020850151915080821682146112de57600080fd5b5060208201526112f1846040850161123e565b60408201529392505050565b60006040828403121561130f57600080fd5b610d76838361123e565b60006020828403121561132b57600080fd5b8151610d7681610c2656fea26469706673582212203017c944155c3f234bb3739e3866ebf99c20e7b7c0028c651c3564360cf944be64736f6c63430008160033", + "devdoc": { + "errors": { + "OwnableInvalidOwner(address)": [ + { + "details": "The owner is not a valid owner account. (eg. `address(0)`)" + } + ], + "OwnableUnauthorizedAccount(address)": [ + { + "details": "The caller account is not authorized to perform an operation." + } + ], + "SafeERC20FailedOperation(address)": [ + { + "details": "An operation with an ERC-20 token failed." + } + ] + }, + "kind": "dev", + "methods": { + "allowInitializePath((uint32,bytes32,uint64))": { + "details": "This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.", + "params": { + "origin": "The origin information containing the source endpoint and sender address." + }, + "returns": { + "_0": "Whether the path has been initialized." + } + }, + "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { + "details": "_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.", + "params": { + "_sender": "The sender address." + }, + "returns": { + "_0": "isSender Is a valid sender." + } + }, + "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": { + "details": "Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.", + "params": { + "_executor": "The address of the executor for the received message.", + "_extraData": "Additional arbitrary data provided by the corresponding executor.", + "_guid": "The unique identifier for the received LayerZero message.", + "_message": "The payload of the received message.", + "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message." + } + }, + "nextNonce(uint32,bytes32)": { + "details": "_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.", + "returns": { + "nonce": "The next nonce." + } + }, + "oAppVersion()": { + "returns": { + "receiverVersion": "The version of the OAppReceiver.sol implementation.", + "senderVersion": "The version of the OAppSender.sol implementation." + } + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "quote(uint32,string,bytes,bool)": { + "params": { + "_dstEid": "Destination chain's endpoint ID.", + "_message": "The message.", + "_options": "Message execution options (e.g., for sending gas to destination).", + "_payInLzToken": "Whether to return fee in ZRO token." + }, + "returns": { + "fee": "A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token." + } + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." + }, + "send(uint32,string,bytes)": { + "details": "Encodes the message as bytes and sends it using the `_lzSend` internal function.", + "params": { + "_dstEid": "The endpoint ID of the destination chain.", + "_message": "The message string to be sent.", + "_options": "Additional options for message execution." + }, + "returns": { + "receipt": "A `MessagingReceipt` struct containing details of the message sent." + } + }, + "setDelegate(address)": { + "details": "Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.", + "params": { + "_delegate": "The address of the delegate to be set." + } + }, + "setPeer(uint32,bytes32)": { + "details": "Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.", + "params": { + "_eid": "The endpoint ID.", + "_peer": "The address of the peer to be associated with the corresponding endpoint." + } + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "allowInitializePath((uint32,bytes32,uint64))": { + "notice": "Checks if the path initialization is allowed based on the provided origin." + }, + "endpoint()": { + "notice": "Retrieves the LayerZero endpoint associated with the OApp." + }, + "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { + "notice": "Indicates whether an address is an approved composeMsg sender to the Endpoint." + }, + "nextNonce(uint32,bytes32)": { + "notice": "Retrieves the next nonce for a given source endpoint and sender address." + }, + "oAppVersion()": { + "notice": "Retrieves the OApp version information." + }, + "peers(uint32)": { + "notice": "Retrieves the peer (OApp) associated with a corresponding endpoint." + }, + "quote(uint32,string,bytes,bool)": { + "notice": "Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token." + }, + "send(uint32,string,bytes)": { + "notice": "Sends a message from the source chain to a destination chain." + }, + "setDelegate(address)": { + "notice": "Sets the delegate address for the OApp." + }, + "setPeer(uint32,bytes32)": { + "notice": "Sets the peer address (OApp instance) for a corresponding endpoint." + } + }, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 1327, + "contract": "contracts/TestingOApp.sol:TestingOApp", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 64, + "contract": "contracts/TestingOApp.sol:TestingOApp", + "label": "peers", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_uint32,t_bytes32)" + }, + { + "astId": 2398, + "contract": "contracts/TestingOApp.sol:TestingOApp", + "label": "data", + "offset": 0, + "slot": "2", + "type": "t_string_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_uint32,t_bytes32)": { + "encoding": "mapping", + "key": "t_uint32", + "label": "mapping(uint32 => bytes32)", + "numberOfBytes": "32", + "value": "t_bytes32" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_uint32": { + "encoding": "inplace", + "label": "uint32", + "numberOfBytes": "4" + } + } + } +} \ No newline at end of file diff --git a/tests/e2e/testing_oapp/deployments/arbitrum-sepolia/solcInputs/1c9f1ad99bb202d886a57bde06909cce.json b/tests/e2e/testing_oapp/deployments/arbitrum-sepolia/solcInputs/1c9f1ad99bb202d886a57bde06909cce.json new file mode 100644 index 00000000..5112a94e --- /dev/null +++ b/tests/e2e/testing_oapp/deployments/arbitrum-sepolia/solcInputs/1c9f1ad99bb202d886a57bde06909cce.json @@ -0,0 +1,102 @@ +{ + "language": "Solidity", + "sources": { + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppCore.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { ILayerZeroEndpointV2 } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\";\n\n/**\n * @title IOAppCore\n */\ninterface IOAppCore {\n // Custom error messages\n error OnlyPeer(uint32 eid, bytes32 sender);\n error NoPeer(uint32 eid);\n error InvalidEndpointCall();\n error InvalidDelegate();\n\n // Event emitted when a peer (OApp) is set for a corresponding endpoint\n event PeerSet(uint32 eid, bytes32 peer);\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n */\n function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);\n\n /**\n * @notice Retrieves the LayerZero endpoint associated with the OApp.\n * @return iEndpoint The LayerZero endpoint as an interface.\n */\n function endpoint() external view returns (ILayerZeroEndpointV2 iEndpoint);\n\n /**\n * @notice Retrieves the peer (OApp) associated with a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @return peer The peer address (OApp instance) associated with the corresponding endpoint.\n */\n function peers(uint32 _eid) external view returns (bytes32 peer);\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n */\n function setPeer(uint32 _eid, bytes32 _peer) external;\n\n /**\n * @notice Sets the delegate address for the OApp Core.\n * @param _delegate The address of the delegate to be set.\n */\n function setDelegate(address _delegate) external;\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.20;\n\nimport { ILayerZeroReceiver, Origin } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\";\n\ninterface IOAppReceiver is ILayerZeroReceiver {\n /**\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\n * @param _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @param _message The lzReceive payload.\n * @param _sender The sender address.\n * @return isSender Is a valid sender.\n *\n * @dev Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.\n * @dev The default sender IS the OAppReceiver implementer.\n */\n function isComposeMsgSender(\n Origin calldata _origin,\n bytes calldata _message,\n address _sender\n ) external view returns (bool isSender);\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\n// @dev Import the 'MessagingFee' and 'MessagingReceipt' so it's exposed to OApp implementers\n// solhint-disable-next-line no-unused-import\nimport { OAppSender, MessagingFee, MessagingReceipt } from \"./OAppSender.sol\";\n// @dev Import the 'Origin' so it's exposed to OApp implementers\n// solhint-disable-next-line no-unused-import\nimport { OAppReceiver, Origin } from \"./OAppReceiver.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OApp\n * @dev Abstract contract serving as the base for OApp implementation, combining OAppSender and OAppReceiver functionality.\n */\nabstract contract OApp is OAppSender, OAppReceiver {\n /**\n * @dev Constructor to initialize the OApp with the provided endpoint and owner.\n * @param _endpoint The address of the LOCAL LayerZero endpoint.\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\n */\n constructor(address _endpoint, address _delegate) OAppCore(_endpoint, _delegate) {}\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol implementation.\n * @return receiverVersion The version of the OAppReceiver.sol implementation.\n */\n function oAppVersion()\n public\n pure\n virtual\n override(OAppSender, OAppReceiver)\n returns (uint64 senderVersion, uint64 receiverVersion)\n {\n return (SENDER_VERSION, RECEIVER_VERSION);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppCore.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { IOAppCore, ILayerZeroEndpointV2 } from \"./interfaces/IOAppCore.sol\";\n\n/**\n * @title OAppCore\n * @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations.\n */\nabstract contract OAppCore is IOAppCore, Ownable {\n // The LayerZero endpoint associated with the given OApp\n ILayerZeroEndpointV2 public immutable endpoint;\n\n // Mapping to store peers associated with corresponding endpoints\n mapping(uint32 eid => bytes32 peer) public peers;\n\n /**\n * @dev Constructor to initialize the OAppCore with the provided endpoint and delegate.\n * @param _endpoint The address of the LOCAL Layer Zero endpoint.\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\n *\n * @dev The delegate typically should be set as the owner of the contract.\n */\n constructor(address _endpoint, address _delegate) {\n endpoint = ILayerZeroEndpointV2(_endpoint);\n\n if (_delegate == address(0)) revert InvalidDelegate();\n endpoint.setDelegate(_delegate);\n }\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n *\n * @dev Only the owner/admin of the OApp can call this function.\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\n * @dev Set this to bytes32(0) to remove the peer address.\n * @dev Peer is a bytes32 to accommodate non-evm chains.\n */\n function setPeer(uint32 _eid, bytes32 _peer) public virtual onlyOwner {\n _setPeer(_eid, _peer);\n }\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n *\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\n * @dev Set this to bytes32(0) to remove the peer address.\n * @dev Peer is a bytes32 to accommodate non-evm chains.\n */\n function _setPeer(uint32 _eid, bytes32 _peer) internal virtual {\n peers[_eid] = _peer;\n emit PeerSet(_eid, _peer);\n }\n\n /**\n * @notice Internal function to get the peer address associated with a specific endpoint; reverts if NOT set.\n * ie. the peer is set to bytes32(0).\n * @param _eid The endpoint ID.\n * @return peer The address of the peer associated with the specified endpoint.\n */\n function _getPeerOrRevert(uint32 _eid) internal view virtual returns (bytes32) {\n bytes32 peer = peers[_eid];\n if (peer == bytes32(0)) revert NoPeer(_eid);\n return peer;\n }\n\n /**\n * @notice Sets the delegate address for the OApp.\n * @param _delegate The address of the delegate to be set.\n *\n * @dev Only the owner/admin of the OApp can call this function.\n * @dev Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\n */\n function setDelegate(address _delegate) public onlyOwner {\n endpoint.setDelegate(_delegate);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { IOAppReceiver, Origin } from \"./interfaces/IOAppReceiver.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OAppReceiver\n * @dev Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers.\n */\nabstract contract OAppReceiver is IOAppReceiver, OAppCore {\n // Custom error message for when the caller is not the registered endpoint/\n error OnlyEndpoint(address addr);\n\n // @dev The version of the OAppReceiver implementation.\n // @dev Version is bumped when changes are made to this contract.\n uint64 internal constant RECEIVER_VERSION = 2;\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n *\n * @dev Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented.\n * ie. this is a RECEIVE only OApp.\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions.\n */\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\n return (0, RECEIVER_VERSION);\n }\n\n /**\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\n * @dev _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @dev _message The lzReceive payload.\n * @param _sender The sender address.\n * @return isSender Is a valid sender.\n *\n * @dev Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.\n * @dev The default sender IS the OAppReceiver implementer.\n */\n function isComposeMsgSender(\n Origin calldata /*_origin*/,\n bytes calldata /*_message*/,\n address _sender\n ) public view virtual returns (bool) {\n return _sender == address(this);\n }\n\n /**\n * @notice Checks if the path initialization is allowed based on the provided origin.\n * @param origin The origin information containing the source endpoint and sender address.\n * @return Whether the path has been initialized.\n *\n * @dev This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.\n * @dev This defaults to assuming if a peer has been set, its initialized.\n * Can be overridden by the OApp if there is other logic to determine this.\n */\n function allowInitializePath(Origin calldata origin) public view virtual returns (bool) {\n return peers[origin.srcEid] == origin.sender;\n }\n\n /**\n * @notice Retrieves the next nonce for a given source endpoint and sender address.\n * @dev _srcEid The source endpoint ID.\n * @dev _sender The sender address.\n * @return nonce The next nonce.\n *\n * @dev The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.\n * @dev Is required by the off-chain executor to determine the OApp expects msg execution is ordered.\n * @dev This is also enforced by the OApp.\n * @dev By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\n */\n function nextNonce(uint32 /*_srcEid*/, bytes32 /*_sender*/) public view virtual returns (uint64 nonce) {\n return 0;\n }\n\n /**\n * @dev Entry point for receiving messages or packets from the endpoint.\n * @param _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @param _guid The unique identifier for the received LayerZero message.\n * @param _message The payload of the received message.\n * @param _executor The address of the executor for the received message.\n * @param _extraData Additional arbitrary data provided by the corresponding executor.\n *\n * @dev Entry point for receiving msg/packet from the LayerZero endpoint.\n */\n function lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) public payable virtual {\n // Ensures that only the endpoint can attempt to lzReceive() messages to this OApp.\n if (address(endpoint) != msg.sender) revert OnlyEndpoint(msg.sender);\n\n // Ensure that the sender matches the expected peer for the source endpoint.\n if (_getPeerOrRevert(_origin.srcEid) != _origin.sender) revert OnlyPeer(_origin.srcEid, _origin.sender);\n\n // Call the internal OApp implementation of lzReceive.\n _lzReceive(_origin, _guid, _message, _executor, _extraData);\n }\n\n /**\n * @dev Internal function to implement lzReceive logic without needing to copy the basic parameter validation.\n */\n function _lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) internal virtual;\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { SafeERC20, IERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { MessagingParams, MessagingFee, MessagingReceipt } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OAppSender\n * @dev Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.\n */\nabstract contract OAppSender is OAppCore {\n using SafeERC20 for IERC20;\n\n // Custom error messages\n error NotEnoughNative(uint256 msgValue);\n error LzTokenUnavailable();\n\n // @dev The version of the OAppSender implementation.\n // @dev Version is bumped when changes are made to this contract.\n uint64 internal constant SENDER_VERSION = 1;\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n *\n * @dev Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented.\n * ie. this is a SEND only OApp.\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions\n */\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\n return (SENDER_VERSION, 0);\n }\n\n /**\n * @dev Internal function to interact with the LayerZero EndpointV2.quote() for fee calculation.\n * @param _dstEid The destination endpoint ID.\n * @param _message The message payload.\n * @param _options Additional options for the message.\n * @param _payInLzToken Flag indicating whether to pay the fee in LZ tokens.\n * @return fee The calculated MessagingFee for the message.\n * - nativeFee: The native fee for the message.\n * - lzTokenFee: The LZ token fee for the message.\n */\n function _quote(\n uint32 _dstEid,\n bytes memory _message,\n bytes memory _options,\n bool _payInLzToken\n ) internal view virtual returns (MessagingFee memory fee) {\n return\n endpoint.quote(\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _payInLzToken),\n address(this)\n );\n }\n\n /**\n * @dev Internal function to interact with the LayerZero EndpointV2.send() for sending a message.\n * @param _dstEid The destination endpoint ID.\n * @param _message The message payload.\n * @param _options Additional options for the message.\n * @param _fee The calculated LayerZero fee for the message.\n * - nativeFee: The native fee.\n * - lzTokenFee: The lzToken fee.\n * @param _refundAddress The address to receive any excess fee values sent to the endpoint.\n * @return receipt The receipt for the sent message.\n * - guid: The unique identifier for the sent message.\n * - nonce: The nonce of the sent message.\n * - fee: The LayerZero fee incurred for the message.\n */\n function _lzSend(\n uint32 _dstEid,\n bytes memory _message,\n bytes memory _options,\n MessagingFee memory _fee,\n address _refundAddress\n ) internal virtual returns (MessagingReceipt memory receipt) {\n // @dev Push corresponding fees to the endpoint, any excess is sent back to the _refundAddress from the endpoint.\n uint256 messageValue = _payNative(_fee.nativeFee);\n if (_fee.lzTokenFee > 0) _payLzToken(_fee.lzTokenFee);\n\n return\n // solhint-disable-next-line check-send-result\n endpoint.send{ value: messageValue }(\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _fee.lzTokenFee > 0),\n _refundAddress\n );\n }\n\n /**\n * @dev Internal function to pay the native fee associated with the message.\n * @param _nativeFee The native fee to be paid.\n * @return nativeFee The amount of native currency paid.\n *\n * @dev If the OApp needs to initiate MULTIPLE LayerZero messages in a single transaction,\n * this will need to be overridden because msg.value would contain multiple lzFees.\n * @dev Should be overridden in the event the LayerZero endpoint requires a different native currency.\n * @dev Some EVMs use an ERC20 as a method for paying transactions/gasFees.\n * @dev The endpoint is EITHER/OR, ie. it will NOT support both types of native payment at a time.\n */\n function _payNative(uint256 _nativeFee) internal virtual returns (uint256 nativeFee) {\n if (msg.value != _nativeFee) revert NotEnoughNative(msg.value);\n return _nativeFee;\n }\n\n /**\n * @dev Internal function to pay the LZ token fee associated with the message.\n * @param _lzTokenFee The LZ token fee to be paid.\n *\n * @dev If the caller is trying to pay in the specified lzToken, then the lzTokenFee is passed to the endpoint.\n * @dev Any excess sent, is passed back to the specified _refundAddress in the _lzSend().\n */\n function _payLzToken(uint256 _lzTokenFee) internal virtual {\n // @dev Cannot cache the token because it is not immutable in the endpoint.\n address lzToken = endpoint.lzToken();\n if (lzToken == address(0)) revert LzTokenUnavailable();\n\n // Pay LZ token fee by sending tokens to the endpoint.\n IERC20(lzToken).safeTransferFrom(msg.sender, address(endpoint), _lzTokenFee);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nimport { IMessageLibManager } from \"./IMessageLibManager.sol\";\nimport { IMessagingComposer } from \"./IMessagingComposer.sol\";\nimport { IMessagingChannel } from \"./IMessagingChannel.sol\";\nimport { IMessagingContext } from \"./IMessagingContext.sol\";\n\nstruct MessagingParams {\n uint32 dstEid;\n bytes32 receiver;\n bytes message;\n bytes options;\n bool payInLzToken;\n}\n\nstruct MessagingReceipt {\n bytes32 guid;\n uint64 nonce;\n MessagingFee fee;\n}\n\nstruct MessagingFee {\n uint256 nativeFee;\n uint256 lzTokenFee;\n}\n\nstruct Origin {\n uint32 srcEid;\n bytes32 sender;\n uint64 nonce;\n}\n\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\n\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\n\n event PacketDelivered(Origin origin, address receiver);\n\n event LzReceiveAlert(\n address indexed receiver,\n address indexed executor,\n Origin origin,\n bytes32 guid,\n uint256 gas,\n uint256 value,\n bytes message,\n bytes extraData,\n bytes reason\n );\n\n event LzTokenSet(address token);\n\n event DelegateSet(address sender, address delegate);\n\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\n\n function send(\n MessagingParams calldata _params,\n address _refundAddress\n ) external payable returns (MessagingReceipt memory);\n\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\n\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\n\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\n\n function lzReceive(\n Origin calldata _origin,\n address _receiver,\n bytes32 _guid,\n bytes calldata _message,\n bytes calldata _extraData\n ) external payable;\n\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\n\n function setLzToken(address _lzToken) external;\n\n function lzToken() external view returns (address);\n\n function nativeToken() external view returns (address);\n\n function setDelegate(address _delegate) external;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nimport { Origin } from \"./ILayerZeroEndpointV2.sol\";\n\ninterface ILayerZeroReceiver {\n function allowInitializePath(Origin calldata _origin) external view returns (bool);\n\n function nextNonce(uint32 _eid, bytes32 _sender) external view returns (uint64);\n\n function lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) external payable;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nstruct SetConfigParam {\n uint32 eid;\n uint32 configType;\n bytes config;\n}\n\ninterface IMessageLibManager {\n struct Timeout {\n address lib;\n uint256 expiry;\n }\n\n event LibraryRegistered(address newLib);\n event DefaultSendLibrarySet(uint32 eid, address newLib);\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\n event SendLibrarySet(address sender, uint32 eid, address newLib);\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\n\n function registerLibrary(address _lib) external;\n\n function isRegisteredLibrary(address _lib) external view returns (bool);\n\n function getRegisteredLibraries() external view returns (address[] memory);\n\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\n\n function defaultSendLibrary(uint32 _eid) external view returns (address);\n\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\n\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\n\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\n\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\n\n function isSupportedEid(uint32 _eid) external view returns (bool);\n\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\n\n /// ------------------- OApp interfaces -------------------\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\n\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\n\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\n\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\n\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\n\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\n\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\n\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\n\n function getConfig(\n address _oapp,\n address _lib,\n uint32 _eid,\n uint32 _configType\n ) external view returns (bytes memory config);\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingChannel {\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\n\n function eid() external view returns (uint32);\n\n // this is an emergency function if a message cannot be verified for some reasons\n // required to provide _nextNonce to avoid race condition\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\n\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\n\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\n\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\n\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\n\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\n\n function inboundPayloadHash(\n address _receiver,\n uint32 _srcEid,\n bytes32 _sender,\n uint64 _nonce\n ) external view returns (bytes32);\n\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingComposer {\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\n event LzComposeAlert(\n address indexed from,\n address indexed to,\n address indexed executor,\n bytes32 guid,\n uint16 index,\n uint256 gas,\n uint256 value,\n bytes message,\n bytes extraData,\n bytes reason\n );\n\n function composeQueue(\n address _from,\n address _to,\n bytes32 _guid,\n uint16 _index\n ) external view returns (bytes32 messageHash);\n\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\n\n function lzCompose(\n address _from,\n address _to,\n bytes32 _guid,\n uint16 _index,\n bytes calldata _message,\n bytes calldata _extraData\n ) external payable;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingContext {\n function isSendingMessage() external view returns (bool);\n\n function getSendContext() external view returns (uint32 dstEid, address sender);\n}\n" + }, + "@openzeppelin/contracts/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {Context} from \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n /**\n * @dev The caller account is not authorized to perform an operation.\n */\n error OwnableUnauthorizedAccount(address account);\n\n /**\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\n */\n error OwnableInvalidOwner(address owner);\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n */\n constructor(address initialOwner) {\n if (initialOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n if (owner() != _msgSender()) {\n revert OwnableUnauthorizedAccount(_msgSender());\n }\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby disabling any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n if (newOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "@openzeppelin/contracts/interfaces/IERC1363.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC165} from \"./IERC165.sol\";\n\n/**\n * @title IERC1363\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\n *\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\n */\ninterface IERC1363 is IERC20, IERC165 {\n /*\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\n * 0xb0202a11 ===\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\n */\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @param data Additional data with no specified format, sent in call to `spender`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\n}\n" + }, + "@openzeppelin/contracts/interfaces/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"../utils/introspection/IERC165.sol\";\n" + }, + "@openzeppelin/contracts/interfaces/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\n" + }, + "@openzeppelin/contracts/token/ERC20/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-20 standard as defined in the ERC.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the value of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the value of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\n * allowance mechanism. `value` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n" + }, + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\nimport {IERC1363} from \"../../../interfaces/IERC1363.sol\";\nimport {Address} from \"../../../utils/Address.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n /**\n * @dev An operation with an ERC-20 token failed.\n */\n error SafeERC20FailedOperation(address token);\n\n /**\n * @dev Indicates a failed `decreaseAllowance` request.\n */\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\n\n /**\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\n }\n\n /**\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\n */\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n }\n\n /**\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n uint256 oldAllowance = token.allowance(address(this), spender);\n forceApprove(token, spender, oldAllowance + value);\n }\n\n /**\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n * value, non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\n unchecked {\n uint256 currentAllowance = token.allowance(address(this), spender);\n if (currentAllowance < requestedDecrease) {\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\n }\n forceApprove(token, spender, currentAllowance - requestedDecrease);\n }\n }\n\n /**\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n * to be set to zero before setting it to a non-zero value, such as USDT.\n *\n * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\n * only sets the \"standard\" allowance. Any temporary allowance will remain active, in addition to the value being\n * set here.\n */\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\n\n if (!_callOptionalReturnBool(token, approvalCall)) {\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\n _callOptionalReturn(token, approvalCall);\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n safeTransfer(token, to, value);\n } else if (!token.transferAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\n * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferFromAndCallRelaxed(\n IERC1363 token,\n address from,\n address to,\n uint256 value,\n bytes memory data\n ) internal {\n if (to.code.length == 0) {\n safeTransferFrom(token, from, to, value);\n } else if (!token.transferFromAndCall(from, to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\n * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\n * once without retrying, and relies on the returned value to be true.\n *\n * Reverts if the returned value is other than `true`.\n */\n function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n forceApprove(token, to, value);\n } else if (!token.approveAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\n */\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n // bubble errors\n if iszero(success) {\n let ptr := mload(0x40)\n returndatacopy(ptr, 0, returndatasize())\n revert(ptr, returndatasize())\n }\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n\n if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\n */\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\n bool success;\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\nimport {Errors} from \"./Errors.sol\";\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev There's no code at `target` (it is not a contract).\n */\n error AddressEmptyCode(address target);\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n if (address(this).balance < amount) {\n revert Errors.InsufficientBalance(address(this).balance, amount);\n }\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n if (!success) {\n revert Errors.FailedCall();\n }\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason or custom error, it is bubbled\n * up by this function (like regular Solidity function calls). However, if\n * the call reverted with no returned reason, this function reverts with a\n * {Errors.FailedCall} error.\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n if (address(this).balance < value) {\n revert Errors.InsufficientBalance(address(this).balance, value);\n }\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\n * of an unsuccessful call.\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata\n ) internal view returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n // only check if target is a contract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n if (returndata.length == 0 && target.code.length == 0) {\n revert AddressEmptyCode(target);\n }\n return returndata;\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n * revert reason or with a default {Errors.FailedCall} error.\n */\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n return returndata;\n }\n }\n\n /**\n * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\n */\n function _revert(bytes memory returndata) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n assembly (\"memory-safe\") {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert Errors.FailedCall();\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n function _contextSuffixLength() internal view virtual returns (uint256) {\n return 0;\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Errors.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of common custom errors used in multiple contracts\n *\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\n * It is recommended to avoid relying on the error API for critical functionality.\n *\n * _Available since v5.1._\n */\nlibrary Errors {\n /**\n * @dev The ETH balance of the account is not enough to perform the operation.\n */\n error InsufficientBalance(uint256 balance, uint256 needed);\n\n /**\n * @dev A call to an address target failed. The target may have reverted.\n */\n error FailedCall();\n\n /**\n * @dev The deployment failed.\n */\n error FailedDeployment();\n\n /**\n * @dev A necessary precompile is missing.\n */\n error MissingPrecompile(address);\n}\n" + }, + "@openzeppelin/contracts/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "contracts/TestingOApp.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.22;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { OApp, MessagingFee, Origin } from \"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol\";\nimport { MessagingReceipt } from \"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol\";\n\ncontract TestingOApp is OApp {\n constructor(address _endpoint, address _delegate) OApp(_endpoint, _delegate) Ownable(_delegate) {}\n\n uint public data = 0;\n\n /**\n * @notice Sends a message from the source chain to a destination chain.\n * @param _dstEid The endpoint ID of the destination chain.\n * @param _message The message string to be sent.\n * @param _options Additional options for message execution.\n * @dev Encodes the message as bytes and sends it using the `_lzSend` internal function.\n * @return receipt A `MessagingReceipt` struct containing details of the message sent.\n */\n function send(\n uint32 _dstEid,\n string memory _message,\n bytes calldata _options\n ) external payable returns (MessagingReceipt memory receipt) {\n bytes memory _payload = abi.encode(_message);\n receipt = _lzSend(_dstEid, _payload, _options, MessagingFee(msg.value, 0), payable(msg.sender));\n }\n\n /**\n * @notice Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token.\n * @param _dstEid Destination chain's endpoint ID.\n * @param _message The message.\n * @param _options Message execution options (e.g., for sending gas to destination).\n * @param _payInLzToken Whether to return fee in ZRO token.\n * @return fee A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token.\n */\n function quote(\n uint32 _dstEid,\n string memory _message,\n bytes memory _options,\n bool _payInLzToken\n ) public view returns (MessagingFee memory fee) {\n bytes memory payload = abi.encode(_message);\n fee = _quote(_dstEid, payload, _options, _payInLzToken);\n }\n\n /**\n * @dev Internal function override to handle incoming messages from another chain.\n * @dev _origin A struct containing information about the message sender.\n * @dev _guid A unique global packet identifier for the message.\n * @param payload The encoded message payload being received.\n *\n * @dev The following params are unused in the current implementation of the OApp.\n * @dev _executor The address of the Executor responsible for processing the message.\n * @dev _extraData Arbitrary data appended by the Executor to the message.\n *\n * Decodes the received payload and processes it as per the business logic defined in the function.\n */\n function _lzReceive(\n Origin calldata /*_origin*/,\n bytes32 /*_guid*/,\n bytes calldata payload,\n address /*_executor*/,\n bytes calldata /*_extraData*/\n ) internal override {\n data = abi.decode(payload, (uint));\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "evmVersion": "paris", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/tests/e2e/testing_oapp/deployments/arbitrum-sepolia/solcInputs/6e267ad209b523b5db9591b68bbd936f.json b/tests/e2e/testing_oapp/deployments/arbitrum-sepolia/solcInputs/6e267ad209b523b5db9591b68bbd936f.json new file mode 100644 index 00000000..bbc0519e --- /dev/null +++ b/tests/e2e/testing_oapp/deployments/arbitrum-sepolia/solcInputs/6e267ad209b523b5db9591b68bbd936f.json @@ -0,0 +1,102 @@ +{ + "language": "Solidity", + "sources": { + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppCore.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { ILayerZeroEndpointV2 } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\";\n\n/**\n * @title IOAppCore\n */\ninterface IOAppCore {\n // Custom error messages\n error OnlyPeer(uint32 eid, bytes32 sender);\n error NoPeer(uint32 eid);\n error InvalidEndpointCall();\n error InvalidDelegate();\n\n // Event emitted when a peer (OApp) is set for a corresponding endpoint\n event PeerSet(uint32 eid, bytes32 peer);\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n */\n function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);\n\n /**\n * @notice Retrieves the LayerZero endpoint associated with the OApp.\n * @return iEndpoint The LayerZero endpoint as an interface.\n */\n function endpoint() external view returns (ILayerZeroEndpointV2 iEndpoint);\n\n /**\n * @notice Retrieves the peer (OApp) associated with a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @return peer The peer address (OApp instance) associated with the corresponding endpoint.\n */\n function peers(uint32 _eid) external view returns (bytes32 peer);\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n */\n function setPeer(uint32 _eid, bytes32 _peer) external;\n\n /**\n * @notice Sets the delegate address for the OApp Core.\n * @param _delegate The address of the delegate to be set.\n */\n function setDelegate(address _delegate) external;\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.20;\n\nimport { ILayerZeroReceiver, Origin } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\";\n\ninterface IOAppReceiver is ILayerZeroReceiver {\n /**\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\n * @param _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @param _message The lzReceive payload.\n * @param _sender The sender address.\n * @return isSender Is a valid sender.\n *\n * @dev Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.\n * @dev The default sender IS the OAppReceiver implementer.\n */\n function isComposeMsgSender(\n Origin calldata _origin,\n bytes calldata _message,\n address _sender\n ) external view returns (bool isSender);\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\n// @dev Import the 'MessagingFee' and 'MessagingReceipt' so it's exposed to OApp implementers\n// solhint-disable-next-line no-unused-import\nimport { OAppSender, MessagingFee, MessagingReceipt } from \"./OAppSender.sol\";\n// @dev Import the 'Origin' so it's exposed to OApp implementers\n// solhint-disable-next-line no-unused-import\nimport { OAppReceiver, Origin } from \"./OAppReceiver.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OApp\n * @dev Abstract contract serving as the base for OApp implementation, combining OAppSender and OAppReceiver functionality.\n */\nabstract contract OApp is OAppSender, OAppReceiver {\n /**\n * @dev Constructor to initialize the OApp with the provided endpoint and owner.\n * @param _endpoint The address of the LOCAL LayerZero endpoint.\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\n */\n constructor(address _endpoint, address _delegate) OAppCore(_endpoint, _delegate) {}\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol implementation.\n * @return receiverVersion The version of the OAppReceiver.sol implementation.\n */\n function oAppVersion()\n public\n pure\n virtual\n override(OAppSender, OAppReceiver)\n returns (uint64 senderVersion, uint64 receiverVersion)\n {\n return (SENDER_VERSION, RECEIVER_VERSION);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppCore.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { IOAppCore, ILayerZeroEndpointV2 } from \"./interfaces/IOAppCore.sol\";\n\n/**\n * @title OAppCore\n * @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations.\n */\nabstract contract OAppCore is IOAppCore, Ownable {\n // The LayerZero endpoint associated with the given OApp\n ILayerZeroEndpointV2 public immutable endpoint;\n\n // Mapping to store peers associated with corresponding endpoints\n mapping(uint32 eid => bytes32 peer) public peers;\n\n /**\n * @dev Constructor to initialize the OAppCore with the provided endpoint and delegate.\n * @param _endpoint The address of the LOCAL Layer Zero endpoint.\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\n *\n * @dev The delegate typically should be set as the owner of the contract.\n */\n constructor(address _endpoint, address _delegate) {\n endpoint = ILayerZeroEndpointV2(_endpoint);\n\n if (_delegate == address(0)) revert InvalidDelegate();\n endpoint.setDelegate(_delegate);\n }\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n *\n * @dev Only the owner/admin of the OApp can call this function.\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\n * @dev Set this to bytes32(0) to remove the peer address.\n * @dev Peer is a bytes32 to accommodate non-evm chains.\n */\n function setPeer(uint32 _eid, bytes32 _peer) public virtual onlyOwner {\n _setPeer(_eid, _peer);\n }\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n *\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\n * @dev Set this to bytes32(0) to remove the peer address.\n * @dev Peer is a bytes32 to accommodate non-evm chains.\n */\n function _setPeer(uint32 _eid, bytes32 _peer) internal virtual {\n peers[_eid] = _peer;\n emit PeerSet(_eid, _peer);\n }\n\n /**\n * @notice Internal function to get the peer address associated with a specific endpoint; reverts if NOT set.\n * ie. the peer is set to bytes32(0).\n * @param _eid The endpoint ID.\n * @return peer The address of the peer associated with the specified endpoint.\n */\n function _getPeerOrRevert(uint32 _eid) internal view virtual returns (bytes32) {\n bytes32 peer = peers[_eid];\n if (peer == bytes32(0)) revert NoPeer(_eid);\n return peer;\n }\n\n /**\n * @notice Sets the delegate address for the OApp.\n * @param _delegate The address of the delegate to be set.\n *\n * @dev Only the owner/admin of the OApp can call this function.\n * @dev Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\n */\n function setDelegate(address _delegate) public onlyOwner {\n endpoint.setDelegate(_delegate);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { IOAppReceiver, Origin } from \"./interfaces/IOAppReceiver.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OAppReceiver\n * @dev Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers.\n */\nabstract contract OAppReceiver is IOAppReceiver, OAppCore {\n // Custom error message for when the caller is not the registered endpoint/\n error OnlyEndpoint(address addr);\n\n // @dev The version of the OAppReceiver implementation.\n // @dev Version is bumped when changes are made to this contract.\n uint64 internal constant RECEIVER_VERSION = 2;\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n *\n * @dev Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented.\n * ie. this is a RECEIVE only OApp.\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions.\n */\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\n return (0, RECEIVER_VERSION);\n }\n\n /**\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\n * @dev _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @dev _message The lzReceive payload.\n * @param _sender The sender address.\n * @return isSender Is a valid sender.\n *\n * @dev Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.\n * @dev The default sender IS the OAppReceiver implementer.\n */\n function isComposeMsgSender(\n Origin calldata /*_origin*/,\n bytes calldata /*_message*/,\n address _sender\n ) public view virtual returns (bool) {\n return _sender == address(this);\n }\n\n /**\n * @notice Checks if the path initialization is allowed based on the provided origin.\n * @param origin The origin information containing the source endpoint and sender address.\n * @return Whether the path has been initialized.\n *\n * @dev This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.\n * @dev This defaults to assuming if a peer has been set, its initialized.\n * Can be overridden by the OApp if there is other logic to determine this.\n */\n function allowInitializePath(Origin calldata origin) public view virtual returns (bool) {\n return peers[origin.srcEid] == origin.sender;\n }\n\n /**\n * @notice Retrieves the next nonce for a given source endpoint and sender address.\n * @dev _srcEid The source endpoint ID.\n * @dev _sender The sender address.\n * @return nonce The next nonce.\n *\n * @dev The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.\n * @dev Is required by the off-chain executor to determine the OApp expects msg execution is ordered.\n * @dev This is also enforced by the OApp.\n * @dev By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\n */\n function nextNonce(uint32 /*_srcEid*/, bytes32 /*_sender*/) public view virtual returns (uint64 nonce) {\n return 0;\n }\n\n /**\n * @dev Entry point for receiving messages or packets from the endpoint.\n * @param _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @param _guid The unique identifier for the received LayerZero message.\n * @param _message The payload of the received message.\n * @param _executor The address of the executor for the received message.\n * @param _extraData Additional arbitrary data provided by the corresponding executor.\n *\n * @dev Entry point for receiving msg/packet from the LayerZero endpoint.\n */\n function lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) public payable virtual {\n // Ensures that only the endpoint can attempt to lzReceive() messages to this OApp.\n if (address(endpoint) != msg.sender) revert OnlyEndpoint(msg.sender);\n\n // Ensure that the sender matches the expected peer for the source endpoint.\n if (_getPeerOrRevert(_origin.srcEid) != _origin.sender) revert OnlyPeer(_origin.srcEid, _origin.sender);\n\n // Call the internal OApp implementation of lzReceive.\n _lzReceive(_origin, _guid, _message, _executor, _extraData);\n }\n\n /**\n * @dev Internal function to implement lzReceive logic without needing to copy the basic parameter validation.\n */\n function _lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) internal virtual;\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { SafeERC20, IERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { MessagingParams, MessagingFee, MessagingReceipt } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OAppSender\n * @dev Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.\n */\nabstract contract OAppSender is OAppCore {\n using SafeERC20 for IERC20;\n\n // Custom error messages\n error NotEnoughNative(uint256 msgValue);\n error LzTokenUnavailable();\n\n // @dev The version of the OAppSender implementation.\n // @dev Version is bumped when changes are made to this contract.\n uint64 internal constant SENDER_VERSION = 1;\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n *\n * @dev Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented.\n * ie. this is a SEND only OApp.\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions\n */\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\n return (SENDER_VERSION, 0);\n }\n\n /**\n * @dev Internal function to interact with the LayerZero EndpointV2.quote() for fee calculation.\n * @param _dstEid The destination endpoint ID.\n * @param _message The message payload.\n * @param _options Additional options for the message.\n * @param _payInLzToken Flag indicating whether to pay the fee in LZ tokens.\n * @return fee The calculated MessagingFee for the message.\n * - nativeFee: The native fee for the message.\n * - lzTokenFee: The LZ token fee for the message.\n */\n function _quote(\n uint32 _dstEid,\n bytes memory _message,\n bytes memory _options,\n bool _payInLzToken\n ) internal view virtual returns (MessagingFee memory fee) {\n return\n endpoint.quote(\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _payInLzToken),\n address(this)\n );\n }\n\n /**\n * @dev Internal function to interact with the LayerZero EndpointV2.send() for sending a message.\n * @param _dstEid The destination endpoint ID.\n * @param _message The message payload.\n * @param _options Additional options for the message.\n * @param _fee The calculated LayerZero fee for the message.\n * - nativeFee: The native fee.\n * - lzTokenFee: The lzToken fee.\n * @param _refundAddress The address to receive any excess fee values sent to the endpoint.\n * @return receipt The receipt for the sent message.\n * - guid: The unique identifier for the sent message.\n * - nonce: The nonce of the sent message.\n * - fee: The LayerZero fee incurred for the message.\n */\n function _lzSend(\n uint32 _dstEid,\n bytes memory _message,\n bytes memory _options,\n MessagingFee memory _fee,\n address _refundAddress\n ) internal virtual returns (MessagingReceipt memory receipt) {\n // @dev Push corresponding fees to the endpoint, any excess is sent back to the _refundAddress from the endpoint.\n uint256 messageValue = _payNative(_fee.nativeFee);\n if (_fee.lzTokenFee > 0) _payLzToken(_fee.lzTokenFee);\n\n return\n // solhint-disable-next-line check-send-result\n endpoint.send{ value: messageValue }(\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _fee.lzTokenFee > 0),\n _refundAddress\n );\n }\n\n /**\n * @dev Internal function to pay the native fee associated with the message.\n * @param _nativeFee The native fee to be paid.\n * @return nativeFee The amount of native currency paid.\n *\n * @dev If the OApp needs to initiate MULTIPLE LayerZero messages in a single transaction,\n * this will need to be overridden because msg.value would contain multiple lzFees.\n * @dev Should be overridden in the event the LayerZero endpoint requires a different native currency.\n * @dev Some EVMs use an ERC20 as a method for paying transactions/gasFees.\n * @dev The endpoint is EITHER/OR, ie. it will NOT support both types of native payment at a time.\n */\n function _payNative(uint256 _nativeFee) internal virtual returns (uint256 nativeFee) {\n if (msg.value != _nativeFee) revert NotEnoughNative(msg.value);\n return _nativeFee;\n }\n\n /**\n * @dev Internal function to pay the LZ token fee associated with the message.\n * @param _lzTokenFee The LZ token fee to be paid.\n *\n * @dev If the caller is trying to pay in the specified lzToken, then the lzTokenFee is passed to the endpoint.\n * @dev Any excess sent, is passed back to the specified _refundAddress in the _lzSend().\n */\n function _payLzToken(uint256 _lzTokenFee) internal virtual {\n // @dev Cannot cache the token because it is not immutable in the endpoint.\n address lzToken = endpoint.lzToken();\n if (lzToken == address(0)) revert LzTokenUnavailable();\n\n // Pay LZ token fee by sending tokens to the endpoint.\n IERC20(lzToken).safeTransferFrom(msg.sender, address(endpoint), _lzTokenFee);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nimport { IMessageLibManager } from \"./IMessageLibManager.sol\";\nimport { IMessagingComposer } from \"./IMessagingComposer.sol\";\nimport { IMessagingChannel } from \"./IMessagingChannel.sol\";\nimport { IMessagingContext } from \"./IMessagingContext.sol\";\n\nstruct MessagingParams {\n uint32 dstEid;\n bytes32 receiver;\n bytes message;\n bytes options;\n bool payInLzToken;\n}\n\nstruct MessagingReceipt {\n bytes32 guid;\n uint64 nonce;\n MessagingFee fee;\n}\n\nstruct MessagingFee {\n uint256 nativeFee;\n uint256 lzTokenFee;\n}\n\nstruct Origin {\n uint32 srcEid;\n bytes32 sender;\n uint64 nonce;\n}\n\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\n\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\n\n event PacketDelivered(Origin origin, address receiver);\n\n event LzReceiveAlert(\n address indexed receiver,\n address indexed executor,\n Origin origin,\n bytes32 guid,\n uint256 gas,\n uint256 value,\n bytes message,\n bytes extraData,\n bytes reason\n );\n\n event LzTokenSet(address token);\n\n event DelegateSet(address sender, address delegate);\n\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\n\n function send(\n MessagingParams calldata _params,\n address _refundAddress\n ) external payable returns (MessagingReceipt memory);\n\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\n\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\n\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\n\n function lzReceive(\n Origin calldata _origin,\n address _receiver,\n bytes32 _guid,\n bytes calldata _message,\n bytes calldata _extraData\n ) external payable;\n\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\n\n function setLzToken(address _lzToken) external;\n\n function lzToken() external view returns (address);\n\n function nativeToken() external view returns (address);\n\n function setDelegate(address _delegate) external;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nimport { Origin } from \"./ILayerZeroEndpointV2.sol\";\n\ninterface ILayerZeroReceiver {\n function allowInitializePath(Origin calldata _origin) external view returns (bool);\n\n function nextNonce(uint32 _eid, bytes32 _sender) external view returns (uint64);\n\n function lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) external payable;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nstruct SetConfigParam {\n uint32 eid;\n uint32 configType;\n bytes config;\n}\n\ninterface IMessageLibManager {\n struct Timeout {\n address lib;\n uint256 expiry;\n }\n\n event LibraryRegistered(address newLib);\n event DefaultSendLibrarySet(uint32 eid, address newLib);\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\n event SendLibrarySet(address sender, uint32 eid, address newLib);\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\n\n function registerLibrary(address _lib) external;\n\n function isRegisteredLibrary(address _lib) external view returns (bool);\n\n function getRegisteredLibraries() external view returns (address[] memory);\n\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\n\n function defaultSendLibrary(uint32 _eid) external view returns (address);\n\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\n\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\n\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\n\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\n\n function isSupportedEid(uint32 _eid) external view returns (bool);\n\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\n\n /// ------------------- OApp interfaces -------------------\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\n\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\n\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\n\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\n\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\n\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\n\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\n\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\n\n function getConfig(\n address _oapp,\n address _lib,\n uint32 _eid,\n uint32 _configType\n ) external view returns (bytes memory config);\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingChannel {\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\n\n function eid() external view returns (uint32);\n\n // this is an emergency function if a message cannot be verified for some reasons\n // required to provide _nextNonce to avoid race condition\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\n\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\n\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\n\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\n\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\n\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\n\n function inboundPayloadHash(\n address _receiver,\n uint32 _srcEid,\n bytes32 _sender,\n uint64 _nonce\n ) external view returns (bytes32);\n\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingComposer {\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\n event LzComposeAlert(\n address indexed from,\n address indexed to,\n address indexed executor,\n bytes32 guid,\n uint16 index,\n uint256 gas,\n uint256 value,\n bytes message,\n bytes extraData,\n bytes reason\n );\n\n function composeQueue(\n address _from,\n address _to,\n bytes32 _guid,\n uint16 _index\n ) external view returns (bytes32 messageHash);\n\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\n\n function lzCompose(\n address _from,\n address _to,\n bytes32 _guid,\n uint16 _index,\n bytes calldata _message,\n bytes calldata _extraData\n ) external payable;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingContext {\n function isSendingMessage() external view returns (bool);\n\n function getSendContext() external view returns (uint32 dstEid, address sender);\n}\n" + }, + "@openzeppelin/contracts/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {Context} from \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n /**\n * @dev The caller account is not authorized to perform an operation.\n */\n error OwnableUnauthorizedAccount(address account);\n\n /**\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\n */\n error OwnableInvalidOwner(address owner);\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n */\n constructor(address initialOwner) {\n if (initialOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n if (owner() != _msgSender()) {\n revert OwnableUnauthorizedAccount(_msgSender());\n }\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby disabling any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n if (newOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "@openzeppelin/contracts/interfaces/IERC1363.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC165} from \"./IERC165.sol\";\n\n/**\n * @title IERC1363\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\n *\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\n */\ninterface IERC1363 is IERC20, IERC165 {\n /*\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\n * 0xb0202a11 ===\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\n */\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @param data Additional data with no specified format, sent in call to `spender`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\n}\n" + }, + "@openzeppelin/contracts/interfaces/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"../utils/introspection/IERC165.sol\";\n" + }, + "@openzeppelin/contracts/interfaces/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\n" + }, + "@openzeppelin/contracts/token/ERC20/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-20 standard as defined in the ERC.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the value of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the value of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\n * allowance mechanism. `value` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n" + }, + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\nimport {IERC1363} from \"../../../interfaces/IERC1363.sol\";\nimport {Address} from \"../../../utils/Address.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n /**\n * @dev An operation with an ERC-20 token failed.\n */\n error SafeERC20FailedOperation(address token);\n\n /**\n * @dev Indicates a failed `decreaseAllowance` request.\n */\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\n\n /**\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\n }\n\n /**\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\n */\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n }\n\n /**\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n uint256 oldAllowance = token.allowance(address(this), spender);\n forceApprove(token, spender, oldAllowance + value);\n }\n\n /**\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n * value, non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\n unchecked {\n uint256 currentAllowance = token.allowance(address(this), spender);\n if (currentAllowance < requestedDecrease) {\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\n }\n forceApprove(token, spender, currentAllowance - requestedDecrease);\n }\n }\n\n /**\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n * to be set to zero before setting it to a non-zero value, such as USDT.\n *\n * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\n * only sets the \"standard\" allowance. Any temporary allowance will remain active, in addition to the value being\n * set here.\n */\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\n\n if (!_callOptionalReturnBool(token, approvalCall)) {\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\n _callOptionalReturn(token, approvalCall);\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n safeTransfer(token, to, value);\n } else if (!token.transferAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\n * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferFromAndCallRelaxed(\n IERC1363 token,\n address from,\n address to,\n uint256 value,\n bytes memory data\n ) internal {\n if (to.code.length == 0) {\n safeTransferFrom(token, from, to, value);\n } else if (!token.transferFromAndCall(from, to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\n * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\n * once without retrying, and relies on the returned value to be true.\n *\n * Reverts if the returned value is other than `true`.\n */\n function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n forceApprove(token, to, value);\n } else if (!token.approveAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\n */\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n // bubble errors\n if iszero(success) {\n let ptr := mload(0x40)\n returndatacopy(ptr, 0, returndatasize())\n revert(ptr, returndatasize())\n }\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n\n if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\n */\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\n bool success;\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\nimport {Errors} from \"./Errors.sol\";\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev There's no code at `target` (it is not a contract).\n */\n error AddressEmptyCode(address target);\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n if (address(this).balance < amount) {\n revert Errors.InsufficientBalance(address(this).balance, amount);\n }\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n if (!success) {\n revert Errors.FailedCall();\n }\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason or custom error, it is bubbled\n * up by this function (like regular Solidity function calls). However, if\n * the call reverted with no returned reason, this function reverts with a\n * {Errors.FailedCall} error.\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n if (address(this).balance < value) {\n revert Errors.InsufficientBalance(address(this).balance, value);\n }\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\n * of an unsuccessful call.\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata\n ) internal view returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n // only check if target is a contract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n if (returndata.length == 0 && target.code.length == 0) {\n revert AddressEmptyCode(target);\n }\n return returndata;\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n * revert reason or with a default {Errors.FailedCall} error.\n */\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n return returndata;\n }\n }\n\n /**\n * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\n */\n function _revert(bytes memory returndata) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n assembly (\"memory-safe\") {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert Errors.FailedCall();\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n function _contextSuffixLength() internal view virtual returns (uint256) {\n return 0;\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Errors.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of common custom errors used in multiple contracts\n *\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\n * It is recommended to avoid relying on the error API for critical functionality.\n *\n * _Available since v5.1._\n */\nlibrary Errors {\n /**\n * @dev The ETH balance of the account is not enough to perform the operation.\n */\n error InsufficientBalance(uint256 balance, uint256 needed);\n\n /**\n * @dev A call to an address target failed. The target may have reverted.\n */\n error FailedCall();\n\n /**\n * @dev The deployment failed.\n */\n error FailedDeployment();\n\n /**\n * @dev A necessary precompile is missing.\n */\n error MissingPrecompile(address);\n}\n" + }, + "@openzeppelin/contracts/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "contracts/TestingOApp.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.22;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { OApp, MessagingFee, Origin } from \"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol\";\nimport { MessagingReceipt } from \"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol\";\n\ncontract TestingOApp is OApp {\n constructor(address _endpoint, address _delegate) OApp(_endpoint, _delegate) Ownable(_delegate) {}\n\n string public data = \"nothing received yet\";\n\n /**\n * @notice Sends a message from the source chain to a destination chain.\n * @param _dstEid The endpoint ID of the destination chain.\n * @param _message The message string to be sent.\n * @param _options Additional options for message execution.\n * @dev Encodes the message as bytes and sends it using the `_lzSend` internal function.\n * @return receipt A `MessagingReceipt` struct containing details of the message sent.\n */\n function send(\n uint32 _dstEid,\n string memory _message,\n bytes calldata _options\n ) external payable returns (MessagingReceipt memory receipt) {\n bytes memory _payload = abi.encode(_message);\n receipt = _lzSend(_dstEid, _payload, _options, MessagingFee(msg.value, 0), payable(msg.sender));\n }\n\n /**\n * @notice Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token.\n * @param _dstEid Destination chain's endpoint ID.\n * @param _message The message.\n * @param _options Message execution options (e.g., for sending gas to destination).\n * @param _payInLzToken Whether to return fee in ZRO token.\n * @return fee A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token.\n */\n function quote(\n uint32 _dstEid,\n string memory _message,\n bytes memory _options,\n bool _payInLzToken\n ) public view returns (MessagingFee memory fee) {\n bytes memory payload = abi.encode(_message);\n fee = _quote(_dstEid, payload, _options, _payInLzToken);\n }\n\n /**\n * @dev Internal function override to handle incoming messages from another chain.\n * @dev _origin A struct containing information about the message sender.\n * @dev _guid A unique global packet identifier for the message.\n * @param payload The encoded message payload being received.\n *\n * @dev The following params are unused in the current implementation of the OApp.\n * @dev _executor The address of the Executor responsible for processing the message.\n * @dev _extraData Arbitrary data appended by the Executor to the message.\n *\n * Decodes the received payload and processes it as per the business logic defined in the function.\n */\n function _lzReceive(\n Origin calldata /*_origin*/,\n bytes32 /*_guid*/,\n bytes calldata payload,\n address /*_executor*/,\n bytes calldata /*_extraData*/\n ) internal override {\n data = abi.decode(payload, (string));\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "evmVersion": "paris", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/tests/e2e/testing_oapp/deployments/arbitrum-sepolia/solcInputs/be3116508cd88579ce80b9b651ebd93f.json b/tests/e2e/testing_oapp/deployments/arbitrum-sepolia/solcInputs/be3116508cd88579ce80b9b651ebd93f.json new file mode 100644 index 00000000..efc8973c --- /dev/null +++ b/tests/e2e/testing_oapp/deployments/arbitrum-sepolia/solcInputs/be3116508cd88579ce80b9b651ebd93f.json @@ -0,0 +1,102 @@ +{ + "language": "Solidity", + "sources": { + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppCore.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { ILayerZeroEndpointV2 } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\";\n\n/**\n * @title IOAppCore\n */\ninterface IOAppCore {\n // Custom error messages\n error OnlyPeer(uint32 eid, bytes32 sender);\n error NoPeer(uint32 eid);\n error InvalidEndpointCall();\n error InvalidDelegate();\n\n // Event emitted when a peer (OApp) is set for a corresponding endpoint\n event PeerSet(uint32 eid, bytes32 peer);\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n */\n function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);\n\n /**\n * @notice Retrieves the LayerZero endpoint associated with the OApp.\n * @return iEndpoint The LayerZero endpoint as an interface.\n */\n function endpoint() external view returns (ILayerZeroEndpointV2 iEndpoint);\n\n /**\n * @notice Retrieves the peer (OApp) associated with a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @return peer The peer address (OApp instance) associated with the corresponding endpoint.\n */\n function peers(uint32 _eid) external view returns (bytes32 peer);\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n */\n function setPeer(uint32 _eid, bytes32 _peer) external;\n\n /**\n * @notice Sets the delegate address for the OApp Core.\n * @param _delegate The address of the delegate to be set.\n */\n function setDelegate(address _delegate) external;\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.20;\n\nimport { ILayerZeroReceiver, Origin } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\";\n\ninterface IOAppReceiver is ILayerZeroReceiver {\n /**\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\n * @param _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @param _message The lzReceive payload.\n * @param _sender The sender address.\n * @return isSender Is a valid sender.\n *\n * @dev Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.\n * @dev The default sender IS the OAppReceiver implementer.\n */\n function isComposeMsgSender(\n Origin calldata _origin,\n bytes calldata _message,\n address _sender\n ) external view returns (bool isSender);\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\n// @dev Import the 'MessagingFee' and 'MessagingReceipt' so it's exposed to OApp implementers\n// solhint-disable-next-line no-unused-import\nimport { OAppSender, MessagingFee, MessagingReceipt } from \"./OAppSender.sol\";\n// @dev Import the 'Origin' so it's exposed to OApp implementers\n// solhint-disable-next-line no-unused-import\nimport { OAppReceiver, Origin } from \"./OAppReceiver.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OApp\n * @dev Abstract contract serving as the base for OApp implementation, combining OAppSender and OAppReceiver functionality.\n */\nabstract contract OApp is OAppSender, OAppReceiver {\n /**\n * @dev Constructor to initialize the OApp with the provided endpoint and owner.\n * @param _endpoint The address of the LOCAL LayerZero endpoint.\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\n */\n constructor(address _endpoint, address _delegate) OAppCore(_endpoint, _delegate) {}\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol implementation.\n * @return receiverVersion The version of the OAppReceiver.sol implementation.\n */\n function oAppVersion()\n public\n pure\n virtual\n override(OAppSender, OAppReceiver)\n returns (uint64 senderVersion, uint64 receiverVersion)\n {\n return (SENDER_VERSION, RECEIVER_VERSION);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppCore.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { IOAppCore, ILayerZeroEndpointV2 } from \"./interfaces/IOAppCore.sol\";\n\n/**\n * @title OAppCore\n * @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations.\n */\nabstract contract OAppCore is IOAppCore, Ownable {\n // The LayerZero endpoint associated with the given OApp\n ILayerZeroEndpointV2 public immutable endpoint;\n\n // Mapping to store peers associated with corresponding endpoints\n mapping(uint32 eid => bytes32 peer) public peers;\n\n /**\n * @dev Constructor to initialize the OAppCore with the provided endpoint and delegate.\n * @param _endpoint The address of the LOCAL Layer Zero endpoint.\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\n *\n * @dev The delegate typically should be set as the owner of the contract.\n */\n constructor(address _endpoint, address _delegate) {\n endpoint = ILayerZeroEndpointV2(_endpoint);\n\n if (_delegate == address(0)) revert InvalidDelegate();\n endpoint.setDelegate(_delegate);\n }\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n *\n * @dev Only the owner/admin of the OApp can call this function.\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\n * @dev Set this to bytes32(0) to remove the peer address.\n * @dev Peer is a bytes32 to accommodate non-evm chains.\n */\n function setPeer(uint32 _eid, bytes32 _peer) public virtual onlyOwner {\n _setPeer(_eid, _peer);\n }\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n *\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\n * @dev Set this to bytes32(0) to remove the peer address.\n * @dev Peer is a bytes32 to accommodate non-evm chains.\n */\n function _setPeer(uint32 _eid, bytes32 _peer) internal virtual {\n peers[_eid] = _peer;\n emit PeerSet(_eid, _peer);\n }\n\n /**\n * @notice Internal function to get the peer address associated with a specific endpoint; reverts if NOT set.\n * ie. the peer is set to bytes32(0).\n * @param _eid The endpoint ID.\n * @return peer The address of the peer associated with the specified endpoint.\n */\n function _getPeerOrRevert(uint32 _eid) internal view virtual returns (bytes32) {\n bytes32 peer = peers[_eid];\n if (peer == bytes32(0)) revert NoPeer(_eid);\n return peer;\n }\n\n /**\n * @notice Sets the delegate address for the OApp.\n * @param _delegate The address of the delegate to be set.\n *\n * @dev Only the owner/admin of the OApp can call this function.\n * @dev Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\n */\n function setDelegate(address _delegate) public onlyOwner {\n endpoint.setDelegate(_delegate);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { IOAppReceiver, Origin } from \"./interfaces/IOAppReceiver.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OAppReceiver\n * @dev Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers.\n */\nabstract contract OAppReceiver is IOAppReceiver, OAppCore {\n // Custom error message for when the caller is not the registered endpoint/\n error OnlyEndpoint(address addr);\n\n // @dev The version of the OAppReceiver implementation.\n // @dev Version is bumped when changes are made to this contract.\n uint64 internal constant RECEIVER_VERSION = 2;\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n *\n * @dev Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented.\n * ie. this is a RECEIVE only OApp.\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions.\n */\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\n return (0, RECEIVER_VERSION);\n }\n\n /**\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\n * @dev _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @dev _message The lzReceive payload.\n * @param _sender The sender address.\n * @return isSender Is a valid sender.\n *\n * @dev Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.\n * @dev The default sender IS the OAppReceiver implementer.\n */\n function isComposeMsgSender(\n Origin calldata /*_origin*/,\n bytes calldata /*_message*/,\n address _sender\n ) public view virtual returns (bool) {\n return _sender == address(this);\n }\n\n /**\n * @notice Checks if the path initialization is allowed based on the provided origin.\n * @param origin The origin information containing the source endpoint and sender address.\n * @return Whether the path has been initialized.\n *\n * @dev This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.\n * @dev This defaults to assuming if a peer has been set, its initialized.\n * Can be overridden by the OApp if there is other logic to determine this.\n */\n function allowInitializePath(Origin calldata origin) public view virtual returns (bool) {\n return peers[origin.srcEid] == origin.sender;\n }\n\n /**\n * @notice Retrieves the next nonce for a given source endpoint and sender address.\n * @dev _srcEid The source endpoint ID.\n * @dev _sender The sender address.\n * @return nonce The next nonce.\n *\n * @dev The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.\n * @dev Is required by the off-chain executor to determine the OApp expects msg execution is ordered.\n * @dev This is also enforced by the OApp.\n * @dev By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\n */\n function nextNonce(uint32 /*_srcEid*/, bytes32 /*_sender*/) public view virtual returns (uint64 nonce) {\n return 0;\n }\n\n /**\n * @dev Entry point for receiving messages or packets from the endpoint.\n * @param _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @param _guid The unique identifier for the received LayerZero message.\n * @param _message The payload of the received message.\n * @param _executor The address of the executor for the received message.\n * @param _extraData Additional arbitrary data provided by the corresponding executor.\n *\n * @dev Entry point for receiving msg/packet from the LayerZero endpoint.\n */\n function lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) public payable virtual {\n // Ensures that only the endpoint can attempt to lzReceive() messages to this OApp.\n if (address(endpoint) != msg.sender) revert OnlyEndpoint(msg.sender);\n\n // Ensure that the sender matches the expected peer for the source endpoint.\n if (_getPeerOrRevert(_origin.srcEid) != _origin.sender) revert OnlyPeer(_origin.srcEid, _origin.sender);\n\n // Call the internal OApp implementation of lzReceive.\n _lzReceive(_origin, _guid, _message, _executor, _extraData);\n }\n\n /**\n * @dev Internal function to implement lzReceive logic without needing to copy the basic parameter validation.\n */\n function _lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) internal virtual;\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { SafeERC20, IERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { MessagingParams, MessagingFee, MessagingReceipt } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OAppSender\n * @dev Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.\n */\nabstract contract OAppSender is OAppCore {\n using SafeERC20 for IERC20;\n\n // Custom error messages\n error NotEnoughNative(uint256 msgValue);\n error LzTokenUnavailable();\n\n // @dev The version of the OAppSender implementation.\n // @dev Version is bumped when changes are made to this contract.\n uint64 internal constant SENDER_VERSION = 1;\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n *\n * @dev Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented.\n * ie. this is a SEND only OApp.\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions\n */\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\n return (SENDER_VERSION, 0);\n }\n\n /**\n * @dev Internal function to interact with the LayerZero EndpointV2.quote() for fee calculation.\n * @param _dstEid The destination endpoint ID.\n * @param _message The message payload.\n * @param _options Additional options for the message.\n * @param _payInLzToken Flag indicating whether to pay the fee in LZ tokens.\n * @return fee The calculated MessagingFee for the message.\n * - nativeFee: The native fee for the message.\n * - lzTokenFee: The LZ token fee for the message.\n */\n function _quote(\n uint32 _dstEid,\n bytes memory _message,\n bytes memory _options,\n bool _payInLzToken\n ) internal view virtual returns (MessagingFee memory fee) {\n return\n endpoint.quote(\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _payInLzToken),\n address(this)\n );\n }\n\n /**\n * @dev Internal function to interact with the LayerZero EndpointV2.send() for sending a message.\n * @param _dstEid The destination endpoint ID.\n * @param _message The message payload.\n * @param _options Additional options for the message.\n * @param _fee The calculated LayerZero fee for the message.\n * - nativeFee: The native fee.\n * - lzTokenFee: The lzToken fee.\n * @param _refundAddress The address to receive any excess fee values sent to the endpoint.\n * @return receipt The receipt for the sent message.\n * - guid: The unique identifier for the sent message.\n * - nonce: The nonce of the sent message.\n * - fee: The LayerZero fee incurred for the message.\n */\n function _lzSend(\n uint32 _dstEid,\n bytes memory _message,\n bytes memory _options,\n MessagingFee memory _fee,\n address _refundAddress\n ) internal virtual returns (MessagingReceipt memory receipt) {\n // @dev Push corresponding fees to the endpoint, any excess is sent back to the _refundAddress from the endpoint.\n uint256 messageValue = _payNative(_fee.nativeFee);\n if (_fee.lzTokenFee > 0) _payLzToken(_fee.lzTokenFee);\n\n return\n // solhint-disable-next-line check-send-result\n endpoint.send{ value: messageValue }(\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _fee.lzTokenFee > 0),\n _refundAddress\n );\n }\n\n /**\n * @dev Internal function to pay the native fee associated with the message.\n * @param _nativeFee The native fee to be paid.\n * @return nativeFee The amount of native currency paid.\n *\n * @dev If the OApp needs to initiate MULTIPLE LayerZero messages in a single transaction,\n * this will need to be overridden because msg.value would contain multiple lzFees.\n * @dev Should be overridden in the event the LayerZero endpoint requires a different native currency.\n * @dev Some EVMs use an ERC20 as a method for paying transactions/gasFees.\n * @dev The endpoint is EITHER/OR, ie. it will NOT support both types of native payment at a time.\n */\n function _payNative(uint256 _nativeFee) internal virtual returns (uint256 nativeFee) {\n if (msg.value != _nativeFee) revert NotEnoughNative(msg.value);\n return _nativeFee;\n }\n\n /**\n * @dev Internal function to pay the LZ token fee associated with the message.\n * @param _lzTokenFee The LZ token fee to be paid.\n *\n * @dev If the caller is trying to pay in the specified lzToken, then the lzTokenFee is passed to the endpoint.\n * @dev Any excess sent, is passed back to the specified _refundAddress in the _lzSend().\n */\n function _payLzToken(uint256 _lzTokenFee) internal virtual {\n // @dev Cannot cache the token because it is not immutable in the endpoint.\n address lzToken = endpoint.lzToken();\n if (lzToken == address(0)) revert LzTokenUnavailable();\n\n // Pay LZ token fee by sending tokens to the endpoint.\n IERC20(lzToken).safeTransferFrom(msg.sender, address(endpoint), _lzTokenFee);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nimport { IMessageLibManager } from \"./IMessageLibManager.sol\";\nimport { IMessagingComposer } from \"./IMessagingComposer.sol\";\nimport { IMessagingChannel } from \"./IMessagingChannel.sol\";\nimport { IMessagingContext } from \"./IMessagingContext.sol\";\n\nstruct MessagingParams {\n uint32 dstEid;\n bytes32 receiver;\n bytes message;\n bytes options;\n bool payInLzToken;\n}\n\nstruct MessagingReceipt {\n bytes32 guid;\n uint64 nonce;\n MessagingFee fee;\n}\n\nstruct MessagingFee {\n uint256 nativeFee;\n uint256 lzTokenFee;\n}\n\nstruct Origin {\n uint32 srcEid;\n bytes32 sender;\n uint64 nonce;\n}\n\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\n\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\n\n event PacketDelivered(Origin origin, address receiver);\n\n event LzReceiveAlert(\n address indexed receiver,\n address indexed executor,\n Origin origin,\n bytes32 guid,\n uint256 gas,\n uint256 value,\n bytes message,\n bytes extraData,\n bytes reason\n );\n\n event LzTokenSet(address token);\n\n event DelegateSet(address sender, address delegate);\n\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\n\n function send(\n MessagingParams calldata _params,\n address _refundAddress\n ) external payable returns (MessagingReceipt memory);\n\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\n\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\n\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\n\n function lzReceive(\n Origin calldata _origin,\n address _receiver,\n bytes32 _guid,\n bytes calldata _message,\n bytes calldata _extraData\n ) external payable;\n\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\n\n function setLzToken(address _lzToken) external;\n\n function lzToken() external view returns (address);\n\n function nativeToken() external view returns (address);\n\n function setDelegate(address _delegate) external;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nimport { Origin } from \"./ILayerZeroEndpointV2.sol\";\n\ninterface ILayerZeroReceiver {\n function allowInitializePath(Origin calldata _origin) external view returns (bool);\n\n function nextNonce(uint32 _eid, bytes32 _sender) external view returns (uint64);\n\n function lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) external payable;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nstruct SetConfigParam {\n uint32 eid;\n uint32 configType;\n bytes config;\n}\n\ninterface IMessageLibManager {\n struct Timeout {\n address lib;\n uint256 expiry;\n }\n\n event LibraryRegistered(address newLib);\n event DefaultSendLibrarySet(uint32 eid, address newLib);\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\n event SendLibrarySet(address sender, uint32 eid, address newLib);\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\n\n function registerLibrary(address _lib) external;\n\n function isRegisteredLibrary(address _lib) external view returns (bool);\n\n function getRegisteredLibraries() external view returns (address[] memory);\n\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\n\n function defaultSendLibrary(uint32 _eid) external view returns (address);\n\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\n\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\n\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\n\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\n\n function isSupportedEid(uint32 _eid) external view returns (bool);\n\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\n\n /// ------------------- OApp interfaces -------------------\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\n\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\n\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\n\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\n\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\n\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\n\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\n\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\n\n function getConfig(\n address _oapp,\n address _lib,\n uint32 _eid,\n uint32 _configType\n ) external view returns (bytes memory config);\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingChannel {\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\n\n function eid() external view returns (uint32);\n\n // this is an emergency function if a message cannot be verified for some reasons\n // required to provide _nextNonce to avoid race condition\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\n\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\n\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\n\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\n\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\n\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\n\n function inboundPayloadHash(\n address _receiver,\n uint32 _srcEid,\n bytes32 _sender,\n uint64 _nonce\n ) external view returns (bytes32);\n\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingComposer {\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\n event LzComposeAlert(\n address indexed from,\n address indexed to,\n address indexed executor,\n bytes32 guid,\n uint16 index,\n uint256 gas,\n uint256 value,\n bytes message,\n bytes extraData,\n bytes reason\n );\n\n function composeQueue(\n address _from,\n address _to,\n bytes32 _guid,\n uint16 _index\n ) external view returns (bytes32 messageHash);\n\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\n\n function lzCompose(\n address _from,\n address _to,\n bytes32 _guid,\n uint16 _index,\n bytes calldata _message,\n bytes calldata _extraData\n ) external payable;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingContext {\n function isSendingMessage() external view returns (bool);\n\n function getSendContext() external view returns (uint32 dstEid, address sender);\n}\n" + }, + "@openzeppelin/contracts/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {Context} from \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n /**\n * @dev The caller account is not authorized to perform an operation.\n */\n error OwnableUnauthorizedAccount(address account);\n\n /**\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\n */\n error OwnableInvalidOwner(address owner);\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n */\n constructor(address initialOwner) {\n if (initialOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n if (owner() != _msgSender()) {\n revert OwnableUnauthorizedAccount(_msgSender());\n }\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby disabling any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n if (newOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "@openzeppelin/contracts/interfaces/IERC1363.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC165} from \"./IERC165.sol\";\n\n/**\n * @title IERC1363\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\n *\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\n */\ninterface IERC1363 is IERC20, IERC165 {\n /*\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\n * 0xb0202a11 ===\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\n */\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @param data Additional data with no specified format, sent in call to `spender`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\n}\n" + }, + "@openzeppelin/contracts/interfaces/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"../utils/introspection/IERC165.sol\";\n" + }, + "@openzeppelin/contracts/interfaces/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\n" + }, + "@openzeppelin/contracts/token/ERC20/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-20 standard as defined in the ERC.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the value of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the value of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\n * allowance mechanism. `value` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n" + }, + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\nimport {IERC1363} from \"../../../interfaces/IERC1363.sol\";\nimport {Address} from \"../../../utils/Address.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n /**\n * @dev An operation with an ERC-20 token failed.\n */\n error SafeERC20FailedOperation(address token);\n\n /**\n * @dev Indicates a failed `decreaseAllowance` request.\n */\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\n\n /**\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\n }\n\n /**\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\n */\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n }\n\n /**\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n uint256 oldAllowance = token.allowance(address(this), spender);\n forceApprove(token, spender, oldAllowance + value);\n }\n\n /**\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n * value, non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\n unchecked {\n uint256 currentAllowance = token.allowance(address(this), spender);\n if (currentAllowance < requestedDecrease) {\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\n }\n forceApprove(token, spender, currentAllowance - requestedDecrease);\n }\n }\n\n /**\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n * to be set to zero before setting it to a non-zero value, such as USDT.\n *\n * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\n * only sets the \"standard\" allowance. Any temporary allowance will remain active, in addition to the value being\n * set here.\n */\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\n\n if (!_callOptionalReturnBool(token, approvalCall)) {\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\n _callOptionalReturn(token, approvalCall);\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n safeTransfer(token, to, value);\n } else if (!token.transferAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\n * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferFromAndCallRelaxed(\n IERC1363 token,\n address from,\n address to,\n uint256 value,\n bytes memory data\n ) internal {\n if (to.code.length == 0) {\n safeTransferFrom(token, from, to, value);\n } else if (!token.transferFromAndCall(from, to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\n * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\n * once without retrying, and relies on the returned value to be true.\n *\n * Reverts if the returned value is other than `true`.\n */\n function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n forceApprove(token, to, value);\n } else if (!token.approveAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\n */\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n // bubble errors\n if iszero(success) {\n let ptr := mload(0x40)\n returndatacopy(ptr, 0, returndatasize())\n revert(ptr, returndatasize())\n }\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n\n if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\n */\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\n bool success;\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\nimport {Errors} from \"./Errors.sol\";\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev There's no code at `target` (it is not a contract).\n */\n error AddressEmptyCode(address target);\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n if (address(this).balance < amount) {\n revert Errors.InsufficientBalance(address(this).balance, amount);\n }\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n if (!success) {\n revert Errors.FailedCall();\n }\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason or custom error, it is bubbled\n * up by this function (like regular Solidity function calls). However, if\n * the call reverted with no returned reason, this function reverts with a\n * {Errors.FailedCall} error.\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n if (address(this).balance < value) {\n revert Errors.InsufficientBalance(address(this).balance, value);\n }\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\n * of an unsuccessful call.\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata\n ) internal view returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n // only check if target is a contract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n if (returndata.length == 0 && target.code.length == 0) {\n revert AddressEmptyCode(target);\n }\n return returndata;\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n * revert reason or with a default {Errors.FailedCall} error.\n */\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n return returndata;\n }\n }\n\n /**\n * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\n */\n function _revert(bytes memory returndata) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n assembly (\"memory-safe\") {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert Errors.FailedCall();\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n function _contextSuffixLength() internal view virtual returns (uint256) {\n return 0;\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Errors.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of common custom errors used in multiple contracts\n *\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\n * It is recommended to avoid relying on the error API for critical functionality.\n *\n * _Available since v5.1._\n */\nlibrary Errors {\n /**\n * @dev The ETH balance of the account is not enough to perform the operation.\n */\n error InsufficientBalance(uint256 balance, uint256 needed);\n\n /**\n * @dev A call to an address target failed. The target may have reverted.\n */\n error FailedCall();\n\n /**\n * @dev The deployment failed.\n */\n error FailedDeployment();\n\n /**\n * @dev A necessary precompile is missing.\n */\n error MissingPrecompile(address);\n}\n" + }, + "@openzeppelin/contracts/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "contracts/TestingOApp.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.22;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { OApp, MessagingFee, Origin } from \"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol\";\nimport { MessagingReceipt } from \"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol\";\n\ncontract TestingOApp is OApp {\n constructor(address _endpoint, address _delegate) OApp(_endpoint, _delegate) Ownable(_delegate) {}\n\n string public data = \"Nothing received yet.\";\n\n /**\n * @notice Sends a message from the source chain to a destination chain.\n * @param _dstEid The endpoint ID of the destination chain.\n * @param _message The message string to be sent.\n * @param _options Additional options for message execution.\n * @dev Encodes the message as bytes and sends it using the `_lzSend` internal function.\n * @return receipt A `MessagingReceipt` struct containing details of the message sent.\n */\n function send(\n uint32 _dstEid,\n string memory _message,\n bytes calldata _options\n ) external payable returns (MessagingReceipt memory receipt) {\n bytes memory _payload = abi.encode(_message);\n receipt = _lzSend(_dstEid, _payload, _options, MessagingFee(msg.value, 0), payable(msg.sender));\n }\n\n /**\n * @notice Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token.\n * @param _dstEid Destination chain's endpoint ID.\n * @param _message The message.\n * @param _options Message execution options (e.g., for sending gas to destination).\n * @param _payInLzToken Whether to return fee in ZRO token.\n * @return fee A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token.\n */\n function quote(\n uint32 _dstEid,\n string memory _message,\n bytes memory _options,\n bool _payInLzToken\n ) public view returns (MessagingFee memory fee) {\n bytes memory payload = abi.encode(_message);\n fee = _quote(_dstEid, payload, _options, _payInLzToken);\n }\n\n /**\n * @dev Internal function override to handle incoming messages from another chain.\n * @dev _origin A struct containing information about the message sender.\n * @dev _guid A unique global packet identifier for the message.\n * @param payload The encoded message payload being received.\n *\n * @dev The following params are unused in the current implementation of the OApp.\n * @dev _executor The address of the Executor responsible for processing the message.\n * @dev _extraData Arbitrary data appended by the Executor to the message.\n *\n * Decodes the received payload and processes it as per the business logic defined in the function.\n */\n function _lzReceive(\n Origin calldata /*_origin*/,\n bytes32 /*_guid*/,\n bytes calldata payload,\n address /*_executor*/,\n bytes calldata /*_extraData*/\n ) internal override {\n data = abi.decode(payload, (string));\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "evmVersion": "paris", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/tests/e2e/testing_oapp/deployments/arbitrum-sepolia/solcInputs/d37a9b3218ba71b4f94ab0769ed50067.json b/tests/e2e/testing_oapp/deployments/arbitrum-sepolia/solcInputs/d37a9b3218ba71b4f94ab0769ed50067.json new file mode 100644 index 00000000..588779fa --- /dev/null +++ b/tests/e2e/testing_oapp/deployments/arbitrum-sepolia/solcInputs/d37a9b3218ba71b4f94ab0769ed50067.json @@ -0,0 +1,102 @@ +{ + "language": "Solidity", + "sources": { + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppCore.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { ILayerZeroEndpointV2 } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\";\n\n/**\n * @title IOAppCore\n */\ninterface IOAppCore {\n // Custom error messages\n error OnlyPeer(uint32 eid, bytes32 sender);\n error NoPeer(uint32 eid);\n error InvalidEndpointCall();\n error InvalidDelegate();\n\n // Event emitted when a peer (OApp) is set for a corresponding endpoint\n event PeerSet(uint32 eid, bytes32 peer);\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n */\n function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);\n\n /**\n * @notice Retrieves the LayerZero endpoint associated with the OApp.\n * @return iEndpoint The LayerZero endpoint as an interface.\n */\n function endpoint() external view returns (ILayerZeroEndpointV2 iEndpoint);\n\n /**\n * @notice Retrieves the peer (OApp) associated with a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @return peer The peer address (OApp instance) associated with the corresponding endpoint.\n */\n function peers(uint32 _eid) external view returns (bytes32 peer);\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n */\n function setPeer(uint32 _eid, bytes32 _peer) external;\n\n /**\n * @notice Sets the delegate address for the OApp Core.\n * @param _delegate The address of the delegate to be set.\n */\n function setDelegate(address _delegate) external;\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.20;\n\nimport { ILayerZeroReceiver, Origin } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\";\n\ninterface IOAppReceiver is ILayerZeroReceiver {\n /**\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\n * @param _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @param _message The lzReceive payload.\n * @param _sender The sender address.\n * @return isSender Is a valid sender.\n *\n * @dev Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.\n * @dev The default sender IS the OAppReceiver implementer.\n */\n function isComposeMsgSender(\n Origin calldata _origin,\n bytes calldata _message,\n address _sender\n ) external view returns (bool isSender);\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\n// @dev Import the 'MessagingFee' and 'MessagingReceipt' so it's exposed to OApp implementers\n// solhint-disable-next-line no-unused-import\nimport { OAppSender, MessagingFee, MessagingReceipt } from \"./OAppSender.sol\";\n// @dev Import the 'Origin' so it's exposed to OApp implementers\n// solhint-disable-next-line no-unused-import\nimport { OAppReceiver, Origin } from \"./OAppReceiver.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OApp\n * @dev Abstract contract serving as the base for OApp implementation, combining OAppSender and OAppReceiver functionality.\n */\nabstract contract OApp is OAppSender, OAppReceiver {\n /**\n * @dev Constructor to initialize the OApp with the provided endpoint and owner.\n * @param _endpoint The address of the LOCAL LayerZero endpoint.\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\n */\n constructor(address _endpoint, address _delegate) OAppCore(_endpoint, _delegate) {}\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol implementation.\n * @return receiverVersion The version of the OAppReceiver.sol implementation.\n */\n function oAppVersion()\n public\n pure\n virtual\n override(OAppSender, OAppReceiver)\n returns (uint64 senderVersion, uint64 receiverVersion)\n {\n return (SENDER_VERSION, RECEIVER_VERSION);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppCore.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { IOAppCore, ILayerZeroEndpointV2 } from \"./interfaces/IOAppCore.sol\";\n\n/**\n * @title OAppCore\n * @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations.\n */\nabstract contract OAppCore is IOAppCore, Ownable {\n // The LayerZero endpoint associated with the given OApp\n ILayerZeroEndpointV2 public immutable endpoint;\n\n // Mapping to store peers associated with corresponding endpoints\n mapping(uint32 eid => bytes32 peer) public peers;\n\n /**\n * @dev Constructor to initialize the OAppCore with the provided endpoint and delegate.\n * @param _endpoint The address of the LOCAL Layer Zero endpoint.\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\n *\n * @dev The delegate typically should be set as the owner of the contract.\n */\n constructor(address _endpoint, address _delegate) {\n endpoint = ILayerZeroEndpointV2(_endpoint);\n\n if (_delegate == address(0)) revert InvalidDelegate();\n endpoint.setDelegate(_delegate);\n }\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n *\n * @dev Only the owner/admin of the OApp can call this function.\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\n * @dev Set this to bytes32(0) to remove the peer address.\n * @dev Peer is a bytes32 to accommodate non-evm chains.\n */\n function setPeer(uint32 _eid, bytes32 _peer) public virtual onlyOwner {\n _setPeer(_eid, _peer);\n }\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n *\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\n * @dev Set this to bytes32(0) to remove the peer address.\n * @dev Peer is a bytes32 to accommodate non-evm chains.\n */\n function _setPeer(uint32 _eid, bytes32 _peer) internal virtual {\n peers[_eid] = _peer;\n emit PeerSet(_eid, _peer);\n }\n\n /**\n * @notice Internal function to get the peer address associated with a specific endpoint; reverts if NOT set.\n * ie. the peer is set to bytes32(0).\n * @param _eid The endpoint ID.\n * @return peer The address of the peer associated with the specified endpoint.\n */\n function _getPeerOrRevert(uint32 _eid) internal view virtual returns (bytes32) {\n bytes32 peer = peers[_eid];\n if (peer == bytes32(0)) revert NoPeer(_eid);\n return peer;\n }\n\n /**\n * @notice Sets the delegate address for the OApp.\n * @param _delegate The address of the delegate to be set.\n *\n * @dev Only the owner/admin of the OApp can call this function.\n * @dev Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\n */\n function setDelegate(address _delegate) public onlyOwner {\n endpoint.setDelegate(_delegate);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { IOAppReceiver, Origin } from \"./interfaces/IOAppReceiver.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OAppReceiver\n * @dev Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers.\n */\nabstract contract OAppReceiver is IOAppReceiver, OAppCore {\n // Custom error message for when the caller is not the registered endpoint/\n error OnlyEndpoint(address addr);\n\n // @dev The version of the OAppReceiver implementation.\n // @dev Version is bumped when changes are made to this contract.\n uint64 internal constant RECEIVER_VERSION = 2;\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n *\n * @dev Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented.\n * ie. this is a RECEIVE only OApp.\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions.\n */\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\n return (0, RECEIVER_VERSION);\n }\n\n /**\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\n * @dev _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @dev _message The lzReceive payload.\n * @param _sender The sender address.\n * @return isSender Is a valid sender.\n *\n * @dev Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.\n * @dev The default sender IS the OAppReceiver implementer.\n */\n function isComposeMsgSender(\n Origin calldata /*_origin*/,\n bytes calldata /*_message*/,\n address _sender\n ) public view virtual returns (bool) {\n return _sender == address(this);\n }\n\n /**\n * @notice Checks if the path initialization is allowed based on the provided origin.\n * @param origin The origin information containing the source endpoint and sender address.\n * @return Whether the path has been initialized.\n *\n * @dev This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.\n * @dev This defaults to assuming if a peer has been set, its initialized.\n * Can be overridden by the OApp if there is other logic to determine this.\n */\n function allowInitializePath(Origin calldata origin) public view virtual returns (bool) {\n return peers[origin.srcEid] == origin.sender;\n }\n\n /**\n * @notice Retrieves the next nonce for a given source endpoint and sender address.\n * @dev _srcEid The source endpoint ID.\n * @dev _sender The sender address.\n * @return nonce The next nonce.\n *\n * @dev The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.\n * @dev Is required by the off-chain executor to determine the OApp expects msg execution is ordered.\n * @dev This is also enforced by the OApp.\n * @dev By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\n */\n function nextNonce(uint32 /*_srcEid*/, bytes32 /*_sender*/) public view virtual returns (uint64 nonce) {\n return 0;\n }\n\n /**\n * @dev Entry point for receiving messages or packets from the endpoint.\n * @param _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @param _guid The unique identifier for the received LayerZero message.\n * @param _message The payload of the received message.\n * @param _executor The address of the executor for the received message.\n * @param _extraData Additional arbitrary data provided by the corresponding executor.\n *\n * @dev Entry point for receiving msg/packet from the LayerZero endpoint.\n */\n function lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) public payable virtual {\n // Ensures that only the endpoint can attempt to lzReceive() messages to this OApp.\n if (address(endpoint) != msg.sender) revert OnlyEndpoint(msg.sender);\n\n // Ensure that the sender matches the expected peer for the source endpoint.\n if (_getPeerOrRevert(_origin.srcEid) != _origin.sender) revert OnlyPeer(_origin.srcEid, _origin.sender);\n\n // Call the internal OApp implementation of lzReceive.\n _lzReceive(_origin, _guid, _message, _executor, _extraData);\n }\n\n /**\n * @dev Internal function to implement lzReceive logic without needing to copy the basic parameter validation.\n */\n function _lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) internal virtual;\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { SafeERC20, IERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { MessagingParams, MessagingFee, MessagingReceipt } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OAppSender\n * @dev Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.\n */\nabstract contract OAppSender is OAppCore {\n using SafeERC20 for IERC20;\n\n // Custom error messages\n error NotEnoughNative(uint256 msgValue);\n error LzTokenUnavailable();\n\n // @dev The version of the OAppSender implementation.\n // @dev Version is bumped when changes are made to this contract.\n uint64 internal constant SENDER_VERSION = 1;\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n *\n * @dev Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented.\n * ie. this is a SEND only OApp.\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions\n */\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\n return (SENDER_VERSION, 0);\n }\n\n /**\n * @dev Internal function to interact with the LayerZero EndpointV2.quote() for fee calculation.\n * @param _dstEid The destination endpoint ID.\n * @param _message The message payload.\n * @param _options Additional options for the message.\n * @param _payInLzToken Flag indicating whether to pay the fee in LZ tokens.\n * @return fee The calculated MessagingFee for the message.\n * - nativeFee: The native fee for the message.\n * - lzTokenFee: The LZ token fee for the message.\n */\n function _quote(\n uint32 _dstEid,\n bytes memory _message,\n bytes memory _options,\n bool _payInLzToken\n ) internal view virtual returns (MessagingFee memory fee) {\n return\n endpoint.quote(\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _payInLzToken),\n address(this)\n );\n }\n\n /**\n * @dev Internal function to interact with the LayerZero EndpointV2.send() for sending a message.\n * @param _dstEid The destination endpoint ID.\n * @param _message The message payload.\n * @param _options Additional options for the message.\n * @param _fee The calculated LayerZero fee for the message.\n * - nativeFee: The native fee.\n * - lzTokenFee: The lzToken fee.\n * @param _refundAddress The address to receive any excess fee values sent to the endpoint.\n * @return receipt The receipt for the sent message.\n * - guid: The unique identifier for the sent message.\n * - nonce: The nonce of the sent message.\n * - fee: The LayerZero fee incurred for the message.\n */\n function _lzSend(\n uint32 _dstEid,\n bytes memory _message,\n bytes memory _options,\n MessagingFee memory _fee,\n address _refundAddress\n ) internal virtual returns (MessagingReceipt memory receipt) {\n // @dev Push corresponding fees to the endpoint, any excess is sent back to the _refundAddress from the endpoint.\n uint256 messageValue = _payNative(_fee.nativeFee);\n if (_fee.lzTokenFee > 0) _payLzToken(_fee.lzTokenFee);\n\n return\n // solhint-disable-next-line check-send-result\n endpoint.send{ value: messageValue }(\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _fee.lzTokenFee > 0),\n _refundAddress\n );\n }\n\n /**\n * @dev Internal function to pay the native fee associated with the message.\n * @param _nativeFee The native fee to be paid.\n * @return nativeFee The amount of native currency paid.\n *\n * @dev If the OApp needs to initiate MULTIPLE LayerZero messages in a single transaction,\n * this will need to be overridden because msg.value would contain multiple lzFees.\n * @dev Should be overridden in the event the LayerZero endpoint requires a different native currency.\n * @dev Some EVMs use an ERC20 as a method for paying transactions/gasFees.\n * @dev The endpoint is EITHER/OR, ie. it will NOT support both types of native payment at a time.\n */\n function _payNative(uint256 _nativeFee) internal virtual returns (uint256 nativeFee) {\n if (msg.value != _nativeFee) revert NotEnoughNative(msg.value);\n return _nativeFee;\n }\n\n /**\n * @dev Internal function to pay the LZ token fee associated with the message.\n * @param _lzTokenFee The LZ token fee to be paid.\n *\n * @dev If the caller is trying to pay in the specified lzToken, then the lzTokenFee is passed to the endpoint.\n * @dev Any excess sent, is passed back to the specified _refundAddress in the _lzSend().\n */\n function _payLzToken(uint256 _lzTokenFee) internal virtual {\n // @dev Cannot cache the token because it is not immutable in the endpoint.\n address lzToken = endpoint.lzToken();\n if (lzToken == address(0)) revert LzTokenUnavailable();\n\n // Pay LZ token fee by sending tokens to the endpoint.\n IERC20(lzToken).safeTransferFrom(msg.sender, address(endpoint), _lzTokenFee);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nimport { IMessageLibManager } from \"./IMessageLibManager.sol\";\nimport { IMessagingComposer } from \"./IMessagingComposer.sol\";\nimport { IMessagingChannel } from \"./IMessagingChannel.sol\";\nimport { IMessagingContext } from \"./IMessagingContext.sol\";\n\nstruct MessagingParams {\n uint32 dstEid;\n bytes32 receiver;\n bytes message;\n bytes options;\n bool payInLzToken;\n}\n\nstruct MessagingReceipt {\n bytes32 guid;\n uint64 nonce;\n MessagingFee fee;\n}\n\nstruct MessagingFee {\n uint256 nativeFee;\n uint256 lzTokenFee;\n}\n\nstruct Origin {\n uint32 srcEid;\n bytes32 sender;\n uint64 nonce;\n}\n\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\n\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\n\n event PacketDelivered(Origin origin, address receiver);\n\n event LzReceiveAlert(\n address indexed receiver,\n address indexed executor,\n Origin origin,\n bytes32 guid,\n uint256 gas,\n uint256 value,\n bytes message,\n bytes extraData,\n bytes reason\n );\n\n event LzTokenSet(address token);\n\n event DelegateSet(address sender, address delegate);\n\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\n\n function send(\n MessagingParams calldata _params,\n address _refundAddress\n ) external payable returns (MessagingReceipt memory);\n\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\n\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\n\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\n\n function lzReceive(\n Origin calldata _origin,\n address _receiver,\n bytes32 _guid,\n bytes calldata _message,\n bytes calldata _extraData\n ) external payable;\n\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\n\n function setLzToken(address _lzToken) external;\n\n function lzToken() external view returns (address);\n\n function nativeToken() external view returns (address);\n\n function setDelegate(address _delegate) external;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nimport { Origin } from \"./ILayerZeroEndpointV2.sol\";\n\ninterface ILayerZeroReceiver {\n function allowInitializePath(Origin calldata _origin) external view returns (bool);\n\n function nextNonce(uint32 _eid, bytes32 _sender) external view returns (uint64);\n\n function lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) external payable;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nstruct SetConfigParam {\n uint32 eid;\n uint32 configType;\n bytes config;\n}\n\ninterface IMessageLibManager {\n struct Timeout {\n address lib;\n uint256 expiry;\n }\n\n event LibraryRegistered(address newLib);\n event DefaultSendLibrarySet(uint32 eid, address newLib);\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\n event SendLibrarySet(address sender, uint32 eid, address newLib);\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\n\n function registerLibrary(address _lib) external;\n\n function isRegisteredLibrary(address _lib) external view returns (bool);\n\n function getRegisteredLibraries() external view returns (address[] memory);\n\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\n\n function defaultSendLibrary(uint32 _eid) external view returns (address);\n\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\n\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\n\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\n\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\n\n function isSupportedEid(uint32 _eid) external view returns (bool);\n\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\n\n /// ------------------- OApp interfaces -------------------\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\n\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\n\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\n\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\n\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\n\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\n\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\n\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\n\n function getConfig(\n address _oapp,\n address _lib,\n uint32 _eid,\n uint32 _configType\n ) external view returns (bytes memory config);\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingChannel {\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\n\n function eid() external view returns (uint32);\n\n // this is an emergency function if a message cannot be verified for some reasons\n // required to provide _nextNonce to avoid race condition\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\n\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\n\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\n\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\n\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\n\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\n\n function inboundPayloadHash(\n address _receiver,\n uint32 _srcEid,\n bytes32 _sender,\n uint64 _nonce\n ) external view returns (bytes32);\n\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingComposer {\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\n event LzComposeAlert(\n address indexed from,\n address indexed to,\n address indexed executor,\n bytes32 guid,\n uint16 index,\n uint256 gas,\n uint256 value,\n bytes message,\n bytes extraData,\n bytes reason\n );\n\n function composeQueue(\n address _from,\n address _to,\n bytes32 _guid,\n uint16 _index\n ) external view returns (bytes32 messageHash);\n\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\n\n function lzCompose(\n address _from,\n address _to,\n bytes32 _guid,\n uint16 _index,\n bytes calldata _message,\n bytes calldata _extraData\n ) external payable;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingContext {\n function isSendingMessage() external view returns (bool);\n\n function getSendContext() external view returns (uint32 dstEid, address sender);\n}\n" + }, + "@openzeppelin/contracts/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {Context} from \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n /**\n * @dev The caller account is not authorized to perform an operation.\n */\n error OwnableUnauthorizedAccount(address account);\n\n /**\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\n */\n error OwnableInvalidOwner(address owner);\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n */\n constructor(address initialOwner) {\n if (initialOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n if (owner() != _msgSender()) {\n revert OwnableUnauthorizedAccount(_msgSender());\n }\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby disabling any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n if (newOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "@openzeppelin/contracts/interfaces/IERC1363.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC165} from \"./IERC165.sol\";\n\n/**\n * @title IERC1363\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\n *\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\n */\ninterface IERC1363 is IERC20, IERC165 {\n /*\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\n * 0xb0202a11 ===\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\n */\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @param data Additional data with no specified format, sent in call to `spender`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\n}\n" + }, + "@openzeppelin/contracts/interfaces/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"../utils/introspection/IERC165.sol\";\n" + }, + "@openzeppelin/contracts/interfaces/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\n" + }, + "@openzeppelin/contracts/token/ERC20/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-20 standard as defined in the ERC.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the value of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the value of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\n * allowance mechanism. `value` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n" + }, + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\nimport {IERC1363} from \"../../../interfaces/IERC1363.sol\";\nimport {Address} from \"../../../utils/Address.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n /**\n * @dev An operation with an ERC-20 token failed.\n */\n error SafeERC20FailedOperation(address token);\n\n /**\n * @dev Indicates a failed `decreaseAllowance` request.\n */\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\n\n /**\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\n }\n\n /**\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\n */\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n }\n\n /**\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n uint256 oldAllowance = token.allowance(address(this), spender);\n forceApprove(token, spender, oldAllowance + value);\n }\n\n /**\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n * value, non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\n unchecked {\n uint256 currentAllowance = token.allowance(address(this), spender);\n if (currentAllowance < requestedDecrease) {\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\n }\n forceApprove(token, spender, currentAllowance - requestedDecrease);\n }\n }\n\n /**\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n * to be set to zero before setting it to a non-zero value, such as USDT.\n *\n * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\n * only sets the \"standard\" allowance. Any temporary allowance will remain active, in addition to the value being\n * set here.\n */\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\n\n if (!_callOptionalReturnBool(token, approvalCall)) {\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\n _callOptionalReturn(token, approvalCall);\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n safeTransfer(token, to, value);\n } else if (!token.transferAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\n * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferFromAndCallRelaxed(\n IERC1363 token,\n address from,\n address to,\n uint256 value,\n bytes memory data\n ) internal {\n if (to.code.length == 0) {\n safeTransferFrom(token, from, to, value);\n } else if (!token.transferFromAndCall(from, to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\n * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\n * once without retrying, and relies on the returned value to be true.\n *\n * Reverts if the returned value is other than `true`.\n */\n function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n forceApprove(token, to, value);\n } else if (!token.approveAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\n */\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n // bubble errors\n if iszero(success) {\n let ptr := mload(0x40)\n returndatacopy(ptr, 0, returndatasize())\n revert(ptr, returndatasize())\n }\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n\n if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\n */\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\n bool success;\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\nimport {Errors} from \"./Errors.sol\";\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev There's no code at `target` (it is not a contract).\n */\n error AddressEmptyCode(address target);\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n if (address(this).balance < amount) {\n revert Errors.InsufficientBalance(address(this).balance, amount);\n }\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n if (!success) {\n revert Errors.FailedCall();\n }\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason or custom error, it is bubbled\n * up by this function (like regular Solidity function calls). However, if\n * the call reverted with no returned reason, this function reverts with a\n * {Errors.FailedCall} error.\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n if (address(this).balance < value) {\n revert Errors.InsufficientBalance(address(this).balance, value);\n }\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\n * of an unsuccessful call.\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata\n ) internal view returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n // only check if target is a contract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n if (returndata.length == 0 && target.code.length == 0) {\n revert AddressEmptyCode(target);\n }\n return returndata;\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n * revert reason or with a default {Errors.FailedCall} error.\n */\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n return returndata;\n }\n }\n\n /**\n * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\n */\n function _revert(bytes memory returndata) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n assembly (\"memory-safe\") {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert Errors.FailedCall();\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n function _contextSuffixLength() internal view virtual returns (uint256) {\n return 0;\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Errors.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of common custom errors used in multiple contracts\n *\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\n * It is recommended to avoid relying on the error API for critical functionality.\n *\n * _Available since v5.1._\n */\nlibrary Errors {\n /**\n * @dev The ETH balance of the account is not enough to perform the operation.\n */\n error InsufficientBalance(uint256 balance, uint256 needed);\n\n /**\n * @dev A call to an address target failed. The target may have reverted.\n */\n error FailedCall();\n\n /**\n * @dev The deployment failed.\n */\n error FailedDeployment();\n\n /**\n * @dev A necessary precompile is missing.\n */\n error MissingPrecompile(address);\n}\n" + }, + "@openzeppelin/contracts/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "contracts/SimpleTestingOApp.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.22;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { OApp, MessagingFee, Origin } from \"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol\";\nimport { MessagingReceipt } from \"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol\";\n\ncontract SimpleTestingOApp is OApp {\n constructor(address _endpoint, address _delegate) OApp(_endpoint, _delegate) Ownable(_delegate) {}\n\n uint public data = 0;\n\n /**\n * @notice Sends a message from the source chain to a destination chain.\n * @param _dstEid The endpoint ID of the destination chain.\n * @param _message The message string to be sent.\n * @param _options Additional options for message execution.\n * @dev Encodes the message as bytes and sends it using the `_lzSend` internal function.\n * @return receipt A `MessagingReceipt` struct containing details of the message sent.\n */\n function send(\n uint32 _dstEid,\n string memory _message,\n bytes calldata _options\n ) external payable returns (MessagingReceipt memory receipt) {\n bytes memory _payload = abi.encode(_message);\n receipt = _lzSend(_dstEid, _payload, _options, MessagingFee(msg.value, 0), payable(msg.sender));\n }\n\n /**\n * @notice Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token.\n * @param _dstEid Destination chain's endpoint ID.\n * @param _message The message.\n * @param _options Message execution options (e.g., for sending gas to destination).\n * @param _payInLzToken Whether to return fee in ZRO token.\n * @return fee A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token.\n */\n function quote(\n uint32 _dstEid,\n string memory _message,\n bytes memory _options,\n bool _payInLzToken\n ) public view returns (MessagingFee memory fee) {\n bytes memory payload = abi.encode(_message);\n fee = _quote(_dstEid, payload, _options, _payInLzToken);\n }\n\n /**\n * @dev Internal function override to handle incoming messages from another chain.\n * @dev _origin A struct containing information about the message sender.\n * @dev _guid A unique global packet identifier for the message.\n * @param payload The encoded message payload being received.\n *\n * @dev The following params are unused in the current implementation of the OApp.\n * @dev _executor The address of the Executor responsible for processing the message.\n * @dev _extraData Arbitrary data appended by the Executor to the message.\n *\n * Decodes the received payload and processes it as per the business logic defined in the function.\n */\n function _lzReceive(\n Origin calldata /*_origin*/,\n bytes32 /*_guid*/,\n bytes calldata payload,\n address /*_executor*/,\n bytes calldata /*_extraData*/\n ) internal override {\n data = abi.decode(payload, (uint));\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "evmVersion": "paris", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/tests/e2e/testing_oapp/deployments/holesky/.chainId b/tests/e2e/testing_oapp/deployments/holesky/.chainId new file mode 100644 index 00000000..029d1a32 --- /dev/null +++ b/tests/e2e/testing_oapp/deployments/holesky/.chainId @@ -0,0 +1 @@ +17000 \ No newline at end of file diff --git a/tests/e2e/testing_oapp/deployments/holesky/SimpleTestingOApp.json b/tests/e2e/testing_oapp/deployments/holesky/SimpleTestingOApp.json new file mode 100644 index 00000000..4ae29012 --- /dev/null +++ b/tests/e2e/testing_oapp/deployments/holesky/SimpleTestingOApp.json @@ -0,0 +1,795 @@ +{ + "address": "0xF65450a2fC9817e956942b856b8c46139641Ea08", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_endpoint", + "type": "address" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "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" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "SafeERC20FailedOperation", + "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" + }, + { + "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": "data", + "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": [ + { + "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": [ + { + "internalType": "uint32", + "name": "_dstEid", + "type": "uint32" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + }, + { + "internalType": "bytes", + "name": "_options", + "type": "bytes" + }, + { + "internalType": "bool", + "name": "_payInLzToken", + "type": "bool" + } + ], + "name": "quote", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "nativeFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lzTokenFee", + "type": "uint256" + } + ], + "internalType": "struct MessagingFee", + "name": "fee", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_dstEid", + "type": "uint32" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + }, + { + "internalType": "bytes", + "name": "_options", + "type": "bytes" + } + ], + "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": "receipt", + "type": "tuple" + } + ], + "stateMutability": "payable", + "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" + } + ], + "transactionHash": "0xb212ecc59ce61f12235661cfd96d0b2264946748be904477d22560d2dd4f7e69", + "receipt": { + "to": null, + "from": "0x96E341c7E7537333AFa153d196038C6D086d5d2b", + "contractAddress": "0xF65450a2fC9817e956942b856b8c46139641Ea08", + "transactionIndex": 16, + "gasUsed": "1074789", + "logsBloom": "0x00000000000000000000010000000000000000000000000000800000000000000000000000000000200000000000000000004002000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000200000000000800001000000000000000000000000000400000200000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000400000004000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x1e9108cc80a4caf99f3219e3e4dd939f6d4cac1a1752a5f6a5e272a60121229b", + "transactionHash": "0xb212ecc59ce61f12235661cfd96d0b2264946748be904477d22560d2dd4f7e69", + "logs": [ + { + "transactionIndex": 16, + "blockNumber": 2685927, + "transactionHash": "0xb212ecc59ce61f12235661cfd96d0b2264946748be904477d22560d2dd4f7e69", + "address": "0xF65450a2fC9817e956942b856b8c46139641Ea08", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "logIndex": 26, + "blockHash": "0x1e9108cc80a4caf99f3219e3e4dd939f6d4cac1a1752a5f6a5e272a60121229b" + }, + { + "transactionIndex": 16, + "blockNumber": 2685927, + "transactionHash": "0xb212ecc59ce61f12235661cfd96d0b2264946748be904477d22560d2dd4f7e69", + "address": "0x6EDCE65403992e310A62460808c4b910D972f10f", + "topics": [ + "0x6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d7983981" + ], + "data": "0x000000000000000000000000f65450a2fc9817e956942b856b8c46139641ea0800000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "logIndex": 27, + "blockHash": "0x1e9108cc80a4caf99f3219e3e4dd939f6d4cac1a1752a5f6a5e272a60121229b" + } + ], + "blockNumber": 2685927, + "cumulativeGasUsed": "6561956", + "status": 1, + "byzantium": true + }, + "args": [ + "0x6EDCE65403992e310A62460808c4b910D972f10f", + "0x96E341c7E7537333AFa153d196038C6D086d5d2b" + ], + "numDeployments": 1, + "solcInputHash": "d37a9b3218ba71b4f94ab0769ed50067", + "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_endpoint\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"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\"},{\"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\":\"data\",\"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\":[{\"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\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"string\",\"name\":\"_message\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"quote\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"fee\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"string\",\"name\":\"_message\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"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\":\"receipt\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"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\"}],\"devdoc\":{\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"details\":\"This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.\",\"params\":{\"origin\":\"The origin information containing the source endpoint and sender address.\"},\"returns\":{\"_0\":\"Whether the path has been initialized.\"}},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"details\":\"_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.\",\"params\":{\"_sender\":\"The sender address.\"},\"returns\":{\"_0\":\"isSender Is a valid sender.\"}},\"lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.\",\"params\":{\"_executor\":\"The address of the executor for the received message.\",\"_extraData\":\"Additional arbitrary data provided by the corresponding executor.\",\"_guid\":\"The unique identifier for the received LayerZero message.\",\"_message\":\"The payload of the received message.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"nextNonce(uint32,bytes32)\":{\"details\":\"_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\",\"returns\":{\"nonce\":\"The next nonce.\"}},\"oAppVersion()\":{\"returns\":{\"receiverVersion\":\"The version of the OAppReceiver.sol implementation.\",\"senderVersion\":\"The version of the OAppSender.sol implementation.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"quote(uint32,string,bytes,bool)\":{\"params\":{\"_dstEid\":\"Destination chain's endpoint ID.\",\"_message\":\"The message.\",\"_options\":\"Message execution options (e.g., for sending gas to destination).\",\"_payInLzToken\":\"Whether to return fee in ZRO token.\"},\"returns\":{\"fee\":\"A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"send(uint32,string,bytes)\":{\"details\":\"Encodes the message as bytes and sends it using the `_lzSend` internal function.\",\"params\":{\"_dstEid\":\"The endpoint ID of the destination chain.\",\"_message\":\"The message string to be sent.\",\"_options\":\"Additional options for message execution.\"},\"returns\":{\"receipt\":\"A `MessagingReceipt` struct containing details of the message sent.\"}},\"setDelegate(address)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\",\"params\":{\"_delegate\":\"The address of the delegate to be set.\"}},\"setPeer(uint32,bytes32)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_peer\":\"The address of the peer to be associated with the corresponding endpoint.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"notice\":\"Checks if the path initialization is allowed based on the provided origin.\"},\"endpoint()\":{\"notice\":\"Retrieves the LayerZero endpoint associated with the OApp.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"notice\":\"Indicates whether an address is an approved composeMsg sender to the Endpoint.\"},\"nextNonce(uint32,bytes32)\":{\"notice\":\"Retrieves the next nonce for a given source endpoint and sender address.\"},\"oAppVersion()\":{\"notice\":\"Retrieves the OApp version information.\"},\"peers(uint32)\":{\"notice\":\"Retrieves the peer (OApp) associated with a corresponding endpoint.\"},\"quote(uint32,string,bytes,bool)\":{\"notice\":\"Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token.\"},\"send(uint32,string,bytes)\":{\"notice\":\"Sends a message from the source chain to a destination chain.\"},\"setDelegate(address)\":{\"notice\":\"Sets the delegate address for the OApp.\"},\"setPeer(uint32,bytes32)\":{\"notice\":\"Sets the peer address (OApp instance) for a corresponding endpoint.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/SimpleTestingOApp.sol\":\"SimpleTestingOApp\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\n// @dev Import the 'MessagingFee' and 'MessagingReceipt' so it's exposed to OApp implementers\\n// solhint-disable-next-line no-unused-import\\nimport { OAppSender, MessagingFee, MessagingReceipt } from \\\"./OAppSender.sol\\\";\\n// @dev Import the 'Origin' so it's exposed to OApp implementers\\n// solhint-disable-next-line no-unused-import\\nimport { OAppReceiver, Origin } from \\\"./OAppReceiver.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OApp\\n * @dev Abstract contract serving as the base for OApp implementation, combining OAppSender and OAppReceiver functionality.\\n */\\nabstract contract OApp is OAppSender, OAppReceiver {\\n /**\\n * @dev Constructor to initialize the OApp with the provided endpoint and owner.\\n * @param _endpoint The address of the LOCAL LayerZero endpoint.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n */\\n constructor(address _endpoint, address _delegate) OAppCore(_endpoint, _delegate) {}\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol implementation.\\n * @return receiverVersion The version of the OAppReceiver.sol implementation.\\n */\\n function oAppVersion()\\n public\\n pure\\n virtual\\n override(OAppSender, OAppReceiver)\\n returns (uint64 senderVersion, uint64 receiverVersion)\\n {\\n return (SENDER_VERSION, RECEIVER_VERSION);\\n }\\n}\\n\",\"keccak256\":\"0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { IOAppCore, ILayerZeroEndpointV2 } from \\\"./interfaces/IOAppCore.sol\\\";\\n\\n/**\\n * @title OAppCore\\n * @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations.\\n */\\nabstract contract OAppCore is IOAppCore, Ownable {\\n // The LayerZero endpoint associated with the given OApp\\n ILayerZeroEndpointV2 public immutable endpoint;\\n\\n // Mapping to store peers associated with corresponding endpoints\\n mapping(uint32 eid => bytes32 peer) public peers;\\n\\n /**\\n * @dev Constructor to initialize the OAppCore with the provided endpoint and delegate.\\n * @param _endpoint The address of the LOCAL Layer Zero endpoint.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n *\\n * @dev The delegate typically should be set as the owner of the contract.\\n */\\n constructor(address _endpoint, address _delegate) {\\n endpoint = ILayerZeroEndpointV2(_endpoint);\\n\\n if (_delegate == address(0)) revert InvalidDelegate();\\n endpoint.setDelegate(_delegate);\\n }\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\\n * @dev Set this to bytes32(0) to remove the peer address.\\n * @dev Peer is a bytes32 to accommodate non-evm chains.\\n */\\n function setPeer(uint32 _eid, bytes32 _peer) public virtual onlyOwner {\\n _setPeer(_eid, _peer);\\n }\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n *\\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\\n * @dev Set this to bytes32(0) to remove the peer address.\\n * @dev Peer is a bytes32 to accommodate non-evm chains.\\n */\\n function _setPeer(uint32 _eid, bytes32 _peer) internal virtual {\\n peers[_eid] = _peer;\\n emit PeerSet(_eid, _peer);\\n }\\n\\n /**\\n * @notice Internal function to get the peer address associated with a specific endpoint; reverts if NOT set.\\n * ie. the peer is set to bytes32(0).\\n * @param _eid The endpoint ID.\\n * @return peer The address of the peer associated with the specified endpoint.\\n */\\n function _getPeerOrRevert(uint32 _eid) internal view virtual returns (bytes32) {\\n bytes32 peer = peers[_eid];\\n if (peer == bytes32(0)) revert NoPeer(_eid);\\n return peer;\\n }\\n\\n /**\\n * @notice Sets the delegate address for the OApp.\\n * @param _delegate The address of the delegate to be set.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\\n */\\n function setDelegate(address _delegate) public onlyOwner {\\n endpoint.setDelegate(_delegate);\\n }\\n}\\n\",\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { IOAppReceiver, Origin } from \\\"./interfaces/IOAppReceiver.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OAppReceiver\\n * @dev Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers.\\n */\\nabstract contract OAppReceiver is IOAppReceiver, OAppCore {\\n // Custom error message for when the caller is not the registered endpoint/\\n error OnlyEndpoint(address addr);\\n\\n // @dev The version of the OAppReceiver implementation.\\n // @dev Version is bumped when changes are made to this contract.\\n uint64 internal constant RECEIVER_VERSION = 2;\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n *\\n * @dev Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented.\\n * ie. this is a RECEIVE only OApp.\\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions.\\n */\\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\\n return (0, RECEIVER_VERSION);\\n }\\n\\n /**\\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\\n * @dev _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @dev _message The lzReceive payload.\\n * @param _sender The sender address.\\n * @return isSender Is a valid sender.\\n *\\n * @dev Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.\\n * @dev The default sender IS the OAppReceiver implementer.\\n */\\n function isComposeMsgSender(\\n Origin calldata /*_origin*/,\\n bytes calldata /*_message*/,\\n address _sender\\n ) public view virtual returns (bool) {\\n return _sender == address(this);\\n }\\n\\n /**\\n * @notice Checks if the path initialization is allowed based on the provided origin.\\n * @param origin The origin information containing the source endpoint and sender address.\\n * @return Whether the path has been initialized.\\n *\\n * @dev This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.\\n * @dev This defaults to assuming if a peer has been set, its initialized.\\n * Can be overridden by the OApp if there is other logic to determine this.\\n */\\n function allowInitializePath(Origin calldata origin) public view virtual returns (bool) {\\n return peers[origin.srcEid] == origin.sender;\\n }\\n\\n /**\\n * @notice Retrieves the next nonce for a given source endpoint and sender address.\\n * @dev _srcEid The source endpoint ID.\\n * @dev _sender The sender address.\\n * @return nonce The next nonce.\\n *\\n * @dev The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.\\n * @dev Is required by the off-chain executor to determine the OApp expects msg execution is ordered.\\n * @dev This is also enforced by the OApp.\\n * @dev By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\\n */\\n function nextNonce(uint32 /*_srcEid*/, bytes32 /*_sender*/) public view virtual returns (uint64 nonce) {\\n return 0;\\n }\\n\\n /**\\n * @dev Entry point for receiving messages or packets from the endpoint.\\n * @param _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @param _guid The unique identifier for the received LayerZero message.\\n * @param _message The payload of the received message.\\n * @param _executor The address of the executor for the received message.\\n * @param _extraData Additional arbitrary data provided by the corresponding executor.\\n *\\n * @dev Entry point for receiving msg/packet from the LayerZero endpoint.\\n */\\n function lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) public payable virtual {\\n // Ensures that only the endpoint can attempt to lzReceive() messages to this OApp.\\n if (address(endpoint) != msg.sender) revert OnlyEndpoint(msg.sender);\\n\\n // Ensure that the sender matches the expected peer for the source endpoint.\\n if (_getPeerOrRevert(_origin.srcEid) != _origin.sender) revert OnlyPeer(_origin.srcEid, _origin.sender);\\n\\n // Call the internal OApp implementation of lzReceive.\\n _lzReceive(_origin, _guid, _message, _executor, _extraData);\\n }\\n\\n /**\\n * @dev Internal function to implement lzReceive logic without needing to copy the basic parameter validation.\\n */\\n function _lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { SafeERC20, IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport { MessagingParams, MessagingFee, MessagingReceipt } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OAppSender\\n * @dev Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.\\n */\\nabstract contract OAppSender is OAppCore {\\n using SafeERC20 for IERC20;\\n\\n // Custom error messages\\n error NotEnoughNative(uint256 msgValue);\\n error LzTokenUnavailable();\\n\\n // @dev The version of the OAppSender implementation.\\n // @dev Version is bumped when changes are made to this contract.\\n uint64 internal constant SENDER_VERSION = 1;\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n *\\n * @dev Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented.\\n * ie. this is a SEND only OApp.\\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions\\n */\\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\\n return (SENDER_VERSION, 0);\\n }\\n\\n /**\\n * @dev Internal function to interact with the LayerZero EndpointV2.quote() for fee calculation.\\n * @param _dstEid The destination endpoint ID.\\n * @param _message The message payload.\\n * @param _options Additional options for the message.\\n * @param _payInLzToken Flag indicating whether to pay the fee in LZ tokens.\\n * @return fee The calculated MessagingFee for the message.\\n * - nativeFee: The native fee for the message.\\n * - lzTokenFee: The LZ token fee for the message.\\n */\\n function _quote(\\n uint32 _dstEid,\\n bytes memory _message,\\n bytes memory _options,\\n bool _payInLzToken\\n ) internal view virtual returns (MessagingFee memory fee) {\\n return\\n endpoint.quote(\\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _payInLzToken),\\n address(this)\\n );\\n }\\n\\n /**\\n * @dev Internal function to interact with the LayerZero EndpointV2.send() for sending a message.\\n * @param _dstEid The destination endpoint ID.\\n * @param _message The message payload.\\n * @param _options Additional options for the message.\\n * @param _fee The calculated LayerZero fee for the message.\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n * @param _refundAddress The address to receive any excess fee values sent to the endpoint.\\n * @return receipt The receipt for the sent message.\\n * - guid: The unique identifier for the sent message.\\n * - nonce: The nonce of the sent message.\\n * - fee: The LayerZero fee incurred for the message.\\n */\\n function _lzSend(\\n uint32 _dstEid,\\n bytes memory _message,\\n bytes memory _options,\\n MessagingFee memory _fee,\\n address _refundAddress\\n ) internal virtual returns (MessagingReceipt memory receipt) {\\n // @dev Push corresponding fees to the endpoint, any excess is sent back to the _refundAddress from the endpoint.\\n uint256 messageValue = _payNative(_fee.nativeFee);\\n if (_fee.lzTokenFee > 0) _payLzToken(_fee.lzTokenFee);\\n\\n return\\n // solhint-disable-next-line check-send-result\\n endpoint.send{ value: messageValue }(\\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _fee.lzTokenFee > 0),\\n _refundAddress\\n );\\n }\\n\\n /**\\n * @dev Internal function to pay the native fee associated with the message.\\n * @param _nativeFee The native fee to be paid.\\n * @return nativeFee The amount of native currency paid.\\n *\\n * @dev If the OApp needs to initiate MULTIPLE LayerZero messages in a single transaction,\\n * this will need to be overridden because msg.value would contain multiple lzFees.\\n * @dev Should be overridden in the event the LayerZero endpoint requires a different native currency.\\n * @dev Some EVMs use an ERC20 as a method for paying transactions/gasFees.\\n * @dev The endpoint is EITHER/OR, ie. it will NOT support both types of native payment at a time.\\n */\\n function _payNative(uint256 _nativeFee) internal virtual returns (uint256 nativeFee) {\\n if (msg.value != _nativeFee) revert NotEnoughNative(msg.value);\\n return _nativeFee;\\n }\\n\\n /**\\n * @dev Internal function to pay the LZ token fee associated with the message.\\n * @param _lzTokenFee The LZ token fee to be paid.\\n *\\n * @dev If the caller is trying to pay in the specified lzToken, then the lzTokenFee is passed to the endpoint.\\n * @dev Any excess sent, is passed back to the specified _refundAddress in the _lzSend().\\n */\\n function _payLzToken(uint256 _lzTokenFee) internal virtual {\\n // @dev Cannot cache the token because it is not immutable in the endpoint.\\n address lzToken = endpoint.lzToken();\\n if (lzToken == address(0)) revert LzTokenUnavailable();\\n\\n // Pay LZ token fee by sending tokens to the endpoint.\\n IERC20(lzToken).safeTransferFrom(msg.sender, address(endpoint), _lzTokenFee);\\n }\\n}\\n\",\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { ILayerZeroEndpointV2 } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\n\\n/**\\n * @title IOAppCore\\n */\\ninterface IOAppCore {\\n // Custom error messages\\n error OnlyPeer(uint32 eid, bytes32 sender);\\n error NoPeer(uint32 eid);\\n error InvalidEndpointCall();\\n error InvalidDelegate();\\n\\n // Event emitted when a peer (OApp) is set for a corresponding endpoint\\n event PeerSet(uint32 eid, bytes32 peer);\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n */\\n function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);\\n\\n /**\\n * @notice Retrieves the LayerZero endpoint associated with the OApp.\\n * @return iEndpoint The LayerZero endpoint as an interface.\\n */\\n function endpoint() external view returns (ILayerZeroEndpointV2 iEndpoint);\\n\\n /**\\n * @notice Retrieves the peer (OApp) associated with a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @return peer The peer address (OApp instance) associated with the corresponding endpoint.\\n */\\n function peers(uint32 _eid) external view returns (bytes32 peer);\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n */\\n function setPeer(uint32 _eid, bytes32 _peer) external;\\n\\n /**\\n * @notice Sets the delegate address for the OApp Core.\\n * @param _delegate The address of the delegate to be set.\\n */\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.20;\\n\\nimport { ILayerZeroReceiver, Origin } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\\\";\\n\\ninterface IOAppReceiver is ILayerZeroReceiver {\\n /**\\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\\n * @param _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @param _message The lzReceive payload.\\n * @param _sender The sender address.\\n * @return isSender Is a valid sender.\\n *\\n * @dev Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.\\n * @dev The default sender IS the OAppReceiver implementer.\\n */\\n function isComposeMsgSender(\\n Origin calldata _origin,\\n bytes calldata _message,\\n address _sender\\n ) external view returns (bool isSender);\\n}\\n\",\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IMessageLibManager } from \\\"./IMessageLibManager.sol\\\";\\nimport { IMessagingComposer } from \\\"./IMessagingComposer.sol\\\";\\nimport { IMessagingChannel } from \\\"./IMessagingChannel.sol\\\";\\nimport { IMessagingContext } from \\\"./IMessagingContext.sol\\\";\\n\\nstruct MessagingParams {\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes message;\\n bytes options;\\n bool payInLzToken;\\n}\\n\\nstruct MessagingReceipt {\\n bytes32 guid;\\n uint64 nonce;\\n MessagingFee fee;\\n}\\n\\nstruct MessagingFee {\\n uint256 nativeFee;\\n uint256 lzTokenFee;\\n}\\n\\nstruct Origin {\\n uint32 srcEid;\\n bytes32 sender;\\n uint64 nonce;\\n}\\n\\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\\n\\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\\n\\n event PacketDelivered(Origin origin, address receiver);\\n\\n event LzReceiveAlert(\\n address indexed receiver,\\n address indexed executor,\\n Origin origin,\\n bytes32 guid,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n event LzTokenSet(address token);\\n\\n event DelegateSet(address sender, address delegate);\\n\\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\\n\\n function send(\\n MessagingParams calldata _params,\\n address _refundAddress\\n ) external payable returns (MessagingReceipt memory);\\n\\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\\n\\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n address _receiver,\\n bytes32 _guid,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n\\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\\n\\n function setLzToken(address _lzToken) external;\\n\\n function lzToken() external view returns (address);\\n\\n function nativeToken() external view returns (address);\\n\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { Origin } from \\\"./ILayerZeroEndpointV2.sol\\\";\\n\\ninterface ILayerZeroReceiver {\\n function allowInitializePath(Origin calldata _origin) external view returns (bool);\\n\\n function nextNonce(uint32 _eid, bytes32 _sender) external view returns (uint64);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nstruct SetConfigParam {\\n uint32 eid;\\n uint32 configType;\\n bytes config;\\n}\\n\\ninterface IMessageLibManager {\\n struct Timeout {\\n address lib;\\n uint256 expiry;\\n }\\n\\n event LibraryRegistered(address newLib);\\n event DefaultSendLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\\n event SendLibrarySet(address sender, uint32 eid, address newLib);\\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\\n\\n function registerLibrary(address _lib) external;\\n\\n function isRegisteredLibrary(address _lib) external view returns (bool);\\n\\n function getRegisteredLibraries() external view returns (address[] memory);\\n\\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\\n\\n function defaultSendLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\\n\\n /// ------------------- OApp interfaces -------------------\\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\\n\\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\\n\\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\\n\\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\\n\\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\\n\\n function getConfig(\\n address _oapp,\\n address _lib,\\n uint32 _eid,\\n uint32 _configType\\n ) external view returns (bytes memory config);\\n}\\n\",\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingChannel {\\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n\\n function eid() external view returns (uint32);\\n\\n // this is an emergency function if a message cannot be verified for some reasons\\n // required to provide _nextNonce to avoid race condition\\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\\n\\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\\n\\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n\\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\\n\\n function inboundPayloadHash(\\n address _receiver,\\n uint32 _srcEid,\\n bytes32 _sender,\\n uint64 _nonce\\n ) external view returns (bytes32);\\n\\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n}\\n\",\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingComposer {\\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\\n event LzComposeAlert(\\n address indexed from,\\n address indexed to,\\n address indexed executor,\\n bytes32 guid,\\n uint16 index,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n function composeQueue(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index\\n ) external view returns (bytes32 messageHash);\\n\\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\\n\\n function lzCompose(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingContext {\\n function isSendingMessage() external view returns (bool);\\n\\n function getSendContext() external view returns (uint32 dstEid, address sender);\\n}\\n\",\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Context} from \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * The initial owner is set to the address provided by the deployer. This can\\n * later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n /**\\n * @dev The caller account is not authorized to perform an operation.\\n */\\n error OwnableUnauthorizedAccount(address account);\\n\\n /**\\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\\n */\\n error OwnableInvalidOwner(address owner);\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\\n */\\n constructor(address initialOwner) {\\n if (initialOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n if (owner() != _msgSender()) {\\n revert OwnableUnauthorizedAccount(_msgSender());\\n }\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby disabling any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n if (newOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"./IERC20.sol\\\";\\nimport {IERC165} from \\\"./IERC165.sol\\\";\\n\\n/**\\n * @title IERC1363\\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\\n *\\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\\n */\\ninterface IERC1363 is IERC20, IERC165 {\\n /*\\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\\n * 0xb0202a11 ===\\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\\n */\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferAndCall(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @param data Additional data with no specified format, sent in call to `to`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param from The address which you want to send tokens from.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param from The address which you want to send tokens from.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @param data Additional data with no specified format, sent in call to `to`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\\n * @param spender The address which will spend the funds.\\n * @param value The amount of tokens to be spent.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function approveAndCall(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\\n * @param spender The address which will spend the funds.\\n * @param value The amount of tokens to be spent.\\n * @param data Additional data with no specified format, sent in call to `spender`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC165} from \\\"../utils/introspection/IERC165.sol\\\";\\n\",\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../token/ERC20/IERC20.sol\\\";\\n\",\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../IERC20.sol\\\";\\nimport {IERC1363} from \\\"../../../interfaces/IERC1363.sol\\\";\\nimport {Address} from \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n /**\\n * @dev An operation with an ERC-20 token failed.\\n */\\n error SafeERC20FailedOperation(address token);\\n\\n /**\\n * @dev Indicates a failed `decreaseAllowance` request.\\n */\\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\\n\\n /**\\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful.\\n */\\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\\n }\\n\\n /**\\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\\n */\\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\\n }\\n\\n /**\\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful.\\n *\\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \\\"client\\\"\\n * smart contract uses ERC-7674 to set temporary allowances, then the \\\"client\\\" smart contract should avoid using\\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\\n */\\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n forceApprove(token, spender, oldAllowance + value);\\n }\\n\\n /**\\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\\n * value, non-reverting calls are assumed to be successful.\\n *\\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \\\"client\\\"\\n * smart contract uses ERC-7674 to set temporary allowances, then the \\\"client\\\" smart contract should avoid using\\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\\n */\\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\\n unchecked {\\n uint256 currentAllowance = token.allowance(address(this), spender);\\n if (currentAllowance < requestedDecrease) {\\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\\n }\\n forceApprove(token, spender, currentAllowance - requestedDecrease);\\n }\\n }\\n\\n /**\\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\\n * to be set to zero before setting it to a non-zero value, such as USDT.\\n *\\n * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\\n * only sets the \\\"standard\\\" allowance. Any temporary allowance will remain active, in addition to the value being\\n * set here.\\n */\\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\\n\\n if (!_callOptionalReturnBool(token, approvalCall)) {\\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\\n _callOptionalReturn(token, approvalCall);\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\\n if (to.code.length == 0) {\\n safeTransfer(token, to, value);\\n } else if (!token.transferAndCall(to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\\n * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function transferFromAndCallRelaxed(\\n IERC1363 token,\\n address from,\\n address to,\\n uint256 value,\\n bytes memory data\\n ) internal {\\n if (to.code.length == 0) {\\n safeTransferFrom(token, from, to, value);\\n } else if (!token.transferFromAndCall(from, to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\\n * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\\n * once without retrying, and relies on the returned value to be true.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\\n if (to.code.length == 0) {\\n forceApprove(token, to, value);\\n } else if (!token.approveAndCall(to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n *\\n * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n uint256 returnSize;\\n uint256 returnValue;\\n assembly (\\\"memory-safe\\\") {\\n let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n // bubble errors\\n if iszero(success) {\\n let ptr := mload(0x40)\\n returndatacopy(ptr, 0, returndatasize())\\n revert(ptr, returndatasize())\\n }\\n returnSize := returndatasize()\\n returnValue := mload(0)\\n }\\n\\n if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n *\\n * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\\n */\\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\\n bool success;\\n uint256 returnSize;\\n uint256 returnValue;\\n assembly (\\\"memory-safe\\\") {\\n success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n returnSize := returndatasize()\\n returnValue := mload(0)\\n }\\n return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\\n }\\n}\\n\",\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Errors} from \\\"./Errors.sol\\\";\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev There's no code at `target` (it is not a contract).\\n */\\n error AddressEmptyCode(address target);\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n if (address(this).balance < amount) {\\n revert Errors.InsufficientBalance(address(this).balance, amount);\\n }\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n if (!success) {\\n revert Errors.FailedCall();\\n }\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason or custom error, it is bubbled\\n * up by this function (like regular Solidity function calls). However, if\\n * the call reverted with no returned reason, this function reverts with a\\n * {Errors.FailedCall} error.\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n if (address(this).balance < value) {\\n revert Errors.InsufficientBalance(address(this).balance, value);\\n }\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\\n * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\\n * of an unsuccessful call.\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata\\n ) internal view returns (bytes memory) {\\n if (!success) {\\n _revert(returndata);\\n } else {\\n // only check if target is a contract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n if (returndata.length == 0 && target.code.length == 0) {\\n revert AddressEmptyCode(target);\\n }\\n return returndata;\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\\n * revert reason or with a default {Errors.FailedCall} error.\\n */\\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\\n if (!success) {\\n _revert(returndata);\\n } else {\\n return returndata;\\n }\\n }\\n\\n /**\\n * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\\n */\\n function _revert(bytes memory returndata) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n assembly (\\\"memory-safe\\\") {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert Errors.FailedCall();\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Collection of common custom errors used in multiple contracts\\n *\\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\\n * It is recommended to avoid relying on the error API for critical functionality.\\n *\\n * _Available since v5.1._\\n */\\nlibrary Errors {\\n /**\\n * @dev The ETH balance of the account is not enough to perform the operation.\\n */\\n error InsufficientBalance(uint256 balance, uint256 needed);\\n\\n /**\\n * @dev A call to an address target failed. The target may have reverted.\\n */\\n error FailedCall();\\n\\n /**\\n * @dev The deployment failed.\\n */\\n error FailedDeployment();\\n\\n /**\\n * @dev A necessary precompile is missing.\\n */\\n error MissingPrecompile(address);\\n}\\n\",\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\"},\"contracts/SimpleTestingOApp.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.22;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { OApp, MessagingFee, Origin } from \\\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol\\\";\\nimport { MessagingReceipt } from \\\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol\\\";\\n\\ncontract SimpleTestingOApp is OApp {\\n constructor(address _endpoint, address _delegate) OApp(_endpoint, _delegate) Ownable(_delegate) {}\\n\\n uint public data = 0;\\n\\n /**\\n * @notice Sends a message from the source chain to a destination chain.\\n * @param _dstEid The endpoint ID of the destination chain.\\n * @param _message The message string to be sent.\\n * @param _options Additional options for message execution.\\n * @dev Encodes the message as bytes and sends it using the `_lzSend` internal function.\\n * @return receipt A `MessagingReceipt` struct containing details of the message sent.\\n */\\n function send(\\n uint32 _dstEid,\\n string memory _message,\\n bytes calldata _options\\n ) external payable returns (MessagingReceipt memory receipt) {\\n bytes memory _payload = abi.encode(_message);\\n receipt = _lzSend(_dstEid, _payload, _options, MessagingFee(msg.value, 0), payable(msg.sender));\\n }\\n\\n /**\\n * @notice Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token.\\n * @param _dstEid Destination chain's endpoint ID.\\n * @param _message The message.\\n * @param _options Message execution options (e.g., for sending gas to destination).\\n * @param _payInLzToken Whether to return fee in ZRO token.\\n * @return fee A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token.\\n */\\n function quote(\\n uint32 _dstEid,\\n string memory _message,\\n bytes memory _options,\\n bool _payInLzToken\\n ) public view returns (MessagingFee memory fee) {\\n bytes memory payload = abi.encode(_message);\\n fee = _quote(_dstEid, payload, _options, _payInLzToken);\\n }\\n\\n /**\\n * @dev Internal function override to handle incoming messages from another chain.\\n * @dev _origin A struct containing information about the message sender.\\n * @dev _guid A unique global packet identifier for the message.\\n * @param payload The encoded message payload being received.\\n *\\n * @dev The following params are unused in the current implementation of the OApp.\\n * @dev _executor The address of the Executor responsible for processing the message.\\n * @dev _extraData Arbitrary data appended by the Executor to the message.\\n *\\n * Decodes the received payload and processes it as per the business logic defined in the function.\\n */\\n function _lzReceive(\\n Origin calldata /*_origin*/,\\n bytes32 /*_guid*/,\\n bytes calldata payload,\\n address /*_executor*/,\\n bytes calldata /*_extraData*/\\n ) internal override {\\n data = abi.decode(payload, (uint));\\n }\\n}\\n\",\"keccak256\":\"0x53a205d83471da540ed450de64e20ce478b841f0d0c24f15dcb73651085bb803\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x60a060405260006002553480156200001657600080fd5b506040516200136a3803806200136a833981016040819052620000399162000181565b81818181806001600160a01b0381166200006d57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000788162000114565b506001600160a01b038083166080528116620000a757604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e190602401600060405180830381600087803b158015620000ef57600080fd5b505af115801562000104573d6000803e3d6000fd5b50505050505050505050620001b9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200017c57600080fd5b919050565b600080604083850312156200019557600080fd5b620001a08362000164565b9150620001b06020840162000164565b90509250929050565b60805161116b620001ff6000396000818161015b0152818161034001528181610458015281816107510152818161083f0152818161093601526109ed015261116b6000f3fe6080604052600436106100e85760003560e01c806382413eac1161008a578063e0539e5811610059578063e0539e58146102b1578063f2fde38b146102d1578063f77e5dd3146102f1578063ff7bd03d1461031e57600080fd5b806382413eac146102075780638da5cb5b14610246578063bb0b6a5314610264578063ca5eb5e11461029157600080fd5b80635e280f11116100c65780635e280f1114610149578063715018a61461019557806373d4a13a146101aa5780637d25a05e146101ce57600080fd5b806313137d65146100ed57806317442b70146101025780633400288b14610129575b600080fd5b6101006100fb366004610b99565b61033e565b005b34801561010e57600080fd5b50604080516001815260026020820152015b60405180910390f35b34801561013557600080fd5b50610100610144366004610c52565b6103fe565b34801561015557600080fd5b5061017d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610120565b3480156101a157600080fd5b50610100610414565b3480156101b657600080fd5b506101c060025481565b604051908152602001610120565b3480156101da57600080fd5b506101ee6101e9366004610c52565b610428565b60405167ffffffffffffffff9091168152602001610120565b34801561021357600080fd5b50610236610222366004610c7c565b6001600160a01b0381163014949350505050565b6040519015158152602001610120565b34801561025257600080fd5b506000546001600160a01b031661017d565b34801561027057600080fd5b506101c061027f366004610ce3565b60016020526000908152604090205481565b34801561029d57600080fd5b506101006102ac366004610d05565b610431565b6102c46102bf366004610dce565b6104b7565b6040516101209190610e45565b3480156102dd57600080fd5b506101006102ec366004610d05565b610540565b3480156102fd57600080fd5b5061031161030c366004610e88565b61057e565b6040516101209190610f1d565b34801561032a57600080fd5b50610236610339366004610f34565b6105c2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316331461038e576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b602087018035906103a8906103a3908a610ce3565b6105f8565b146103e6576103ba6020880188610ce3565b60405163309afaf360e21b815263ffffffff909116600482015260208801356024820152604401610385565b6103f587878787878787610634565b50505050505050565b61040661064c565b6104108282610679565b5050565b61041c61064c565b61042660006106ce565b565b60005b92915050565b61043961064c565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561049c57600080fd5b505af11580156104b0573d6000803e3d6000fd5b5050505050565b6104bf610adb565b6000846040516020016104d29190610f96565b60408051601f198184030181526020601f8701819004810284018101909252858352925061053691889184919088908890819084018382808284376000920182905250604080518082019091523481526020810191909152925033915061071e9050565b9695505050505050565b61054861064c565b6001600160a01b03811661057257604051631e4fbdf760e01b815260006004820152602401610385565b61057b816106ce565b50565b60408051808201909152600080825260208201526000846040516020016105a59190610f96565b604051602081830303815290604052905061053686828686610829565b60006020820180359060019083906105da9086610ce3565b63ffffffff1681526020810191909152604001600020541492915050565b63ffffffff81166000908152600160205260408120548061042b5760405163f6ff4fb760e01b815263ffffffff84166004820152602401610385565b61064084860186610fa9565b60025550505050505050565b6000546001600160a01b031633146104265760405163118cdaa760e01b8152336004820152602401610385565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610726610adb565b6000610735846000015161090a565b60208501519091501561074f5761074f8460200151610932565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff16815260200161079f8c6105f8565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b81526004016107db929190610fc2565b60806040518083038185885af11580156107f9573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061081e919061108a565b979650505050505050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff16815260200161088c896105f8565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b81526004016108c1929190610fc2565b6040805180830381865afa1580156108dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090191906110fc565b95945050505050565b600081341461092e576040516304fb820960e51b8152346004820152602401610385565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610992573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b69190611118565b90506001600160a01b0381166109df576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03818116604485015260648085018890528551808603909101815260849094019094526020830180516001600160e01b03166323b872dd60e01b179052610410938516928690610a64908590610a6a565b50505050565b600080602060008451602086016000885af180610a8d576040513d6000823e3d81fd5b50506000513d91508115610aa5578060011415610ab2565b6001600160a01b0384163b155b15610a6457604051635274afe760e01b81526001600160a01b0385166004820152602401610385565b604051806060016040528060008019168152602001600067ffffffffffffffff168152602001610b1e604051806040016040528060008152602001600081525090565b905290565b600060608284031215610b3557600080fd5b50919050565b60008083601f840112610b4d57600080fd5b50813567ffffffffffffffff811115610b6557600080fd5b602083019150836020828501011115610b7d57600080fd5b9250929050565b6001600160a01b038116811461057b57600080fd5b600080600080600080600060e0888a031215610bb457600080fd5b610bbe8989610b23565b965060608801359550608088013567ffffffffffffffff80821115610be257600080fd5b610bee8b838c01610b3b565b909750955060a08a01359150610c0382610b84565b90935060c08901359080821115610c1957600080fd5b50610c268a828b01610b3b565b989b979a50959850939692959293505050565b803563ffffffff81168114610c4d57600080fd5b919050565b60008060408385031215610c6557600080fd5b610c6e83610c39565b946020939093013593505050565b60008060008060a08587031215610c9257600080fd5b610c9c8686610b23565b9350606085013567ffffffffffffffff811115610cb857600080fd5b610cc487828801610b3b565b9094509250506080850135610cd881610b84565b939692955090935050565b600060208284031215610cf557600080fd5b610cfe82610c39565b9392505050565b600060208284031215610d1757600080fd5b8135610cfe81610b84565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115610d5357610d53610d22565b604051601f8501601f19908116603f01168101908282118183101715610d7b57610d7b610d22565b81604052809350858152868686011115610d9457600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112610dbf57600080fd5b610cfe83833560208501610d38565b60008060008060608587031215610de457600080fd5b610ded85610c39565b9350602085013567ffffffffffffffff80821115610e0a57600080fd5b610e1688838901610dae565b94506040870135915080821115610e2c57600080fd5b50610e3987828801610b3b565b95989497509550505050565b60006080820190508251825267ffffffffffffffff60208401511660208301526040830151610e81604084018280518252602090810151910152565b5092915050565b60008060008060808587031215610e9e57600080fd5b610ea785610c39565b9350602085013567ffffffffffffffff80821115610ec457600080fd5b610ed088838901610dae565b94506040870135915080821115610ee657600080fd5b508501601f81018713610ef857600080fd5b610f0787823560208401610d38565b92505060608501358015158114610cd857600080fd5b81518152602080830151908201526040810161042b565b600060608284031215610f4657600080fd5b610cfe8383610b23565b6000815180845260005b81811015610f7657602081850181015186830182015201610f5a565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610cfe6020830184610f50565b600060208284031215610fbb57600080fd5b5035919050565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152610ff860e0840182610f50565b90506060850151603f198483030160a08501526110158282610f50565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b60006040828403121561104d57600080fd5b6040516040810181811067ffffffffffffffff8211171561107057611070610d22565b604052825181526020928301519281019290925250919050565b60006080828403121561109c57600080fd5b6040516060810167ffffffffffffffff82821081831117156110c0576110c0610d22565b81604052845183526020850151915080821682146110dd57600080fd5b5060208201526110f0846040850161103b565b60408201529392505050565b60006040828403121561110e57600080fd5b610cfe838361103b565b60006020828403121561112a57600080fd5b8151610cfe81610b8456fea264697066735822122028a3371f62607d76d2e01ad1e2205a7fabf153a5831a0440a76dcc77a058a52564736f6c63430008160033", + "deployedBytecode": "0x6080604052600436106100e85760003560e01c806382413eac1161008a578063e0539e5811610059578063e0539e58146102b1578063f2fde38b146102d1578063f77e5dd3146102f1578063ff7bd03d1461031e57600080fd5b806382413eac146102075780638da5cb5b14610246578063bb0b6a5314610264578063ca5eb5e11461029157600080fd5b80635e280f11116100c65780635e280f1114610149578063715018a61461019557806373d4a13a146101aa5780637d25a05e146101ce57600080fd5b806313137d65146100ed57806317442b70146101025780633400288b14610129575b600080fd5b6101006100fb366004610b99565b61033e565b005b34801561010e57600080fd5b50604080516001815260026020820152015b60405180910390f35b34801561013557600080fd5b50610100610144366004610c52565b6103fe565b34801561015557600080fd5b5061017d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610120565b3480156101a157600080fd5b50610100610414565b3480156101b657600080fd5b506101c060025481565b604051908152602001610120565b3480156101da57600080fd5b506101ee6101e9366004610c52565b610428565b60405167ffffffffffffffff9091168152602001610120565b34801561021357600080fd5b50610236610222366004610c7c565b6001600160a01b0381163014949350505050565b6040519015158152602001610120565b34801561025257600080fd5b506000546001600160a01b031661017d565b34801561027057600080fd5b506101c061027f366004610ce3565b60016020526000908152604090205481565b34801561029d57600080fd5b506101006102ac366004610d05565b610431565b6102c46102bf366004610dce565b6104b7565b6040516101209190610e45565b3480156102dd57600080fd5b506101006102ec366004610d05565b610540565b3480156102fd57600080fd5b5061031161030c366004610e88565b61057e565b6040516101209190610f1d565b34801561032a57600080fd5b50610236610339366004610f34565b6105c2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316331461038e576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b602087018035906103a8906103a3908a610ce3565b6105f8565b146103e6576103ba6020880188610ce3565b60405163309afaf360e21b815263ffffffff909116600482015260208801356024820152604401610385565b6103f587878787878787610634565b50505050505050565b61040661064c565b6104108282610679565b5050565b61041c61064c565b61042660006106ce565b565b60005b92915050565b61043961064c565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561049c57600080fd5b505af11580156104b0573d6000803e3d6000fd5b5050505050565b6104bf610adb565b6000846040516020016104d29190610f96565b60408051601f198184030181526020601f8701819004810284018101909252858352925061053691889184919088908890819084018382808284376000920182905250604080518082019091523481526020810191909152925033915061071e9050565b9695505050505050565b61054861064c565b6001600160a01b03811661057257604051631e4fbdf760e01b815260006004820152602401610385565b61057b816106ce565b50565b60408051808201909152600080825260208201526000846040516020016105a59190610f96565b604051602081830303815290604052905061053686828686610829565b60006020820180359060019083906105da9086610ce3565b63ffffffff1681526020810191909152604001600020541492915050565b63ffffffff81166000908152600160205260408120548061042b5760405163f6ff4fb760e01b815263ffffffff84166004820152602401610385565b61064084860186610fa9565b60025550505050505050565b6000546001600160a01b031633146104265760405163118cdaa760e01b8152336004820152602401610385565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610726610adb565b6000610735846000015161090a565b60208501519091501561074f5761074f8460200151610932565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff16815260200161079f8c6105f8565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b81526004016107db929190610fc2565b60806040518083038185885af11580156107f9573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061081e919061108a565b979650505050505050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff16815260200161088c896105f8565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b81526004016108c1929190610fc2565b6040805180830381865afa1580156108dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090191906110fc565b95945050505050565b600081341461092e576040516304fb820960e51b8152346004820152602401610385565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610992573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b69190611118565b90506001600160a01b0381166109df576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03818116604485015260648085018890528551808603909101815260849094019094526020830180516001600160e01b03166323b872dd60e01b179052610410938516928690610a64908590610a6a565b50505050565b600080602060008451602086016000885af180610a8d576040513d6000823e3d81fd5b50506000513d91508115610aa5578060011415610ab2565b6001600160a01b0384163b155b15610a6457604051635274afe760e01b81526001600160a01b0385166004820152602401610385565b604051806060016040528060008019168152602001600067ffffffffffffffff168152602001610b1e604051806040016040528060008152602001600081525090565b905290565b600060608284031215610b3557600080fd5b50919050565b60008083601f840112610b4d57600080fd5b50813567ffffffffffffffff811115610b6557600080fd5b602083019150836020828501011115610b7d57600080fd5b9250929050565b6001600160a01b038116811461057b57600080fd5b600080600080600080600060e0888a031215610bb457600080fd5b610bbe8989610b23565b965060608801359550608088013567ffffffffffffffff80821115610be257600080fd5b610bee8b838c01610b3b565b909750955060a08a01359150610c0382610b84565b90935060c08901359080821115610c1957600080fd5b50610c268a828b01610b3b565b989b979a50959850939692959293505050565b803563ffffffff81168114610c4d57600080fd5b919050565b60008060408385031215610c6557600080fd5b610c6e83610c39565b946020939093013593505050565b60008060008060a08587031215610c9257600080fd5b610c9c8686610b23565b9350606085013567ffffffffffffffff811115610cb857600080fd5b610cc487828801610b3b565b9094509250506080850135610cd881610b84565b939692955090935050565b600060208284031215610cf557600080fd5b610cfe82610c39565b9392505050565b600060208284031215610d1757600080fd5b8135610cfe81610b84565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115610d5357610d53610d22565b604051601f8501601f19908116603f01168101908282118183101715610d7b57610d7b610d22565b81604052809350858152868686011115610d9457600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112610dbf57600080fd5b610cfe83833560208501610d38565b60008060008060608587031215610de457600080fd5b610ded85610c39565b9350602085013567ffffffffffffffff80821115610e0a57600080fd5b610e1688838901610dae565b94506040870135915080821115610e2c57600080fd5b50610e3987828801610b3b565b95989497509550505050565b60006080820190508251825267ffffffffffffffff60208401511660208301526040830151610e81604084018280518252602090810151910152565b5092915050565b60008060008060808587031215610e9e57600080fd5b610ea785610c39565b9350602085013567ffffffffffffffff80821115610ec457600080fd5b610ed088838901610dae565b94506040870135915080821115610ee657600080fd5b508501601f81018713610ef857600080fd5b610f0787823560208401610d38565b92505060608501358015158114610cd857600080fd5b81518152602080830151908201526040810161042b565b600060608284031215610f4657600080fd5b610cfe8383610b23565b6000815180845260005b81811015610f7657602081850181015186830182015201610f5a565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610cfe6020830184610f50565b600060208284031215610fbb57600080fd5b5035919050565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152610ff860e0840182610f50565b90506060850151603f198483030160a08501526110158282610f50565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b60006040828403121561104d57600080fd5b6040516040810181811067ffffffffffffffff8211171561107057611070610d22565b604052825181526020928301519281019290925250919050565b60006080828403121561109c57600080fd5b6040516060810167ffffffffffffffff82821081831117156110c0576110c0610d22565b81604052845183526020850151915080821682146110dd57600080fd5b5060208201526110f0846040850161103b565b60408201529392505050565b60006040828403121561110e57600080fd5b610cfe838361103b565b60006020828403121561112a57600080fd5b8151610cfe81610b8456fea264697066735822122028a3371f62607d76d2e01ad1e2205a7fabf153a5831a0440a76dcc77a058a52564736f6c63430008160033", + "devdoc": { + "errors": { + "OwnableInvalidOwner(address)": [ + { + "details": "The owner is not a valid owner account. (eg. `address(0)`)" + } + ], + "OwnableUnauthorizedAccount(address)": [ + { + "details": "The caller account is not authorized to perform an operation." + } + ], + "SafeERC20FailedOperation(address)": [ + { + "details": "An operation with an ERC-20 token failed." + } + ] + }, + "kind": "dev", + "methods": { + "allowInitializePath((uint32,bytes32,uint64))": { + "details": "This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.", + "params": { + "origin": "The origin information containing the source endpoint and sender address." + }, + "returns": { + "_0": "Whether the path has been initialized." + } + }, + "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { + "details": "_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.", + "params": { + "_sender": "The sender address." + }, + "returns": { + "_0": "isSender Is a valid sender." + } + }, + "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": { + "details": "Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.", + "params": { + "_executor": "The address of the executor for the received message.", + "_extraData": "Additional arbitrary data provided by the corresponding executor.", + "_guid": "The unique identifier for the received LayerZero message.", + "_message": "The payload of the received message.", + "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message." + } + }, + "nextNonce(uint32,bytes32)": { + "details": "_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.", + "returns": { + "nonce": "The next nonce." + } + }, + "oAppVersion()": { + "returns": { + "receiverVersion": "The version of the OAppReceiver.sol implementation.", + "senderVersion": "The version of the OAppSender.sol implementation." + } + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "quote(uint32,string,bytes,bool)": { + "params": { + "_dstEid": "Destination chain's endpoint ID.", + "_message": "The message.", + "_options": "Message execution options (e.g., for sending gas to destination).", + "_payInLzToken": "Whether to return fee in ZRO token." + }, + "returns": { + "fee": "A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token." + } + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." + }, + "send(uint32,string,bytes)": { + "details": "Encodes the message as bytes and sends it using the `_lzSend` internal function.", + "params": { + "_dstEid": "The endpoint ID of the destination chain.", + "_message": "The message string to be sent.", + "_options": "Additional options for message execution." + }, + "returns": { + "receipt": "A `MessagingReceipt` struct containing details of the message sent." + } + }, + "setDelegate(address)": { + "details": "Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.", + "params": { + "_delegate": "The address of the delegate to be set." + } + }, + "setPeer(uint32,bytes32)": { + "details": "Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.", + "params": { + "_eid": "The endpoint ID.", + "_peer": "The address of the peer to be associated with the corresponding endpoint." + } + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "allowInitializePath((uint32,bytes32,uint64))": { + "notice": "Checks if the path initialization is allowed based on the provided origin." + }, + "endpoint()": { + "notice": "Retrieves the LayerZero endpoint associated with the OApp." + }, + "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { + "notice": "Indicates whether an address is an approved composeMsg sender to the Endpoint." + }, + "nextNonce(uint32,bytes32)": { + "notice": "Retrieves the next nonce for a given source endpoint and sender address." + }, + "oAppVersion()": { + "notice": "Retrieves the OApp version information." + }, + "peers(uint32)": { + "notice": "Retrieves the peer (OApp) associated with a corresponding endpoint." + }, + "quote(uint32,string,bytes,bool)": { + "notice": "Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token." + }, + "send(uint32,string,bytes)": { + "notice": "Sends a message from the source chain to a destination chain." + }, + "setDelegate(address)": { + "notice": "Sets the delegate address for the OApp." + }, + "setPeer(uint32,bytes32)": { + "notice": "Sets the peer address (OApp instance) for a corresponding endpoint." + } + }, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 1327, + "contract": "contracts/SimpleTestingOApp.sol:SimpleTestingOApp", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 64, + "contract": "contracts/SimpleTestingOApp.sol:SimpleTestingOApp", + "label": "peers", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_uint32,t_bytes32)" + }, + { + "astId": 2398, + "contract": "contracts/SimpleTestingOApp.sol:SimpleTestingOApp", + "label": "data", + "offset": 0, + "slot": "2", + "type": "t_uint256" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_uint32,t_bytes32)": { + "encoding": "mapping", + "key": "t_uint32", + "label": "mapping(uint32 => bytes32)", + "numberOfBytes": "32", + "value": "t_bytes32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "encoding": "inplace", + "label": "uint32", + "numberOfBytes": "4" + } + } + } +} \ No newline at end of file diff --git a/tests/e2e/testing_oapp/deployments/holesky/TestingOApp.json b/tests/e2e/testing_oapp/deployments/holesky/TestingOApp.json new file mode 100644 index 00000000..56bcc1ec --- /dev/null +++ b/tests/e2e/testing_oapp/deployments/holesky/TestingOApp.json @@ -0,0 +1,795 @@ +{ + "address": "0x54b350E10aE76D30684566c366b440577f651D82", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_endpoint", + "type": "address" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "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" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "SafeERC20FailedOperation", + "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" + }, + { + "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": "data", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "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": [ + { + "internalType": "uint32", + "name": "_dstEid", + "type": "uint32" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + }, + { + "internalType": "bytes", + "name": "_options", + "type": "bytes" + }, + { + "internalType": "bool", + "name": "_payInLzToken", + "type": "bool" + } + ], + "name": "quote", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "nativeFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lzTokenFee", + "type": "uint256" + } + ], + "internalType": "struct MessagingFee", + "name": "fee", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_dstEid", + "type": "uint32" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + }, + { + "internalType": "bytes", + "name": "_options", + "type": "bytes" + } + ], + "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": "receipt", + "type": "tuple" + } + ], + "stateMutability": "payable", + "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" + } + ], + "transactionHash": "0xdb1a28bbfaf8f8d5ab6825a665a924e593da9de0c5649aefff810357f1d31701", + "receipt": { + "to": null, + "from": "0x96E341c7E7537333AFa153d196038C6D086d5d2b", + "contractAddress": "0x54b350E10aE76D30684566c366b440577f651D82", + "transactionIndex": 12, + "gasUsed": "1212200", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000200000000000000000004002000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000200000000000800000000000000000000000000000000400000200000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000008000400000000000000020000000000008000000000000004000000000000000000000000000000000000000", + "blockHash": "0xbd6cab0113def584e3af3f1bfccddf41246698774e199e66bd335776b6413c55", + "transactionHash": "0xdb1a28bbfaf8f8d5ab6825a665a924e593da9de0c5649aefff810357f1d31701", + "logs": [ + { + "transactionIndex": 12, + "blockNumber": 2744709, + "transactionHash": "0xdb1a28bbfaf8f8d5ab6825a665a924e593da9de0c5649aefff810357f1d31701", + "address": "0x54b350E10aE76D30684566c366b440577f651D82", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b" + ], + "data": "0x", + "logIndex": 53, + "blockHash": "0xbd6cab0113def584e3af3f1bfccddf41246698774e199e66bd335776b6413c55" + }, + { + "transactionIndex": 12, + "blockNumber": 2744709, + "transactionHash": "0xdb1a28bbfaf8f8d5ab6825a665a924e593da9de0c5649aefff810357f1d31701", + "address": "0x6EDCE65403992e310A62460808c4b910D972f10f", + "topics": [ + "0x6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d7983981" + ], + "data": "0x00000000000000000000000054b350e10ae76d30684566c366b440577f651d8200000000000000000000000096e341c7e7537333afa153d196038c6d086d5d2b", + "logIndex": 54, + "blockHash": "0xbd6cab0113def584e3af3f1bfccddf41246698774e199e66bd335776b6413c55" + } + ], + "blockNumber": 2744709, + "cumulativeGasUsed": "2488259", + "status": 1, + "byzantium": true + }, + "args": [ + "0x6EDCE65403992e310A62460808c4b910D972f10f", + "0x96E341c7E7537333AFa153d196038C6D086d5d2b" + ], + "numDeployments": 3, + "solcInputHash": "6e267ad209b523b5db9591b68bbd936f", + "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_endpoint\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"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\"},{\"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\":\"data\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"string\",\"name\":\"_message\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"quote\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"fee\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"string\",\"name\":\"_message\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"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\":\"receipt\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"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\"}],\"devdoc\":{\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"details\":\"This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.\",\"params\":{\"origin\":\"The origin information containing the source endpoint and sender address.\"},\"returns\":{\"_0\":\"Whether the path has been initialized.\"}},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"details\":\"_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.\",\"params\":{\"_sender\":\"The sender address.\"},\"returns\":{\"_0\":\"isSender Is a valid sender.\"}},\"lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.\",\"params\":{\"_executor\":\"The address of the executor for the received message.\",\"_extraData\":\"Additional arbitrary data provided by the corresponding executor.\",\"_guid\":\"The unique identifier for the received LayerZero message.\",\"_message\":\"The payload of the received message.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"nextNonce(uint32,bytes32)\":{\"details\":\"_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\",\"returns\":{\"nonce\":\"The next nonce.\"}},\"oAppVersion()\":{\"returns\":{\"receiverVersion\":\"The version of the OAppReceiver.sol implementation.\",\"senderVersion\":\"The version of the OAppSender.sol implementation.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"quote(uint32,string,bytes,bool)\":{\"params\":{\"_dstEid\":\"Destination chain's endpoint ID.\",\"_message\":\"The message.\",\"_options\":\"Message execution options (e.g., for sending gas to destination).\",\"_payInLzToken\":\"Whether to return fee in ZRO token.\"},\"returns\":{\"fee\":\"A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"send(uint32,string,bytes)\":{\"details\":\"Encodes the message as bytes and sends it using the `_lzSend` internal function.\",\"params\":{\"_dstEid\":\"The endpoint ID of the destination chain.\",\"_message\":\"The message string to be sent.\",\"_options\":\"Additional options for message execution.\"},\"returns\":{\"receipt\":\"A `MessagingReceipt` struct containing details of the message sent.\"}},\"setDelegate(address)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\",\"params\":{\"_delegate\":\"The address of the delegate to be set.\"}},\"setPeer(uint32,bytes32)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_peer\":\"The address of the peer to be associated with the corresponding endpoint.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"notice\":\"Checks if the path initialization is allowed based on the provided origin.\"},\"endpoint()\":{\"notice\":\"Retrieves the LayerZero endpoint associated with the OApp.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"notice\":\"Indicates whether an address is an approved composeMsg sender to the Endpoint.\"},\"nextNonce(uint32,bytes32)\":{\"notice\":\"Retrieves the next nonce for a given source endpoint and sender address.\"},\"oAppVersion()\":{\"notice\":\"Retrieves the OApp version information.\"},\"peers(uint32)\":{\"notice\":\"Retrieves the peer (OApp) associated with a corresponding endpoint.\"},\"quote(uint32,string,bytes,bool)\":{\"notice\":\"Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token.\"},\"send(uint32,string,bytes)\":{\"notice\":\"Sends a message from the source chain to a destination chain.\"},\"setDelegate(address)\":{\"notice\":\"Sets the delegate address for the OApp.\"},\"setPeer(uint32,bytes32)\":{\"notice\":\"Sets the peer address (OApp instance) for a corresponding endpoint.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/TestingOApp.sol\":\"TestingOApp\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\n// @dev Import the 'MessagingFee' and 'MessagingReceipt' so it's exposed to OApp implementers\\n// solhint-disable-next-line no-unused-import\\nimport { OAppSender, MessagingFee, MessagingReceipt } from \\\"./OAppSender.sol\\\";\\n// @dev Import the 'Origin' so it's exposed to OApp implementers\\n// solhint-disable-next-line no-unused-import\\nimport { OAppReceiver, Origin } from \\\"./OAppReceiver.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OApp\\n * @dev Abstract contract serving as the base for OApp implementation, combining OAppSender and OAppReceiver functionality.\\n */\\nabstract contract OApp is OAppSender, OAppReceiver {\\n /**\\n * @dev Constructor to initialize the OApp with the provided endpoint and owner.\\n * @param _endpoint The address of the LOCAL LayerZero endpoint.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n */\\n constructor(address _endpoint, address _delegate) OAppCore(_endpoint, _delegate) {}\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol implementation.\\n * @return receiverVersion The version of the OAppReceiver.sol implementation.\\n */\\n function oAppVersion()\\n public\\n pure\\n virtual\\n override(OAppSender, OAppReceiver)\\n returns (uint64 senderVersion, uint64 receiverVersion)\\n {\\n return (SENDER_VERSION, RECEIVER_VERSION);\\n }\\n}\\n\",\"keccak256\":\"0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { IOAppCore, ILayerZeroEndpointV2 } from \\\"./interfaces/IOAppCore.sol\\\";\\n\\n/**\\n * @title OAppCore\\n * @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations.\\n */\\nabstract contract OAppCore is IOAppCore, Ownable {\\n // The LayerZero endpoint associated with the given OApp\\n ILayerZeroEndpointV2 public immutable endpoint;\\n\\n // Mapping to store peers associated with corresponding endpoints\\n mapping(uint32 eid => bytes32 peer) public peers;\\n\\n /**\\n * @dev Constructor to initialize the OAppCore with the provided endpoint and delegate.\\n * @param _endpoint The address of the LOCAL Layer Zero endpoint.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n *\\n * @dev The delegate typically should be set as the owner of the contract.\\n */\\n constructor(address _endpoint, address _delegate) {\\n endpoint = ILayerZeroEndpointV2(_endpoint);\\n\\n if (_delegate == address(0)) revert InvalidDelegate();\\n endpoint.setDelegate(_delegate);\\n }\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\\n * @dev Set this to bytes32(0) to remove the peer address.\\n * @dev Peer is a bytes32 to accommodate non-evm chains.\\n */\\n function setPeer(uint32 _eid, bytes32 _peer) public virtual onlyOwner {\\n _setPeer(_eid, _peer);\\n }\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n *\\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\\n * @dev Set this to bytes32(0) to remove the peer address.\\n * @dev Peer is a bytes32 to accommodate non-evm chains.\\n */\\n function _setPeer(uint32 _eid, bytes32 _peer) internal virtual {\\n peers[_eid] = _peer;\\n emit PeerSet(_eid, _peer);\\n }\\n\\n /**\\n * @notice Internal function to get the peer address associated with a specific endpoint; reverts if NOT set.\\n * ie. the peer is set to bytes32(0).\\n * @param _eid The endpoint ID.\\n * @return peer The address of the peer associated with the specified endpoint.\\n */\\n function _getPeerOrRevert(uint32 _eid) internal view virtual returns (bytes32) {\\n bytes32 peer = peers[_eid];\\n if (peer == bytes32(0)) revert NoPeer(_eid);\\n return peer;\\n }\\n\\n /**\\n * @notice Sets the delegate address for the OApp.\\n * @param _delegate The address of the delegate to be set.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\\n */\\n function setDelegate(address _delegate) public onlyOwner {\\n endpoint.setDelegate(_delegate);\\n }\\n}\\n\",\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { IOAppReceiver, Origin } from \\\"./interfaces/IOAppReceiver.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OAppReceiver\\n * @dev Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers.\\n */\\nabstract contract OAppReceiver is IOAppReceiver, OAppCore {\\n // Custom error message for when the caller is not the registered endpoint/\\n error OnlyEndpoint(address addr);\\n\\n // @dev The version of the OAppReceiver implementation.\\n // @dev Version is bumped when changes are made to this contract.\\n uint64 internal constant RECEIVER_VERSION = 2;\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n *\\n * @dev Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented.\\n * ie. this is a RECEIVE only OApp.\\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions.\\n */\\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\\n return (0, RECEIVER_VERSION);\\n }\\n\\n /**\\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\\n * @dev _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @dev _message The lzReceive payload.\\n * @param _sender The sender address.\\n * @return isSender Is a valid sender.\\n *\\n * @dev Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.\\n * @dev The default sender IS the OAppReceiver implementer.\\n */\\n function isComposeMsgSender(\\n Origin calldata /*_origin*/,\\n bytes calldata /*_message*/,\\n address _sender\\n ) public view virtual returns (bool) {\\n return _sender == address(this);\\n }\\n\\n /**\\n * @notice Checks if the path initialization is allowed based on the provided origin.\\n * @param origin The origin information containing the source endpoint and sender address.\\n * @return Whether the path has been initialized.\\n *\\n * @dev This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.\\n * @dev This defaults to assuming if a peer has been set, its initialized.\\n * Can be overridden by the OApp if there is other logic to determine this.\\n */\\n function allowInitializePath(Origin calldata origin) public view virtual returns (bool) {\\n return peers[origin.srcEid] == origin.sender;\\n }\\n\\n /**\\n * @notice Retrieves the next nonce for a given source endpoint and sender address.\\n * @dev _srcEid The source endpoint ID.\\n * @dev _sender The sender address.\\n * @return nonce The next nonce.\\n *\\n * @dev The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.\\n * @dev Is required by the off-chain executor to determine the OApp expects msg execution is ordered.\\n * @dev This is also enforced by the OApp.\\n * @dev By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\\n */\\n function nextNonce(uint32 /*_srcEid*/, bytes32 /*_sender*/) public view virtual returns (uint64 nonce) {\\n return 0;\\n }\\n\\n /**\\n * @dev Entry point for receiving messages or packets from the endpoint.\\n * @param _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @param _guid The unique identifier for the received LayerZero message.\\n * @param _message The payload of the received message.\\n * @param _executor The address of the executor for the received message.\\n * @param _extraData Additional arbitrary data provided by the corresponding executor.\\n *\\n * @dev Entry point for receiving msg/packet from the LayerZero endpoint.\\n */\\n function lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) public payable virtual {\\n // Ensures that only the endpoint can attempt to lzReceive() messages to this OApp.\\n if (address(endpoint) != msg.sender) revert OnlyEndpoint(msg.sender);\\n\\n // Ensure that the sender matches the expected peer for the source endpoint.\\n if (_getPeerOrRevert(_origin.srcEid) != _origin.sender) revert OnlyPeer(_origin.srcEid, _origin.sender);\\n\\n // Call the internal OApp implementation of lzReceive.\\n _lzReceive(_origin, _guid, _message, _executor, _extraData);\\n }\\n\\n /**\\n * @dev Internal function to implement lzReceive logic without needing to copy the basic parameter validation.\\n */\\n function _lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { SafeERC20, IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport { MessagingParams, MessagingFee, MessagingReceipt } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OAppSender\\n * @dev Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.\\n */\\nabstract contract OAppSender is OAppCore {\\n using SafeERC20 for IERC20;\\n\\n // Custom error messages\\n error NotEnoughNative(uint256 msgValue);\\n error LzTokenUnavailable();\\n\\n // @dev The version of the OAppSender implementation.\\n // @dev Version is bumped when changes are made to this contract.\\n uint64 internal constant SENDER_VERSION = 1;\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n *\\n * @dev Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented.\\n * ie. this is a SEND only OApp.\\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions\\n */\\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\\n return (SENDER_VERSION, 0);\\n }\\n\\n /**\\n * @dev Internal function to interact with the LayerZero EndpointV2.quote() for fee calculation.\\n * @param _dstEid The destination endpoint ID.\\n * @param _message The message payload.\\n * @param _options Additional options for the message.\\n * @param _payInLzToken Flag indicating whether to pay the fee in LZ tokens.\\n * @return fee The calculated MessagingFee for the message.\\n * - nativeFee: The native fee for the message.\\n * - lzTokenFee: The LZ token fee for the message.\\n */\\n function _quote(\\n uint32 _dstEid,\\n bytes memory _message,\\n bytes memory _options,\\n bool _payInLzToken\\n ) internal view virtual returns (MessagingFee memory fee) {\\n return\\n endpoint.quote(\\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _payInLzToken),\\n address(this)\\n );\\n }\\n\\n /**\\n * @dev Internal function to interact with the LayerZero EndpointV2.send() for sending a message.\\n * @param _dstEid The destination endpoint ID.\\n * @param _message The message payload.\\n * @param _options Additional options for the message.\\n * @param _fee The calculated LayerZero fee for the message.\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n * @param _refundAddress The address to receive any excess fee values sent to the endpoint.\\n * @return receipt The receipt for the sent message.\\n * - guid: The unique identifier for the sent message.\\n * - nonce: The nonce of the sent message.\\n * - fee: The LayerZero fee incurred for the message.\\n */\\n function _lzSend(\\n uint32 _dstEid,\\n bytes memory _message,\\n bytes memory _options,\\n MessagingFee memory _fee,\\n address _refundAddress\\n ) internal virtual returns (MessagingReceipt memory receipt) {\\n // @dev Push corresponding fees to the endpoint, any excess is sent back to the _refundAddress from the endpoint.\\n uint256 messageValue = _payNative(_fee.nativeFee);\\n if (_fee.lzTokenFee > 0) _payLzToken(_fee.lzTokenFee);\\n\\n return\\n // solhint-disable-next-line check-send-result\\n endpoint.send{ value: messageValue }(\\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _fee.lzTokenFee > 0),\\n _refundAddress\\n );\\n }\\n\\n /**\\n * @dev Internal function to pay the native fee associated with the message.\\n * @param _nativeFee The native fee to be paid.\\n * @return nativeFee The amount of native currency paid.\\n *\\n * @dev If the OApp needs to initiate MULTIPLE LayerZero messages in a single transaction,\\n * this will need to be overridden because msg.value would contain multiple lzFees.\\n * @dev Should be overridden in the event the LayerZero endpoint requires a different native currency.\\n * @dev Some EVMs use an ERC20 as a method for paying transactions/gasFees.\\n * @dev The endpoint is EITHER/OR, ie. it will NOT support both types of native payment at a time.\\n */\\n function _payNative(uint256 _nativeFee) internal virtual returns (uint256 nativeFee) {\\n if (msg.value != _nativeFee) revert NotEnoughNative(msg.value);\\n return _nativeFee;\\n }\\n\\n /**\\n * @dev Internal function to pay the LZ token fee associated with the message.\\n * @param _lzTokenFee The LZ token fee to be paid.\\n *\\n * @dev If the caller is trying to pay in the specified lzToken, then the lzTokenFee is passed to the endpoint.\\n * @dev Any excess sent, is passed back to the specified _refundAddress in the _lzSend().\\n */\\n function _payLzToken(uint256 _lzTokenFee) internal virtual {\\n // @dev Cannot cache the token because it is not immutable in the endpoint.\\n address lzToken = endpoint.lzToken();\\n if (lzToken == address(0)) revert LzTokenUnavailable();\\n\\n // Pay LZ token fee by sending tokens to the endpoint.\\n IERC20(lzToken).safeTransferFrom(msg.sender, address(endpoint), _lzTokenFee);\\n }\\n}\\n\",\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { ILayerZeroEndpointV2 } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\n\\n/**\\n * @title IOAppCore\\n */\\ninterface IOAppCore {\\n // Custom error messages\\n error OnlyPeer(uint32 eid, bytes32 sender);\\n error NoPeer(uint32 eid);\\n error InvalidEndpointCall();\\n error InvalidDelegate();\\n\\n // Event emitted when a peer (OApp) is set for a corresponding endpoint\\n event PeerSet(uint32 eid, bytes32 peer);\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n */\\n function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);\\n\\n /**\\n * @notice Retrieves the LayerZero endpoint associated with the OApp.\\n * @return iEndpoint The LayerZero endpoint as an interface.\\n */\\n function endpoint() external view returns (ILayerZeroEndpointV2 iEndpoint);\\n\\n /**\\n * @notice Retrieves the peer (OApp) associated with a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @return peer The peer address (OApp instance) associated with the corresponding endpoint.\\n */\\n function peers(uint32 _eid) external view returns (bytes32 peer);\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n */\\n function setPeer(uint32 _eid, bytes32 _peer) external;\\n\\n /**\\n * @notice Sets the delegate address for the OApp Core.\\n * @param _delegate The address of the delegate to be set.\\n */\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.20;\\n\\nimport { ILayerZeroReceiver, Origin } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\\\";\\n\\ninterface IOAppReceiver is ILayerZeroReceiver {\\n /**\\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\\n * @param _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @param _message The lzReceive payload.\\n * @param _sender The sender address.\\n * @return isSender Is a valid sender.\\n *\\n * @dev Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.\\n * @dev The default sender IS the OAppReceiver implementer.\\n */\\n function isComposeMsgSender(\\n Origin calldata _origin,\\n bytes calldata _message,\\n address _sender\\n ) external view returns (bool isSender);\\n}\\n\",\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IMessageLibManager } from \\\"./IMessageLibManager.sol\\\";\\nimport { IMessagingComposer } from \\\"./IMessagingComposer.sol\\\";\\nimport { IMessagingChannel } from \\\"./IMessagingChannel.sol\\\";\\nimport { IMessagingContext } from \\\"./IMessagingContext.sol\\\";\\n\\nstruct MessagingParams {\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes message;\\n bytes options;\\n bool payInLzToken;\\n}\\n\\nstruct MessagingReceipt {\\n bytes32 guid;\\n uint64 nonce;\\n MessagingFee fee;\\n}\\n\\nstruct MessagingFee {\\n uint256 nativeFee;\\n uint256 lzTokenFee;\\n}\\n\\nstruct Origin {\\n uint32 srcEid;\\n bytes32 sender;\\n uint64 nonce;\\n}\\n\\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\\n\\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\\n\\n event PacketDelivered(Origin origin, address receiver);\\n\\n event LzReceiveAlert(\\n address indexed receiver,\\n address indexed executor,\\n Origin origin,\\n bytes32 guid,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n event LzTokenSet(address token);\\n\\n event DelegateSet(address sender, address delegate);\\n\\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\\n\\n function send(\\n MessagingParams calldata _params,\\n address _refundAddress\\n ) external payable returns (MessagingReceipt memory);\\n\\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\\n\\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n address _receiver,\\n bytes32 _guid,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n\\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\\n\\n function setLzToken(address _lzToken) external;\\n\\n function lzToken() external view returns (address);\\n\\n function nativeToken() external view returns (address);\\n\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { Origin } from \\\"./ILayerZeroEndpointV2.sol\\\";\\n\\ninterface ILayerZeroReceiver {\\n function allowInitializePath(Origin calldata _origin) external view returns (bool);\\n\\n function nextNonce(uint32 _eid, bytes32 _sender) external view returns (uint64);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nstruct SetConfigParam {\\n uint32 eid;\\n uint32 configType;\\n bytes config;\\n}\\n\\ninterface IMessageLibManager {\\n struct Timeout {\\n address lib;\\n uint256 expiry;\\n }\\n\\n event LibraryRegistered(address newLib);\\n event DefaultSendLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\\n event SendLibrarySet(address sender, uint32 eid, address newLib);\\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\\n\\n function registerLibrary(address _lib) external;\\n\\n function isRegisteredLibrary(address _lib) external view returns (bool);\\n\\n function getRegisteredLibraries() external view returns (address[] memory);\\n\\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\\n\\n function defaultSendLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\\n\\n /// ------------------- OApp interfaces -------------------\\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\\n\\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\\n\\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\\n\\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\\n\\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\\n\\n function getConfig(\\n address _oapp,\\n address _lib,\\n uint32 _eid,\\n uint32 _configType\\n ) external view returns (bytes memory config);\\n}\\n\",\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingChannel {\\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n\\n function eid() external view returns (uint32);\\n\\n // this is an emergency function if a message cannot be verified for some reasons\\n // required to provide _nextNonce to avoid race condition\\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\\n\\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\\n\\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n\\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\\n\\n function inboundPayloadHash(\\n address _receiver,\\n uint32 _srcEid,\\n bytes32 _sender,\\n uint64 _nonce\\n ) external view returns (bytes32);\\n\\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n}\\n\",\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingComposer {\\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\\n event LzComposeAlert(\\n address indexed from,\\n address indexed to,\\n address indexed executor,\\n bytes32 guid,\\n uint16 index,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n function composeQueue(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index\\n ) external view returns (bytes32 messageHash);\\n\\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\\n\\n function lzCompose(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingContext {\\n function isSendingMessage() external view returns (bool);\\n\\n function getSendContext() external view returns (uint32 dstEid, address sender);\\n}\\n\",\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Context} from \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * The initial owner is set to the address provided by the deployer. This can\\n * later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n /**\\n * @dev The caller account is not authorized to perform an operation.\\n */\\n error OwnableUnauthorizedAccount(address account);\\n\\n /**\\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\\n */\\n error OwnableInvalidOwner(address owner);\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\\n */\\n constructor(address initialOwner) {\\n if (initialOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n if (owner() != _msgSender()) {\\n revert OwnableUnauthorizedAccount(_msgSender());\\n }\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby disabling any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n if (newOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"./IERC20.sol\\\";\\nimport {IERC165} from \\\"./IERC165.sol\\\";\\n\\n/**\\n * @title IERC1363\\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\\n *\\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\\n */\\ninterface IERC1363 is IERC20, IERC165 {\\n /*\\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\\n * 0xb0202a11 ===\\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\\n */\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferAndCall(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @param data Additional data with no specified format, sent in call to `to`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param from The address which you want to send tokens from.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param from The address which you want to send tokens from.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @param data Additional data with no specified format, sent in call to `to`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\\n * @param spender The address which will spend the funds.\\n * @param value The amount of tokens to be spent.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function approveAndCall(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\\n * @param spender The address which will spend the funds.\\n * @param value The amount of tokens to be spent.\\n * @param data Additional data with no specified format, sent in call to `spender`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC165} from \\\"../utils/introspection/IERC165.sol\\\";\\n\",\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../token/ERC20/IERC20.sol\\\";\\n\",\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../IERC20.sol\\\";\\nimport {IERC1363} from \\\"../../../interfaces/IERC1363.sol\\\";\\nimport {Address} from \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n /**\\n * @dev An operation with an ERC-20 token failed.\\n */\\n error SafeERC20FailedOperation(address token);\\n\\n /**\\n * @dev Indicates a failed `decreaseAllowance` request.\\n */\\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\\n\\n /**\\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful.\\n */\\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\\n }\\n\\n /**\\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\\n */\\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\\n }\\n\\n /**\\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful.\\n *\\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \\\"client\\\"\\n * smart contract uses ERC-7674 to set temporary allowances, then the \\\"client\\\" smart contract should avoid using\\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\\n */\\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n forceApprove(token, spender, oldAllowance + value);\\n }\\n\\n /**\\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\\n * value, non-reverting calls are assumed to be successful.\\n *\\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \\\"client\\\"\\n * smart contract uses ERC-7674 to set temporary allowances, then the \\\"client\\\" smart contract should avoid using\\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\\n */\\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\\n unchecked {\\n uint256 currentAllowance = token.allowance(address(this), spender);\\n if (currentAllowance < requestedDecrease) {\\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\\n }\\n forceApprove(token, spender, currentAllowance - requestedDecrease);\\n }\\n }\\n\\n /**\\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\\n * to be set to zero before setting it to a non-zero value, such as USDT.\\n *\\n * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\\n * only sets the \\\"standard\\\" allowance. Any temporary allowance will remain active, in addition to the value being\\n * set here.\\n */\\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\\n\\n if (!_callOptionalReturnBool(token, approvalCall)) {\\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\\n _callOptionalReturn(token, approvalCall);\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\\n if (to.code.length == 0) {\\n safeTransfer(token, to, value);\\n } else if (!token.transferAndCall(to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\\n * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function transferFromAndCallRelaxed(\\n IERC1363 token,\\n address from,\\n address to,\\n uint256 value,\\n bytes memory data\\n ) internal {\\n if (to.code.length == 0) {\\n safeTransferFrom(token, from, to, value);\\n } else if (!token.transferFromAndCall(from, to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\\n * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\\n * once without retrying, and relies on the returned value to be true.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\\n if (to.code.length == 0) {\\n forceApprove(token, to, value);\\n } else if (!token.approveAndCall(to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n *\\n * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n uint256 returnSize;\\n uint256 returnValue;\\n assembly (\\\"memory-safe\\\") {\\n let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n // bubble errors\\n if iszero(success) {\\n let ptr := mload(0x40)\\n returndatacopy(ptr, 0, returndatasize())\\n revert(ptr, returndatasize())\\n }\\n returnSize := returndatasize()\\n returnValue := mload(0)\\n }\\n\\n if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n *\\n * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\\n */\\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\\n bool success;\\n uint256 returnSize;\\n uint256 returnValue;\\n assembly (\\\"memory-safe\\\") {\\n success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n returnSize := returndatasize()\\n returnValue := mload(0)\\n }\\n return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\\n }\\n}\\n\",\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Errors} from \\\"./Errors.sol\\\";\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev There's no code at `target` (it is not a contract).\\n */\\n error AddressEmptyCode(address target);\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n if (address(this).balance < amount) {\\n revert Errors.InsufficientBalance(address(this).balance, amount);\\n }\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n if (!success) {\\n revert Errors.FailedCall();\\n }\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason or custom error, it is bubbled\\n * up by this function (like regular Solidity function calls). However, if\\n * the call reverted with no returned reason, this function reverts with a\\n * {Errors.FailedCall} error.\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n if (address(this).balance < value) {\\n revert Errors.InsufficientBalance(address(this).balance, value);\\n }\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\\n * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\\n * of an unsuccessful call.\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata\\n ) internal view returns (bytes memory) {\\n if (!success) {\\n _revert(returndata);\\n } else {\\n // only check if target is a contract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n if (returndata.length == 0 && target.code.length == 0) {\\n revert AddressEmptyCode(target);\\n }\\n return returndata;\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\\n * revert reason or with a default {Errors.FailedCall} error.\\n */\\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\\n if (!success) {\\n _revert(returndata);\\n } else {\\n return returndata;\\n }\\n }\\n\\n /**\\n * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\\n */\\n function _revert(bytes memory returndata) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n assembly (\\\"memory-safe\\\") {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert Errors.FailedCall();\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Collection of common custom errors used in multiple contracts\\n *\\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\\n * It is recommended to avoid relying on the error API for critical functionality.\\n *\\n * _Available since v5.1._\\n */\\nlibrary Errors {\\n /**\\n * @dev The ETH balance of the account is not enough to perform the operation.\\n */\\n error InsufficientBalance(uint256 balance, uint256 needed);\\n\\n /**\\n * @dev A call to an address target failed. The target may have reverted.\\n */\\n error FailedCall();\\n\\n /**\\n * @dev The deployment failed.\\n */\\n error FailedDeployment();\\n\\n /**\\n * @dev A necessary precompile is missing.\\n */\\n error MissingPrecompile(address);\\n}\\n\",\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\"},\"contracts/TestingOApp.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.22;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { OApp, MessagingFee, Origin } from \\\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol\\\";\\nimport { MessagingReceipt } from \\\"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol\\\";\\n\\ncontract TestingOApp is OApp {\\n constructor(address _endpoint, address _delegate) OApp(_endpoint, _delegate) Ownable(_delegate) {}\\n\\n string public data = \\\"nothing received yet\\\";\\n\\n /**\\n * @notice Sends a message from the source chain to a destination chain.\\n * @param _dstEid The endpoint ID of the destination chain.\\n * @param _message The message string to be sent.\\n * @param _options Additional options for message execution.\\n * @dev Encodes the message as bytes and sends it using the `_lzSend` internal function.\\n * @return receipt A `MessagingReceipt` struct containing details of the message sent.\\n */\\n function send(\\n uint32 _dstEid,\\n string memory _message,\\n bytes calldata _options\\n ) external payable returns (MessagingReceipt memory receipt) {\\n bytes memory _payload = abi.encode(_message);\\n receipt = _lzSend(_dstEid, _payload, _options, MessagingFee(msg.value, 0), payable(msg.sender));\\n }\\n\\n /**\\n * @notice Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token.\\n * @param _dstEid Destination chain's endpoint ID.\\n * @param _message The message.\\n * @param _options Message execution options (e.g., for sending gas to destination).\\n * @param _payInLzToken Whether to return fee in ZRO token.\\n * @return fee A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token.\\n */\\n function quote(\\n uint32 _dstEid,\\n string memory _message,\\n bytes memory _options,\\n bool _payInLzToken\\n ) public view returns (MessagingFee memory fee) {\\n bytes memory payload = abi.encode(_message);\\n fee = _quote(_dstEid, payload, _options, _payInLzToken);\\n }\\n\\n /**\\n * @dev Internal function override to handle incoming messages from another chain.\\n * @dev _origin A struct containing information about the message sender.\\n * @dev _guid A unique global packet identifier for the message.\\n * @param payload The encoded message payload being received.\\n *\\n * @dev The following params are unused in the current implementation of the OApp.\\n * @dev _executor The address of the Executor responsible for processing the message.\\n * @dev _extraData Arbitrary data appended by the Executor to the message.\\n *\\n * Decodes the received payload and processes it as per the business logic defined in the function.\\n */\\n function _lzReceive(\\n Origin calldata /*_origin*/,\\n bytes32 /*_guid*/,\\n bytes calldata payload,\\n address /*_executor*/,\\n bytes calldata /*_extraData*/\\n ) internal override {\\n data = abi.decode(payload, (string));\\n }\\n}\\n\",\"keccak256\":\"0xeb1cc77e7b61bb8532270b2e3df333a10272d9ec0b44be6212039d7ebb69e193\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x60e0604052601460a09081527f6e6f7468696e672072656365697665642079657400000000000000000000000060c0526002906200003e908262000241565b503480156200004c57600080fd5b5060405162001714380380620017148339810160408190526200006f916200032a565b81818181806001600160a01b038116620000a357604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000ae816200014a565b506001600160a01b038083166080528116620000dd57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e190602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b5050505050505050505062000362565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001c557607f821691505b602082108103620001e657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200023c576000816000526020600020601f850160051c81016020861015620002175750805b601f850160051c820191505b81811015620002385782815560010162000223565b5050505b505050565b81516001600160401b038111156200025d576200025d6200019a565b62000275816200026e8454620001b0565b84620001ec565b602080601f831160018114620002ad5760008415620002945750858301515b600019600386901b1c1916600185901b17855562000238565b600085815260208120601f198616915b82811015620002de57888601518255948401946001909101908401620002bd565b5085821015620002fd5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80516001600160a01b03811681146200032557600080fd5b919050565b600080604083850312156200033e57600080fd5b62000349836200030d565b915062000359602084016200030d565b90509250929050565b60805161136c620003a86000396000818161015b0152818161034b015281816104f1015281816107f5015281816108e3015281816109da0152610a91015261136c6000f3fe6080604052600436106100e85760003560e01c806382413eac1161008a578063e0539e5811610059578063e0539e58146102bc578063f2fde38b146102dc578063f77e5dd3146102fc578063ff7bd03d1461032957600080fd5b806382413eac146102045780638da5cb5b14610243578063bb0b6a5314610261578063ca5eb5e11461029c57600080fd5b80635e280f11116100c65780635e280f1114610149578063715018a61461019557806373d4a13a146101aa5780637d25a05e146101cc57600080fd5b806313137d65146100ed57806317442b70146101025780633400288b14610129575b600080fd5b6101006100fb366004610c3b565b610349565b005b34801561010e57600080fd5b50604080516001815260026020820152015b60405180910390f35b34801561013557600080fd5b50610100610144366004610cf3565b610409565b34801561015557600080fd5b5061017d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610120565b3480156101a157600080fd5b5061010061041f565b3480156101b657600080fd5b506101bf610433565b6040516101209190610d63565b3480156101d857600080fd5b506101ec6101e7366004610cf3565b6104c1565b6040516001600160401b039091168152602001610120565b34801561021057600080fd5b5061023361021f366004610d7d565b6001600160a01b0381163014949350505050565b6040519015158152602001610120565b34801561024f57600080fd5b506000546001600160a01b031661017d565b34801561026d57600080fd5b5061028e61027c366004610de3565b60016020526000908152604090205481565b604051908152602001610120565b3480156102a857600080fd5b506101006102b7366004610dfe565b6104ca565b6102cf6102ca366004610ec6565b610550565b6040516101209190610f3c565b3480156102e857600080fd5b506101006102f7366004610dfe565b6105d9565b34801561030857600080fd5b5061031c610317366004610f7e565b610617565b6040516101209190611012565b34801561033557600080fd5b50610233610344366004611029565b61065b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610399576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b602087018035906103b3906103ae908a610de3565b610691565b146103f1576103c56020880188610de3565b60405163309afaf360e21b815263ffffffff909116600482015260208801356024820152604401610390565b610400878787878787876106cd565b50505050505050565b6104116106f0565b61041b828261071d565b5050565b6104276106f0565b6104316000610772565b565b6002805461044090611045565b80601f016020809104026020016040519081016040528092919081815260200182805461046c90611045565b80156104b95780601f1061048e576101008083540402835291602001916104b9565b820191906000526020600020905b81548152906001019060200180831161049c57829003601f168201915b505050505081565b60005b92915050565b6104d26106f0565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561053557600080fd5b505af1158015610549573d6000803e3d6000fd5b5050505050565b610558610b7f565b60008460405160200161056b9190610d63565b60408051601f198184030181526020601f870181900481028401810190925285835292506105cf9188918491908890889081908401838280828437600092018290525060408051808201909152348152602081019190915292503391506107c29050565b9695505050505050565b6105e16106f0565b6001600160a01b03811661060b57604051631e4fbdf760e01b815260006004820152602401610390565b61061481610772565b50565b604080518082019091526000808252602082015260008460405160200161063e9190610d63565b60405160208183030381529060405290506105cf868286866108cd565b60006020820180359060019083906106739086610de3565b63ffffffff1681526020810191909152604001600020541492915050565b63ffffffff8116600090815260016020526040812054806104c45760405163f6ff4fb760e01b815263ffffffff84166004820152602401610390565b6106d984860186611079565b6002906106e69082611106565b5050505050505050565b6000546001600160a01b031633146104315760405163118cdaa760e01b8152336004820152602401610390565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6107ca610b7f565b60006107d984600001516109ae565b6020850151909150156107f3576107f384602001516109d6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff1681526020016108438c610691565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b815260040161087f9291906111c5565b60806040518083038185885af115801561089d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906108c2919061128c565b979650505050505050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff16815260200161093089610691565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b81526004016109659291906111c5565b6040805180830381865afa158015610981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a591906112fd565b95945050505050565b60008134146109d2576040516304fb820960e51b8152346004820152602401610390565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5a9190611319565b90506001600160a01b038116610a83576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03818116604485015260648085018890528551808603909101815260849094019094526020830180516001600160e01b03166323b872dd60e01b17905261041b938516928690610b08908590610b0e565b50505050565b600080602060008451602086016000885af180610b31576040513d6000823e3d81fd5b50506000513d91508115610b49578060011415610b56565b6001600160a01b0384163b155b15610b0857604051635274afe760e01b81526001600160a01b0385166004820152602401610390565b60405180606001604052806000801916815260200160006001600160401b03168152602001610bc1604051806040016040528060008152602001600081525090565b905290565b600060608284031215610bd857600080fd5b50919050565b60008083601f840112610bf057600080fd5b5081356001600160401b03811115610c0757600080fd5b602083019150836020828501011115610c1f57600080fd5b9250929050565b6001600160a01b038116811461061457600080fd5b600080600080600080600060e0888a031215610c5657600080fd5b610c608989610bc6565b96506060880135955060808801356001600160401b0380821115610c8357600080fd5b610c8f8b838c01610bde565b909750955060a08a01359150610ca482610c26565b90935060c08901359080821115610cba57600080fd5b50610cc78a828b01610bde565b989b979a50959850939692959293505050565b803563ffffffff81168114610cee57600080fd5b919050565b60008060408385031215610d0657600080fd5b610d0f83610cda565b946020939093013593505050565b6000815180845260005b81811015610d4357602081850181015186830182015201610d27565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610d766020830184610d1d565b9392505050565b60008060008060a08587031215610d9357600080fd5b610d9d8686610bc6565b935060608501356001600160401b03811115610db857600080fd5b610dc487828801610bde565b9094509250506080850135610dd881610c26565b939692955090935050565b600060208284031215610df557600080fd5b610d7682610cda565b600060208284031215610e1057600080fd5b8135610d7681610c26565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115610e4b57610e4b610e1b565b604051601f8501601f19908116603f01168101908282118183101715610e7357610e73610e1b565b81604052809350858152868686011115610e8c57600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112610eb757600080fd5b610d7683833560208501610e31565b60008060008060608587031215610edc57600080fd5b610ee585610cda565b935060208501356001600160401b0380821115610f0157600080fd5b610f0d88838901610ea6565b94506040870135915080821115610f2357600080fd5b50610f3087828801610bde565b95989497509550505050565b6000608082019050825182526001600160401b0360208401511660208301526040830151610f77604084018280518252602090810151910152565b5092915050565b60008060008060808587031215610f9457600080fd5b610f9d85610cda565b935060208501356001600160401b0380821115610fb957600080fd5b610fc588838901610ea6565b94506040870135915080821115610fdb57600080fd5b508501601f81018713610fed57600080fd5b610ffc87823560208401610e31565b92505060608501358015158114610dd857600080fd5b8151815260208083015190820152604081016104c4565b60006060828403121561103b57600080fd5b610d768383610bc6565b600181811c9082168061105957607f821691505b602082108103610bd857634e487b7160e01b600052602260045260246000fd5b60006020828403121561108b57600080fd5b81356001600160401b038111156110a157600080fd5b6110ad84828501610ea6565b949350505050565b601f821115611101576000816000526020600020601f850160051c810160208610156110de5750805b601f850160051c820191505b818110156110fd578281556001016110ea565b5050505b505050565b81516001600160401b0381111561111f5761111f610e1b565b6111338161112d8454611045565b846110b5565b602080601f83116001811461116857600084156111505750858301515b600019600386901b1c1916600185901b1785556110fd565b600085815260208120601f198616915b8281101561119757888601518255948401946001909101908401611178565b50858210156111b55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a060808401526111fb60e0840182610d1d565b90506060850151603f198483030160a08501526112188282610d1d565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b60006040828403121561125057600080fd5b604051604081018181106001600160401b038211171561127257611272610e1b565b604052825181526020928301519281019290925250919050565b60006080828403121561129e57600080fd5b604051606081016001600160401b0382821081831117156112c1576112c1610e1b565b81604052845183526020850151915080821682146112de57600080fd5b5060208201526112f1846040850161123e565b60408201529392505050565b60006040828403121561130f57600080fd5b610d76838361123e565b60006020828403121561132b57600080fd5b8151610d7681610c2656fea26469706673582212203017c944155c3f234bb3739e3866ebf99c20e7b7c0028c651c3564360cf944be64736f6c63430008160033", + "deployedBytecode": "0x6080604052600436106100e85760003560e01c806382413eac1161008a578063e0539e5811610059578063e0539e58146102bc578063f2fde38b146102dc578063f77e5dd3146102fc578063ff7bd03d1461032957600080fd5b806382413eac146102045780638da5cb5b14610243578063bb0b6a5314610261578063ca5eb5e11461029c57600080fd5b80635e280f11116100c65780635e280f1114610149578063715018a61461019557806373d4a13a146101aa5780637d25a05e146101cc57600080fd5b806313137d65146100ed57806317442b70146101025780633400288b14610129575b600080fd5b6101006100fb366004610c3b565b610349565b005b34801561010e57600080fd5b50604080516001815260026020820152015b60405180910390f35b34801561013557600080fd5b50610100610144366004610cf3565b610409565b34801561015557600080fd5b5061017d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610120565b3480156101a157600080fd5b5061010061041f565b3480156101b657600080fd5b506101bf610433565b6040516101209190610d63565b3480156101d857600080fd5b506101ec6101e7366004610cf3565b6104c1565b6040516001600160401b039091168152602001610120565b34801561021057600080fd5b5061023361021f366004610d7d565b6001600160a01b0381163014949350505050565b6040519015158152602001610120565b34801561024f57600080fd5b506000546001600160a01b031661017d565b34801561026d57600080fd5b5061028e61027c366004610de3565b60016020526000908152604090205481565b604051908152602001610120565b3480156102a857600080fd5b506101006102b7366004610dfe565b6104ca565b6102cf6102ca366004610ec6565b610550565b6040516101209190610f3c565b3480156102e857600080fd5b506101006102f7366004610dfe565b6105d9565b34801561030857600080fd5b5061031c610317366004610f7e565b610617565b6040516101209190611012565b34801561033557600080fd5b50610233610344366004611029565b61065b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610399576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b602087018035906103b3906103ae908a610de3565b610691565b146103f1576103c56020880188610de3565b60405163309afaf360e21b815263ffffffff909116600482015260208801356024820152604401610390565b610400878787878787876106cd565b50505050505050565b6104116106f0565b61041b828261071d565b5050565b6104276106f0565b6104316000610772565b565b6002805461044090611045565b80601f016020809104026020016040519081016040528092919081815260200182805461046c90611045565b80156104b95780601f1061048e576101008083540402835291602001916104b9565b820191906000526020600020905b81548152906001019060200180831161049c57829003601f168201915b505050505081565b60005b92915050565b6104d26106f0565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561053557600080fd5b505af1158015610549573d6000803e3d6000fd5b5050505050565b610558610b7f565b60008460405160200161056b9190610d63565b60408051601f198184030181526020601f870181900481028401810190925285835292506105cf9188918491908890889081908401838280828437600092018290525060408051808201909152348152602081019190915292503391506107c29050565b9695505050505050565b6105e16106f0565b6001600160a01b03811661060b57604051631e4fbdf760e01b815260006004820152602401610390565b61061481610772565b50565b604080518082019091526000808252602082015260008460405160200161063e9190610d63565b60405160208183030381529060405290506105cf868286866108cd565b60006020820180359060019083906106739086610de3565b63ffffffff1681526020810191909152604001600020541492915050565b63ffffffff8116600090815260016020526040812054806104c45760405163f6ff4fb760e01b815263ffffffff84166004820152602401610390565b6106d984860186611079565b6002906106e69082611106565b5050505050505050565b6000546001600160a01b031633146104315760405163118cdaa760e01b8152336004820152602401610390565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6107ca610b7f565b60006107d984600001516109ae565b6020850151909150156107f3576107f384602001516109d6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff1681526020016108438c610691565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b815260040161087f9291906111c5565b60806040518083038185885af115801561089d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906108c2919061128c565b979650505050505050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff16815260200161093089610691565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b81526004016109659291906111c5565b6040805180830381865afa158015610981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a591906112fd565b95945050505050565b60008134146109d2576040516304fb820960e51b8152346004820152602401610390565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5a9190611319565b90506001600160a01b038116610a83576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03818116604485015260648085018890528551808603909101815260849094019094526020830180516001600160e01b03166323b872dd60e01b17905261041b938516928690610b08908590610b0e565b50505050565b600080602060008451602086016000885af180610b31576040513d6000823e3d81fd5b50506000513d91508115610b49578060011415610b56565b6001600160a01b0384163b155b15610b0857604051635274afe760e01b81526001600160a01b0385166004820152602401610390565b60405180606001604052806000801916815260200160006001600160401b03168152602001610bc1604051806040016040528060008152602001600081525090565b905290565b600060608284031215610bd857600080fd5b50919050565b60008083601f840112610bf057600080fd5b5081356001600160401b03811115610c0757600080fd5b602083019150836020828501011115610c1f57600080fd5b9250929050565b6001600160a01b038116811461061457600080fd5b600080600080600080600060e0888a031215610c5657600080fd5b610c608989610bc6565b96506060880135955060808801356001600160401b0380821115610c8357600080fd5b610c8f8b838c01610bde565b909750955060a08a01359150610ca482610c26565b90935060c08901359080821115610cba57600080fd5b50610cc78a828b01610bde565b989b979a50959850939692959293505050565b803563ffffffff81168114610cee57600080fd5b919050565b60008060408385031215610d0657600080fd5b610d0f83610cda565b946020939093013593505050565b6000815180845260005b81811015610d4357602081850181015186830182015201610d27565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610d766020830184610d1d565b9392505050565b60008060008060a08587031215610d9357600080fd5b610d9d8686610bc6565b935060608501356001600160401b03811115610db857600080fd5b610dc487828801610bde565b9094509250506080850135610dd881610c26565b939692955090935050565b600060208284031215610df557600080fd5b610d7682610cda565b600060208284031215610e1057600080fd5b8135610d7681610c26565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115610e4b57610e4b610e1b565b604051601f8501601f19908116603f01168101908282118183101715610e7357610e73610e1b565b81604052809350858152868686011115610e8c57600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112610eb757600080fd5b610d7683833560208501610e31565b60008060008060608587031215610edc57600080fd5b610ee585610cda565b935060208501356001600160401b0380821115610f0157600080fd5b610f0d88838901610ea6565b94506040870135915080821115610f2357600080fd5b50610f3087828801610bde565b95989497509550505050565b6000608082019050825182526001600160401b0360208401511660208301526040830151610f77604084018280518252602090810151910152565b5092915050565b60008060008060808587031215610f9457600080fd5b610f9d85610cda565b935060208501356001600160401b0380821115610fb957600080fd5b610fc588838901610ea6565b94506040870135915080821115610fdb57600080fd5b508501601f81018713610fed57600080fd5b610ffc87823560208401610e31565b92505060608501358015158114610dd857600080fd5b8151815260208083015190820152604081016104c4565b60006060828403121561103b57600080fd5b610d768383610bc6565b600181811c9082168061105957607f821691505b602082108103610bd857634e487b7160e01b600052602260045260246000fd5b60006020828403121561108b57600080fd5b81356001600160401b038111156110a157600080fd5b6110ad84828501610ea6565b949350505050565b601f821115611101576000816000526020600020601f850160051c810160208610156110de5750805b601f850160051c820191505b818110156110fd578281556001016110ea565b5050505b505050565b81516001600160401b0381111561111f5761111f610e1b565b6111338161112d8454611045565b846110b5565b602080601f83116001811461116857600084156111505750858301515b600019600386901b1c1916600185901b1785556110fd565b600085815260208120601f198616915b8281101561119757888601518255948401946001909101908401611178565b50858210156111b55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a060808401526111fb60e0840182610d1d565b90506060850151603f198483030160a08501526112188282610d1d565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b60006040828403121561125057600080fd5b604051604081018181106001600160401b038211171561127257611272610e1b565b604052825181526020928301519281019290925250919050565b60006080828403121561129e57600080fd5b604051606081016001600160401b0382821081831117156112c1576112c1610e1b565b81604052845183526020850151915080821682146112de57600080fd5b5060208201526112f1846040850161123e565b60408201529392505050565b60006040828403121561130f57600080fd5b610d76838361123e565b60006020828403121561132b57600080fd5b8151610d7681610c2656fea26469706673582212203017c944155c3f234bb3739e3866ebf99c20e7b7c0028c651c3564360cf944be64736f6c63430008160033", + "devdoc": { + "errors": { + "OwnableInvalidOwner(address)": [ + { + "details": "The owner is not a valid owner account. (eg. `address(0)`)" + } + ], + "OwnableUnauthorizedAccount(address)": [ + { + "details": "The caller account is not authorized to perform an operation." + } + ], + "SafeERC20FailedOperation(address)": [ + { + "details": "An operation with an ERC-20 token failed." + } + ] + }, + "kind": "dev", + "methods": { + "allowInitializePath((uint32,bytes32,uint64))": { + "details": "This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.", + "params": { + "origin": "The origin information containing the source endpoint and sender address." + }, + "returns": { + "_0": "Whether the path has been initialized." + } + }, + "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { + "details": "_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.", + "params": { + "_sender": "The sender address." + }, + "returns": { + "_0": "isSender Is a valid sender." + } + }, + "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": { + "details": "Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.", + "params": { + "_executor": "The address of the executor for the received message.", + "_extraData": "Additional arbitrary data provided by the corresponding executor.", + "_guid": "The unique identifier for the received LayerZero message.", + "_message": "The payload of the received message.", + "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message." + } + }, + "nextNonce(uint32,bytes32)": { + "details": "_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.", + "returns": { + "nonce": "The next nonce." + } + }, + "oAppVersion()": { + "returns": { + "receiverVersion": "The version of the OAppReceiver.sol implementation.", + "senderVersion": "The version of the OAppSender.sol implementation." + } + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "quote(uint32,string,bytes,bool)": { + "params": { + "_dstEid": "Destination chain's endpoint ID.", + "_message": "The message.", + "_options": "Message execution options (e.g., for sending gas to destination).", + "_payInLzToken": "Whether to return fee in ZRO token." + }, + "returns": { + "fee": "A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token." + } + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." + }, + "send(uint32,string,bytes)": { + "details": "Encodes the message as bytes and sends it using the `_lzSend` internal function.", + "params": { + "_dstEid": "The endpoint ID of the destination chain.", + "_message": "The message string to be sent.", + "_options": "Additional options for message execution." + }, + "returns": { + "receipt": "A `MessagingReceipt` struct containing details of the message sent." + } + }, + "setDelegate(address)": { + "details": "Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.", + "params": { + "_delegate": "The address of the delegate to be set." + } + }, + "setPeer(uint32,bytes32)": { + "details": "Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.", + "params": { + "_eid": "The endpoint ID.", + "_peer": "The address of the peer to be associated with the corresponding endpoint." + } + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "allowInitializePath((uint32,bytes32,uint64))": { + "notice": "Checks if the path initialization is allowed based on the provided origin." + }, + "endpoint()": { + "notice": "Retrieves the LayerZero endpoint associated with the OApp." + }, + "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { + "notice": "Indicates whether an address is an approved composeMsg sender to the Endpoint." + }, + "nextNonce(uint32,bytes32)": { + "notice": "Retrieves the next nonce for a given source endpoint and sender address." + }, + "oAppVersion()": { + "notice": "Retrieves the OApp version information." + }, + "peers(uint32)": { + "notice": "Retrieves the peer (OApp) associated with a corresponding endpoint." + }, + "quote(uint32,string,bytes,bool)": { + "notice": "Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token." + }, + "send(uint32,string,bytes)": { + "notice": "Sends a message from the source chain to a destination chain." + }, + "setDelegate(address)": { + "notice": "Sets the delegate address for the OApp." + }, + "setPeer(uint32,bytes32)": { + "notice": "Sets the peer address (OApp instance) for a corresponding endpoint." + } + }, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 1327, + "contract": "contracts/TestingOApp.sol:TestingOApp", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 64, + "contract": "contracts/TestingOApp.sol:TestingOApp", + "label": "peers", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_uint32,t_bytes32)" + }, + { + "astId": 2398, + "contract": "contracts/TestingOApp.sol:TestingOApp", + "label": "data", + "offset": 0, + "slot": "2", + "type": "t_string_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_uint32,t_bytes32)": { + "encoding": "mapping", + "key": "t_uint32", + "label": "mapping(uint32 => bytes32)", + "numberOfBytes": "32", + "value": "t_bytes32" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_uint32": { + "encoding": "inplace", + "label": "uint32", + "numberOfBytes": "4" + } + } + } +} \ No newline at end of file diff --git a/tests/e2e/testing_oapp/deployments/holesky/solcInputs/1c9f1ad99bb202d886a57bde06909cce.json b/tests/e2e/testing_oapp/deployments/holesky/solcInputs/1c9f1ad99bb202d886a57bde06909cce.json new file mode 100644 index 00000000..5112a94e --- /dev/null +++ b/tests/e2e/testing_oapp/deployments/holesky/solcInputs/1c9f1ad99bb202d886a57bde06909cce.json @@ -0,0 +1,102 @@ +{ + "language": "Solidity", + "sources": { + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppCore.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { ILayerZeroEndpointV2 } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\";\n\n/**\n * @title IOAppCore\n */\ninterface IOAppCore {\n // Custom error messages\n error OnlyPeer(uint32 eid, bytes32 sender);\n error NoPeer(uint32 eid);\n error InvalidEndpointCall();\n error InvalidDelegate();\n\n // Event emitted when a peer (OApp) is set for a corresponding endpoint\n event PeerSet(uint32 eid, bytes32 peer);\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n */\n function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);\n\n /**\n * @notice Retrieves the LayerZero endpoint associated with the OApp.\n * @return iEndpoint The LayerZero endpoint as an interface.\n */\n function endpoint() external view returns (ILayerZeroEndpointV2 iEndpoint);\n\n /**\n * @notice Retrieves the peer (OApp) associated with a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @return peer The peer address (OApp instance) associated with the corresponding endpoint.\n */\n function peers(uint32 _eid) external view returns (bytes32 peer);\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n */\n function setPeer(uint32 _eid, bytes32 _peer) external;\n\n /**\n * @notice Sets the delegate address for the OApp Core.\n * @param _delegate The address of the delegate to be set.\n */\n function setDelegate(address _delegate) external;\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.20;\n\nimport { ILayerZeroReceiver, Origin } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\";\n\ninterface IOAppReceiver is ILayerZeroReceiver {\n /**\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\n * @param _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @param _message The lzReceive payload.\n * @param _sender The sender address.\n * @return isSender Is a valid sender.\n *\n * @dev Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.\n * @dev The default sender IS the OAppReceiver implementer.\n */\n function isComposeMsgSender(\n Origin calldata _origin,\n bytes calldata _message,\n address _sender\n ) external view returns (bool isSender);\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\n// @dev Import the 'MessagingFee' and 'MessagingReceipt' so it's exposed to OApp implementers\n// solhint-disable-next-line no-unused-import\nimport { OAppSender, MessagingFee, MessagingReceipt } from \"./OAppSender.sol\";\n// @dev Import the 'Origin' so it's exposed to OApp implementers\n// solhint-disable-next-line no-unused-import\nimport { OAppReceiver, Origin } from \"./OAppReceiver.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OApp\n * @dev Abstract contract serving as the base for OApp implementation, combining OAppSender and OAppReceiver functionality.\n */\nabstract contract OApp is OAppSender, OAppReceiver {\n /**\n * @dev Constructor to initialize the OApp with the provided endpoint and owner.\n * @param _endpoint The address of the LOCAL LayerZero endpoint.\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\n */\n constructor(address _endpoint, address _delegate) OAppCore(_endpoint, _delegate) {}\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol implementation.\n * @return receiverVersion The version of the OAppReceiver.sol implementation.\n */\n function oAppVersion()\n public\n pure\n virtual\n override(OAppSender, OAppReceiver)\n returns (uint64 senderVersion, uint64 receiverVersion)\n {\n return (SENDER_VERSION, RECEIVER_VERSION);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppCore.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { IOAppCore, ILayerZeroEndpointV2 } from \"./interfaces/IOAppCore.sol\";\n\n/**\n * @title OAppCore\n * @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations.\n */\nabstract contract OAppCore is IOAppCore, Ownable {\n // The LayerZero endpoint associated with the given OApp\n ILayerZeroEndpointV2 public immutable endpoint;\n\n // Mapping to store peers associated with corresponding endpoints\n mapping(uint32 eid => bytes32 peer) public peers;\n\n /**\n * @dev Constructor to initialize the OAppCore with the provided endpoint and delegate.\n * @param _endpoint The address of the LOCAL Layer Zero endpoint.\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\n *\n * @dev The delegate typically should be set as the owner of the contract.\n */\n constructor(address _endpoint, address _delegate) {\n endpoint = ILayerZeroEndpointV2(_endpoint);\n\n if (_delegate == address(0)) revert InvalidDelegate();\n endpoint.setDelegate(_delegate);\n }\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n *\n * @dev Only the owner/admin of the OApp can call this function.\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\n * @dev Set this to bytes32(0) to remove the peer address.\n * @dev Peer is a bytes32 to accommodate non-evm chains.\n */\n function setPeer(uint32 _eid, bytes32 _peer) public virtual onlyOwner {\n _setPeer(_eid, _peer);\n }\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n *\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\n * @dev Set this to bytes32(0) to remove the peer address.\n * @dev Peer is a bytes32 to accommodate non-evm chains.\n */\n function _setPeer(uint32 _eid, bytes32 _peer) internal virtual {\n peers[_eid] = _peer;\n emit PeerSet(_eid, _peer);\n }\n\n /**\n * @notice Internal function to get the peer address associated with a specific endpoint; reverts if NOT set.\n * ie. the peer is set to bytes32(0).\n * @param _eid The endpoint ID.\n * @return peer The address of the peer associated with the specified endpoint.\n */\n function _getPeerOrRevert(uint32 _eid) internal view virtual returns (bytes32) {\n bytes32 peer = peers[_eid];\n if (peer == bytes32(0)) revert NoPeer(_eid);\n return peer;\n }\n\n /**\n * @notice Sets the delegate address for the OApp.\n * @param _delegate The address of the delegate to be set.\n *\n * @dev Only the owner/admin of the OApp can call this function.\n * @dev Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\n */\n function setDelegate(address _delegate) public onlyOwner {\n endpoint.setDelegate(_delegate);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { IOAppReceiver, Origin } from \"./interfaces/IOAppReceiver.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OAppReceiver\n * @dev Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers.\n */\nabstract contract OAppReceiver is IOAppReceiver, OAppCore {\n // Custom error message for when the caller is not the registered endpoint/\n error OnlyEndpoint(address addr);\n\n // @dev The version of the OAppReceiver implementation.\n // @dev Version is bumped when changes are made to this contract.\n uint64 internal constant RECEIVER_VERSION = 2;\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n *\n * @dev Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented.\n * ie. this is a RECEIVE only OApp.\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions.\n */\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\n return (0, RECEIVER_VERSION);\n }\n\n /**\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\n * @dev _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @dev _message The lzReceive payload.\n * @param _sender The sender address.\n * @return isSender Is a valid sender.\n *\n * @dev Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.\n * @dev The default sender IS the OAppReceiver implementer.\n */\n function isComposeMsgSender(\n Origin calldata /*_origin*/,\n bytes calldata /*_message*/,\n address _sender\n ) public view virtual returns (bool) {\n return _sender == address(this);\n }\n\n /**\n * @notice Checks if the path initialization is allowed based on the provided origin.\n * @param origin The origin information containing the source endpoint and sender address.\n * @return Whether the path has been initialized.\n *\n * @dev This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.\n * @dev This defaults to assuming if a peer has been set, its initialized.\n * Can be overridden by the OApp if there is other logic to determine this.\n */\n function allowInitializePath(Origin calldata origin) public view virtual returns (bool) {\n return peers[origin.srcEid] == origin.sender;\n }\n\n /**\n * @notice Retrieves the next nonce for a given source endpoint and sender address.\n * @dev _srcEid The source endpoint ID.\n * @dev _sender The sender address.\n * @return nonce The next nonce.\n *\n * @dev The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.\n * @dev Is required by the off-chain executor to determine the OApp expects msg execution is ordered.\n * @dev This is also enforced by the OApp.\n * @dev By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\n */\n function nextNonce(uint32 /*_srcEid*/, bytes32 /*_sender*/) public view virtual returns (uint64 nonce) {\n return 0;\n }\n\n /**\n * @dev Entry point for receiving messages or packets from the endpoint.\n * @param _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @param _guid The unique identifier for the received LayerZero message.\n * @param _message The payload of the received message.\n * @param _executor The address of the executor for the received message.\n * @param _extraData Additional arbitrary data provided by the corresponding executor.\n *\n * @dev Entry point for receiving msg/packet from the LayerZero endpoint.\n */\n function lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) public payable virtual {\n // Ensures that only the endpoint can attempt to lzReceive() messages to this OApp.\n if (address(endpoint) != msg.sender) revert OnlyEndpoint(msg.sender);\n\n // Ensure that the sender matches the expected peer for the source endpoint.\n if (_getPeerOrRevert(_origin.srcEid) != _origin.sender) revert OnlyPeer(_origin.srcEid, _origin.sender);\n\n // Call the internal OApp implementation of lzReceive.\n _lzReceive(_origin, _guid, _message, _executor, _extraData);\n }\n\n /**\n * @dev Internal function to implement lzReceive logic without needing to copy the basic parameter validation.\n */\n function _lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) internal virtual;\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { SafeERC20, IERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { MessagingParams, MessagingFee, MessagingReceipt } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OAppSender\n * @dev Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.\n */\nabstract contract OAppSender is OAppCore {\n using SafeERC20 for IERC20;\n\n // Custom error messages\n error NotEnoughNative(uint256 msgValue);\n error LzTokenUnavailable();\n\n // @dev The version of the OAppSender implementation.\n // @dev Version is bumped when changes are made to this contract.\n uint64 internal constant SENDER_VERSION = 1;\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n *\n * @dev Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented.\n * ie. this is a SEND only OApp.\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions\n */\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\n return (SENDER_VERSION, 0);\n }\n\n /**\n * @dev Internal function to interact with the LayerZero EndpointV2.quote() for fee calculation.\n * @param _dstEid The destination endpoint ID.\n * @param _message The message payload.\n * @param _options Additional options for the message.\n * @param _payInLzToken Flag indicating whether to pay the fee in LZ tokens.\n * @return fee The calculated MessagingFee for the message.\n * - nativeFee: The native fee for the message.\n * - lzTokenFee: The LZ token fee for the message.\n */\n function _quote(\n uint32 _dstEid,\n bytes memory _message,\n bytes memory _options,\n bool _payInLzToken\n ) internal view virtual returns (MessagingFee memory fee) {\n return\n endpoint.quote(\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _payInLzToken),\n address(this)\n );\n }\n\n /**\n * @dev Internal function to interact with the LayerZero EndpointV2.send() for sending a message.\n * @param _dstEid The destination endpoint ID.\n * @param _message The message payload.\n * @param _options Additional options for the message.\n * @param _fee The calculated LayerZero fee for the message.\n * - nativeFee: The native fee.\n * - lzTokenFee: The lzToken fee.\n * @param _refundAddress The address to receive any excess fee values sent to the endpoint.\n * @return receipt The receipt for the sent message.\n * - guid: The unique identifier for the sent message.\n * - nonce: The nonce of the sent message.\n * - fee: The LayerZero fee incurred for the message.\n */\n function _lzSend(\n uint32 _dstEid,\n bytes memory _message,\n bytes memory _options,\n MessagingFee memory _fee,\n address _refundAddress\n ) internal virtual returns (MessagingReceipt memory receipt) {\n // @dev Push corresponding fees to the endpoint, any excess is sent back to the _refundAddress from the endpoint.\n uint256 messageValue = _payNative(_fee.nativeFee);\n if (_fee.lzTokenFee > 0) _payLzToken(_fee.lzTokenFee);\n\n return\n // solhint-disable-next-line check-send-result\n endpoint.send{ value: messageValue }(\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _fee.lzTokenFee > 0),\n _refundAddress\n );\n }\n\n /**\n * @dev Internal function to pay the native fee associated with the message.\n * @param _nativeFee The native fee to be paid.\n * @return nativeFee The amount of native currency paid.\n *\n * @dev If the OApp needs to initiate MULTIPLE LayerZero messages in a single transaction,\n * this will need to be overridden because msg.value would contain multiple lzFees.\n * @dev Should be overridden in the event the LayerZero endpoint requires a different native currency.\n * @dev Some EVMs use an ERC20 as a method for paying transactions/gasFees.\n * @dev The endpoint is EITHER/OR, ie. it will NOT support both types of native payment at a time.\n */\n function _payNative(uint256 _nativeFee) internal virtual returns (uint256 nativeFee) {\n if (msg.value != _nativeFee) revert NotEnoughNative(msg.value);\n return _nativeFee;\n }\n\n /**\n * @dev Internal function to pay the LZ token fee associated with the message.\n * @param _lzTokenFee The LZ token fee to be paid.\n *\n * @dev If the caller is trying to pay in the specified lzToken, then the lzTokenFee is passed to the endpoint.\n * @dev Any excess sent, is passed back to the specified _refundAddress in the _lzSend().\n */\n function _payLzToken(uint256 _lzTokenFee) internal virtual {\n // @dev Cannot cache the token because it is not immutable in the endpoint.\n address lzToken = endpoint.lzToken();\n if (lzToken == address(0)) revert LzTokenUnavailable();\n\n // Pay LZ token fee by sending tokens to the endpoint.\n IERC20(lzToken).safeTransferFrom(msg.sender, address(endpoint), _lzTokenFee);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nimport { IMessageLibManager } from \"./IMessageLibManager.sol\";\nimport { IMessagingComposer } from \"./IMessagingComposer.sol\";\nimport { IMessagingChannel } from \"./IMessagingChannel.sol\";\nimport { IMessagingContext } from \"./IMessagingContext.sol\";\n\nstruct MessagingParams {\n uint32 dstEid;\n bytes32 receiver;\n bytes message;\n bytes options;\n bool payInLzToken;\n}\n\nstruct MessagingReceipt {\n bytes32 guid;\n uint64 nonce;\n MessagingFee fee;\n}\n\nstruct MessagingFee {\n uint256 nativeFee;\n uint256 lzTokenFee;\n}\n\nstruct Origin {\n uint32 srcEid;\n bytes32 sender;\n uint64 nonce;\n}\n\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\n\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\n\n event PacketDelivered(Origin origin, address receiver);\n\n event LzReceiveAlert(\n address indexed receiver,\n address indexed executor,\n Origin origin,\n bytes32 guid,\n uint256 gas,\n uint256 value,\n bytes message,\n bytes extraData,\n bytes reason\n );\n\n event LzTokenSet(address token);\n\n event DelegateSet(address sender, address delegate);\n\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\n\n function send(\n MessagingParams calldata _params,\n address _refundAddress\n ) external payable returns (MessagingReceipt memory);\n\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\n\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\n\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\n\n function lzReceive(\n Origin calldata _origin,\n address _receiver,\n bytes32 _guid,\n bytes calldata _message,\n bytes calldata _extraData\n ) external payable;\n\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\n\n function setLzToken(address _lzToken) external;\n\n function lzToken() external view returns (address);\n\n function nativeToken() external view returns (address);\n\n function setDelegate(address _delegate) external;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nimport { Origin } from \"./ILayerZeroEndpointV2.sol\";\n\ninterface ILayerZeroReceiver {\n function allowInitializePath(Origin calldata _origin) external view returns (bool);\n\n function nextNonce(uint32 _eid, bytes32 _sender) external view returns (uint64);\n\n function lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) external payable;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nstruct SetConfigParam {\n uint32 eid;\n uint32 configType;\n bytes config;\n}\n\ninterface IMessageLibManager {\n struct Timeout {\n address lib;\n uint256 expiry;\n }\n\n event LibraryRegistered(address newLib);\n event DefaultSendLibrarySet(uint32 eid, address newLib);\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\n event SendLibrarySet(address sender, uint32 eid, address newLib);\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\n\n function registerLibrary(address _lib) external;\n\n function isRegisteredLibrary(address _lib) external view returns (bool);\n\n function getRegisteredLibraries() external view returns (address[] memory);\n\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\n\n function defaultSendLibrary(uint32 _eid) external view returns (address);\n\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\n\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\n\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\n\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\n\n function isSupportedEid(uint32 _eid) external view returns (bool);\n\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\n\n /// ------------------- OApp interfaces -------------------\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\n\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\n\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\n\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\n\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\n\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\n\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\n\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\n\n function getConfig(\n address _oapp,\n address _lib,\n uint32 _eid,\n uint32 _configType\n ) external view returns (bytes memory config);\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingChannel {\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\n\n function eid() external view returns (uint32);\n\n // this is an emergency function if a message cannot be verified for some reasons\n // required to provide _nextNonce to avoid race condition\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\n\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\n\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\n\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\n\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\n\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\n\n function inboundPayloadHash(\n address _receiver,\n uint32 _srcEid,\n bytes32 _sender,\n uint64 _nonce\n ) external view returns (bytes32);\n\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingComposer {\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\n event LzComposeAlert(\n address indexed from,\n address indexed to,\n address indexed executor,\n bytes32 guid,\n uint16 index,\n uint256 gas,\n uint256 value,\n bytes message,\n bytes extraData,\n bytes reason\n );\n\n function composeQueue(\n address _from,\n address _to,\n bytes32 _guid,\n uint16 _index\n ) external view returns (bytes32 messageHash);\n\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\n\n function lzCompose(\n address _from,\n address _to,\n bytes32 _guid,\n uint16 _index,\n bytes calldata _message,\n bytes calldata _extraData\n ) external payable;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingContext {\n function isSendingMessage() external view returns (bool);\n\n function getSendContext() external view returns (uint32 dstEid, address sender);\n}\n" + }, + "@openzeppelin/contracts/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {Context} from \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n /**\n * @dev The caller account is not authorized to perform an operation.\n */\n error OwnableUnauthorizedAccount(address account);\n\n /**\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\n */\n error OwnableInvalidOwner(address owner);\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n */\n constructor(address initialOwner) {\n if (initialOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n if (owner() != _msgSender()) {\n revert OwnableUnauthorizedAccount(_msgSender());\n }\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby disabling any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n if (newOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "@openzeppelin/contracts/interfaces/IERC1363.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC165} from \"./IERC165.sol\";\n\n/**\n * @title IERC1363\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\n *\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\n */\ninterface IERC1363 is IERC20, IERC165 {\n /*\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\n * 0xb0202a11 ===\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\n */\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @param data Additional data with no specified format, sent in call to `spender`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\n}\n" + }, + "@openzeppelin/contracts/interfaces/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"../utils/introspection/IERC165.sol\";\n" + }, + "@openzeppelin/contracts/interfaces/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\n" + }, + "@openzeppelin/contracts/token/ERC20/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-20 standard as defined in the ERC.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the value of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the value of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\n * allowance mechanism. `value` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n" + }, + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\nimport {IERC1363} from \"../../../interfaces/IERC1363.sol\";\nimport {Address} from \"../../../utils/Address.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n /**\n * @dev An operation with an ERC-20 token failed.\n */\n error SafeERC20FailedOperation(address token);\n\n /**\n * @dev Indicates a failed `decreaseAllowance` request.\n */\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\n\n /**\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\n }\n\n /**\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\n */\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n }\n\n /**\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n uint256 oldAllowance = token.allowance(address(this), spender);\n forceApprove(token, spender, oldAllowance + value);\n }\n\n /**\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n * value, non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\n unchecked {\n uint256 currentAllowance = token.allowance(address(this), spender);\n if (currentAllowance < requestedDecrease) {\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\n }\n forceApprove(token, spender, currentAllowance - requestedDecrease);\n }\n }\n\n /**\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n * to be set to zero before setting it to a non-zero value, such as USDT.\n *\n * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\n * only sets the \"standard\" allowance. Any temporary allowance will remain active, in addition to the value being\n * set here.\n */\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\n\n if (!_callOptionalReturnBool(token, approvalCall)) {\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\n _callOptionalReturn(token, approvalCall);\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n safeTransfer(token, to, value);\n } else if (!token.transferAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\n * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferFromAndCallRelaxed(\n IERC1363 token,\n address from,\n address to,\n uint256 value,\n bytes memory data\n ) internal {\n if (to.code.length == 0) {\n safeTransferFrom(token, from, to, value);\n } else if (!token.transferFromAndCall(from, to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\n * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\n * once without retrying, and relies on the returned value to be true.\n *\n * Reverts if the returned value is other than `true`.\n */\n function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n forceApprove(token, to, value);\n } else if (!token.approveAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\n */\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n // bubble errors\n if iszero(success) {\n let ptr := mload(0x40)\n returndatacopy(ptr, 0, returndatasize())\n revert(ptr, returndatasize())\n }\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n\n if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\n */\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\n bool success;\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\nimport {Errors} from \"./Errors.sol\";\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev There's no code at `target` (it is not a contract).\n */\n error AddressEmptyCode(address target);\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n if (address(this).balance < amount) {\n revert Errors.InsufficientBalance(address(this).balance, amount);\n }\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n if (!success) {\n revert Errors.FailedCall();\n }\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason or custom error, it is bubbled\n * up by this function (like regular Solidity function calls). However, if\n * the call reverted with no returned reason, this function reverts with a\n * {Errors.FailedCall} error.\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n if (address(this).balance < value) {\n revert Errors.InsufficientBalance(address(this).balance, value);\n }\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\n * of an unsuccessful call.\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata\n ) internal view returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n // only check if target is a contract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n if (returndata.length == 0 && target.code.length == 0) {\n revert AddressEmptyCode(target);\n }\n return returndata;\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n * revert reason or with a default {Errors.FailedCall} error.\n */\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n return returndata;\n }\n }\n\n /**\n * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\n */\n function _revert(bytes memory returndata) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n assembly (\"memory-safe\") {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert Errors.FailedCall();\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n function _contextSuffixLength() internal view virtual returns (uint256) {\n return 0;\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Errors.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of common custom errors used in multiple contracts\n *\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\n * It is recommended to avoid relying on the error API for critical functionality.\n *\n * _Available since v5.1._\n */\nlibrary Errors {\n /**\n * @dev The ETH balance of the account is not enough to perform the operation.\n */\n error InsufficientBalance(uint256 balance, uint256 needed);\n\n /**\n * @dev A call to an address target failed. The target may have reverted.\n */\n error FailedCall();\n\n /**\n * @dev The deployment failed.\n */\n error FailedDeployment();\n\n /**\n * @dev A necessary precompile is missing.\n */\n error MissingPrecompile(address);\n}\n" + }, + "@openzeppelin/contracts/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "contracts/TestingOApp.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.22;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { OApp, MessagingFee, Origin } from \"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol\";\nimport { MessagingReceipt } from \"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol\";\n\ncontract TestingOApp is OApp {\n constructor(address _endpoint, address _delegate) OApp(_endpoint, _delegate) Ownable(_delegate) {}\n\n uint public data = 0;\n\n /**\n * @notice Sends a message from the source chain to a destination chain.\n * @param _dstEid The endpoint ID of the destination chain.\n * @param _message The message string to be sent.\n * @param _options Additional options for message execution.\n * @dev Encodes the message as bytes and sends it using the `_lzSend` internal function.\n * @return receipt A `MessagingReceipt` struct containing details of the message sent.\n */\n function send(\n uint32 _dstEid,\n string memory _message,\n bytes calldata _options\n ) external payable returns (MessagingReceipt memory receipt) {\n bytes memory _payload = abi.encode(_message);\n receipt = _lzSend(_dstEid, _payload, _options, MessagingFee(msg.value, 0), payable(msg.sender));\n }\n\n /**\n * @notice Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token.\n * @param _dstEid Destination chain's endpoint ID.\n * @param _message The message.\n * @param _options Message execution options (e.g., for sending gas to destination).\n * @param _payInLzToken Whether to return fee in ZRO token.\n * @return fee A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token.\n */\n function quote(\n uint32 _dstEid,\n string memory _message,\n bytes memory _options,\n bool _payInLzToken\n ) public view returns (MessagingFee memory fee) {\n bytes memory payload = abi.encode(_message);\n fee = _quote(_dstEid, payload, _options, _payInLzToken);\n }\n\n /**\n * @dev Internal function override to handle incoming messages from another chain.\n * @dev _origin A struct containing information about the message sender.\n * @dev _guid A unique global packet identifier for the message.\n * @param payload The encoded message payload being received.\n *\n * @dev The following params are unused in the current implementation of the OApp.\n * @dev _executor The address of the Executor responsible for processing the message.\n * @dev _extraData Arbitrary data appended by the Executor to the message.\n *\n * Decodes the received payload and processes it as per the business logic defined in the function.\n */\n function _lzReceive(\n Origin calldata /*_origin*/,\n bytes32 /*_guid*/,\n bytes calldata payload,\n address /*_executor*/,\n bytes calldata /*_extraData*/\n ) internal override {\n data = abi.decode(payload, (uint));\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "evmVersion": "paris", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/tests/e2e/testing_oapp/deployments/holesky/solcInputs/6e267ad209b523b5db9591b68bbd936f.json b/tests/e2e/testing_oapp/deployments/holesky/solcInputs/6e267ad209b523b5db9591b68bbd936f.json new file mode 100644 index 00000000..bbc0519e --- /dev/null +++ b/tests/e2e/testing_oapp/deployments/holesky/solcInputs/6e267ad209b523b5db9591b68bbd936f.json @@ -0,0 +1,102 @@ +{ + "language": "Solidity", + "sources": { + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppCore.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { ILayerZeroEndpointV2 } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\";\n\n/**\n * @title IOAppCore\n */\ninterface IOAppCore {\n // Custom error messages\n error OnlyPeer(uint32 eid, bytes32 sender);\n error NoPeer(uint32 eid);\n error InvalidEndpointCall();\n error InvalidDelegate();\n\n // Event emitted when a peer (OApp) is set for a corresponding endpoint\n event PeerSet(uint32 eid, bytes32 peer);\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n */\n function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);\n\n /**\n * @notice Retrieves the LayerZero endpoint associated with the OApp.\n * @return iEndpoint The LayerZero endpoint as an interface.\n */\n function endpoint() external view returns (ILayerZeroEndpointV2 iEndpoint);\n\n /**\n * @notice Retrieves the peer (OApp) associated with a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @return peer The peer address (OApp instance) associated with the corresponding endpoint.\n */\n function peers(uint32 _eid) external view returns (bytes32 peer);\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n */\n function setPeer(uint32 _eid, bytes32 _peer) external;\n\n /**\n * @notice Sets the delegate address for the OApp Core.\n * @param _delegate The address of the delegate to be set.\n */\n function setDelegate(address _delegate) external;\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.20;\n\nimport { ILayerZeroReceiver, Origin } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\";\n\ninterface IOAppReceiver is ILayerZeroReceiver {\n /**\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\n * @param _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @param _message The lzReceive payload.\n * @param _sender The sender address.\n * @return isSender Is a valid sender.\n *\n * @dev Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.\n * @dev The default sender IS the OAppReceiver implementer.\n */\n function isComposeMsgSender(\n Origin calldata _origin,\n bytes calldata _message,\n address _sender\n ) external view returns (bool isSender);\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\n// @dev Import the 'MessagingFee' and 'MessagingReceipt' so it's exposed to OApp implementers\n// solhint-disable-next-line no-unused-import\nimport { OAppSender, MessagingFee, MessagingReceipt } from \"./OAppSender.sol\";\n// @dev Import the 'Origin' so it's exposed to OApp implementers\n// solhint-disable-next-line no-unused-import\nimport { OAppReceiver, Origin } from \"./OAppReceiver.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OApp\n * @dev Abstract contract serving as the base for OApp implementation, combining OAppSender and OAppReceiver functionality.\n */\nabstract contract OApp is OAppSender, OAppReceiver {\n /**\n * @dev Constructor to initialize the OApp with the provided endpoint and owner.\n * @param _endpoint The address of the LOCAL LayerZero endpoint.\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\n */\n constructor(address _endpoint, address _delegate) OAppCore(_endpoint, _delegate) {}\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol implementation.\n * @return receiverVersion The version of the OAppReceiver.sol implementation.\n */\n function oAppVersion()\n public\n pure\n virtual\n override(OAppSender, OAppReceiver)\n returns (uint64 senderVersion, uint64 receiverVersion)\n {\n return (SENDER_VERSION, RECEIVER_VERSION);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppCore.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { IOAppCore, ILayerZeroEndpointV2 } from \"./interfaces/IOAppCore.sol\";\n\n/**\n * @title OAppCore\n * @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations.\n */\nabstract contract OAppCore is IOAppCore, Ownable {\n // The LayerZero endpoint associated with the given OApp\n ILayerZeroEndpointV2 public immutable endpoint;\n\n // Mapping to store peers associated with corresponding endpoints\n mapping(uint32 eid => bytes32 peer) public peers;\n\n /**\n * @dev Constructor to initialize the OAppCore with the provided endpoint and delegate.\n * @param _endpoint The address of the LOCAL Layer Zero endpoint.\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\n *\n * @dev The delegate typically should be set as the owner of the contract.\n */\n constructor(address _endpoint, address _delegate) {\n endpoint = ILayerZeroEndpointV2(_endpoint);\n\n if (_delegate == address(0)) revert InvalidDelegate();\n endpoint.setDelegate(_delegate);\n }\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n *\n * @dev Only the owner/admin of the OApp can call this function.\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\n * @dev Set this to bytes32(0) to remove the peer address.\n * @dev Peer is a bytes32 to accommodate non-evm chains.\n */\n function setPeer(uint32 _eid, bytes32 _peer) public virtual onlyOwner {\n _setPeer(_eid, _peer);\n }\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n *\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\n * @dev Set this to bytes32(0) to remove the peer address.\n * @dev Peer is a bytes32 to accommodate non-evm chains.\n */\n function _setPeer(uint32 _eid, bytes32 _peer) internal virtual {\n peers[_eid] = _peer;\n emit PeerSet(_eid, _peer);\n }\n\n /**\n * @notice Internal function to get the peer address associated with a specific endpoint; reverts if NOT set.\n * ie. the peer is set to bytes32(0).\n * @param _eid The endpoint ID.\n * @return peer The address of the peer associated with the specified endpoint.\n */\n function _getPeerOrRevert(uint32 _eid) internal view virtual returns (bytes32) {\n bytes32 peer = peers[_eid];\n if (peer == bytes32(0)) revert NoPeer(_eid);\n return peer;\n }\n\n /**\n * @notice Sets the delegate address for the OApp.\n * @param _delegate The address of the delegate to be set.\n *\n * @dev Only the owner/admin of the OApp can call this function.\n * @dev Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\n */\n function setDelegate(address _delegate) public onlyOwner {\n endpoint.setDelegate(_delegate);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { IOAppReceiver, Origin } from \"./interfaces/IOAppReceiver.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OAppReceiver\n * @dev Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers.\n */\nabstract contract OAppReceiver is IOAppReceiver, OAppCore {\n // Custom error message for when the caller is not the registered endpoint/\n error OnlyEndpoint(address addr);\n\n // @dev The version of the OAppReceiver implementation.\n // @dev Version is bumped when changes are made to this contract.\n uint64 internal constant RECEIVER_VERSION = 2;\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n *\n * @dev Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented.\n * ie. this is a RECEIVE only OApp.\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions.\n */\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\n return (0, RECEIVER_VERSION);\n }\n\n /**\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\n * @dev _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @dev _message The lzReceive payload.\n * @param _sender The sender address.\n * @return isSender Is a valid sender.\n *\n * @dev Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.\n * @dev The default sender IS the OAppReceiver implementer.\n */\n function isComposeMsgSender(\n Origin calldata /*_origin*/,\n bytes calldata /*_message*/,\n address _sender\n ) public view virtual returns (bool) {\n return _sender == address(this);\n }\n\n /**\n * @notice Checks if the path initialization is allowed based on the provided origin.\n * @param origin The origin information containing the source endpoint and sender address.\n * @return Whether the path has been initialized.\n *\n * @dev This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.\n * @dev This defaults to assuming if a peer has been set, its initialized.\n * Can be overridden by the OApp if there is other logic to determine this.\n */\n function allowInitializePath(Origin calldata origin) public view virtual returns (bool) {\n return peers[origin.srcEid] == origin.sender;\n }\n\n /**\n * @notice Retrieves the next nonce for a given source endpoint and sender address.\n * @dev _srcEid The source endpoint ID.\n * @dev _sender The sender address.\n * @return nonce The next nonce.\n *\n * @dev The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.\n * @dev Is required by the off-chain executor to determine the OApp expects msg execution is ordered.\n * @dev This is also enforced by the OApp.\n * @dev By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\n */\n function nextNonce(uint32 /*_srcEid*/, bytes32 /*_sender*/) public view virtual returns (uint64 nonce) {\n return 0;\n }\n\n /**\n * @dev Entry point for receiving messages or packets from the endpoint.\n * @param _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @param _guid The unique identifier for the received LayerZero message.\n * @param _message The payload of the received message.\n * @param _executor The address of the executor for the received message.\n * @param _extraData Additional arbitrary data provided by the corresponding executor.\n *\n * @dev Entry point for receiving msg/packet from the LayerZero endpoint.\n */\n function lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) public payable virtual {\n // Ensures that only the endpoint can attempt to lzReceive() messages to this OApp.\n if (address(endpoint) != msg.sender) revert OnlyEndpoint(msg.sender);\n\n // Ensure that the sender matches the expected peer for the source endpoint.\n if (_getPeerOrRevert(_origin.srcEid) != _origin.sender) revert OnlyPeer(_origin.srcEid, _origin.sender);\n\n // Call the internal OApp implementation of lzReceive.\n _lzReceive(_origin, _guid, _message, _executor, _extraData);\n }\n\n /**\n * @dev Internal function to implement lzReceive logic without needing to copy the basic parameter validation.\n */\n function _lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) internal virtual;\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { SafeERC20, IERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { MessagingParams, MessagingFee, MessagingReceipt } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OAppSender\n * @dev Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.\n */\nabstract contract OAppSender is OAppCore {\n using SafeERC20 for IERC20;\n\n // Custom error messages\n error NotEnoughNative(uint256 msgValue);\n error LzTokenUnavailable();\n\n // @dev The version of the OAppSender implementation.\n // @dev Version is bumped when changes are made to this contract.\n uint64 internal constant SENDER_VERSION = 1;\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n *\n * @dev Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented.\n * ie. this is a SEND only OApp.\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions\n */\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\n return (SENDER_VERSION, 0);\n }\n\n /**\n * @dev Internal function to interact with the LayerZero EndpointV2.quote() for fee calculation.\n * @param _dstEid The destination endpoint ID.\n * @param _message The message payload.\n * @param _options Additional options for the message.\n * @param _payInLzToken Flag indicating whether to pay the fee in LZ tokens.\n * @return fee The calculated MessagingFee for the message.\n * - nativeFee: The native fee for the message.\n * - lzTokenFee: The LZ token fee for the message.\n */\n function _quote(\n uint32 _dstEid,\n bytes memory _message,\n bytes memory _options,\n bool _payInLzToken\n ) internal view virtual returns (MessagingFee memory fee) {\n return\n endpoint.quote(\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _payInLzToken),\n address(this)\n );\n }\n\n /**\n * @dev Internal function to interact with the LayerZero EndpointV2.send() for sending a message.\n * @param _dstEid The destination endpoint ID.\n * @param _message The message payload.\n * @param _options Additional options for the message.\n * @param _fee The calculated LayerZero fee for the message.\n * - nativeFee: The native fee.\n * - lzTokenFee: The lzToken fee.\n * @param _refundAddress The address to receive any excess fee values sent to the endpoint.\n * @return receipt The receipt for the sent message.\n * - guid: The unique identifier for the sent message.\n * - nonce: The nonce of the sent message.\n * - fee: The LayerZero fee incurred for the message.\n */\n function _lzSend(\n uint32 _dstEid,\n bytes memory _message,\n bytes memory _options,\n MessagingFee memory _fee,\n address _refundAddress\n ) internal virtual returns (MessagingReceipt memory receipt) {\n // @dev Push corresponding fees to the endpoint, any excess is sent back to the _refundAddress from the endpoint.\n uint256 messageValue = _payNative(_fee.nativeFee);\n if (_fee.lzTokenFee > 0) _payLzToken(_fee.lzTokenFee);\n\n return\n // solhint-disable-next-line check-send-result\n endpoint.send{ value: messageValue }(\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _fee.lzTokenFee > 0),\n _refundAddress\n );\n }\n\n /**\n * @dev Internal function to pay the native fee associated with the message.\n * @param _nativeFee The native fee to be paid.\n * @return nativeFee The amount of native currency paid.\n *\n * @dev If the OApp needs to initiate MULTIPLE LayerZero messages in a single transaction,\n * this will need to be overridden because msg.value would contain multiple lzFees.\n * @dev Should be overridden in the event the LayerZero endpoint requires a different native currency.\n * @dev Some EVMs use an ERC20 as a method for paying transactions/gasFees.\n * @dev The endpoint is EITHER/OR, ie. it will NOT support both types of native payment at a time.\n */\n function _payNative(uint256 _nativeFee) internal virtual returns (uint256 nativeFee) {\n if (msg.value != _nativeFee) revert NotEnoughNative(msg.value);\n return _nativeFee;\n }\n\n /**\n * @dev Internal function to pay the LZ token fee associated with the message.\n * @param _lzTokenFee The LZ token fee to be paid.\n *\n * @dev If the caller is trying to pay in the specified lzToken, then the lzTokenFee is passed to the endpoint.\n * @dev Any excess sent, is passed back to the specified _refundAddress in the _lzSend().\n */\n function _payLzToken(uint256 _lzTokenFee) internal virtual {\n // @dev Cannot cache the token because it is not immutable in the endpoint.\n address lzToken = endpoint.lzToken();\n if (lzToken == address(0)) revert LzTokenUnavailable();\n\n // Pay LZ token fee by sending tokens to the endpoint.\n IERC20(lzToken).safeTransferFrom(msg.sender, address(endpoint), _lzTokenFee);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nimport { IMessageLibManager } from \"./IMessageLibManager.sol\";\nimport { IMessagingComposer } from \"./IMessagingComposer.sol\";\nimport { IMessagingChannel } from \"./IMessagingChannel.sol\";\nimport { IMessagingContext } from \"./IMessagingContext.sol\";\n\nstruct MessagingParams {\n uint32 dstEid;\n bytes32 receiver;\n bytes message;\n bytes options;\n bool payInLzToken;\n}\n\nstruct MessagingReceipt {\n bytes32 guid;\n uint64 nonce;\n MessagingFee fee;\n}\n\nstruct MessagingFee {\n uint256 nativeFee;\n uint256 lzTokenFee;\n}\n\nstruct Origin {\n uint32 srcEid;\n bytes32 sender;\n uint64 nonce;\n}\n\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\n\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\n\n event PacketDelivered(Origin origin, address receiver);\n\n event LzReceiveAlert(\n address indexed receiver,\n address indexed executor,\n Origin origin,\n bytes32 guid,\n uint256 gas,\n uint256 value,\n bytes message,\n bytes extraData,\n bytes reason\n );\n\n event LzTokenSet(address token);\n\n event DelegateSet(address sender, address delegate);\n\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\n\n function send(\n MessagingParams calldata _params,\n address _refundAddress\n ) external payable returns (MessagingReceipt memory);\n\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\n\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\n\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\n\n function lzReceive(\n Origin calldata _origin,\n address _receiver,\n bytes32 _guid,\n bytes calldata _message,\n bytes calldata _extraData\n ) external payable;\n\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\n\n function setLzToken(address _lzToken) external;\n\n function lzToken() external view returns (address);\n\n function nativeToken() external view returns (address);\n\n function setDelegate(address _delegate) external;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nimport { Origin } from \"./ILayerZeroEndpointV2.sol\";\n\ninterface ILayerZeroReceiver {\n function allowInitializePath(Origin calldata _origin) external view returns (bool);\n\n function nextNonce(uint32 _eid, bytes32 _sender) external view returns (uint64);\n\n function lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) external payable;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nstruct SetConfigParam {\n uint32 eid;\n uint32 configType;\n bytes config;\n}\n\ninterface IMessageLibManager {\n struct Timeout {\n address lib;\n uint256 expiry;\n }\n\n event LibraryRegistered(address newLib);\n event DefaultSendLibrarySet(uint32 eid, address newLib);\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\n event SendLibrarySet(address sender, uint32 eid, address newLib);\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\n\n function registerLibrary(address _lib) external;\n\n function isRegisteredLibrary(address _lib) external view returns (bool);\n\n function getRegisteredLibraries() external view returns (address[] memory);\n\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\n\n function defaultSendLibrary(uint32 _eid) external view returns (address);\n\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\n\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\n\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\n\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\n\n function isSupportedEid(uint32 _eid) external view returns (bool);\n\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\n\n /// ------------------- OApp interfaces -------------------\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\n\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\n\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\n\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\n\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\n\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\n\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\n\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\n\n function getConfig(\n address _oapp,\n address _lib,\n uint32 _eid,\n uint32 _configType\n ) external view returns (bytes memory config);\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingChannel {\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\n\n function eid() external view returns (uint32);\n\n // this is an emergency function if a message cannot be verified for some reasons\n // required to provide _nextNonce to avoid race condition\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\n\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\n\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\n\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\n\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\n\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\n\n function inboundPayloadHash(\n address _receiver,\n uint32 _srcEid,\n bytes32 _sender,\n uint64 _nonce\n ) external view returns (bytes32);\n\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingComposer {\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\n event LzComposeAlert(\n address indexed from,\n address indexed to,\n address indexed executor,\n bytes32 guid,\n uint16 index,\n uint256 gas,\n uint256 value,\n bytes message,\n bytes extraData,\n bytes reason\n );\n\n function composeQueue(\n address _from,\n address _to,\n bytes32 _guid,\n uint16 _index\n ) external view returns (bytes32 messageHash);\n\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\n\n function lzCompose(\n address _from,\n address _to,\n bytes32 _guid,\n uint16 _index,\n bytes calldata _message,\n bytes calldata _extraData\n ) external payable;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingContext {\n function isSendingMessage() external view returns (bool);\n\n function getSendContext() external view returns (uint32 dstEid, address sender);\n}\n" + }, + "@openzeppelin/contracts/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {Context} from \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n /**\n * @dev The caller account is not authorized to perform an operation.\n */\n error OwnableUnauthorizedAccount(address account);\n\n /**\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\n */\n error OwnableInvalidOwner(address owner);\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n */\n constructor(address initialOwner) {\n if (initialOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n if (owner() != _msgSender()) {\n revert OwnableUnauthorizedAccount(_msgSender());\n }\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby disabling any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n if (newOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "@openzeppelin/contracts/interfaces/IERC1363.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC165} from \"./IERC165.sol\";\n\n/**\n * @title IERC1363\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\n *\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\n */\ninterface IERC1363 is IERC20, IERC165 {\n /*\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\n * 0xb0202a11 ===\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\n */\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @param data Additional data with no specified format, sent in call to `spender`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\n}\n" + }, + "@openzeppelin/contracts/interfaces/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"../utils/introspection/IERC165.sol\";\n" + }, + "@openzeppelin/contracts/interfaces/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\n" + }, + "@openzeppelin/contracts/token/ERC20/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-20 standard as defined in the ERC.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the value of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the value of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\n * allowance mechanism. `value` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n" + }, + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\nimport {IERC1363} from \"../../../interfaces/IERC1363.sol\";\nimport {Address} from \"../../../utils/Address.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n /**\n * @dev An operation with an ERC-20 token failed.\n */\n error SafeERC20FailedOperation(address token);\n\n /**\n * @dev Indicates a failed `decreaseAllowance` request.\n */\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\n\n /**\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\n }\n\n /**\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\n */\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n }\n\n /**\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n uint256 oldAllowance = token.allowance(address(this), spender);\n forceApprove(token, spender, oldAllowance + value);\n }\n\n /**\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n * value, non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\n unchecked {\n uint256 currentAllowance = token.allowance(address(this), spender);\n if (currentAllowance < requestedDecrease) {\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\n }\n forceApprove(token, spender, currentAllowance - requestedDecrease);\n }\n }\n\n /**\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n * to be set to zero before setting it to a non-zero value, such as USDT.\n *\n * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\n * only sets the \"standard\" allowance. Any temporary allowance will remain active, in addition to the value being\n * set here.\n */\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\n\n if (!_callOptionalReturnBool(token, approvalCall)) {\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\n _callOptionalReturn(token, approvalCall);\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n safeTransfer(token, to, value);\n } else if (!token.transferAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\n * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferFromAndCallRelaxed(\n IERC1363 token,\n address from,\n address to,\n uint256 value,\n bytes memory data\n ) internal {\n if (to.code.length == 0) {\n safeTransferFrom(token, from, to, value);\n } else if (!token.transferFromAndCall(from, to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\n * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\n * once without retrying, and relies on the returned value to be true.\n *\n * Reverts if the returned value is other than `true`.\n */\n function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n forceApprove(token, to, value);\n } else if (!token.approveAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\n */\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n // bubble errors\n if iszero(success) {\n let ptr := mload(0x40)\n returndatacopy(ptr, 0, returndatasize())\n revert(ptr, returndatasize())\n }\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n\n if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\n */\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\n bool success;\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\nimport {Errors} from \"./Errors.sol\";\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev There's no code at `target` (it is not a contract).\n */\n error AddressEmptyCode(address target);\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n if (address(this).balance < amount) {\n revert Errors.InsufficientBalance(address(this).balance, amount);\n }\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n if (!success) {\n revert Errors.FailedCall();\n }\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason or custom error, it is bubbled\n * up by this function (like regular Solidity function calls). However, if\n * the call reverted with no returned reason, this function reverts with a\n * {Errors.FailedCall} error.\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n if (address(this).balance < value) {\n revert Errors.InsufficientBalance(address(this).balance, value);\n }\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\n * of an unsuccessful call.\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata\n ) internal view returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n // only check if target is a contract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n if (returndata.length == 0 && target.code.length == 0) {\n revert AddressEmptyCode(target);\n }\n return returndata;\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n * revert reason or with a default {Errors.FailedCall} error.\n */\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n return returndata;\n }\n }\n\n /**\n * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\n */\n function _revert(bytes memory returndata) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n assembly (\"memory-safe\") {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert Errors.FailedCall();\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n function _contextSuffixLength() internal view virtual returns (uint256) {\n return 0;\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Errors.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of common custom errors used in multiple contracts\n *\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\n * It is recommended to avoid relying on the error API for critical functionality.\n *\n * _Available since v5.1._\n */\nlibrary Errors {\n /**\n * @dev The ETH balance of the account is not enough to perform the operation.\n */\n error InsufficientBalance(uint256 balance, uint256 needed);\n\n /**\n * @dev A call to an address target failed. The target may have reverted.\n */\n error FailedCall();\n\n /**\n * @dev The deployment failed.\n */\n error FailedDeployment();\n\n /**\n * @dev A necessary precompile is missing.\n */\n error MissingPrecompile(address);\n}\n" + }, + "@openzeppelin/contracts/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "contracts/TestingOApp.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.22;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { OApp, MessagingFee, Origin } from \"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol\";\nimport { MessagingReceipt } from \"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol\";\n\ncontract TestingOApp is OApp {\n constructor(address _endpoint, address _delegate) OApp(_endpoint, _delegate) Ownable(_delegate) {}\n\n string public data = \"nothing received yet\";\n\n /**\n * @notice Sends a message from the source chain to a destination chain.\n * @param _dstEid The endpoint ID of the destination chain.\n * @param _message The message string to be sent.\n * @param _options Additional options for message execution.\n * @dev Encodes the message as bytes and sends it using the `_lzSend` internal function.\n * @return receipt A `MessagingReceipt` struct containing details of the message sent.\n */\n function send(\n uint32 _dstEid,\n string memory _message,\n bytes calldata _options\n ) external payable returns (MessagingReceipt memory receipt) {\n bytes memory _payload = abi.encode(_message);\n receipt = _lzSend(_dstEid, _payload, _options, MessagingFee(msg.value, 0), payable(msg.sender));\n }\n\n /**\n * @notice Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token.\n * @param _dstEid Destination chain's endpoint ID.\n * @param _message The message.\n * @param _options Message execution options (e.g., for sending gas to destination).\n * @param _payInLzToken Whether to return fee in ZRO token.\n * @return fee A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token.\n */\n function quote(\n uint32 _dstEid,\n string memory _message,\n bytes memory _options,\n bool _payInLzToken\n ) public view returns (MessagingFee memory fee) {\n bytes memory payload = abi.encode(_message);\n fee = _quote(_dstEid, payload, _options, _payInLzToken);\n }\n\n /**\n * @dev Internal function override to handle incoming messages from another chain.\n * @dev _origin A struct containing information about the message sender.\n * @dev _guid A unique global packet identifier for the message.\n * @param payload The encoded message payload being received.\n *\n * @dev The following params are unused in the current implementation of the OApp.\n * @dev _executor The address of the Executor responsible for processing the message.\n * @dev _extraData Arbitrary data appended by the Executor to the message.\n *\n * Decodes the received payload and processes it as per the business logic defined in the function.\n */\n function _lzReceive(\n Origin calldata /*_origin*/,\n bytes32 /*_guid*/,\n bytes calldata payload,\n address /*_executor*/,\n bytes calldata /*_extraData*/\n ) internal override {\n data = abi.decode(payload, (string));\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "evmVersion": "paris", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/tests/e2e/testing_oapp/deployments/holesky/solcInputs/be3116508cd88579ce80b9b651ebd93f.json b/tests/e2e/testing_oapp/deployments/holesky/solcInputs/be3116508cd88579ce80b9b651ebd93f.json new file mode 100644 index 00000000..efc8973c --- /dev/null +++ b/tests/e2e/testing_oapp/deployments/holesky/solcInputs/be3116508cd88579ce80b9b651ebd93f.json @@ -0,0 +1,102 @@ +{ + "language": "Solidity", + "sources": { + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppCore.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { ILayerZeroEndpointV2 } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\";\n\n/**\n * @title IOAppCore\n */\ninterface IOAppCore {\n // Custom error messages\n error OnlyPeer(uint32 eid, bytes32 sender);\n error NoPeer(uint32 eid);\n error InvalidEndpointCall();\n error InvalidDelegate();\n\n // Event emitted when a peer (OApp) is set for a corresponding endpoint\n event PeerSet(uint32 eid, bytes32 peer);\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n */\n function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);\n\n /**\n * @notice Retrieves the LayerZero endpoint associated with the OApp.\n * @return iEndpoint The LayerZero endpoint as an interface.\n */\n function endpoint() external view returns (ILayerZeroEndpointV2 iEndpoint);\n\n /**\n * @notice Retrieves the peer (OApp) associated with a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @return peer The peer address (OApp instance) associated with the corresponding endpoint.\n */\n function peers(uint32 _eid) external view returns (bytes32 peer);\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n */\n function setPeer(uint32 _eid, bytes32 _peer) external;\n\n /**\n * @notice Sets the delegate address for the OApp Core.\n * @param _delegate The address of the delegate to be set.\n */\n function setDelegate(address _delegate) external;\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.20;\n\nimport { ILayerZeroReceiver, Origin } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\";\n\ninterface IOAppReceiver is ILayerZeroReceiver {\n /**\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\n * @param _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @param _message The lzReceive payload.\n * @param _sender The sender address.\n * @return isSender Is a valid sender.\n *\n * @dev Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.\n * @dev The default sender IS the OAppReceiver implementer.\n */\n function isComposeMsgSender(\n Origin calldata _origin,\n bytes calldata _message,\n address _sender\n ) external view returns (bool isSender);\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\n// @dev Import the 'MessagingFee' and 'MessagingReceipt' so it's exposed to OApp implementers\n// solhint-disable-next-line no-unused-import\nimport { OAppSender, MessagingFee, MessagingReceipt } from \"./OAppSender.sol\";\n// @dev Import the 'Origin' so it's exposed to OApp implementers\n// solhint-disable-next-line no-unused-import\nimport { OAppReceiver, Origin } from \"./OAppReceiver.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OApp\n * @dev Abstract contract serving as the base for OApp implementation, combining OAppSender and OAppReceiver functionality.\n */\nabstract contract OApp is OAppSender, OAppReceiver {\n /**\n * @dev Constructor to initialize the OApp with the provided endpoint and owner.\n * @param _endpoint The address of the LOCAL LayerZero endpoint.\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\n */\n constructor(address _endpoint, address _delegate) OAppCore(_endpoint, _delegate) {}\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol implementation.\n * @return receiverVersion The version of the OAppReceiver.sol implementation.\n */\n function oAppVersion()\n public\n pure\n virtual\n override(OAppSender, OAppReceiver)\n returns (uint64 senderVersion, uint64 receiverVersion)\n {\n return (SENDER_VERSION, RECEIVER_VERSION);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppCore.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { IOAppCore, ILayerZeroEndpointV2 } from \"./interfaces/IOAppCore.sol\";\n\n/**\n * @title OAppCore\n * @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations.\n */\nabstract contract OAppCore is IOAppCore, Ownable {\n // The LayerZero endpoint associated with the given OApp\n ILayerZeroEndpointV2 public immutable endpoint;\n\n // Mapping to store peers associated with corresponding endpoints\n mapping(uint32 eid => bytes32 peer) public peers;\n\n /**\n * @dev Constructor to initialize the OAppCore with the provided endpoint and delegate.\n * @param _endpoint The address of the LOCAL Layer Zero endpoint.\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\n *\n * @dev The delegate typically should be set as the owner of the contract.\n */\n constructor(address _endpoint, address _delegate) {\n endpoint = ILayerZeroEndpointV2(_endpoint);\n\n if (_delegate == address(0)) revert InvalidDelegate();\n endpoint.setDelegate(_delegate);\n }\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n *\n * @dev Only the owner/admin of the OApp can call this function.\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\n * @dev Set this to bytes32(0) to remove the peer address.\n * @dev Peer is a bytes32 to accommodate non-evm chains.\n */\n function setPeer(uint32 _eid, bytes32 _peer) public virtual onlyOwner {\n _setPeer(_eid, _peer);\n }\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n *\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\n * @dev Set this to bytes32(0) to remove the peer address.\n * @dev Peer is a bytes32 to accommodate non-evm chains.\n */\n function _setPeer(uint32 _eid, bytes32 _peer) internal virtual {\n peers[_eid] = _peer;\n emit PeerSet(_eid, _peer);\n }\n\n /**\n * @notice Internal function to get the peer address associated with a specific endpoint; reverts if NOT set.\n * ie. the peer is set to bytes32(0).\n * @param _eid The endpoint ID.\n * @return peer The address of the peer associated with the specified endpoint.\n */\n function _getPeerOrRevert(uint32 _eid) internal view virtual returns (bytes32) {\n bytes32 peer = peers[_eid];\n if (peer == bytes32(0)) revert NoPeer(_eid);\n return peer;\n }\n\n /**\n * @notice Sets the delegate address for the OApp.\n * @param _delegate The address of the delegate to be set.\n *\n * @dev Only the owner/admin of the OApp can call this function.\n * @dev Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\n */\n function setDelegate(address _delegate) public onlyOwner {\n endpoint.setDelegate(_delegate);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { IOAppReceiver, Origin } from \"./interfaces/IOAppReceiver.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OAppReceiver\n * @dev Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers.\n */\nabstract contract OAppReceiver is IOAppReceiver, OAppCore {\n // Custom error message for when the caller is not the registered endpoint/\n error OnlyEndpoint(address addr);\n\n // @dev The version of the OAppReceiver implementation.\n // @dev Version is bumped when changes are made to this contract.\n uint64 internal constant RECEIVER_VERSION = 2;\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n *\n * @dev Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented.\n * ie. this is a RECEIVE only OApp.\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions.\n */\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\n return (0, RECEIVER_VERSION);\n }\n\n /**\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\n * @dev _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @dev _message The lzReceive payload.\n * @param _sender The sender address.\n * @return isSender Is a valid sender.\n *\n * @dev Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.\n * @dev The default sender IS the OAppReceiver implementer.\n */\n function isComposeMsgSender(\n Origin calldata /*_origin*/,\n bytes calldata /*_message*/,\n address _sender\n ) public view virtual returns (bool) {\n return _sender == address(this);\n }\n\n /**\n * @notice Checks if the path initialization is allowed based on the provided origin.\n * @param origin The origin information containing the source endpoint and sender address.\n * @return Whether the path has been initialized.\n *\n * @dev This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.\n * @dev This defaults to assuming if a peer has been set, its initialized.\n * Can be overridden by the OApp if there is other logic to determine this.\n */\n function allowInitializePath(Origin calldata origin) public view virtual returns (bool) {\n return peers[origin.srcEid] == origin.sender;\n }\n\n /**\n * @notice Retrieves the next nonce for a given source endpoint and sender address.\n * @dev _srcEid The source endpoint ID.\n * @dev _sender The sender address.\n * @return nonce The next nonce.\n *\n * @dev The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.\n * @dev Is required by the off-chain executor to determine the OApp expects msg execution is ordered.\n * @dev This is also enforced by the OApp.\n * @dev By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\n */\n function nextNonce(uint32 /*_srcEid*/, bytes32 /*_sender*/) public view virtual returns (uint64 nonce) {\n return 0;\n }\n\n /**\n * @dev Entry point for receiving messages or packets from the endpoint.\n * @param _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @param _guid The unique identifier for the received LayerZero message.\n * @param _message The payload of the received message.\n * @param _executor The address of the executor for the received message.\n * @param _extraData Additional arbitrary data provided by the corresponding executor.\n *\n * @dev Entry point for receiving msg/packet from the LayerZero endpoint.\n */\n function lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) public payable virtual {\n // Ensures that only the endpoint can attempt to lzReceive() messages to this OApp.\n if (address(endpoint) != msg.sender) revert OnlyEndpoint(msg.sender);\n\n // Ensure that the sender matches the expected peer for the source endpoint.\n if (_getPeerOrRevert(_origin.srcEid) != _origin.sender) revert OnlyPeer(_origin.srcEid, _origin.sender);\n\n // Call the internal OApp implementation of lzReceive.\n _lzReceive(_origin, _guid, _message, _executor, _extraData);\n }\n\n /**\n * @dev Internal function to implement lzReceive logic without needing to copy the basic parameter validation.\n */\n function _lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) internal virtual;\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { SafeERC20, IERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { MessagingParams, MessagingFee, MessagingReceipt } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OAppSender\n * @dev Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.\n */\nabstract contract OAppSender is OAppCore {\n using SafeERC20 for IERC20;\n\n // Custom error messages\n error NotEnoughNative(uint256 msgValue);\n error LzTokenUnavailable();\n\n // @dev The version of the OAppSender implementation.\n // @dev Version is bumped when changes are made to this contract.\n uint64 internal constant SENDER_VERSION = 1;\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n *\n * @dev Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented.\n * ie. this is a SEND only OApp.\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions\n */\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\n return (SENDER_VERSION, 0);\n }\n\n /**\n * @dev Internal function to interact with the LayerZero EndpointV2.quote() for fee calculation.\n * @param _dstEid The destination endpoint ID.\n * @param _message The message payload.\n * @param _options Additional options for the message.\n * @param _payInLzToken Flag indicating whether to pay the fee in LZ tokens.\n * @return fee The calculated MessagingFee for the message.\n * - nativeFee: The native fee for the message.\n * - lzTokenFee: The LZ token fee for the message.\n */\n function _quote(\n uint32 _dstEid,\n bytes memory _message,\n bytes memory _options,\n bool _payInLzToken\n ) internal view virtual returns (MessagingFee memory fee) {\n return\n endpoint.quote(\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _payInLzToken),\n address(this)\n );\n }\n\n /**\n * @dev Internal function to interact with the LayerZero EndpointV2.send() for sending a message.\n * @param _dstEid The destination endpoint ID.\n * @param _message The message payload.\n * @param _options Additional options for the message.\n * @param _fee The calculated LayerZero fee for the message.\n * - nativeFee: The native fee.\n * - lzTokenFee: The lzToken fee.\n * @param _refundAddress The address to receive any excess fee values sent to the endpoint.\n * @return receipt The receipt for the sent message.\n * - guid: The unique identifier for the sent message.\n * - nonce: The nonce of the sent message.\n * - fee: The LayerZero fee incurred for the message.\n */\n function _lzSend(\n uint32 _dstEid,\n bytes memory _message,\n bytes memory _options,\n MessagingFee memory _fee,\n address _refundAddress\n ) internal virtual returns (MessagingReceipt memory receipt) {\n // @dev Push corresponding fees to the endpoint, any excess is sent back to the _refundAddress from the endpoint.\n uint256 messageValue = _payNative(_fee.nativeFee);\n if (_fee.lzTokenFee > 0) _payLzToken(_fee.lzTokenFee);\n\n return\n // solhint-disable-next-line check-send-result\n endpoint.send{ value: messageValue }(\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _fee.lzTokenFee > 0),\n _refundAddress\n );\n }\n\n /**\n * @dev Internal function to pay the native fee associated with the message.\n * @param _nativeFee The native fee to be paid.\n * @return nativeFee The amount of native currency paid.\n *\n * @dev If the OApp needs to initiate MULTIPLE LayerZero messages in a single transaction,\n * this will need to be overridden because msg.value would contain multiple lzFees.\n * @dev Should be overridden in the event the LayerZero endpoint requires a different native currency.\n * @dev Some EVMs use an ERC20 as a method for paying transactions/gasFees.\n * @dev The endpoint is EITHER/OR, ie. it will NOT support both types of native payment at a time.\n */\n function _payNative(uint256 _nativeFee) internal virtual returns (uint256 nativeFee) {\n if (msg.value != _nativeFee) revert NotEnoughNative(msg.value);\n return _nativeFee;\n }\n\n /**\n * @dev Internal function to pay the LZ token fee associated with the message.\n * @param _lzTokenFee The LZ token fee to be paid.\n *\n * @dev If the caller is trying to pay in the specified lzToken, then the lzTokenFee is passed to the endpoint.\n * @dev Any excess sent, is passed back to the specified _refundAddress in the _lzSend().\n */\n function _payLzToken(uint256 _lzTokenFee) internal virtual {\n // @dev Cannot cache the token because it is not immutable in the endpoint.\n address lzToken = endpoint.lzToken();\n if (lzToken == address(0)) revert LzTokenUnavailable();\n\n // Pay LZ token fee by sending tokens to the endpoint.\n IERC20(lzToken).safeTransferFrom(msg.sender, address(endpoint), _lzTokenFee);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nimport { IMessageLibManager } from \"./IMessageLibManager.sol\";\nimport { IMessagingComposer } from \"./IMessagingComposer.sol\";\nimport { IMessagingChannel } from \"./IMessagingChannel.sol\";\nimport { IMessagingContext } from \"./IMessagingContext.sol\";\n\nstruct MessagingParams {\n uint32 dstEid;\n bytes32 receiver;\n bytes message;\n bytes options;\n bool payInLzToken;\n}\n\nstruct MessagingReceipt {\n bytes32 guid;\n uint64 nonce;\n MessagingFee fee;\n}\n\nstruct MessagingFee {\n uint256 nativeFee;\n uint256 lzTokenFee;\n}\n\nstruct Origin {\n uint32 srcEid;\n bytes32 sender;\n uint64 nonce;\n}\n\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\n\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\n\n event PacketDelivered(Origin origin, address receiver);\n\n event LzReceiveAlert(\n address indexed receiver,\n address indexed executor,\n Origin origin,\n bytes32 guid,\n uint256 gas,\n uint256 value,\n bytes message,\n bytes extraData,\n bytes reason\n );\n\n event LzTokenSet(address token);\n\n event DelegateSet(address sender, address delegate);\n\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\n\n function send(\n MessagingParams calldata _params,\n address _refundAddress\n ) external payable returns (MessagingReceipt memory);\n\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\n\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\n\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\n\n function lzReceive(\n Origin calldata _origin,\n address _receiver,\n bytes32 _guid,\n bytes calldata _message,\n bytes calldata _extraData\n ) external payable;\n\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\n\n function setLzToken(address _lzToken) external;\n\n function lzToken() external view returns (address);\n\n function nativeToken() external view returns (address);\n\n function setDelegate(address _delegate) external;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nimport { Origin } from \"./ILayerZeroEndpointV2.sol\";\n\ninterface ILayerZeroReceiver {\n function allowInitializePath(Origin calldata _origin) external view returns (bool);\n\n function nextNonce(uint32 _eid, bytes32 _sender) external view returns (uint64);\n\n function lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) external payable;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nstruct SetConfigParam {\n uint32 eid;\n uint32 configType;\n bytes config;\n}\n\ninterface IMessageLibManager {\n struct Timeout {\n address lib;\n uint256 expiry;\n }\n\n event LibraryRegistered(address newLib);\n event DefaultSendLibrarySet(uint32 eid, address newLib);\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\n event SendLibrarySet(address sender, uint32 eid, address newLib);\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\n\n function registerLibrary(address _lib) external;\n\n function isRegisteredLibrary(address _lib) external view returns (bool);\n\n function getRegisteredLibraries() external view returns (address[] memory);\n\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\n\n function defaultSendLibrary(uint32 _eid) external view returns (address);\n\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\n\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\n\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\n\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\n\n function isSupportedEid(uint32 _eid) external view returns (bool);\n\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\n\n /// ------------------- OApp interfaces -------------------\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\n\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\n\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\n\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\n\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\n\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\n\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\n\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\n\n function getConfig(\n address _oapp,\n address _lib,\n uint32 _eid,\n uint32 _configType\n ) external view returns (bytes memory config);\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingChannel {\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\n\n function eid() external view returns (uint32);\n\n // this is an emergency function if a message cannot be verified for some reasons\n // required to provide _nextNonce to avoid race condition\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\n\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\n\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\n\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\n\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\n\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\n\n function inboundPayloadHash(\n address _receiver,\n uint32 _srcEid,\n bytes32 _sender,\n uint64 _nonce\n ) external view returns (bytes32);\n\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingComposer {\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\n event LzComposeAlert(\n address indexed from,\n address indexed to,\n address indexed executor,\n bytes32 guid,\n uint16 index,\n uint256 gas,\n uint256 value,\n bytes message,\n bytes extraData,\n bytes reason\n );\n\n function composeQueue(\n address _from,\n address _to,\n bytes32 _guid,\n uint16 _index\n ) external view returns (bytes32 messageHash);\n\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\n\n function lzCompose(\n address _from,\n address _to,\n bytes32 _guid,\n uint16 _index,\n bytes calldata _message,\n bytes calldata _extraData\n ) external payable;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingContext {\n function isSendingMessage() external view returns (bool);\n\n function getSendContext() external view returns (uint32 dstEid, address sender);\n}\n" + }, + "@openzeppelin/contracts/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {Context} from \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n /**\n * @dev The caller account is not authorized to perform an operation.\n */\n error OwnableUnauthorizedAccount(address account);\n\n /**\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\n */\n error OwnableInvalidOwner(address owner);\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n */\n constructor(address initialOwner) {\n if (initialOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n if (owner() != _msgSender()) {\n revert OwnableUnauthorizedAccount(_msgSender());\n }\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby disabling any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n if (newOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "@openzeppelin/contracts/interfaces/IERC1363.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC165} from \"./IERC165.sol\";\n\n/**\n * @title IERC1363\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\n *\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\n */\ninterface IERC1363 is IERC20, IERC165 {\n /*\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\n * 0xb0202a11 ===\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\n */\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @param data Additional data with no specified format, sent in call to `spender`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\n}\n" + }, + "@openzeppelin/contracts/interfaces/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"../utils/introspection/IERC165.sol\";\n" + }, + "@openzeppelin/contracts/interfaces/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\n" + }, + "@openzeppelin/contracts/token/ERC20/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-20 standard as defined in the ERC.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the value of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the value of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\n * allowance mechanism. `value` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n" + }, + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\nimport {IERC1363} from \"../../../interfaces/IERC1363.sol\";\nimport {Address} from \"../../../utils/Address.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n /**\n * @dev An operation with an ERC-20 token failed.\n */\n error SafeERC20FailedOperation(address token);\n\n /**\n * @dev Indicates a failed `decreaseAllowance` request.\n */\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\n\n /**\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\n }\n\n /**\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\n */\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n }\n\n /**\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n uint256 oldAllowance = token.allowance(address(this), spender);\n forceApprove(token, spender, oldAllowance + value);\n }\n\n /**\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n * value, non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\n unchecked {\n uint256 currentAllowance = token.allowance(address(this), spender);\n if (currentAllowance < requestedDecrease) {\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\n }\n forceApprove(token, spender, currentAllowance - requestedDecrease);\n }\n }\n\n /**\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n * to be set to zero before setting it to a non-zero value, such as USDT.\n *\n * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\n * only sets the \"standard\" allowance. Any temporary allowance will remain active, in addition to the value being\n * set here.\n */\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\n\n if (!_callOptionalReturnBool(token, approvalCall)) {\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\n _callOptionalReturn(token, approvalCall);\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n safeTransfer(token, to, value);\n } else if (!token.transferAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\n * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferFromAndCallRelaxed(\n IERC1363 token,\n address from,\n address to,\n uint256 value,\n bytes memory data\n ) internal {\n if (to.code.length == 0) {\n safeTransferFrom(token, from, to, value);\n } else if (!token.transferFromAndCall(from, to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\n * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\n * once without retrying, and relies on the returned value to be true.\n *\n * Reverts if the returned value is other than `true`.\n */\n function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n forceApprove(token, to, value);\n } else if (!token.approveAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\n */\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n // bubble errors\n if iszero(success) {\n let ptr := mload(0x40)\n returndatacopy(ptr, 0, returndatasize())\n revert(ptr, returndatasize())\n }\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n\n if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\n */\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\n bool success;\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\nimport {Errors} from \"./Errors.sol\";\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev There's no code at `target` (it is not a contract).\n */\n error AddressEmptyCode(address target);\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n if (address(this).balance < amount) {\n revert Errors.InsufficientBalance(address(this).balance, amount);\n }\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n if (!success) {\n revert Errors.FailedCall();\n }\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason or custom error, it is bubbled\n * up by this function (like regular Solidity function calls). However, if\n * the call reverted with no returned reason, this function reverts with a\n * {Errors.FailedCall} error.\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n if (address(this).balance < value) {\n revert Errors.InsufficientBalance(address(this).balance, value);\n }\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\n * of an unsuccessful call.\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata\n ) internal view returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n // only check if target is a contract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n if (returndata.length == 0 && target.code.length == 0) {\n revert AddressEmptyCode(target);\n }\n return returndata;\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n * revert reason or with a default {Errors.FailedCall} error.\n */\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n return returndata;\n }\n }\n\n /**\n * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\n */\n function _revert(bytes memory returndata) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n assembly (\"memory-safe\") {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert Errors.FailedCall();\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n function _contextSuffixLength() internal view virtual returns (uint256) {\n return 0;\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Errors.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of common custom errors used in multiple contracts\n *\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\n * It is recommended to avoid relying on the error API for critical functionality.\n *\n * _Available since v5.1._\n */\nlibrary Errors {\n /**\n * @dev The ETH balance of the account is not enough to perform the operation.\n */\n error InsufficientBalance(uint256 balance, uint256 needed);\n\n /**\n * @dev A call to an address target failed. The target may have reverted.\n */\n error FailedCall();\n\n /**\n * @dev The deployment failed.\n */\n error FailedDeployment();\n\n /**\n * @dev A necessary precompile is missing.\n */\n error MissingPrecompile(address);\n}\n" + }, + "@openzeppelin/contracts/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "contracts/TestingOApp.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.22;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { OApp, MessagingFee, Origin } from \"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol\";\nimport { MessagingReceipt } from \"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol\";\n\ncontract TestingOApp is OApp {\n constructor(address _endpoint, address _delegate) OApp(_endpoint, _delegate) Ownable(_delegate) {}\n\n string public data = \"Nothing received yet.\";\n\n /**\n * @notice Sends a message from the source chain to a destination chain.\n * @param _dstEid The endpoint ID of the destination chain.\n * @param _message The message string to be sent.\n * @param _options Additional options for message execution.\n * @dev Encodes the message as bytes and sends it using the `_lzSend` internal function.\n * @return receipt A `MessagingReceipt` struct containing details of the message sent.\n */\n function send(\n uint32 _dstEid,\n string memory _message,\n bytes calldata _options\n ) external payable returns (MessagingReceipt memory receipt) {\n bytes memory _payload = abi.encode(_message);\n receipt = _lzSend(_dstEid, _payload, _options, MessagingFee(msg.value, 0), payable(msg.sender));\n }\n\n /**\n * @notice Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token.\n * @param _dstEid Destination chain's endpoint ID.\n * @param _message The message.\n * @param _options Message execution options (e.g., for sending gas to destination).\n * @param _payInLzToken Whether to return fee in ZRO token.\n * @return fee A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token.\n */\n function quote(\n uint32 _dstEid,\n string memory _message,\n bytes memory _options,\n bool _payInLzToken\n ) public view returns (MessagingFee memory fee) {\n bytes memory payload = abi.encode(_message);\n fee = _quote(_dstEid, payload, _options, _payInLzToken);\n }\n\n /**\n * @dev Internal function override to handle incoming messages from another chain.\n * @dev _origin A struct containing information about the message sender.\n * @dev _guid A unique global packet identifier for the message.\n * @param payload The encoded message payload being received.\n *\n * @dev The following params are unused in the current implementation of the OApp.\n * @dev _executor The address of the Executor responsible for processing the message.\n * @dev _extraData Arbitrary data appended by the Executor to the message.\n *\n * Decodes the received payload and processes it as per the business logic defined in the function.\n */\n function _lzReceive(\n Origin calldata /*_origin*/,\n bytes32 /*_guid*/,\n bytes calldata payload,\n address /*_executor*/,\n bytes calldata /*_extraData*/\n ) internal override {\n data = abi.decode(payload, (string));\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "evmVersion": "paris", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/tests/e2e/testing_oapp/deployments/holesky/solcInputs/d37a9b3218ba71b4f94ab0769ed50067.json b/tests/e2e/testing_oapp/deployments/holesky/solcInputs/d37a9b3218ba71b4f94ab0769ed50067.json new file mode 100644 index 00000000..588779fa --- /dev/null +++ b/tests/e2e/testing_oapp/deployments/holesky/solcInputs/d37a9b3218ba71b4f94ab0769ed50067.json @@ -0,0 +1,102 @@ +{ + "language": "Solidity", + "sources": { + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppCore.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { ILayerZeroEndpointV2 } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\";\n\n/**\n * @title IOAppCore\n */\ninterface IOAppCore {\n // Custom error messages\n error OnlyPeer(uint32 eid, bytes32 sender);\n error NoPeer(uint32 eid);\n error InvalidEndpointCall();\n error InvalidDelegate();\n\n // Event emitted when a peer (OApp) is set for a corresponding endpoint\n event PeerSet(uint32 eid, bytes32 peer);\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n */\n function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);\n\n /**\n * @notice Retrieves the LayerZero endpoint associated with the OApp.\n * @return iEndpoint The LayerZero endpoint as an interface.\n */\n function endpoint() external view returns (ILayerZeroEndpointV2 iEndpoint);\n\n /**\n * @notice Retrieves the peer (OApp) associated with a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @return peer The peer address (OApp instance) associated with the corresponding endpoint.\n */\n function peers(uint32 _eid) external view returns (bytes32 peer);\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n */\n function setPeer(uint32 _eid, bytes32 _peer) external;\n\n /**\n * @notice Sets the delegate address for the OApp Core.\n * @param _delegate The address of the delegate to be set.\n */\n function setDelegate(address _delegate) external;\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.20;\n\nimport { ILayerZeroReceiver, Origin } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\";\n\ninterface IOAppReceiver is ILayerZeroReceiver {\n /**\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\n * @param _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @param _message The lzReceive payload.\n * @param _sender The sender address.\n * @return isSender Is a valid sender.\n *\n * @dev Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.\n * @dev The default sender IS the OAppReceiver implementer.\n */\n function isComposeMsgSender(\n Origin calldata _origin,\n bytes calldata _message,\n address _sender\n ) external view returns (bool isSender);\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\n// @dev Import the 'MessagingFee' and 'MessagingReceipt' so it's exposed to OApp implementers\n// solhint-disable-next-line no-unused-import\nimport { OAppSender, MessagingFee, MessagingReceipt } from \"./OAppSender.sol\";\n// @dev Import the 'Origin' so it's exposed to OApp implementers\n// solhint-disable-next-line no-unused-import\nimport { OAppReceiver, Origin } from \"./OAppReceiver.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OApp\n * @dev Abstract contract serving as the base for OApp implementation, combining OAppSender and OAppReceiver functionality.\n */\nabstract contract OApp is OAppSender, OAppReceiver {\n /**\n * @dev Constructor to initialize the OApp with the provided endpoint and owner.\n * @param _endpoint The address of the LOCAL LayerZero endpoint.\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\n */\n constructor(address _endpoint, address _delegate) OAppCore(_endpoint, _delegate) {}\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol implementation.\n * @return receiverVersion The version of the OAppReceiver.sol implementation.\n */\n function oAppVersion()\n public\n pure\n virtual\n override(OAppSender, OAppReceiver)\n returns (uint64 senderVersion, uint64 receiverVersion)\n {\n return (SENDER_VERSION, RECEIVER_VERSION);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppCore.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { IOAppCore, ILayerZeroEndpointV2 } from \"./interfaces/IOAppCore.sol\";\n\n/**\n * @title OAppCore\n * @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations.\n */\nabstract contract OAppCore is IOAppCore, Ownable {\n // The LayerZero endpoint associated with the given OApp\n ILayerZeroEndpointV2 public immutable endpoint;\n\n // Mapping to store peers associated with corresponding endpoints\n mapping(uint32 eid => bytes32 peer) public peers;\n\n /**\n * @dev Constructor to initialize the OAppCore with the provided endpoint and delegate.\n * @param _endpoint The address of the LOCAL Layer Zero endpoint.\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\n *\n * @dev The delegate typically should be set as the owner of the contract.\n */\n constructor(address _endpoint, address _delegate) {\n endpoint = ILayerZeroEndpointV2(_endpoint);\n\n if (_delegate == address(0)) revert InvalidDelegate();\n endpoint.setDelegate(_delegate);\n }\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n *\n * @dev Only the owner/admin of the OApp can call this function.\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\n * @dev Set this to bytes32(0) to remove the peer address.\n * @dev Peer is a bytes32 to accommodate non-evm chains.\n */\n function setPeer(uint32 _eid, bytes32 _peer) public virtual onlyOwner {\n _setPeer(_eid, _peer);\n }\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n *\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\n * @dev Set this to bytes32(0) to remove the peer address.\n * @dev Peer is a bytes32 to accommodate non-evm chains.\n */\n function _setPeer(uint32 _eid, bytes32 _peer) internal virtual {\n peers[_eid] = _peer;\n emit PeerSet(_eid, _peer);\n }\n\n /**\n * @notice Internal function to get the peer address associated with a specific endpoint; reverts if NOT set.\n * ie. the peer is set to bytes32(0).\n * @param _eid The endpoint ID.\n * @return peer The address of the peer associated with the specified endpoint.\n */\n function _getPeerOrRevert(uint32 _eid) internal view virtual returns (bytes32) {\n bytes32 peer = peers[_eid];\n if (peer == bytes32(0)) revert NoPeer(_eid);\n return peer;\n }\n\n /**\n * @notice Sets the delegate address for the OApp.\n * @param _delegate The address of the delegate to be set.\n *\n * @dev Only the owner/admin of the OApp can call this function.\n * @dev Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\n */\n function setDelegate(address _delegate) public onlyOwner {\n endpoint.setDelegate(_delegate);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { IOAppReceiver, Origin } from \"./interfaces/IOAppReceiver.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OAppReceiver\n * @dev Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers.\n */\nabstract contract OAppReceiver is IOAppReceiver, OAppCore {\n // Custom error message for when the caller is not the registered endpoint/\n error OnlyEndpoint(address addr);\n\n // @dev The version of the OAppReceiver implementation.\n // @dev Version is bumped when changes are made to this contract.\n uint64 internal constant RECEIVER_VERSION = 2;\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n *\n * @dev Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented.\n * ie. this is a RECEIVE only OApp.\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions.\n */\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\n return (0, RECEIVER_VERSION);\n }\n\n /**\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\n * @dev _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @dev _message The lzReceive payload.\n * @param _sender The sender address.\n * @return isSender Is a valid sender.\n *\n * @dev Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.\n * @dev The default sender IS the OAppReceiver implementer.\n */\n function isComposeMsgSender(\n Origin calldata /*_origin*/,\n bytes calldata /*_message*/,\n address _sender\n ) public view virtual returns (bool) {\n return _sender == address(this);\n }\n\n /**\n * @notice Checks if the path initialization is allowed based on the provided origin.\n * @param origin The origin information containing the source endpoint and sender address.\n * @return Whether the path has been initialized.\n *\n * @dev This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.\n * @dev This defaults to assuming if a peer has been set, its initialized.\n * Can be overridden by the OApp if there is other logic to determine this.\n */\n function allowInitializePath(Origin calldata origin) public view virtual returns (bool) {\n return peers[origin.srcEid] == origin.sender;\n }\n\n /**\n * @notice Retrieves the next nonce for a given source endpoint and sender address.\n * @dev _srcEid The source endpoint ID.\n * @dev _sender The sender address.\n * @return nonce The next nonce.\n *\n * @dev The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.\n * @dev Is required by the off-chain executor to determine the OApp expects msg execution is ordered.\n * @dev This is also enforced by the OApp.\n * @dev By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\n */\n function nextNonce(uint32 /*_srcEid*/, bytes32 /*_sender*/) public view virtual returns (uint64 nonce) {\n return 0;\n }\n\n /**\n * @dev Entry point for receiving messages or packets from the endpoint.\n * @param _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @param _guid The unique identifier for the received LayerZero message.\n * @param _message The payload of the received message.\n * @param _executor The address of the executor for the received message.\n * @param _extraData Additional arbitrary data provided by the corresponding executor.\n *\n * @dev Entry point for receiving msg/packet from the LayerZero endpoint.\n */\n function lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) public payable virtual {\n // Ensures that only the endpoint can attempt to lzReceive() messages to this OApp.\n if (address(endpoint) != msg.sender) revert OnlyEndpoint(msg.sender);\n\n // Ensure that the sender matches the expected peer for the source endpoint.\n if (_getPeerOrRevert(_origin.srcEid) != _origin.sender) revert OnlyPeer(_origin.srcEid, _origin.sender);\n\n // Call the internal OApp implementation of lzReceive.\n _lzReceive(_origin, _guid, _message, _executor, _extraData);\n }\n\n /**\n * @dev Internal function to implement lzReceive logic without needing to copy the basic parameter validation.\n */\n function _lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) internal virtual;\n}\n" + }, + "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { SafeERC20, IERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { MessagingParams, MessagingFee, MessagingReceipt } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OAppSender\n * @dev Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.\n */\nabstract contract OAppSender is OAppCore {\n using SafeERC20 for IERC20;\n\n // Custom error messages\n error NotEnoughNative(uint256 msgValue);\n error LzTokenUnavailable();\n\n // @dev The version of the OAppSender implementation.\n // @dev Version is bumped when changes are made to this contract.\n uint64 internal constant SENDER_VERSION = 1;\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n *\n * @dev Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented.\n * ie. this is a SEND only OApp.\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions\n */\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\n return (SENDER_VERSION, 0);\n }\n\n /**\n * @dev Internal function to interact with the LayerZero EndpointV2.quote() for fee calculation.\n * @param _dstEid The destination endpoint ID.\n * @param _message The message payload.\n * @param _options Additional options for the message.\n * @param _payInLzToken Flag indicating whether to pay the fee in LZ tokens.\n * @return fee The calculated MessagingFee for the message.\n * - nativeFee: The native fee for the message.\n * - lzTokenFee: The LZ token fee for the message.\n */\n function _quote(\n uint32 _dstEid,\n bytes memory _message,\n bytes memory _options,\n bool _payInLzToken\n ) internal view virtual returns (MessagingFee memory fee) {\n return\n endpoint.quote(\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _payInLzToken),\n address(this)\n );\n }\n\n /**\n * @dev Internal function to interact with the LayerZero EndpointV2.send() for sending a message.\n * @param _dstEid The destination endpoint ID.\n * @param _message The message payload.\n * @param _options Additional options for the message.\n * @param _fee The calculated LayerZero fee for the message.\n * - nativeFee: The native fee.\n * - lzTokenFee: The lzToken fee.\n * @param _refundAddress The address to receive any excess fee values sent to the endpoint.\n * @return receipt The receipt for the sent message.\n * - guid: The unique identifier for the sent message.\n * - nonce: The nonce of the sent message.\n * - fee: The LayerZero fee incurred for the message.\n */\n function _lzSend(\n uint32 _dstEid,\n bytes memory _message,\n bytes memory _options,\n MessagingFee memory _fee,\n address _refundAddress\n ) internal virtual returns (MessagingReceipt memory receipt) {\n // @dev Push corresponding fees to the endpoint, any excess is sent back to the _refundAddress from the endpoint.\n uint256 messageValue = _payNative(_fee.nativeFee);\n if (_fee.lzTokenFee > 0) _payLzToken(_fee.lzTokenFee);\n\n return\n // solhint-disable-next-line check-send-result\n endpoint.send{ value: messageValue }(\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _fee.lzTokenFee > 0),\n _refundAddress\n );\n }\n\n /**\n * @dev Internal function to pay the native fee associated with the message.\n * @param _nativeFee The native fee to be paid.\n * @return nativeFee The amount of native currency paid.\n *\n * @dev If the OApp needs to initiate MULTIPLE LayerZero messages in a single transaction,\n * this will need to be overridden because msg.value would contain multiple lzFees.\n * @dev Should be overridden in the event the LayerZero endpoint requires a different native currency.\n * @dev Some EVMs use an ERC20 as a method for paying transactions/gasFees.\n * @dev The endpoint is EITHER/OR, ie. it will NOT support both types of native payment at a time.\n */\n function _payNative(uint256 _nativeFee) internal virtual returns (uint256 nativeFee) {\n if (msg.value != _nativeFee) revert NotEnoughNative(msg.value);\n return _nativeFee;\n }\n\n /**\n * @dev Internal function to pay the LZ token fee associated with the message.\n * @param _lzTokenFee The LZ token fee to be paid.\n *\n * @dev If the caller is trying to pay in the specified lzToken, then the lzTokenFee is passed to the endpoint.\n * @dev Any excess sent, is passed back to the specified _refundAddress in the _lzSend().\n */\n function _payLzToken(uint256 _lzTokenFee) internal virtual {\n // @dev Cannot cache the token because it is not immutable in the endpoint.\n address lzToken = endpoint.lzToken();\n if (lzToken == address(0)) revert LzTokenUnavailable();\n\n // Pay LZ token fee by sending tokens to the endpoint.\n IERC20(lzToken).safeTransferFrom(msg.sender, address(endpoint), _lzTokenFee);\n }\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nimport { IMessageLibManager } from \"./IMessageLibManager.sol\";\nimport { IMessagingComposer } from \"./IMessagingComposer.sol\";\nimport { IMessagingChannel } from \"./IMessagingChannel.sol\";\nimport { IMessagingContext } from \"./IMessagingContext.sol\";\n\nstruct MessagingParams {\n uint32 dstEid;\n bytes32 receiver;\n bytes message;\n bytes options;\n bool payInLzToken;\n}\n\nstruct MessagingReceipt {\n bytes32 guid;\n uint64 nonce;\n MessagingFee fee;\n}\n\nstruct MessagingFee {\n uint256 nativeFee;\n uint256 lzTokenFee;\n}\n\nstruct Origin {\n uint32 srcEid;\n bytes32 sender;\n uint64 nonce;\n}\n\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\n\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\n\n event PacketDelivered(Origin origin, address receiver);\n\n event LzReceiveAlert(\n address indexed receiver,\n address indexed executor,\n Origin origin,\n bytes32 guid,\n uint256 gas,\n uint256 value,\n bytes message,\n bytes extraData,\n bytes reason\n );\n\n event LzTokenSet(address token);\n\n event DelegateSet(address sender, address delegate);\n\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\n\n function send(\n MessagingParams calldata _params,\n address _refundAddress\n ) external payable returns (MessagingReceipt memory);\n\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\n\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\n\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\n\n function lzReceive(\n Origin calldata _origin,\n address _receiver,\n bytes32 _guid,\n bytes calldata _message,\n bytes calldata _extraData\n ) external payable;\n\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\n\n function setLzToken(address _lzToken) external;\n\n function lzToken() external view returns (address);\n\n function nativeToken() external view returns (address);\n\n function setDelegate(address _delegate) external;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nimport { Origin } from \"./ILayerZeroEndpointV2.sol\";\n\ninterface ILayerZeroReceiver {\n function allowInitializePath(Origin calldata _origin) external view returns (bool);\n\n function nextNonce(uint32 _eid, bytes32 _sender) external view returns (uint64);\n\n function lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) external payable;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nstruct SetConfigParam {\n uint32 eid;\n uint32 configType;\n bytes config;\n}\n\ninterface IMessageLibManager {\n struct Timeout {\n address lib;\n uint256 expiry;\n }\n\n event LibraryRegistered(address newLib);\n event DefaultSendLibrarySet(uint32 eid, address newLib);\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\n event SendLibrarySet(address sender, uint32 eid, address newLib);\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\n\n function registerLibrary(address _lib) external;\n\n function isRegisteredLibrary(address _lib) external view returns (bool);\n\n function getRegisteredLibraries() external view returns (address[] memory);\n\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\n\n function defaultSendLibrary(uint32 _eid) external view returns (address);\n\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\n\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\n\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\n\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\n\n function isSupportedEid(uint32 _eid) external view returns (bool);\n\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\n\n /// ------------------- OApp interfaces -------------------\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\n\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\n\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\n\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\n\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\n\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\n\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\n\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\n\n function getConfig(\n address _oapp,\n address _lib,\n uint32 _eid,\n uint32 _configType\n ) external view returns (bytes memory config);\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingChannel {\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\n\n function eid() external view returns (uint32);\n\n // this is an emergency function if a message cannot be verified for some reasons\n // required to provide _nextNonce to avoid race condition\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\n\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\n\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\n\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\n\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\n\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\n\n function inboundPayloadHash(\n address _receiver,\n uint32 _srcEid,\n bytes32 _sender,\n uint64 _nonce\n ) external view returns (bytes32);\n\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingComposer {\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\n event LzComposeAlert(\n address indexed from,\n address indexed to,\n address indexed executor,\n bytes32 guid,\n uint16 index,\n uint256 gas,\n uint256 value,\n bytes message,\n bytes extraData,\n bytes reason\n );\n\n function composeQueue(\n address _from,\n address _to,\n bytes32 _guid,\n uint16 _index\n ) external view returns (bytes32 messageHash);\n\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\n\n function lzCompose(\n address _from,\n address _to,\n bytes32 _guid,\n uint16 _index,\n bytes calldata _message,\n bytes calldata _extraData\n ) external payable;\n}\n" + }, + "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingContext {\n function isSendingMessage() external view returns (bool);\n\n function getSendContext() external view returns (uint32 dstEid, address sender);\n}\n" + }, + "@openzeppelin/contracts/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {Context} from \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n /**\n * @dev The caller account is not authorized to perform an operation.\n */\n error OwnableUnauthorizedAccount(address account);\n\n /**\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\n */\n error OwnableInvalidOwner(address owner);\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n */\n constructor(address initialOwner) {\n if (initialOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n if (owner() != _msgSender()) {\n revert OwnableUnauthorizedAccount(_msgSender());\n }\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby disabling any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n if (newOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "@openzeppelin/contracts/interfaces/IERC1363.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC165} from \"./IERC165.sol\";\n\n/**\n * @title IERC1363\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\n *\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\n */\ninterface IERC1363 is IERC20, IERC165 {\n /*\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\n * 0xb0202a11 ===\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\n */\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @param data Additional data with no specified format, sent in call to `spender`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\n}\n" + }, + "@openzeppelin/contracts/interfaces/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"../utils/introspection/IERC165.sol\";\n" + }, + "@openzeppelin/contracts/interfaces/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\n" + }, + "@openzeppelin/contracts/token/ERC20/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-20 standard as defined in the ERC.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the value of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the value of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\n * allowance mechanism. `value` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n" + }, + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\nimport {IERC1363} from \"../../../interfaces/IERC1363.sol\";\nimport {Address} from \"../../../utils/Address.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n /**\n * @dev An operation with an ERC-20 token failed.\n */\n error SafeERC20FailedOperation(address token);\n\n /**\n * @dev Indicates a failed `decreaseAllowance` request.\n */\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\n\n /**\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\n }\n\n /**\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\n */\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n }\n\n /**\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n uint256 oldAllowance = token.allowance(address(this), spender);\n forceApprove(token, spender, oldAllowance + value);\n }\n\n /**\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n * value, non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\n unchecked {\n uint256 currentAllowance = token.allowance(address(this), spender);\n if (currentAllowance < requestedDecrease) {\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\n }\n forceApprove(token, spender, currentAllowance - requestedDecrease);\n }\n }\n\n /**\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n * to be set to zero before setting it to a non-zero value, such as USDT.\n *\n * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\n * only sets the \"standard\" allowance. Any temporary allowance will remain active, in addition to the value being\n * set here.\n */\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\n\n if (!_callOptionalReturnBool(token, approvalCall)) {\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\n _callOptionalReturn(token, approvalCall);\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n safeTransfer(token, to, value);\n } else if (!token.transferAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\n * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferFromAndCallRelaxed(\n IERC1363 token,\n address from,\n address to,\n uint256 value,\n bytes memory data\n ) internal {\n if (to.code.length == 0) {\n safeTransferFrom(token, from, to, value);\n } else if (!token.transferFromAndCall(from, to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\n * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\n * once without retrying, and relies on the returned value to be true.\n *\n * Reverts if the returned value is other than `true`.\n */\n function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n forceApprove(token, to, value);\n } else if (!token.approveAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\n */\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n // bubble errors\n if iszero(success) {\n let ptr := mload(0x40)\n returndatacopy(ptr, 0, returndatasize())\n revert(ptr, returndatasize())\n }\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n\n if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\n */\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\n bool success;\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\nimport {Errors} from \"./Errors.sol\";\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev There's no code at `target` (it is not a contract).\n */\n error AddressEmptyCode(address target);\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n if (address(this).balance < amount) {\n revert Errors.InsufficientBalance(address(this).balance, amount);\n }\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n if (!success) {\n revert Errors.FailedCall();\n }\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason or custom error, it is bubbled\n * up by this function (like regular Solidity function calls). However, if\n * the call reverted with no returned reason, this function reverts with a\n * {Errors.FailedCall} error.\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n if (address(this).balance < value) {\n revert Errors.InsufficientBalance(address(this).balance, value);\n }\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\n * of an unsuccessful call.\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata\n ) internal view returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n // only check if target is a contract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n if (returndata.length == 0 && target.code.length == 0) {\n revert AddressEmptyCode(target);\n }\n return returndata;\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n * revert reason or with a default {Errors.FailedCall} error.\n */\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n return returndata;\n }\n }\n\n /**\n * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\n */\n function _revert(bytes memory returndata) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n assembly (\"memory-safe\") {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert Errors.FailedCall();\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n function _contextSuffixLength() internal view virtual returns (uint256) {\n return 0;\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Errors.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of common custom errors used in multiple contracts\n *\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\n * It is recommended to avoid relying on the error API for critical functionality.\n *\n * _Available since v5.1._\n */\nlibrary Errors {\n /**\n * @dev The ETH balance of the account is not enough to perform the operation.\n */\n error InsufficientBalance(uint256 balance, uint256 needed);\n\n /**\n * @dev A call to an address target failed. The target may have reverted.\n */\n error FailedCall();\n\n /**\n * @dev The deployment failed.\n */\n error FailedDeployment();\n\n /**\n * @dev A necessary precompile is missing.\n */\n error MissingPrecompile(address);\n}\n" + }, + "@openzeppelin/contracts/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "contracts/SimpleTestingOApp.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.22;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { OApp, MessagingFee, Origin } from \"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol\";\nimport { MessagingReceipt } from \"@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppSender.sol\";\n\ncontract SimpleTestingOApp is OApp {\n constructor(address _endpoint, address _delegate) OApp(_endpoint, _delegate) Ownable(_delegate) {}\n\n uint public data = 0;\n\n /**\n * @notice Sends a message from the source chain to a destination chain.\n * @param _dstEid The endpoint ID of the destination chain.\n * @param _message The message string to be sent.\n * @param _options Additional options for message execution.\n * @dev Encodes the message as bytes and sends it using the `_lzSend` internal function.\n * @return receipt A `MessagingReceipt` struct containing details of the message sent.\n */\n function send(\n uint32 _dstEid,\n string memory _message,\n bytes calldata _options\n ) external payable returns (MessagingReceipt memory receipt) {\n bytes memory _payload = abi.encode(_message);\n receipt = _lzSend(_dstEid, _payload, _options, MessagingFee(msg.value, 0), payable(msg.sender));\n }\n\n /**\n * @notice Quotes the gas needed to pay for the full omnichain transaction in native gas or ZRO token.\n * @param _dstEid Destination chain's endpoint ID.\n * @param _message The message.\n * @param _options Message execution options (e.g., for sending gas to destination).\n * @param _payInLzToken Whether to return fee in ZRO token.\n * @return fee A `MessagingFee` struct containing the calculated gas fee in either the native token or ZRO token.\n */\n function quote(\n uint32 _dstEid,\n string memory _message,\n bytes memory _options,\n bool _payInLzToken\n ) public view returns (MessagingFee memory fee) {\n bytes memory payload = abi.encode(_message);\n fee = _quote(_dstEid, payload, _options, _payInLzToken);\n }\n\n /**\n * @dev Internal function override to handle incoming messages from another chain.\n * @dev _origin A struct containing information about the message sender.\n * @dev _guid A unique global packet identifier for the message.\n * @param payload The encoded message payload being received.\n *\n * @dev The following params are unused in the current implementation of the OApp.\n * @dev _executor The address of the Executor responsible for processing the message.\n * @dev _extraData Arbitrary data appended by the Executor to the message.\n *\n * Decodes the received payload and processes it as per the business logic defined in the function.\n */\n function _lzReceive(\n Origin calldata /*_origin*/,\n bytes32 /*_guid*/,\n bytes calldata payload,\n address /*_executor*/,\n bytes calldata /*_extraData*/\n ) internal override {\n data = abi.decode(payload, (uint));\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "evmVersion": "paris", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/tests/e2e/testing_oapp/foundry.toml b/tests/e2e/testing_oapp/foundry.toml new file mode 100644 index 00000000..37c3d353 --- /dev/null +++ b/tests/e2e/testing_oapp/foundry.toml @@ -0,0 +1,27 @@ +[profile.default] +solc-version = '0.8.22' +src = 'contracts' +out = 'out' +test = 'test/foundry' +cache_path = 'cache/foundry' +libs = [ + # We provide a set of useful contract utilities + # in the lib directory of @layerzerolabs/toolbox-foundry: + # + # - forge-std + # - ds-test + # - solidity-bytes-utils + 'node_modules/@layerzerolabs/toolbox-foundry/lib', + 'node_modules', +] + +remappings = [ + # Due to a misconfiguration of solidity-bytes-utils, an outdated version + # of forge-std is being dragged in + # + # To remedy this, we'll remap the ds-test and forge-std imports to ou own versions + 'ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test', + 'forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std', + '@layerzerolabs/=node_modules/@layerzerolabs/', + '@openzeppelin/=node_modules/@openzeppelin/', +] diff --git a/tests/e2e/testing_oapp/hardhat.config.ts b/tests/e2e/testing_oapp/hardhat.config.ts new file mode 100644 index 00000000..722174a0 --- /dev/null +++ b/tests/e2e/testing_oapp/hardhat.config.ts @@ -0,0 +1,77 @@ +// Get the environment configuration from .env file +// +// To make use of automatic environment setup: +// - Duplicate .env.example file and name it .env +// - Fill in the environment variables +import 'dotenv/config' +import 'hardhat-deploy' +import 'hardhat-contract-sizer' +import '@nomiclabs/hardhat-ethers' +import '@layerzerolabs/toolbox-hardhat' +import { HardhatUserConfig, HttpNetworkAccountsUserConfig } from 'hardhat/types' +import { EndpointId } from '@layerzerolabs/lz-definitions' +import "./tasks" + +// Set your preferred authentication method +// +// If you prefer using a mnemonic, set a MNEMONIC environment variable +// to a valid mnemonic +const MNEMONIC = process.env.MNEMONIC + +// If you prefer to be authenticated using a private key, set a PRIVATE_KEY environment variable +const PRIVATE_KEY = process.env.PRIVATE_KEY + +const accounts: HttpNetworkAccountsUserConfig | undefined = MNEMONIC + ? { mnemonic: MNEMONIC } + : PRIVATE_KEY + ? [PRIVATE_KEY] + : undefined + +if (accounts == null) { + console.warn( + 'Could not find MNEMONIC or PRIVATE_KEY environment variables. It will not be possible to execute transactions in your example.' + ) +} + +const config: HardhatUserConfig = { + paths: { + cache: 'cache/hardhat', + }, + solidity: { + compilers: [ + { + version: '0.8.22', + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, + ], + }, + networks: { + 'amoy-testnet': { + eid: EndpointId.AMOY_V2_TESTNET, + url: process.env.RPC_URL_AMOY, + accounts, + }, + 'arbitrum-sepolia': { + eid: EndpointId.ARBSEP_V2_TESTNET, + url: process.env.RPC_URL_ARBITRUM, + accounts, + }, + 'holesky': { + eid: EndpointId.HOLESKY_V2_TESTNET, + url: process.env.RPC_URL_HOLESKY, + accounts, + }, + }, + namedAccounts: { + deployer: { + default: 0, // wallet address of index[0], of the mnemonic in .env + }, + }, +} + +export default config diff --git a/tests/e2e/testing_oapp/layerzero.config.ts b/tests/e2e/testing_oapp/layerzero.config.ts new file mode 100644 index 00000000..733643ff --- /dev/null +++ b/tests/e2e/testing_oapp/layerzero.config.ts @@ -0,0 +1,138 @@ +import { EndpointId } from '@layerzerolabs/lz-definitions' +import type { OAppOmniGraphHardhat, OmniPointHardhat } from '@layerzerolabs/toolbox-hardhat' + +import holesky from "../../../contracts/evm/broadcast/Deploy.s.sol/17000/run-latest.json"; +import amoy from "../../../contracts/evm/broadcast/Deploy.s.sol/80002/run-latest.json"; +import arbitrum from "../../../contracts/evm/broadcast/Deploy.s.sol/421614/run-latest.json"; + +import holeskyExecutor from "../../../contracts/evm/broadcast/DeployExecutor.s.sol/17000/run-latest.json"; +import amoyExecutor from "../../../contracts/evm/broadcast/DeployExecutor.s.sol/80002/run-latest.json"; +import arbitrumExecutor from "../../../contracts/evm/broadcast/DeployExecutor.s.sol/421614/run-latest.json"; + +console.log("=== LayerZero Testing OApp ==="); +console.log("Setting path with `Holesky`'s DVN @", holesky.receipts[0].contractAddress); +console.log("Setting path with `Arbitrum-Sepolia`'s DVN @", arbitrum.receipts[0].contractAddress); +console.log("Setting path with `Polygon-Amoy`'s DVN @", amoy.receipts[0].contractAddress); + +const arbitrumSepoliaContract: OmniPointHardhat = { + eid: EndpointId.ARBSEP_V2_TESTNET, + contractName: 'TestingOApp', +} + +const holeskyContract: OmniPointHardhat = { + eid: EndpointId.HOLESKY_V2_TESTNET, + contractName: 'TestingOApp', +} + +const amoyContract: OmniPointHardhat = { + eid: EndpointId.AMOY_V2_TESTNET, + contractName: 'TestingOApp', +} + +const config: OAppOmniGraphHardhat = { + contracts: [ + { + contract: holeskyContract, + }, + { + contract: amoyContract, + }, + { + contract: arbitrumSepoliaContract, + }, + ], + connections: [ + { + from: holeskyContract, + to: amoyContract, + config: { + sendConfig: { + executorConfig: { + maxMessageSize: 10000, + executor: "0xBc0C24E6f24eC2F1fd7E859B8322A1277F80aaD5" // holeskyExecutor.receipts[0].contractAddress, + }, + ulnConfig: { + confirmations: BigInt(0), + requiredDVNs: [ + holesky.receipts[0].contractAddress, + ], + } + }, + } + }, + { + from: holeskyContract, + to: arbitrumSepoliaContract, + config: { + sendConfig: { + executorConfig: { + maxMessageSize: 10000, + executor: "0xBc0C24E6f24eC2F1fd7E859B8322A1277F80aaD5" // holeskyExecutor.receipts[0].contractAddress, + }, + ulnConfig: { + confirmations: BigInt(0), + requiredDVNs: [ + holesky.receipts[0].contractAddress, + ], + } + }, + } + }, + { + from: amoyContract, + to: holeskyContract, + config: { + sendConfig: { + executorConfig: { + maxMessageSize: 10000, + executor: "0x4Cf1B3Fa61465c2c907f82fC488B43223BA0CF93" // amoyExecutor.receipts[0].contractAddress, + }, + ulnConfig: { + confirmations: BigInt(0), + requiredDVNs: [ + amoy.receipts[0].contractAddress, + ], + } + }, + } + }, + { + from: amoyContract, + to: arbitrumSepoliaContract, + config: { + sendConfig: { + executorConfig: { + maxMessageSize: 10000, + executor: "0x4Cf1B3Fa61465c2c907f82fC488B43223BA0CF93" // amoyExecutor.receipts[0].contractAddress, + }, + ulnConfig: { + confirmations: BigInt(0), + requiredDVNs: [ + amoy.receipts[0].contractAddress, + ], + } + }, + } + }, + { + from: arbitrumSepoliaContract, + to: holeskyContract, + config: { + sendConfig: { + executorConfig: { + maxMessageSize: 10000, + executor: "0x5Df3a1cEbBD9c8BA7F8dF51Fd632A9aef8308897" // arbitrumExecutor.receipts[0].contractAddress, + }, + ulnConfig: { + confirmations: BigInt(0), + requiredDVNs: [ + arbitrum.receipts[0].contractAddress, + ], + } + }, + } + }, + ], +} + +export default config diff --git a/tests/e2e/testing_oapp/layerzerosimple.config.ts b/tests/e2e/testing_oapp/layerzerosimple.config.ts new file mode 100644 index 00000000..a88d59e3 --- /dev/null +++ b/tests/e2e/testing_oapp/layerzerosimple.config.ts @@ -0,0 +1,114 @@ +import { EndpointId } from '@layerzerolabs/lz-definitions' +import type { OAppOmniGraphHardhat, OmniPointHardhat } from '@layerzerolabs/toolbox-hardhat' + +import holesky from "../../../contracts/evm/broadcast/DeploySimple.s.sol/17000/run-latest.json"; +import amoy from "../../../contracts/evm/broadcast/DeploySimple.s.sol/80002/run-latest.json"; +import arbitrum from "../../../contracts/evm/broadcast/DeploySimple.s.sol/421614/run-latest.json"; + +console.log("=== LayerZero Simple Testing OApp ==="); +console.log("Setting path with `Holesky`'s DVN @", holesky.receipts[0].contractAddress); +console.log("Setting path with `Arbitrum-Sepolia`'s DVN @", arbitrum.receipts[0].contractAddress); +console.log("Setting path with `Polygon-Amoy`'s DVN @", amoy.receipts[0].contractAddress); + +const arbitrumSepoliaContract: OmniPointHardhat = { + eid: EndpointId.ARBSEP_V2_TESTNET, + contractName: 'TestingOApp', +} + +const holeskyContract: OmniPointHardhat = { + eid: EndpointId.HOLESKY_V2_TESTNET, + contractName: 'TestingOApp', +} + +const amoyContract: OmniPointHardhat = { + eid: EndpointId.AMOY_V2_TESTNET, + contractName: 'TestingOApp', +} + +const config: OAppOmniGraphHardhat = { + contracts: [ + { + contract: holeskyContract, + }, + { + contract: amoyContract, + }, + { + contract: arbitrumSepoliaContract, + }, + ], + connections: [ + { + from: holeskyContract, + to: amoyContract, + config: { + sendConfig: { + ulnConfig: { + confirmations: BigInt(0), + requiredDVNs: [ + holesky.receipts[0].contractAddress, + ], + } + }, + } + }, + { + from: holeskyContract, + to: arbitrumSepoliaContract, + config: { + sendConfig: { + ulnConfig: { + confirmations: BigInt(0), + requiredDVNs: [ + holesky.receipts[0].contractAddress, + ], + } + }, + } + }, + { + from: amoyContract, + to: holeskyContract, + config: { + sendConfig: { + ulnConfig: { + confirmations: BigInt(0), + requiredDVNs: [ + amoy.receipts[0].contractAddress, + ], + } + }, + } + }, + { + from: amoyContract, + to: arbitrumSepoliaContract, + config: { + sendConfig: { + ulnConfig: { + confirmations: BigInt(0), + requiredDVNs: [ + amoy.receipts[0].contractAddress, + ], + } + }, + } + }, + { + from: arbitrumSepoliaContract, + to: holeskyContract, + config: { + sendConfig: { + ulnConfig: { + confirmations: BigInt(0), + requiredDVNs: [ + arbitrum.receipts[0].contractAddress, + ], + } + }, + } + }, + ], +} + +export default config diff --git a/tests/e2e/testing_oapp/output.txt b/tests/e2e/testing_oapp/output.txt new file mode 100644 index 00000000..2a46b92d --- /dev/null +++ b/tests/e2e/testing_oapp/output.txt @@ -0,0 +1,2 @@ +native fee: BigNumber { value: "40642698255677562" } + diff --git a/tests/e2e/testing_oapp/output_err.txt b/tests/e2e/testing_oapp/output_err.txt new file mode 100644 index 00000000..ece9614c --- /dev/null +++ b/tests/e2e/testing_oapp/output_err.txt @@ -0,0 +1,4 @@ +(node:2465) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead. +(Use `node --trace-deprecation ...` to show where the warning was created) +Error HH110: Invalid JSON-RPC response received: "!�\u0001\u0000 �s�\u0019\u0019}H˛��ЙK&�B\u001d�/l�����Ё\u001f �`-�9׃�Ձ\u000e�,���XՈL��(aʙs��L\u0017\t��R��Hd�Fuƈy��\u0013�'�\u0001\u0003" +For more info go to https://hardhat.org/HH110 or run Hardhat with --show-stack-traces diff --git a/tests/e2e/testing_oapp/package.json b/tests/e2e/testing_oapp/package.json new file mode 100644 index 00000000..8826156b --- /dev/null +++ b/tests/e2e/testing_oapp/package.json @@ -0,0 +1,77 @@ +{ + "name": "@layerzerolabs/oapp-example", + "version": "0.3.0", + "private": true, + "license": "MIT", + "scripts": { + "clean": "rm -rf artifacts cache out", + "compile": "$npm_execpath run compile:forge && $npm_execpath run compile:hardhat", + "compile:forge": "forge build", + "compile:hardhat": "hardhat compile", + "lint": "$npm_execpath run lint:js && $npm_execpath run lint:sol", + "lint:fix": "eslint --fix '**/*.{js,ts,json}' && prettier --write . && solhint 'contracts/**/*.sol' --fix --noPrompt", + "lint:js": "eslint '**/*.{js,ts,json}' && prettier --check .", + "lint:sol": "solhint 'contracts/**/*.sol'", + "test": "$npm_execpath run test:forge && $npm_execpath run test:hardhat", + "test:forge": "forge test", + "test:hardhat": "hardhat test" + }, + "resolutions": { + "ethers": "^5.7.2", + "hardhat-deploy": "^0.12.1" + }, + "devDependencies": { + "@babel/core": "^7.26.0", + "@layerzerolabs/eslint-config-next": "~2.3.44", + "@layerzerolabs/lz-definitions": "^2.3.44", + "@layerzerolabs/lz-evm-messagelib-v2": "^2.3.44", + "@layerzerolabs/lz-evm-protocol-v2": "^2.3.44", + "@layerzerolabs/lz-evm-v1-0.7": "^2.3.44", + "@layerzerolabs/lz-v2-utilities": "^2.3.44", + "@layerzerolabs/oapp-evm": "^0.0.4", + "@layerzerolabs/prettier-config-next": "^2.3.44", + "@layerzerolabs/solhint-config": "^2.3.44", + "@layerzerolabs/test-devtools-evm-foundry": "~2.0.0", + "@layerzerolabs/toolbox-foundry": "~0.1.9", + "@layerzerolabs/toolbox-hardhat": "~0.4.0", + "@nomicfoundation/hardhat-ethers": "^3.0.8", + "@nomiclabs/hardhat-ethers": "^2.2.3", + "@openzeppelin/contracts": "^5.1.0", + "@openzeppelin/contracts-upgradeable": "^5.1.0", + "@rushstack/eslint-patch": "^1.10.4", + "@types/chai": "^4.3.20", + "@types/mocha": "^10.0.9", + "@types/node": "~18.18.14", + "chai": "^4.5.0", + "dotenv": "^16.4.5", + "eslint": "^8.57.1", + "eslint-plugin-jest-extended": "~2.0.3", + "ethers": "^5.7.2", + "hardhat": "^2.22.15", + "hardhat-contract-sizer": "^2.10.0", + "hardhat-deploy": "^0.12.4", + "mocha": "^10.7.3", + "prettier": "^3.3.3", + "solhint": "^4.5.4", + "solidity-bytes-utils": "^0.8.2", + "ts-node": "^10.9.2", + "typescript": "^5.6.3" + }, + "engines": { + "node": ">=18.16.0" + }, + "pnpm": { + "overrides": { + "ethers": "^5.7.2", + "hardhat-deploy": "^0.12.1" + } + }, + "overrides": { + "ethers": "^5.7.2", + "hardhat-deploy": "^0.12.1" + }, + "dependencies": { + "@layerzerolabs/devtools-evm-hardhat": "^1.2.3", + "@layerzerolabs/lz-evm-oapp-v2": "^3.0.7" + } +} diff --git a/tests/e2e/testing_oapp/pnpm-lock.yaml b/tests/e2e/testing_oapp/pnpm-lock.yaml new file mode 100644 index 00000000..da64e96e --- /dev/null +++ b/tests/e2e/testing_oapp/pnpm-lock.yaml @@ -0,0 +1,8909 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +overrides: + ethers: ^5.7.2 + hardhat-deploy: ^0.12.1 + +importers: + + .: + dependencies: + '@layerzerolabs/devtools-evm-hardhat': + specifier: ^1.2.3 + version: 1.2.3(l3dwew44d65aeasvlyqkv5iroy) + '@layerzerolabs/lz-evm-oapp-v2': + specifier: ^3.0.7 + version: 3.0.7(kgr2ex7l55gboqwfslgl2tavnq) + devDependencies: + '@babel/core': + specifier: ^7.26.0 + version: 7.26.0 + '@layerzerolabs/eslint-config-next': + specifier: ~2.3.44 + version: 2.3.44(typescript@5.6.3) + '@layerzerolabs/lz-definitions': + specifier: ^2.3.44 + version: 2.3.44 + '@layerzerolabs/lz-evm-messagelib-v2': + specifier: ^2.3.44 + version: 2.3.44(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@eth-optimism/contracts@0.6.0(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@layerzerolabs/lz-evm-protocol-v2@2.3.44(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2))(@layerzerolabs/lz-evm-v1-0.7@2.3.44(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2) + '@layerzerolabs/lz-evm-protocol-v2': + specifier: ^2.3.44 + version: 2.3.44(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2) + '@layerzerolabs/lz-evm-v1-0.7': + specifier: ^2.3.44 + version: 2.3.44(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + '@layerzerolabs/lz-v2-utilities': + specifier: ^2.3.44 + version: 2.3.44 + '@layerzerolabs/oapp-evm': + specifier: ^0.0.4 + version: 0.0.4(cketphbdqcmpxjcxdldlipr2wy) + '@layerzerolabs/prettier-config-next': + specifier: ^2.3.44 + version: 2.3.44 + '@layerzerolabs/solhint-config': + specifier: ^2.3.44 + version: 2.3.44(typescript@5.6.3) + '@layerzerolabs/test-devtools-evm-foundry': + specifier: ~2.0.0 + version: 2.0.0(of4b7iyjndsbixduuoofxcrhsq) + '@layerzerolabs/toolbox-foundry': + specifier: ~0.1.9 + version: 0.1.9 + '@layerzerolabs/toolbox-hardhat': + specifier: ~0.4.0 + version: 0.4.0(@ethersproject/abstract-provider@5.7.0)(@ethersproject/abstract-signer@5.7.0)(@ethersproject/bignumber@5.7.0)(@ethersproject/constants@5.7.0)(@ethersproject/providers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@nomicfoundation/hardhat-ethers@3.0.8(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.15(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)))(@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.15(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.15(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2)(utf-8-validate@5.0.10) + '@nomicfoundation/hardhat-ethers': + specifier: ^3.0.8 + version: 3.0.8(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.15(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) + '@nomiclabs/hardhat-ethers': + specifier: ^2.2.3 + version: 2.2.3(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.15(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) + '@openzeppelin/contracts': + specifier: ^5.1.0 + version: 5.1.0 + '@openzeppelin/contracts-upgradeable': + specifier: ^5.1.0 + version: 5.1.0(@openzeppelin/contracts@5.1.0) + '@rushstack/eslint-patch': + specifier: ^1.10.4 + version: 1.10.4 + '@types/chai': + specifier: ^4.3.20 + version: 4.3.20 + '@types/mocha': + specifier: ^10.0.9 + version: 10.0.9 + '@types/node': + specifier: ~18.18.14 + version: 18.18.14 + chai: + specifier: ^4.5.0 + version: 4.5.0 + dotenv: + specifier: ^16.4.5 + version: 16.4.5 + eslint: + specifier: ^8.57.1 + version: 8.57.1 + eslint-plugin-jest-extended: + specifier: ~2.0.3 + version: 2.0.3(eslint@8.57.1)(typescript@5.6.3) + ethers: + specifier: ^5.7.2 + version: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + hardhat: + specifier: ^2.22.15 + version: 2.22.15(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + hardhat-contract-sizer: + specifier: ^2.10.0 + version: 2.10.0(hardhat@2.22.15(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) + hardhat-deploy: + specifier: ^0.12.1 + version: 0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) + mocha: + specifier: ^10.7.3 + version: 10.7.3 + prettier: + specifier: ^3.3.3 + version: 3.3.3 + solhint: + specifier: ^4.5.4 + version: 4.5.4(typescript@5.6.3) + solidity-bytes-utils: + specifier: ^0.8.2 + version: 0.8.2 + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@18.18.14)(typescript@5.6.3) + typescript: + specifier: ^5.6.3 + version: 5.6.3 + +packages: + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@axelar-network/axelar-gmp-sdk-solidity@5.10.0': + resolution: {integrity: sha512-s8SImALvYB+5AeiT3tbfWNBI2Mhqw1x91i/zM3DNpVUCnAR2HKtsB9T84KnUn/OJjOVgb4h0lv7q9smeYniRPw==} + engines: {node: '>=18'} + + '@babel/code-frame@7.26.0': + resolution: {integrity: sha512-INCKxTtbXtcNbUZ3YXutwMpEleqttcswhAdee7dhuoVrD2cnuc3PqtERBtxkX5nziX9vnBL8WXmSGwv8CuPV6g==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.26.0': + resolution: {integrity: sha512-qETICbZSLe7uXv9VE8T/RWOdIE5qqyTucOt4zLYMafj2MRO271VGgLd4RACJMeBO37UPWhXiKMBk7YlJ0fOzQA==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.0': + resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.26.0': + resolution: {integrity: sha512-/AIkAmInnWwgEAJGQr9vY0c66Mj6kjkE2ZPB1PurTRaRAh3U+J45sAQMjQDJdh4WbR3l0x5xkimXBKyBXXAu2w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.25.9': + resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.26.0': + resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.26.0': + resolution: {integrity: sha512-aP8x5pIw3xvYr/sXT+SEUwyhrXT8rUJRZltK/qN3Db80dcKpTett8cJxHyjk+xYSVXvNnl2SfcJVjbwxpOSscA==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/template@7.25.9': + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.25.9': + resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.0': + resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} + engines: {node: '>=6.9.0'} + + '@chainlink/contracts-ccip@0.7.6': + resolution: {integrity: sha512-yNbCBFpLs3R+ALymto9dQYKz3vatnjqYGu1pnMD0i2fHEMthiXe0+otaNCGNht6n8k7ruNaA0DNpz3F+2jHQXw==} + + '@colors/colors@1.5.0': + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + + '@colors/colors@1.6.0': + resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} + engines: {node: '>=0.1.90'} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@dabh/diagnostics@2.0.3': + resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} + + '@eslint-community/eslint-utils@4.4.0': + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.11.1': + resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@8.57.1': + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eth-optimism/contracts@0.5.40': + resolution: {integrity: sha512-MrzV0nvsymfO/fursTB7m/KunkPsCndltVgfdHaT1Aj5Vi6R/doKIGGkOofHX+8B6VMZpuZosKCMQ5lQuqjt8w==} + peerDependencies: + ethers: ^5.7.2 + + '@eth-optimism/contracts@0.6.0': + resolution: {integrity: sha512-vQ04wfG9kMf1Fwy3FEMqH2QZbgS0gldKhcBeBUPfO8zu68L61VI97UDXmsMQXzTsEAxK8HnokW3/gosl4/NW3w==} + peerDependencies: + ethers: ^5.7.2 + + '@eth-optimism/core-utils@0.12.0': + resolution: {integrity: sha512-qW+7LZYCz7i8dRa7SRlUKIo1VBU8lvN0HeXCxJR+z+xtMzMQpPds20XJNCMclszxYQHkXY00fOT6GvFw9ZL6nw==} + + '@ethereumjs/common@2.6.5': + resolution: {integrity: sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==} + + '@ethereumjs/rlp@4.0.1': + resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} + engines: {node: '>=14'} + hasBin: true + + '@ethereumjs/tx@3.5.2': + resolution: {integrity: sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==} + + '@ethereumjs/util@8.1.0': + resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} + engines: {node: '>=14'} + + '@ethersproject/abi@5.7.0': + resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==} + + '@ethersproject/abstract-provider@5.7.0': + resolution: {integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==} + + '@ethersproject/abstract-signer@5.7.0': + resolution: {integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==} + + '@ethersproject/address@5.7.0': + resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==} + + '@ethersproject/base64@5.7.0': + resolution: {integrity: sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==} + + '@ethersproject/basex@5.7.0': + resolution: {integrity: sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==} + + '@ethersproject/bignumber@5.7.0': + resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==} + + '@ethersproject/bytes@5.7.0': + resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==} + + '@ethersproject/constants@5.7.0': + resolution: {integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==} + + '@ethersproject/contracts@5.7.0': + resolution: {integrity: sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==} + + '@ethersproject/hash@5.7.0': + resolution: {integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==} + + '@ethersproject/hdnode@5.7.0': + resolution: {integrity: sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==} + + '@ethersproject/json-wallets@5.7.0': + resolution: {integrity: sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==} + + '@ethersproject/keccak256@5.7.0': + resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==} + + '@ethersproject/logger@5.7.0': + resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==} + + '@ethersproject/networks@5.7.1': + resolution: {integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==} + + '@ethersproject/pbkdf2@5.7.0': + resolution: {integrity: sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==} + + '@ethersproject/properties@5.7.0': + resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==} + + '@ethersproject/providers@5.7.2': + resolution: {integrity: sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==} + + '@ethersproject/random@5.7.0': + resolution: {integrity: sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==} + + '@ethersproject/rlp@5.7.0': + resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==} + + '@ethersproject/sha2@5.7.0': + resolution: {integrity: sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==} + + '@ethersproject/signing-key@5.7.0': + resolution: {integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==} + + '@ethersproject/solidity@5.7.0': + resolution: {integrity: sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==} + + '@ethersproject/strings@5.7.0': + resolution: {integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==} + + '@ethersproject/transactions@5.7.0': + resolution: {integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==} + + '@ethersproject/units@5.7.0': + resolution: {integrity: sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==} + + '@ethersproject/wallet@5.7.0': + resolution: {integrity: sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==} + + '@ethersproject/web@5.7.1': + resolution: {integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==} + + '@ethersproject/wordlists@5.7.0': + resolution: {integrity: sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==} + + '@fastify/busboy@2.1.1': + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} + + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@layerzerolabs/devtools-evm-hardhat@1.2.3': + resolution: {integrity: sha512-kIVMvLb1BZ+7rcPjjfl3iDnrszLfH+RnD9H4PWsbazqEOWizNQnO0+u9Aj9/KMTyly6hl5e5gZINZoTwkrPi+w==} + peerDependencies: + '@ethersproject/abi': ^5.7.0 + '@ethersproject/abstract-signer': ^5.7.0 + '@ethersproject/contracts': ^5.7.0 + '@ethersproject/providers': ^5.7.0 + '@layerzerolabs/devtools': ~0.3.27 + '@layerzerolabs/devtools-evm': ~0.4.2 + '@layerzerolabs/io-devtools': ~0.1.13 + '@layerzerolabs/lz-definitions': ^2.3.3 + '@nomiclabs/hardhat-ethers': ^2.2.3 + fp-ts: ^2.16.2 + hardhat: ^2.22.10 + hardhat-deploy: ^0.12.1 + + '@layerzerolabs/devtools-evm@0.4.2': + resolution: {integrity: sha512-/X9Bsvbi9SyaPeL7dkXClnKwsE1roU+OCtOo1Sg/dtM3+xQOa1MBGycAYjuLPg8yV1mgxL7yYKniAsGnsZ7IeQ==} + peerDependencies: + '@ethersproject/abi': ^5.7.0 + '@ethersproject/abstract-provider': ^5.7.0 + '@ethersproject/abstract-signer': ^5.7.0 + '@ethersproject/address': ~5.7.0 + '@ethersproject/bignumber': ^5.7.0 + '@ethersproject/constants': ^5.7.0 + '@ethersproject/contracts': ^5.7.0 + '@ethersproject/providers': ^5.7.0 + '@layerzerolabs/devtools': ~0.3.25 + '@layerzerolabs/io-devtools': ~0.1.12 + '@layerzerolabs/lz-definitions': ^2.3.3 + fp-ts: ^2.16.2 + zod: ^3.22.4 + + '@layerzerolabs/devtools@0.3.28': + resolution: {integrity: sha512-3Sfy93Tphrs3Jm5igxyo0cn6oMbIX4ry2jAe5gzKNdsqwtglSQzKFBhvgeurOpeSW4QVUNR+SFhM29Mr2dR1ag==} + peerDependencies: + '@ethersproject/bytes': ~5.7.0 + '@layerzerolabs/io-devtools': ~0.1.13 + '@layerzerolabs/lz-definitions': ^2.3.3 + zod: ^3.22.4 + + '@layerzerolabs/eslint-config-next@2.3.44': + resolution: {integrity: sha512-WlBSy47LGPILdrNgzPiRtQf/hAY62IN37ncUsQwcr8T7cyX1HZREx2qljuXpvduLDAKn5otsm0XIqHuCRUHEFg==} + + '@layerzerolabs/evm-sdks-core@2.3.44': + resolution: {integrity: sha512-T0XDKtoox8qDrlzo6H+fpFRNj2wlh8uKH5QN4RvwK1DShkL+3fmnA52LWPfI6jX17ONN9M8lrjYhIfo1mQKy1w==} + + '@layerzerolabs/export-deployments@0.0.12': + resolution: {integrity: sha512-W4lwpUP2uY0W1+dleAKulzuwXXM7qt2g2IQuohWbn+QBu0OeVMJ8BFnXvcV2DBxYPXyaolHbaGAA/NFF70ngYQ==} + hasBin: true + + '@layerzerolabs/io-devtools@0.1.13': + resolution: {integrity: sha512-TbamgFnrV+79O4siwsH+zS8SBwL69lrAwFSf056HmI/hPrWVwYMK+uzVu92PI2mMfXuImMPfuU19TsC2mVv7dg==} + peerDependencies: + ink: ^3.2.0 + ink-gradient: ^2.0.0 + ink-table: ^3.1.0 + react: ^17.0.2 + yoga-layout-prebuilt: ^1.9.6 + zod: ^3.22.4 + peerDependenciesMeta: + ink: + optional: true + ink-gradient: + optional: true + ink-table: + optional: true + react: + optional: true + yoga-layout-prebuilt: + optional: true + + '@layerzerolabs/lz-definitions@2.3.44': + resolution: {integrity: sha512-8dH7rbHCVG+GDOizCb4RrtHEFHr5wud9Lf9Kxs/MLThgu7VWcXvy78KYHMQ4S7AXoFnyzMPaiEU/LS8kRWfhag==} + + '@layerzerolabs/lz-evm-messagelib-v2@2.3.44': + resolution: {integrity: sha512-2HZMjV0KZH0e3W2KL/H8HvE3I7QMJw1no46IQ5LpGSvxIm5Ri45tnQAynbmEbRyKXrRSP3Brkvkc2U7VrfZ/Cg==} + peerDependencies: + '@arbitrum/nitro-contracts': ^1.1.0 + '@axelar-network/axelar-gmp-sdk-solidity': ^5.6.4 + '@chainlink/contracts-ccip': ^0.7.6 + '@eth-optimism/contracts': ^0.6.0 + '@layerzerolabs/lz-evm-protocol-v2': ^2.3.44 + '@layerzerolabs/lz-evm-v1-0.7': ^2.3.44 + '@openzeppelin/contracts': ^4.8.1 || ^5.0.0 + '@openzeppelin/contracts-upgradeable': ^4.8.1 || ^5.0.0 + hardhat-deploy: ^0.12.1 + solidity-bytes-utils: ^0.8.0 + peerDependenciesMeta: + '@arbitrum/nitro-contracts': + optional: true + + '@layerzerolabs/lz-evm-oapp-v2@3.0.7': + resolution: {integrity: sha512-U7SAe5+iII7v4bF1biYD/70h5CTAhyb/pROShHVMrO53wwKGDbmPDbB/2Pq6yMTpYm04mbZud0mNbdPkLHbjdA==} + peerDependencies: + '@layerzerolabs/lz-evm-messagelib-v2': ^3.0.7 + '@layerzerolabs/lz-evm-protocol-v2': ^3.0.7 + '@layerzerolabs/lz-evm-v1-0.7': ^3.0.7 + '@openzeppelin/contracts': ^4.8.1 || ^5.0.0 + '@openzeppelin/contracts-upgradeable': ^4.8.1 || ^5.0.0 + hardhat-deploy: ^0.12.1 + solidity-bytes-utils: ^0.8.0 + + '@layerzerolabs/lz-evm-protocol-v2@2.3.44': + resolution: {integrity: sha512-oNtwl4HGCogFVOr45T3FfrkB0/CRW2eGAEScBw/FY/6mlncnS4dqlvrCJ3SFlK17cu1w9q0ztD3NzS9sUrb7vw==} + peerDependencies: + '@openzeppelin/contracts': ^4.8.1 || ^5.0.0 + '@openzeppelin/contracts-upgradeable': ^4.8.1 || ^5.0.0 + hardhat-deploy: ^0.12.1 + solidity-bytes-utils: ^0.8.0 + + '@layerzerolabs/lz-evm-sdk-v1@2.3.44': + resolution: {integrity: sha512-jHnFqSqRQGD11TuPcpwCSY87FfVqGTdZj/1xFUTdW7r/zyZYTTr2pE/wZG5qWNZrO5VkPqgp2ttaZC6UM87+0w==} + + '@layerzerolabs/lz-evm-sdk-v2@2.3.44': + resolution: {integrity: sha512-j99rAzalyaYx3sDn06Dfc7bLsQfLCRbx3qhgIhBxOfe9T9bYKRXV6UAD+dHFpwdFOU0UxioQKosKCGgIwSNKAw==} + + '@layerzerolabs/lz-evm-v1-0.7@2.3.44': + resolution: {integrity: sha512-gxPUv5yk5TLy4Rp4KwFqiPHGpVOPMtnwUi+LvRysnGgkqopOJRCzzvWqEv6M2YMUAsof+Vmr3UYWxKcilvv97g==} + peerDependencies: + '@openzeppelin/contracts': 3.4.2-solc-0.7 || ^3.4.2 || ^4.0.0 || ^5.0.0 + '@openzeppelin/contracts-upgradeable': 3.4.2-solc-0.7 || ^3.4.2 || ^4.0.0 || ^5.0.0 + hardhat-deploy: ^0.12.1 + + '@layerzerolabs/lz-v2-utilities@2.3.44': + resolution: {integrity: sha512-0p7tdJCf6BSmN38tAnO7WyOoC84NDTCQt1MqPBomXTyIux1RLpkS82jcxv92+E+1LNulhHIx5W62gaKKx27B2A==} + + '@layerzerolabs/oapp-evm@0.0.4': + resolution: {integrity: sha512-h0papPd9mQAPsWoQuzZk3dIcLWLrJ8tnDNPg7Hn8aa+v7HPY1lo6Zmyn3t7RmzfKnvrjnjKWDTbX2zgesu4hYg==} + peerDependencies: + '@layerzerolabs/lz-evm-messagelib-v2': ^2.3.39 + '@layerzerolabs/lz-evm-protocol-v2': ^2.3.39 + '@layerzerolabs/lz-evm-v1-0.7': ^2.3.39 + '@openzeppelin/contracts': ^4.8.1 || ^5.0.0 + '@openzeppelin/contracts-upgradeable': ^4.8.1 || ^5.0.0 + + '@layerzerolabs/oft-evm@0.1.0': + resolution: {integrity: sha512-8LiotgJjbQN+wexOtpUPh2vgYDgec2ac0ypKKbBIE2kt1DWAxvKxI8nGuE6RRjBnvvMS3qNGmJQFxzwcOKHq+g==} + peerDependencies: + '@layerzerolabs/lz-evm-messagelib-v2': ^2.3.39 + '@layerzerolabs/lz-evm-protocol-v2': ^2.3.39 + '@layerzerolabs/lz-evm-v1-0.7': ^2.3.39 + '@layerzerolabs/oapp-evm': ^0.0.4 + '@openzeppelin/contracts': ^4.8.1 || ^5.0.0 + '@openzeppelin/contracts-upgradeable': ^4.8.1 || ^5.0.0 + + '@layerzerolabs/prettier-config-next@2.3.44': + resolution: {integrity: sha512-mIsxKLaelXHXXXvMEAE6Jc8IVydra0PesHquHYwvxFKwDhMhzfrnoRLLzbgCX/Zi1q0GGET/oMAKJTs6OWFPxQ==} + + '@layerzerolabs/protocol-devtools-evm@1.2.1': + resolution: {integrity: sha512-VyjpO4LJ+eiszxImXWst6lfJQNm0dv7XAf8m7vI6ZJk8Tg48QswBYoNZwlDDLBvMWv3vz+uf5HHn1AspVModyA==} + peerDependencies: + '@ethersproject/abstract-provider': ^5.7.0 + '@ethersproject/abstract-signer': ^5.7.0 + '@ethersproject/bignumber': ^5.7.0 + '@ethersproject/constants': ^5.7.0 + '@ethersproject/contracts': ^5.7.0 + '@ethersproject/providers': ^5.7.0 + '@layerzerolabs/devtools': ~0.3.25 + '@layerzerolabs/devtools-evm': ~0.4.2 + '@layerzerolabs/io-devtools': ~0.1.12 + '@layerzerolabs/lz-definitions': ^2.3.3 + '@layerzerolabs/protocol-devtools': ~0.4.3 + zod: ^3.22.4 + + '@layerzerolabs/protocol-devtools@0.4.3': + resolution: {integrity: sha512-72qMcXw99wpe3v6qyh6ynFW66U6rnYuAzKXKz6R7q5JdYI/sAbnVNxuANq7ON0hffs3d24ea6qX4f6T+Lo6zJQ==} + peerDependencies: + '@layerzerolabs/devtools': ~0.3.25 + '@layerzerolabs/lz-definitions': ^2.3.3 + zod: ^3.22.4 + + '@layerzerolabs/solhint-config@2.3.44': + resolution: {integrity: sha512-1FnAwiV6FNH2KAcVWd36u7xthcs4+HI6BvU8BLp8boxEppYylxm1KFCcWSyHij9Ct5bUScKTPI6jwks/FzTU3A==} + + '@layerzerolabs/test-devtools-evm-foundry@2.0.0': + resolution: {integrity: sha512-4EY9/YPGRVoNkeAPRQLhfV7YN6+LCFJt6qJqSEbyIjTKJJCZiqAJN+HuhbM/4y8fsvOnsdoCMHbpOhJtH2a2hQ==} + peerDependencies: + '@layerzerolabs/lz-evm-messagelib-v2': ^2.3.3 + '@layerzerolabs/lz-evm-protocol-v2': ^2.3.3 + '@layerzerolabs/lz-evm-v1-0.7': ^2.3.3 + '@layerzerolabs/oapp-evm': ^0.0.4 + '@layerzerolabs/oft-evm': ^0.1.0 + '@openzeppelin/contracts': ^4.9.5 || ^5.0.0 + '@openzeppelin/contracts-upgradeable': ^4.9.5 || ^5.0.0 + + '@layerzerolabs/test-devtools-evm-hardhat@0.3.0': + resolution: {integrity: sha512-776SF+Rp6+8PPMjl5WYglgfas6IyqZ2g7dU73seQC9VaPfbM+6XORtOCLVUxl6Hrp43edAI0dZuIm6xWhVFiYQ==} + peerDependencies: + hardhat: ^2.22.10 + solidity-bytes-utils: ^0.8.2 + + '@layerzerolabs/toolbox-foundry@0.1.9': + resolution: {integrity: sha512-OVOT7Nt3uaX3VaqA3zqKP+ZIfsSo2X7c3jbrBb0I0ewsxNung+pYrYtCUhSoLLHQ1eOteh08C8Pq8A/Tbud/tg==} + + '@layerzerolabs/toolbox-hardhat@0.4.0': + resolution: {integrity: sha512-WTc22nlEX4HwBUSvsVA/RzkZKp4wkY0f9k8m/NKXY7BrikdpilkWXJ+jgE1hG7tPY55bKd6CNHm41P5bTqIh4w==} + peerDependencies: + '@nomicfoundation/hardhat-ethers': ^3.0.2 + ethers: ^5.7.2 + hardhat: ^2.22.10 + hardhat-deploy: ^0.12.1 + + '@layerzerolabs/ua-devtools-evm-hardhat@4.0.1': + resolution: {integrity: sha512-j1K/e8LYfhNSuxYxcLKul9cHVDuBBwAeob85mj0Yfro+hLYQVlSOY/iTuubLpn51ynw60lGJQxewVzIW7U6DWg==} + peerDependencies: + '@ethersproject/abi': ^5.7.0 + '@ethersproject/bytes': ^5.7.0 + '@ethersproject/contracts': ^5.7.0 + '@ethersproject/hash': ^5.7.0 + '@layerzerolabs/devtools': ~0.3.27 + '@layerzerolabs/devtools-evm': ~0.4.2 + '@layerzerolabs/devtools-evm-hardhat': ~1.2.2 + '@layerzerolabs/io-devtools': ~0.1.13 + '@layerzerolabs/lz-definitions': ^2.3.3 + '@layerzerolabs/protocol-devtools': ~0.4.3 + '@layerzerolabs/protocol-devtools-evm': ~1.2.1 + '@layerzerolabs/ua-devtools': ~1.0.5 + '@layerzerolabs/ua-devtools-evm': ~3.0.1 + ethers: ^5.7.2 + hardhat: ^2.22.10 + hardhat-deploy: ^0.12.1 + + '@layerzerolabs/ua-devtools-evm@3.0.1': + resolution: {integrity: sha512-r/Voc1vmB9OEXc18sA/7prQdmZOqO7eR2/8CeiH7T3yCSA2vjjgByn2wxbmYy828gIw8wcx7GEky5F4gpvRnow==} + peerDependencies: + '@ethersproject/constants': ^5.7.0 + '@ethersproject/contracts': ^5.7.0 + '@layerzerolabs/devtools': ~0.3.25 + '@layerzerolabs/devtools-evm': ~0.4.2 + '@layerzerolabs/io-devtools': ~0.1.12 + '@layerzerolabs/lz-definitions': ^2.3.3 + '@layerzerolabs/lz-v2-utilities': ^2.3.3 + '@layerzerolabs/protocol-devtools': ~0.4.3 + '@layerzerolabs/protocol-devtools-evm': ~1.2.1 + '@layerzerolabs/ua-devtools': ~1.0.5 + zod: ^3.22.4 + + '@layerzerolabs/ua-devtools@1.0.5': + resolution: {integrity: sha512-RQ8GnAH3OEQeocgZSEGBO36guQirDLs+89NidH6vVebMTcjPQ5oVAJDem3Y+AQvX7avd+ijW0IPZ2fZ2SBA3fA==} + peerDependencies: + '@layerzerolabs/devtools': ~0.3.25 + '@layerzerolabs/io-devtools': ~0.1.12 + '@layerzerolabs/lz-definitions': ^2.3.3 + '@layerzerolabs/lz-v2-utilities': ^2.3.3 + '@layerzerolabs/protocol-devtools': ~0.4.3 + zod: ^3.22.4 + + '@mdn/browser-compat-data@5.6.9': + resolution: {integrity: sha512-xbpYnhcx48qe1p8qimSCUu79QPhK6STaj5mUJ7A0VRCxgfZ5boJ4L/Vy9e5lOPquPSQ1tWZ6mOO+01VzLJg2iA==} + + '@metamask/eth-sig-util@4.0.1': + resolution: {integrity: sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==} + engines: {node: '>=12.0.0'} + + '@noble/curves@1.4.2': + resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==} + + '@noble/hashes@1.2.0': + resolution: {integrity: sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==} + + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + + '@noble/hashes@1.5.0': + resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==} + engines: {node: ^14.21.3 || >=16} + + '@noble/secp256k1@1.7.1': + resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@nolyfill/is-core-module@1.0.39': + resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} + engines: {node: '>=12.4.0'} + + '@nomicfoundation/edr-darwin-arm64@0.6.4': + resolution: {integrity: sha512-QNQErISLgssV9+qia8sIjRANqtbW8snSDvjspixT/kSQ5ZSGxxctTg7x72wPSrcu8+EBEveIe5uqENIp5GH8HQ==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr-darwin-x64@0.6.4': + resolution: {integrity: sha512-cjVmREiwByyc9+oGfvAh49IAw+oVJHF9WWYRD+Tm/ZlSpnEVWxrGNBak2bd/JSYjn+mZE7gmWS4SMRi4nKaLUg==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr-linux-arm64-gnu@0.6.4': + resolution: {integrity: sha512-96o9kRIVD6W5VkgKvUOGpWyUGInVQ5BRlME2Fa36YoNsRQMaKtmYJEU0ACosYES6ZTpYC8U5sjMulvPtVoEfOA==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr-linux-arm64-musl@0.6.4': + resolution: {integrity: sha512-+JVEW9e5plHrUfQlSgkEj/UONrIU6rADTEk+Yp9pbe+mzNkJdfJYhs5JYiLQRP4OjxH4QOrXI97bKU6FcEbt5Q==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr-linux-x64-gnu@0.6.4': + resolution: {integrity: sha512-nzYWW+fO3EZItOeP4CrdMgDXfaGBIBkKg0Y/7ySpUxLqzut40O4Mb0/+quqLAFkacUSWMlFp8nsmypJfOH5zoA==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr-linux-x64-musl@0.6.4': + resolution: {integrity: sha512-QFRoE9qSQ2boRrVeQ1HdzU+XN7NUgwZ1SIy5DQt4d7jCP+5qTNsq8LBNcqhRBOATgO63nsweNUhxX/Suj5r1Sw==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr-win32-x64-msvc@0.6.4': + resolution: {integrity: sha512-2yopjelNkkCvIjUgBGhrn153IBPLwnsDeNiq6oA0WkeM8tGmQi4td+PGi9jAriUDAkc59Yoi2q9hYA6efiY7Zw==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr@0.6.4': + resolution: {integrity: sha512-YgrSuT3yo5ZQkbvBGqQ7hG+RDvz3YygSkddg4tb1Z0Y6pLXFzwrcEwWaJCFAVeeZxdxGfCgGMUYgRVneK+WXkw==} + engines: {node: '>= 18'} + + '@nomicfoundation/ethereumjs-common@4.0.4': + resolution: {integrity: sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==} + + '@nomicfoundation/ethereumjs-rlp@5.0.4': + resolution: {integrity: sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==} + engines: {node: '>=18'} + hasBin: true + + '@nomicfoundation/ethereumjs-tx@5.0.4': + resolution: {integrity: sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw==} + engines: {node: '>=18'} + peerDependencies: + c-kzg: ^2.1.2 + peerDependenciesMeta: + c-kzg: + optional: true + + '@nomicfoundation/ethereumjs-util@9.0.4': + resolution: {integrity: sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q==} + engines: {node: '>=18'} + peerDependencies: + c-kzg: ^2.1.2 + peerDependenciesMeta: + c-kzg: + optional: true + + '@nomicfoundation/hardhat-ethers@3.0.8': + resolution: {integrity: sha512-zhOZ4hdRORls31DTOqg+GmEZM0ujly8GGIuRY7t7szEk2zW/arY1qDug/py8AEktT00v5K+b6RvbVog+va51IA==} + peerDependencies: + ethers: ^5.7.2 + hardhat: ^2.0.0 + + '@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2': + resolution: {integrity: sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-darwin-x64@0.1.2': + resolution: {integrity: sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.2': + resolution: {integrity: sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.2': + resolution: {integrity: sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.2': + resolution: {integrity: sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.2': + resolution: {integrity: sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.2': + resolution: {integrity: sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer@0.1.2': + resolution: {integrity: sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==} + engines: {node: '>= 12'} + + '@nomiclabs/hardhat-ethers@2.2.3': + resolution: {integrity: sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg==} + peerDependencies: + ethers: ^5.7.2 + hardhat: ^2.0.0 + + '@openzeppelin/contracts-upgradeable@4.7.3': + resolution: {integrity: sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A==} + + '@openzeppelin/contracts-upgradeable@5.1.0': + resolution: {integrity: sha512-AIElwP5Ck+cslNE+Hkemf5SxjJoF4wBvvjxc27Rp+9jaPs/CLIaUBMYe1FNzhdiN0cYuwGRmYaRHmmntuiju4Q==} + peerDependencies: + '@openzeppelin/contracts': 5.1.0 + + '@openzeppelin/contracts@3.4.2': + resolution: {integrity: sha512-z0zMCjyhhp4y7XKAcDAi3Vgms4T2PstwBdahiO0+9NaGICQKjynK3wduSRplTgk4LXmoO1yfDGO5RbjKYxtuxA==} + + '@openzeppelin/contracts@4.3.3': + resolution: {integrity: sha512-tDBopO1c98Yk7Cv/PZlHqrvtVjlgK5R4J6jxLwoO7qxK4xqOiZG+zSkIvGFpPZ0ikc3QOED3plgdqjgNTnBc7g==} + + '@openzeppelin/contracts@5.1.0': + resolution: {integrity: sha512-p1ULhl7BXzjjbha5aqst+QMLY+4/LCWADXOCsmLHRM77AqiPjnd9vvUN9sosUfhL9JGKpZ0TjEGxgvnizmWGSA==} + + '@pkgr/core@0.1.1': + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + '@pnpm/config.env-replace@1.1.0': + resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} + engines: {node: '>=12.22.0'} + + '@pnpm/network.ca-file@1.0.2': + resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} + engines: {node: '>=12.22.0'} + + '@pnpm/npm-conf@2.3.1': + resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==} + engines: {node: '>=12'} + + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + + '@rushstack/eslint-patch@1.10.4': + resolution: {integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==} + + '@safe-global/api-kit@1.3.1': + resolution: {integrity: sha512-JKvCNs8p+42+N8pV2MIqoXlBLckTe5CKboVT7t9mTluuA66i5W8+Kr+B5j9D//EIU5vO7iSOOIYnJuA2ck4XRQ==} + + '@safe-global/protocol-kit@1.3.0': + resolution: {integrity: sha512-zBhwHpaUggywmnR1Xm5RV22DpyjmVWYP3pnOl4rcf9LAc1k7IVmw6WIt2YVhHRaWGxVYMd4RitJX8Dx2+8eLZQ==} + + '@safe-global/safe-core-sdk-types@2.3.0': + resolution: {integrity: sha512-dU0KkDV1KJNf11ajbUjWiSi4ygdyWfhk1M50lTJWUdCn1/2Bsb/hICM8LoEk6DCoFumxaoCet02SmYakXsW2CA==} + + '@safe-global/safe-deployments@1.37.13': + resolution: {integrity: sha512-DXDbyW+pSK5W+eyrT7I2VHgHjCUhiXgcmSjekCzwmzrRXB5sW36DLLDwfC5c1gvo26ix6NcIGRSk2sf68BHdeg==} + + '@scure/base@1.1.9': + resolution: {integrity: sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==} + + '@scure/bip32@1.1.5': + resolution: {integrity: sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==} + + '@scure/bip32@1.4.0': + resolution: {integrity: sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==} + + '@scure/bip39@1.1.1': + resolution: {integrity: sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==} + + '@scure/bip39@1.3.0': + resolution: {integrity: sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==} + + '@sentry/core@5.30.0': + resolution: {integrity: sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==} + engines: {node: '>=6'} + + '@sentry/hub@5.30.0': + resolution: {integrity: sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==} + engines: {node: '>=6'} + + '@sentry/minimal@5.30.0': + resolution: {integrity: sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==} + engines: {node: '>=6'} + + '@sentry/node@5.30.0': + resolution: {integrity: sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==} + engines: {node: '>=6'} + + '@sentry/tracing@5.30.0': + resolution: {integrity: sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==} + engines: {node: '>=6'} + + '@sentry/types@5.30.0': + resolution: {integrity: sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==} + engines: {node: '>=6'} + + '@sentry/utils@5.30.0': + resolution: {integrity: sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==} + engines: {node: '>=6'} + + '@sindresorhus/is@4.6.0': + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} + + '@sindresorhus/is@5.6.0': + resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} + engines: {node: '>=14.16'} + + '@solidity-parser/parser@0.18.0': + resolution: {integrity: sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA==} + + '@szmarczak/http-timer@4.0.6': + resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} + engines: {node: '>=10'} + + '@szmarczak/http-timer@5.0.1': + resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} + engines: {node: '>=14.16'} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@types/bn.js@4.11.6': + resolution: {integrity: sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==} + + '@types/bn.js@5.1.6': + resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==} + + '@types/cacheable-request@6.0.3': + resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + + '@types/chai@4.3.20': + resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==} + + '@types/http-cache-semantics@4.0.4': + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/keyv@3.1.4': + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + + '@types/lru-cache@5.1.1': + resolution: {integrity: sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==} + + '@types/mocha@10.0.9': + resolution: {integrity: sha512-sicdRoWtYevwxjOHNMPTl3vSfJM6oyW8o1wXeI7uww6b6xHg8eBznQDNSGBCDJmsE8UMxP05JgZRtsKbTqt//Q==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@18.18.14': + resolution: {integrity: sha512-iSOeNeXYNYNLLOMDSVPvIFojclvMZ/HDY2dU17kUlcsOsSQETbWIslJbYLZgA+ox8g2XQwSHKTkght1a5X26lQ==} + + '@types/pbkdf2@3.1.2': + resolution: {integrity: sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==} + + '@types/qs@6.9.16': + resolution: {integrity: sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==} + + '@types/responselike@1.0.3': + resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} + + '@types/secp256k1@4.0.6': + resolution: {integrity: sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==} + + '@types/semver@7.5.8': + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + + '@types/tinycolor2@1.4.6': + resolution: {integrity: sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==} + + '@types/triple-beam@1.3.5': + resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} + + '@types/yoga-layout@1.9.2': + resolution: {integrity: sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw==} + + '@typescript-eslint/eslint-plugin@7.18.0': + resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + '@typescript-eslint/parser': ^7.0.0 + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@7.18.0': + resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@5.62.0': + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/scope-manager@7.18.0': + resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/type-utils@7.18.0': + resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@5.62.0': + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/types@7.18.0': + resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/typescript-estree@5.62.0': + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/typescript-estree@7.18.0': + resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@5.62.0': + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + + '@typescript-eslint/utils@7.18.0': + resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + + '@typescript-eslint/visitor-keys@5.62.0': + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/visitor-keys@7.18.0': + resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@ungap/structured-clone@1.2.0': + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + + abortcontroller-polyfill@1.7.5: + resolution: {integrity: sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + + acorn@8.13.0: + resolution: {integrity: sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==} + engines: {node: '>=0.4.0'} + hasBin: true + + adm-zip@0.4.16: + resolution: {integrity: sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==} + engines: {node: '>=0.3.0'} + + aes-js@3.0.0: + resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==} + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + antlr4@4.13.2: + resolution: {integrity: sha512-QiVbZhyy4xAZ17UPEuG3YTOt8ZaoeOR1CvEAqrEsDBsOqINslaB147i9xqljZqoyf5S+EUlGStaj+t22LT9MOg==} + engines: {node: '>=16'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + + asn1@0.2.6: + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + + assert-plus@1.0.0: + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} + engines: {node: '>=0.8'} + + assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + + ast-metadata-inferer@0.8.0: + resolution: {integrity: sha512-jOMKcHht9LxYIEQu+RVd22vtgrPaVCtDRQ/16IGmurdzxvYbDd5ynxjnyrzLnieG96eTcAyaoj/wN/4/1FyyeA==} + + ast-parents@0.0.1: + resolution: {integrity: sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA==} + + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + + async-limiter@1.0.1: + resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} + + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + auto-bind@4.0.0: + resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==} + engines: {node: '>=8'} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + aws-sign2@0.7.0: + resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} + + aws4@1.13.2: + resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} + + axios@0.21.4: + resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base-x@3.0.10: + resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==} + + base-x@4.0.0: + resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} + + base-x@5.0.0: + resolution: {integrity: sha512-sMW3VGSX1QWVFA6l8U62MLKz29rRfpTlYdCqLdpLo1/Yd4zZwSbnUaDfciIAowAqvq7YFnWq9hrhdg1KYgc1lQ==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bcrypt-pbkdf@1.0.2: + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + + bech32@1.1.4: + resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} + + bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + blakejs@1.2.1: + resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==} + + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + + bn.js@4.11.6: + resolution: {integrity: sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==} + + bn.js@4.12.0: + resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} + + bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + + body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + boxen@5.1.2: + resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} + engines: {node: '>=10'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + + browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + + browserify-aes@1.2.0: + resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} + + browserslist@4.24.2: + resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + + bs58@5.0.0: + resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} + + bs58@6.0.0: + resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==} + + bs58check@2.1.2: + resolution: {integrity: sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer-to-arraybuffer@0.0.5: + resolution: {integrity: sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==} + + buffer-xor@1.0.3: + resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bufferutil@4.0.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} + engines: {node: '>=6.14.2'} + + bufio@1.2.2: + resolution: {integrity: sha512-sTsA0ka7sjge/bGUfjk00O/8kNfyeAvJjXXeyvgbXefIrf5GTp99W71qfmCP6FGHWbr4A0IjjM7dFj6bHXVMlw==} + engines: {node: '>=14.0.0'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + cacheable-lookup@5.0.4: + resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} + engines: {node: '>=10.6.0'} + + cacheable-lookup@6.1.0: + resolution: {integrity: sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==} + engines: {node: '>=10.6.0'} + + cacheable-lookup@7.0.0: + resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} + engines: {node: '>=14.16'} + + cacheable-request@10.2.14: + resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} + engines: {node: '>=14.16'} + + cacheable-request@7.0.4: + resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} + engines: {node: '>=8'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + caniuse-lite@1.0.30001669: + resolution: {integrity: sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==} + + caseless@0.12.0: + resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} + + chai@4.5.0: + resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} + engines: {node: '>=4'} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chokidar@4.0.1: + resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} + engines: {node: '>= 14.16.0'} + + chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + + ci-info@2.0.0: + resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} + + cids@0.7.5: + resolution: {integrity: sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==} + engines: {node: '>=4.0.0', npm: '>=3.0.0'} + deprecated: This module has been superseded by the multiformats module + + cipher-base@1.0.4: + resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} + + class-is@1.1.0: + resolution: {integrity: sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==} + + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + cli-boxes@2.2.1: + resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} + engines: {node: '>=6'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-table3@0.6.5: + resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} + engines: {node: 10.* || >= 12.*} + + cli-truncate@2.1.0: + resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} + engines: {node: '>=8'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + clone-response@1.0.3: + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + + code-excerpt@3.0.0: + resolution: {integrity: sha512-VHNTVhd7KsLGOqfX3SyeO8RyYPMp1GJOg194VITk04WMYCv4plV68YWe6TJZxd9MhobjtpMRnVky01gqZsalaw==} + engines: {node: '>=10'} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@3.2.1: + resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} + + colorspace@1.1.4: + resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + command-exists@1.2.9: + resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==} + + commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + config-chain@1.1.13: + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-hash@2.5.2: + resolution: {integrity: sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + convert-to-spaces@1.0.2: + resolution: {integrity: sha512-cj09EBuObp9gZNQCzc7hByQyrs6jVGE+o9kSJmeUoj+GiPiJvi5LYqEH/Hmme4+MTLHM+Ejtq+FChpjjEnsPdQ==} + engines: {node: '>= 4'} + + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + + cookie@0.4.2: + resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} + engines: {node: '>= 0.6'} + + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} + engines: {node: '>= 0.6'} + + core-util-is@1.0.2: + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + + cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + + cosmiconfig@8.3.6: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + + create-hash@1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + + create-hmac@1.1.7: + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + cross-fetch@4.0.0: + resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + d@1.0.2: + resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} + engines: {node: '>=0.12'} + + dashdash@1.14.1: + resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} + engines: {node: '>=0.10'} + + data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + + decode-uri-component@0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + + decompress-response@3.3.0: + resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==} + engines: {node: '>=4'} + + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + + deep-eql@4.1.4: + resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} + engines: {node: '>=6'} + + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + detect-indent@7.0.1: + resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} + engines: {node: '>=12.20'} + + detect-newline@4.0.1: + resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dom-walk@0.1.2: + resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} + + dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + + ds-test@https://codeload.github.com/dapphub/ds-test/tar.gz/e282159d5170298eb2455a6c05280ab5a73a4ef0: + resolution: {tarball: https://codeload.github.com/dapphub/ds-test/tar.gz/e282159d5170298eb2455a6c05280ab5a73a4ef0} + version: 1.0.0 + + ecc-jsbn@0.1.2: + resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + electron-to-chromium@1.5.45: + resolution: {integrity: sha512-vOzZS6uZwhhbkZbcRyiy99Wg+pYFV5hk+5YaECvx0+Z31NR3Tt5zS6dze2OepT6PCTzVzT0dIJItti+uAW5zmw==} + + elliptic@6.5.4: + resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} + + elliptic@6.5.7: + resolution: {integrity: sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + enabled@2.0.0: + resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} + + encode-utf8@1.0.3: + resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==} + + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + enhanced-resolve@5.17.1: + resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} + engines: {node: '>=10.13.0'} + + enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + + es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + + es5-ext@0.10.64: + resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} + engines: {node: '>=0.10'} + + es6-iterator@2.0.3: + resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} + + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-symbol@3.1.4: + resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} + engines: {node: '>=0.12'} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-config-prettier@9.1.0: + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-import-resolver-typescript@3.6.3: + resolution: {integrity: sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + eslint-plugin-import-x: '*' + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true + + eslint-module-utils@2.12.0: + resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-plugin-autofix@2.2.0: + resolution: {integrity: sha512-lu8+0r+utyTroROqXIL+a8sUpICi6za22hIzlpb0+x0tQGRnOjhOKU7v8mC/NS/faDoVsw6xW3vUpc+Mcz5NWA==} + engines: {node: '>=18'} + peerDependencies: + eslint: '>=8' + + eslint-plugin-compat@4.2.0: + resolution: {integrity: sha512-RDKSYD0maWy5r7zb5cWQS+uSPc26mgOzdORJ8hxILmWM7S/Ncwky7BcAtXVY5iRbKjBdHsWU8Yg7hfoZjtkv7w==} + engines: {node: '>=14.x'} + peerDependencies: + eslint: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + + eslint-plugin-import@2.31.0: + resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-plugin-jest-extended@2.0.3: + resolution: {integrity: sha512-gPhanMUyClZHj4UqvtavRA2s7FqaMdNZQvKLz12gwkxikIKEwr4FgrnFne7/obd0bEIdpHgc0b2zwLK7BGWurw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + + eslint-plugin-prettier@5.2.1: + resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '*' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + + eslint-plugin-unused-imports@3.2.0: + resolution: {integrity: sha512-6uXyn6xdINEpxE1MtDjxQsyXB37lfyO2yKGVVgtD7WEWQGORSOZjgrD6hBhvGv4/SO+TOlS+UnC6JppRqbuwGQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': 6 - 7 + eslint: '8' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + + eslint-rule-composer@0.3.0: + resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==} + engines: {node: '>=4.0.0'} + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true + + esniff@2.0.1: + resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} + engines: {node: '>=0.10'} + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + eth-ens-namehash@2.0.8: + resolution: {integrity: sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==} + + eth-lib@0.1.29: + resolution: {integrity: sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==} + + eth-lib@0.2.8: + resolution: {integrity: sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==} + + ethereum-bloom-filters@1.2.0: + resolution: {integrity: sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==} + + ethereum-cryptography@0.1.3: + resolution: {integrity: sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==} + + ethereum-cryptography@1.2.0: + resolution: {integrity: sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==} + + ethereum-cryptography@2.2.1: + resolution: {integrity: sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==} + + ethereumjs-abi@0.6.8: + resolution: {integrity: sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==} + + ethereumjs-util@6.2.1: + resolution: {integrity: sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==} + + ethereumjs-util@7.1.5: + resolution: {integrity: sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==} + engines: {node: '>=10.0.0'} + + ethers@5.7.2: + resolution: {integrity: sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==} + + ethjs-unit@0.1.6: + resolution: {integrity: sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==} + engines: {node: '>=6.5.0', npm: '>=3'} + + ethjs-util@0.1.6: + resolution: {integrity: sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==} + engines: {node: '>=6.5.0', npm: '>=3'} + + event-emitter@0.3.5: + resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} + + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + + eventemitter3@4.0.4: + resolution: {integrity: sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + evp_bytestokey@1.0.3: + resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} + + exponential-backoff@3.1.1: + resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} + + express@4.21.1: + resolution: {integrity: sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==} + engines: {node: '>= 0.10.0'} + + ext@1.7.0: + resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + extsprintf@1.3.0: + resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} + engines: {'0': node >=0.6.0} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-uri@3.0.3: + resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + fecha@4.2.3: + resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + engines: {node: '>= 0.8'} + + find-up@2.1.0: + resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} + engines: {node: '>=4'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + + fmix@0.1.0: + resolution: {integrity: sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==} + + fn.name@1.1.0: + resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + forever-agent@0.6.1: + resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} + + forge-std@1.1.2: + resolution: {integrity: sha512-Wfb0iAS9PcfjMKtGpWQw9mXzJxrWD62kJCUqqLcyuI0+VRtJ3j20XembjF3kS20qELYdXft1vD/SPFVWVKMFOw==} + + form-data-encoder@1.7.1: + resolution: {integrity: sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==} + + form-data-encoder@2.1.4: + resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} + engines: {node: '>= 14.17'} + + form-data@2.3.3: + resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} + engines: {node: '>= 0.12'} + + form-data@4.0.1: + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} + engines: {node: '>= 6'} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fp-ts@1.19.3: + resolution: {integrity: sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==} + + fp-ts@2.16.9: + resolution: {integrity: sha512-+I2+FnVB+tVaxcYyQkHUq7ZdKScaBlX53A41mxQtpIccsfyv8PzdzP7fzp2AY832T4aoK6UZ5WRX/ebGd8uZuQ==} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-extra@4.0.3: + resolution: {integrity: sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==} + + fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + + fs-minipass@1.2.7: + resolution: {integrity: sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-stdin@9.0.0: + resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} + engines: {node: '>=12'} + + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + + get-tsconfig@4.8.1: + resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} + + getpass@0.1.7: + resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} + + git-hooks-list@3.1.0: + resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + deprecated: Glob versions prior to v9 are no longer supported + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + deprecated: Glob versions prior to v9 are no longer supported + + global@4.4.0: + resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + got@11.8.6: + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} + engines: {node: '>=10.19.0'} + + got@12.1.0: + resolution: {integrity: sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==} + engines: {node: '>=14.16'} + + got@12.6.1: + resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} + engines: {node: '>=14.16'} + + graceful-fs@4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + gradient-string@1.2.0: + resolution: {integrity: sha512-Lxog7IDMMWNjwo4O0KbdBvSewk4vW6kQe5XaLuuPCyCE65AGQ1P8YqKJa5dq8TYf/Ge31F+KjWzPR5mAJvjlAg==} + engines: {node: '>=4'} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + har-schema@2.0.0: + resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} + engines: {node: '>=4'} + + har-validator@5.1.5: + resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} + engines: {node: '>=6'} + deprecated: this library is no longer supported + + hardhat-contract-sizer@2.10.0: + resolution: {integrity: sha512-QiinUgBD5MqJZJh1hl1jc9dNnpJg7eE/w4/4GEnrcmZJJTDbVFNe3+/3Ep24XqISSkYxRz36czcPHKHd/a0dwA==} + peerDependencies: + hardhat: ^2.0.0 + + hardhat-deploy@0.12.4: + resolution: {integrity: sha512-bYO8DIyeGxZWlhnMoCBon9HNZb6ji0jQn7ngP1t5UmGhC8rQYhji7B73qETMOFhzt5ECZPr+U52duj3nubsqdQ==} + + hardhat@2.22.15: + resolution: {integrity: sha512-BpTGa9PE/sKAaHi4s/S1e9WGv63DR1m7Lzfd60C8gSEchDPfAJssVRSq0MZ2v2k76ig9m0kHAwVLf5teYwu/Mw==} + hasBin: true + peerDependencies: + ts-node: '*' + typescript: '*' + peerDependenciesMeta: + ts-node: + optional: true + typescript: + optional: true + + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hash-base@3.1.0: + resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} + engines: {node: '>=4'} + + hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + + http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + http-https@1.0.0: + resolution: {integrity: sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==} + + http-signature@1.2.0: + resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} + engines: {node: '>=0.8', npm: '>=1.3.7'} + + http2-wrapper@1.0.3: + resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} + engines: {node: '>=10.19.0'} + + http2-wrapper@2.2.1: + resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} + engines: {node: '>=10.19.0'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + idna-uts46-hx@2.3.1: + resolution: {integrity: sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==} + engines: {node: '>=4.0.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + immutable@4.3.7: + resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + imul@1.0.1: + resolution: {integrity: sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==} + engines: {node: '>=0.10.0'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + ink-gradient@2.0.0: + resolution: {integrity: sha512-d2BK/EzzBRoDL54NWkS3JGE4J8xtzwRVWxDAIkQ/eQ60XIzrFMtT5JlUqgV05Qlt32Jvk50qW51YqxGJggTuqA==} + engines: {node: '>=10'} + peerDependencies: + ink: '>=3.0.0' + react: '>=16.8.0' + + ink-table@3.1.0: + resolution: {integrity: sha512-qxVb4DIaEaJryvF9uZGydnmP9Hkmas3DCKVpEcBYC0E4eJd3qNgNe+PZKuzgCERFe9LfAS1TNWxCr9+AU4v3YA==} + peerDependencies: + ink: '>=3.0.0' + react: '>=16.8.0' + + ink@3.2.0: + resolution: {integrity: sha512-firNp1q3xxTzoItj/eOOSZQnYSlyrWks5llCTVX37nJ59K3eXbQ8PtzCguqo8YI19EELo5QxaKnJd4VxzhU8tg==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '>=16.8.0' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + + internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + + io-ts@1.10.4: + resolution: {integrity: sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + + is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + + is-bun-module@1.2.1: + resolution: {integrity: sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-ci@2.0.0: + resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} + hasBin: true + + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-function@1.0.2: + resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==} + + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-hex-prefixed@1.0.0: + resolution: {integrity: sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==} + engines: {node: '>=6.5.0', npm: '>=3'} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + + is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isstream@0.1.2: + resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + + js-sha3@0.5.7: + resolution: {integrity: sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==} + + js-sha3@0.8.0: + resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsbn@0.1.1: + resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} + + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json-stream-stringify@3.1.6: + resolution: {integrity: sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==} + engines: {node: '>=7.10.1'} + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jsprim@1.4.2: + resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} + engines: {node: '>=0.6.0'} + + keccak@3.0.4: + resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} + engines: {node: '>=10.0.0'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + kuler@2.0.0: + resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} + + latest-version@7.0.0: + resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==} + engines: {node: '>=14.16'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + locate-path@2.0.0: + resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} + engines: {node: '>=4'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.truncate@4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + logform@2.6.1: + resolution: {integrity: sha512-CdaO738xRapbKIMVn2m4F6KTj4j7ooJ8POVnebSgKo3KBz5axNXRAL7ZdRjIV6NOr2Uf4vjtRkxrFETOioCqSA==} + engines: {node: '>= 12.0.0'} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + + lowercase-keys@2.0.0: + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} + + lowercase-keys@3.0.0: + resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lru_map@0.3.3: + resolution: {integrity: sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + map-age-cleaner@0.1.3: + resolution: {integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==} + engines: {node: '>=6'} + + match-all@1.2.6: + resolution: {integrity: sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ==} + + md5.js@1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + micro-ftch@0.3.1: + resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==} + + micro-memoize@4.1.2: + resolution: {integrity: sha512-+HzcV2H+rbSJzApgkj0NdTakkC+bnyeiUxgT6/m7mjcz1CmM22KYFKp+EVj1sWe4UYcnriJr5uqHQD/gMHLD+g==} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-fn@3.1.0: + resolution: {integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==} + engines: {node: '>=8'} + + mimic-response@1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} + + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + + mimic-response@4.0.0: + resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + min-document@2.19.0: + resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} + + minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + + minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@2.9.0: + resolution: {integrity: sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==} + + minizlib@1.3.3: + resolution: {integrity: sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==} + + mkdirp-promise@5.0.1: + resolution: {integrity: sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==} + engines: {node: '>=4'} + deprecated: This package is broken and no longer maintained. 'mkdirp' itself supports promises now, please switch to that. + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + + mnemonist@0.38.5: + resolution: {integrity: sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==} + + mocha@10.7.3: + resolution: {integrity: sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==} + engines: {node: '>= 14.0.0'} + hasBin: true + + mock-fs@4.14.0: + resolution: {integrity: sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + multibase@0.6.1: + resolution: {integrity: sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==} + deprecated: This module has been superseded by the multiformats module + + multibase@0.7.0: + resolution: {integrity: sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==} + deprecated: This module has been superseded by the multiformats module + + multicodec@0.5.7: + resolution: {integrity: sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==} + deprecated: This module has been superseded by the multiformats module + + multicodec@1.0.4: + resolution: {integrity: sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==} + deprecated: This module has been superseded by the multiformats module + + multihashes@0.4.21: + resolution: {integrity: sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==} + + murmur-128@0.2.1: + resolution: {integrity: sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg==} + + nano-json-stream-parser@0.1.2: + resolution: {integrity: sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + next-tick@1.1.0: + resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} + + node-addon-api@2.0.2: + resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} + + node-addon-api@5.1.0: + resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp-build@4.8.2: + resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==} + hasBin: true + + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + + normalize-url@8.0.1: + resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==} + engines: {node: '>=14.16'} + + number-to-bn@1.7.0: + resolution: {integrity: sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==} + engines: {node: '>=6.5.0', npm: '>=3'} + + oauth-sign@0.9.0: + resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@2.2.0: + resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==} + engines: {node: '>= 6'} + + object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + + object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + engines: {node: '>= 0.4'} + + obliterator@2.0.4: + resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} + + oboe@2.1.5: + resolution: {integrity: sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + one-time@1.0.0: + resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + p-cancelable@2.1.1: + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} + + p-cancelable@3.0.0: + resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} + engines: {node: '>=12.20'} + + p-defer@1.0.0: + resolution: {integrity: sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==} + engines: {node: '>=4'} + + p-limit@1.3.0: + resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} + engines: {node: '>=4'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@2.0.0: + resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} + engines: {node: '>=4'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + + p-memoize@4.0.4: + resolution: {integrity: sha512-ijdh0DP4Mk6J4FXlOM6vPPoCjPytcEseW8p/k5SDTSSfGV3E9bpt9Yzfifvzp6iohIieoLTkXRb32OWV0fB2Lw==} + engines: {node: '>=10'} + + p-reflect@2.1.0: + resolution: {integrity: sha512-paHV8NUz8zDHu5lhr/ngGWQiW067DK/+IbJ+RfZ4k+s8y4EKyYCz8pGYWjxCg35eHztpJAt+NUgvN4L+GCbPlg==} + engines: {node: '>=8'} + + p-settle@4.1.1: + resolution: {integrity: sha512-6THGh13mt3gypcNMm0ADqVNCcYa3BK6DWsuJWFCuEKP1rpY+OKGp7gaZwVmLspmic01+fsg/fN57MfvDzZ/PuQ==} + engines: {node: '>=10'} + + p-try@1.0.0: + resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} + engines: {node: '>=4'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-json@8.1.1: + resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==} + engines: {node: '>=14.16'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-headers@2.0.5: + resolution: {integrity: sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + patch-console@1.0.0: + resolution: {integrity: sha512-nxl9nrnLQmh64iTzMfyylSlRozL7kAXIaxw1fVcLYdyhNkJCRUzirRZTikXGJsg+hc4fqpneTK6iU2H1Q8THSA==} + engines: {node: '>=10'} + + path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-to-regexp@0.1.10: + resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + + pbkdf2@3.1.2: + resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} + engines: {node: '>=0.12'} + + performance-now@2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + + prettier-plugin-packagejson@2.5.3: + resolution: {integrity: sha512-ATMEEXr+ywls1kgrZEWl4SBPEm0uDdyDAjyNzUC0/Z8WZTD3RqbJcQDR+Dau+wYkW9KHK6zqQIsFyfn+9aduWg==} + peerDependencies: + prettier: '>= 1.16.0' + peerDependenciesMeta: + prettier: + optional: true + + prettier-plugin-solidity@1.4.1: + resolution: {integrity: sha512-Mq8EtfacVZ/0+uDKTtHZGW3Aa7vEbX/BNx63hmVg6YTiTXSiuKP0amj0G6pGwjmLaOfymWh3QgXEZkjQbU8QRg==} + engines: {node: '>=16'} + peerDependencies: + prettier: '>=2.3.0' + + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + + prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + engines: {node: '>=14'} + hasBin: true + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + proto-list@1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + psl@1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + + punycode@2.1.0: + resolution: {integrity: sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==} + engines: {node: '>=6'} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + + qs@6.5.3: + resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} + engines: {node: '>=0.6'} + + query-string@5.1.1: + resolution: {integrity: sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==} + engines: {node: '>=0.10.0'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + + react-devtools-core@4.28.5: + resolution: {integrity: sha512-cq/o30z9W2Wb4rzBefjv5fBalHU0rJGZCHAkf/RHSBWSSYwh8PlQTqqOJmgIIbBtpj27T6FIPXeomIjZtCNVqA==} + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-reconciler@0.26.2: + resolution: {integrity: sha512-nK6kgY28HwrMNwDnMui3dvm3rCFjZrcGiuwLc5COUipBK5hWHLOxMJhSnSomirqWwjPBJKV1QcbkI0VJr7Gl1Q==} + engines: {node: '>=0.10.0'} + peerDependencies: + react: ^17.0.2 + + react@17.0.2: + resolution: {integrity: sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==} + engines: {node: '>=0.10.0'} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readable-stream@4.5.2: + resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + readdirp@4.0.2: + resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} + engines: {node: '>= 14.16.0'} + + regexp.prototype.flags@1.5.3: + resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} + engines: {node: '>= 0.4'} + + registry-auth-token@5.0.2: + resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} + engines: {node: '>=14'} + + registry-url@6.0.1: + resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} + engines: {node: '>=12'} + + request@2.88.2: + resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} + engines: {node: '>= 6'} + deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve@1.17.0: + resolution: {integrity: sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + responselike@2.0.1: + resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + + responselike@3.0.0: + resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} + engines: {node: '>=14.16'} + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + ripemd160@2.0.2: + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + + rlp@2.2.7: + resolution: {integrity: sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + scheduler@0.20.2: + resolution: {integrity: sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==} + + scrypt-js@3.0.1: + resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} + + secp256k1@4.0.4: + resolution: {integrity: sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw==} + engines: {node: '>=18.0.0'} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + engines: {node: '>= 0.8.0'} + + servify@0.1.12: + resolution: {integrity: sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==} + engines: {node: '>=6'} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + sha.js@2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + simple-concat@1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + + simple-get@2.8.2: + resolution: {integrity: sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==} + + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slash@4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + + slice-ansi@3.0.0: + resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} + engines: {node: '>=8'} + + slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + + solc@0.8.26: + resolution: {integrity: sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==} + engines: {node: '>=10.0.0'} + hasBin: true + + solhint@4.5.4: + resolution: {integrity: sha512-Cu1XiJXub2q1eCr9kkJ9VPv1sGcmj3V7Zb76B0CoezDOB9bu3DxKIFFH7ggCl9fWpEPD6xBmRLfZrYijkVmujQ==} + hasBin: true + + solidity-bytes-utils@0.8.2: + resolution: {integrity: sha512-cqXPYAV2auhpdKSTPuqji0CwpSceZDu95CzqSM/9tDJ2MoMaMsdHTpOIWtVw31BIqqGPNmIChCswzbw0tHaMTw==} + + sort-object-keys@1.1.3: + resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} + + sort-package-json@2.10.1: + resolution: {integrity: sha512-d76wfhgUuGypKqY72Unm5LFnMpACbdxXsLPcL27pOsSrmVqH3PztFp1uq+Z22suk15h7vXmTesuh2aEjdCqb5w==} + hasBin: true + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + sshpk@1.18.0: + resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} + engines: {node: '>=0.10.0'} + hasBin: true + + stack-trace@0.0.10: + resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + stacktrace-parser@0.1.10: + resolution: {integrity: sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==} + engines: {node: '>=6'} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + strict-uri-encode@1.1.0: + resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==} + engines: {node: '>=0.10.0'} + + string-similarity@4.0.4: + resolution: {integrity: sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-hex-prefix@1.0.0: + resolution: {integrity: sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==} + engines: {node: '>=6.5.0', npm: '>=3'} + + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + swarm-js@0.1.42: + resolution: {integrity: sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==} + + synckit@0.9.2: + resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} + engines: {node: ^14.18.0 || >=16.0.0} + + table@6.8.2: + resolution: {integrity: sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==} + engines: {node: '>=10.0.0'} + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + tar@4.4.19: + resolution: {integrity: sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==} + engines: {node: '>=4.5'} + + text-hex@1.0.0: + resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + timed-out@4.0.1: + resolution: {integrity: sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==} + engines: {node: '>=0.10.0'} + + tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + + tinycolor2@1.6.0: + resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} + + tinygradient@0.4.3: + resolution: {integrity: sha512-tBPYQSs6eWukzzAITBSmqcOwZCKACvRa/XjPPh1mj4mnx4G3Drm51HxyCTU/TKnY8kG4hmTe5QlOh9O82aNtJQ==} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + tough-cookie@2.5.0: + resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} + engines: {node: '>=0.8'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + triple-beam@1.4.1: + resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} + engines: {node: '>= 14.0.0'} + + ts-api-utils@1.3.0: + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.8.0: + resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==} + + tsort@0.0.1: + resolution: {integrity: sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==} + + tsutils@3.21.0: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + + tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + + tweetnacl-util@0.15.1: + resolution: {integrity: sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==} + + tweetnacl@0.14.5: + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + + tweetnacl@1.0.3: + resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-detect@4.1.0: + resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} + engines: {node: '>=4'} + + type-fest@0.12.0: + resolution: {integrity: sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==} + engines: {node: '>=10'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@0.7.1: + resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} + engines: {node: '>=8'} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + type@2.7.3: + resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==} + + typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} + + typedarray-to-buffer@3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + + typescript@5.6.3: + resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} + engines: {node: '>=14.17'} + hasBin: true + + ultron@1.1.1: + resolution: {integrity: sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==} + + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + undici@5.28.4: + resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} + engines: {node: '>=14.0'} + + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + url-set-query@1.0.0: + resolution: {integrity: sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==} + + utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + + utf8@3.0.0: + resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + uuid@3.4.0: + resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + hasBin: true + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + varint@5.0.2: + resolution: {integrity: sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + verror@1.10.0: + resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} + engines: {'0': node >=0.6.0} + + web3-bzz@1.10.4: + resolution: {integrity: sha512-ZZ/X4sJ0Uh2teU9lAGNS8EjveEppoHNQiKlOXAjedsrdWuaMErBPdLQjXfcrYvN6WM6Su9PMsAxf3FXXZ+HwQw==} + engines: {node: '>=8.0.0'} + + web3-core-helpers@1.10.4: + resolution: {integrity: sha512-r+L5ylA17JlD1vwS8rjhWr0qg7zVoVMDvWhajWA5r5+USdh91jRUYosp19Kd1m2vE034v7Dfqe1xYRoH2zvG0g==} + engines: {node: '>=8.0.0'} + + web3-core-method@1.10.4: + resolution: {integrity: sha512-uZTb7flr+Xl6LaDsyTeE2L1TylokCJwTDrIVfIfnrGmnwLc6bmTWCCrm71sSrQ0hqs6vp/MKbQYIYqUN0J8WyA==} + engines: {node: '>=8.0.0'} + + web3-core-promievent@1.10.4: + resolution: {integrity: sha512-2de5WnJQ72YcIhYwV/jHLc4/cWJnznuoGTJGD29ncFQHAfwW/MItHFSVKPPA5v8AhJe+r6y4Y12EKvZKjQVBvQ==} + engines: {node: '>=8.0.0'} + + web3-core-requestmanager@1.10.4: + resolution: {integrity: sha512-vqP6pKH8RrhT/2MoaU+DY/OsYK9h7HmEBNCdoMj+4ZwujQtw/Mq2JifjwsJ7gits7Q+HWJwx8q6WmQoVZAWugg==} + engines: {node: '>=8.0.0'} + + web3-core-subscriptions@1.10.4: + resolution: {integrity: sha512-o0lSQo/N/f7/L76C0HV63+S54loXiE9fUPfHFcTtpJRQNDBVsSDdWRdePbWwR206XlsBqD5VHApck1//jEafTw==} + engines: {node: '>=8.0.0'} + + web3-core@1.10.4: + resolution: {integrity: sha512-B6elffYm81MYZDTrat7aEhnhdtVE3lDBUZft16Z8awYMZYJDbnykEbJVS+l3mnA7AQTnSDr/1MjWofGDLBJPww==} + engines: {node: '>=8.0.0'} + + web3-eth-abi@1.10.4: + resolution: {integrity: sha512-cZ0q65eJIkd/jyOlQPDjr8X4fU6CRL1eWgdLwbWEpo++MPU/2P4PFk5ZLAdye9T5Sdp+MomePPJ/gHjLMj2VfQ==} + engines: {node: '>=8.0.0'} + + web3-eth-accounts@1.10.4: + resolution: {integrity: sha512-ysy5sVTg9snYS7tJjxVoQAH6DTOTkRGR8emEVCWNGLGiB9txj+qDvSeT0izjurS/g7D5xlMAgrEHLK1Vi6I3yg==} + engines: {node: '>=8.0.0'} + + web3-eth-contract@1.10.4: + resolution: {integrity: sha512-Q8PfolOJ4eV9TvnTj1TGdZ4RarpSLmHnUnzVxZ/6/NiTfe4maJz99R0ISgwZkntLhLRtw0C7LRJuklzGYCNN3A==} + engines: {node: '>=8.0.0'} + + web3-eth-ens@1.10.4: + resolution: {integrity: sha512-LLrvxuFeVooRVZ9e5T6OWKVflHPFgrVjJ/jtisRWcmI7KN/b64+D/wJzXqgmp6CNsMQcE7rpmf4CQmJCrTdsgg==} + engines: {node: '>=8.0.0'} + + web3-eth-iban@1.10.4: + resolution: {integrity: sha512-0gE5iNmOkmtBmbKH2aTodeompnNE8jEyvwFJ6s/AF6jkw9ky9Op9cqfzS56AYAbrqEFuClsqB/AoRves7LDELw==} + engines: {node: '>=8.0.0'} + + web3-eth-personal@1.10.4: + resolution: {integrity: sha512-BRa/hs6jU1hKHz+AC/YkM71RP3f0Yci1dPk4paOic53R4ZZG4MgwKRkJhgt3/GPuPliwS46f/i5A7fEGBT4F9w==} + engines: {node: '>=8.0.0'} + + web3-eth@1.10.4: + resolution: {integrity: sha512-Sql2kYKmgt+T/cgvg7b9ce24uLS7xbFrxE4kuuor1zSCGrjhTJ5rRNG8gTJUkAJGKJc7KgnWmgW+cOfMBPUDSA==} + engines: {node: '>=8.0.0'} + + web3-net@1.10.4: + resolution: {integrity: sha512-mKINnhOOnZ4koA+yV2OT5s5ztVjIx7IY9a03w6s+yao/BUn+Luuty0/keNemZxTr1E8Ehvtn28vbOtW7Ids+Ow==} + engines: {node: '>=8.0.0'} + + web3-providers-http@1.10.4: + resolution: {integrity: sha512-m2P5Idc8hdiO0l60O6DSCPw0kw64Zgi0pMjbEFRmxKIck2Py57RQMu4bxvkxJwkF06SlGaEQF8rFZBmuX7aagQ==} + engines: {node: '>=8.0.0'} + + web3-providers-ipc@1.10.4: + resolution: {integrity: sha512-YRF/bpQk9z3WwjT+A6FI/GmWRCASgd+gC0si7f9zbBWLXjwzYAKG73bQBaFRAHex1hl4CVcM5WUMaQXf3Opeuw==} + engines: {node: '>=8.0.0'} + + web3-providers-ws@1.10.4: + resolution: {integrity: sha512-j3FBMifyuFFmUIPVQR4pj+t5ILhAexAui0opgcpu9R5LxQrLRUZxHSnU+YO25UycSOa/NAX8A+qkqZNpcFAlxA==} + engines: {node: '>=8.0.0'} + + web3-shh@1.10.4: + resolution: {integrity: sha512-cOH6iFFM71lCNwSQrC3niqDXagMqrdfFW85hC9PFUrAr3PUrIem8TNstTc3xna2bwZeWG6OBy99xSIhBvyIACw==} + engines: {node: '>=8.0.0'} + + web3-utils@1.10.4: + resolution: {integrity: sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==} + engines: {node: '>=8.0.0'} + + web3@1.10.4: + resolution: {integrity: sha512-kgJvQZjkmjOEKimx/tJQsqWfRDPTTcBfYPa9XletxuHLpHcXdx67w8EFn5AW3eVxCutE9dTVHgGa9VYe8vgsEA==} + engines: {node: '>=8.0.0'} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + websocket@1.0.35: + resolution: {integrity: sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q==} + engines: {node: '>=4.0.0'} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + widest-line@3.1.0: + resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} + engines: {node: '>=8'} + + winston-transport@4.8.0: + resolution: {integrity: sha512-qxSTKswC6llEMZKgCQdaWgDuMJQnhuvF5f2Nk3SNXc4byfQ+voo2mX1Px9dkNOuR8p0KAjfPG29PuYUSIb+vSA==} + engines: {node: '>= 12.0.0'} + + winston@3.15.0: + resolution: {integrity: sha512-RhruH2Cj0bV0WgNL+lOfoUBI4DVfdUNjVnJGVovWZmrcKtrFTTRzgXYK2O9cymSGjrERCtaAeHwMNnUWXlwZow==} + engines: {node: '>= 12.0.0'} + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + workerpool@6.5.1: + resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@3.3.3: + resolution: {integrity: sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@7.4.6: + resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xhr-request-promise@0.1.3: + resolution: {integrity: sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==} + + xhr-request@1.1.0: + resolution: {integrity: sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==} + + xhr@2.6.0: + resolution: {integrity: sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==} + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yaeti@0.0.6: + resolution: {integrity: sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==} + engines: {node: '>=0.10.32'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + yoga-layout-prebuilt@1.10.0: + resolution: {integrity: sha512-YnOmtSbv4MTf7RGJMK0FvZ+KD8OEe/J5BNnR0GHhD8J/XcG/Qvxgszm0Un6FTHWW4uHlTgP0IztiXQnGyIR45g==} + engines: {node: '>=8'} + + zksync-ethers@5.9.2: + resolution: {integrity: sha512-Y2Mx6ovvxO6UdC2dePLguVzvNToOY8iLWeq5ne+jgGSJxAi/f4He/NF6FNsf6x1aWX0o8dy4Df8RcOQXAkj5qw==} + engines: {node: '>=16.0.0'} + peerDependencies: + ethers: ^5.7.2 + + zksync-web3@0.14.4: + resolution: {integrity: sha512-kYehMD/S6Uhe1g434UnaMN+sBr9nQm23Ywn0EUP5BfQCsbjcr3ORuS68PosZw8xUTu3pac7G6YMSnNHk+fwzvg==} + deprecated: This package has been deprecated in favor of zksync-ethers@5.0.0 + peerDependencies: + ethers: ^5.7.2 + + zod@3.23.8: + resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} + +snapshots: + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@axelar-network/axelar-gmp-sdk-solidity@5.10.0': {} + + '@babel/code-frame@7.26.0': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.0': {} + + '@babel/core@7.26.0': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.0 + '@babel/generator': 7.26.0 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helpers': 7.26.0 + '@babel/parser': 7.26.0 + '@babel/template': 7.25.9 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + convert-source-map: 2.0.0 + debug: 4.3.7(supports-color@8.1.1) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.26.0': + dependencies: + '@babel/parser': 7.26.0 + '@babel/types': 7.26.0 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.0.2 + + '@babel/helper-compilation-targets@7.25.9': + dependencies: + '@babel/compat-data': 7.26.0 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.2 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.26.0': + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 + + '@babel/parser@7.26.0': + dependencies: + '@babel/types': 7.26.0 + + '@babel/template@7.25.9': + dependencies: + '@babel/code-frame': 7.26.0 + '@babel/parser': 7.26.0 + '@babel/types': 7.26.0 + + '@babel/traverse@7.25.9': + dependencies: + '@babel/code-frame': 7.26.0 + '@babel/generator': 7.26.0 + '@babel/parser': 7.26.0 + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 + debug: 4.3.7(supports-color@8.1.1) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.26.0': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@chainlink/contracts-ccip@0.7.6(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)': + dependencies: + '@eth-optimism/contracts': 0.5.40(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + '@openzeppelin/contracts': 4.3.3 + '@openzeppelin/contracts-upgradeable-4.7.3': '@openzeppelin/contracts-upgradeable@4.7.3' + '@openzeppelin/contracts-v0.7': '@openzeppelin/contracts@3.4.2' + transitivePeerDependencies: + - bufferutil + - ethers + - utf-8-validate + + '@colors/colors@1.5.0': + optional: true + + '@colors/colors@1.6.0': {} + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@dabh/diagnostics@2.0.3': + dependencies: + colorspace: 1.1.4 + enabled: 2.0.0 + kuler: 2.0.0 + + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.1)': + dependencies: + eslint: 8.57.1 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.11.1': {} + + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.12.6 + debug: 4.3.7(supports-color@8.1.1) + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.2 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.57.1': {} + + '@eth-optimism/contracts@0.5.40(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)': + dependencies: + '@eth-optimism/core-utils': 0.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@eth-optimism/contracts@0.6.0(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)': + dependencies: + '@eth-optimism/core-utils': 0.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@eth-optimism/core-utils@0.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/contracts': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/providers': 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@ethersproject/rlp': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/web': 5.7.1 + bufio: 1.2.2 + chai: 4.5.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@ethereumjs/common@2.6.5': + dependencies: + crc-32: 1.2.2 + ethereumjs-util: 7.1.5 + + '@ethereumjs/rlp@4.0.1': {} + + '@ethereumjs/tx@3.5.2': + dependencies: + '@ethereumjs/common': 2.6.5 + ethereumjs-util: 7.1.5 + + '@ethereumjs/util@8.1.0': + dependencies: + '@ethereumjs/rlp': 4.0.1 + ethereum-cryptography: 2.2.1 + micro-ftch: 0.3.1 + + '@ethersproject/abi@5.7.0': + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@ethersproject/abstract-provider@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/properties': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/web': 5.7.1 + + '@ethersproject/abstract-signer@5.7.0': + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + + '@ethersproject/address@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/rlp': 5.7.0 + + '@ethersproject/base64@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + + '@ethersproject/basex@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/properties': 5.7.0 + + '@ethersproject/bignumber@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + bn.js: 5.2.1 + + '@ethersproject/bytes@5.7.0': + dependencies: + '@ethersproject/logger': 5.7.0 + + '@ethersproject/constants@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + + '@ethersproject/contracts@5.7.0': + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/transactions': 5.7.0 + + '@ethersproject/hash@5.7.0': + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@ethersproject/hdnode@5.7.0': + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wordlists': 5.7.0 + + '@ethersproject/json-wallets@5.7.0': + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + aes-js: 3.0.0 + scrypt-js: 3.0.1 + + '@ethersproject/keccak256@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + js-sha3: 0.8.0 + + '@ethersproject/logger@5.7.0': {} + + '@ethersproject/networks@5.7.1': + dependencies: + '@ethersproject/logger': 5.7.0 + + '@ethersproject/pbkdf2@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/sha2': 5.7.0 + + '@ethersproject/properties@5.7.0': + dependencies: + '@ethersproject/logger': 5.7.0 + + '@ethersproject/providers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/web': 5.7.1 + bech32: 1.1.4 + ws: 7.4.6(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@ethersproject/random@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + + '@ethersproject/rlp@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + + '@ethersproject/sha2@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + hash.js: 1.1.7 + + '@ethersproject/signing-key@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + bn.js: 5.2.1 + elliptic: 6.5.4 + hash.js: 1.1.7 + + '@ethersproject/solidity@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@ethersproject/strings@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + + '@ethersproject/transactions@5.7.0': + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + + '@ethersproject/units@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + + '@ethersproject/wallet@5.7.0': + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/json-wallets': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wordlists': 5.7.0 + + '@ethersproject/web@5.7.1': + dependencies: + '@ethersproject/base64': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@ethersproject/wordlists@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@fastify/busboy@2.1.1': {} + + '@humanwhocodes/config-array@0.13.0': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.3.7(supports-color@8.1.1) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@2.0.3': {} + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@layerzerolabs/devtools-evm-hardhat@1.2.3(l3dwew44d65aeasvlyqkv5iroy)': + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/contracts': 5.7.0 + '@ethersproject/providers': 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@layerzerolabs/devtools': 0.3.28(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@0.1.13(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.44)(zod@3.23.8) + '@layerzerolabs/devtools-evm': 0.4.2(4j3wciojkg3hmai6t7vgohihfi) + '@layerzerolabs/export-deployments': 0.0.12 + '@layerzerolabs/io-devtools': 0.1.13(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8) + '@layerzerolabs/lz-definitions': 2.3.44 + '@nomiclabs/hardhat-ethers': 2.2.3(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.15(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) + '@safe-global/protocol-kit': 1.3.0(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + fp-ts: 2.16.9 + hardhat: 2.22.15(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + hardhat-deploy: 0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) + micro-memoize: 4.1.2 + p-memoize: 4.0.4 + zod: 3.23.8 + transitivePeerDependencies: + - bufferutil + - encoding + - ethers + - supports-color + - utf-8-validate + + '@layerzerolabs/devtools-evm@0.4.2(4j3wciojkg3hmai6t7vgohihfi)': + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/contracts': 5.7.0 + '@ethersproject/providers': 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@layerzerolabs/devtools': 0.3.28(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@0.1.13(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.44)(zod@3.23.8) + '@layerzerolabs/io-devtools': 0.1.13(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8) + '@layerzerolabs/lz-definitions': 2.3.44 + '@safe-global/api-kit': 1.3.1 + '@safe-global/protocol-kit': 1.3.0(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + fp-ts: 2.16.9 + p-memoize: 4.0.4 + zod: 3.23.8 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@layerzerolabs/devtools@0.3.28(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@0.1.13(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.44)(zod@3.23.8)': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@layerzerolabs/io-devtools': 0.1.13(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8) + '@layerzerolabs/lz-definitions': 2.3.44 + bs58: 6.0.0 + exponential-backoff: 3.1.1 + js-yaml: 4.1.0 + zod: 3.23.8 + + '@layerzerolabs/eslint-config-next@2.3.44(typescript@5.6.3)': + dependencies: + '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.6.3) + eslint: 8.57.1 + eslint-config-prettier: 9.1.0(eslint@8.57.1) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@8.57.1) + eslint-plugin-autofix: 2.2.0(eslint@8.57.1) + eslint-plugin-compat: 4.2.0(eslint@8.57.1) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + eslint-plugin-prettier: 5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.3.3) + eslint-plugin-unused-imports: 3.2.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1) + prettier: 3.3.3 + transitivePeerDependencies: + - '@types/eslint' + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - supports-color + - typescript + + '@layerzerolabs/evm-sdks-core@2.3.44(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@layerzerolabs/export-deployments@0.0.12': + dependencies: + typescript: 5.6.3 + + '@layerzerolabs/io-devtools@0.1.13(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8)': + dependencies: + chalk: 4.1.2 + logform: 2.6.1 + prompts: 2.4.2 + table: 6.8.2 + winston: 3.15.0 + zod: 3.23.8 + optionalDependencies: + ink: 3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10) + ink-gradient: 2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2) + ink-table: 3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2) + react: 17.0.2 + yoga-layout-prebuilt: 1.10.0 + + '@layerzerolabs/lz-definitions@2.3.44': + dependencies: + tiny-invariant: 1.3.3 + + '@layerzerolabs/lz-evm-messagelib-v2@2.3.44(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@eth-optimism/contracts@0.6.0(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@layerzerolabs/lz-evm-protocol-v2@2.3.44(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2))(@layerzerolabs/lz-evm-v1-0.7@2.3.44(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2)': + dependencies: + '@axelar-network/axelar-gmp-sdk-solidity': 5.10.0 + '@chainlink/contracts-ccip': 0.7.6(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + '@eth-optimism/contracts': 0.6.0(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + '@layerzerolabs/lz-evm-protocol-v2': 2.3.44(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2) + '@layerzerolabs/lz-evm-v1-0.7': 2.3.44(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + '@openzeppelin/contracts': 5.1.0 + '@openzeppelin/contracts-upgradeable': 5.1.0(@openzeppelin/contracts@5.1.0) + hardhat-deploy: 0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) + solidity-bytes-utils: 0.8.2 + + '@layerzerolabs/lz-evm-oapp-v2@3.0.7(kgr2ex7l55gboqwfslgl2tavnq)': + dependencies: + '@layerzerolabs/lz-evm-messagelib-v2': 2.3.44(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@eth-optimism/contracts@0.6.0(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@layerzerolabs/lz-evm-protocol-v2@2.3.44(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2))(@layerzerolabs/lz-evm-v1-0.7@2.3.44(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2) + '@layerzerolabs/lz-evm-protocol-v2': 2.3.44(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2) + '@layerzerolabs/lz-evm-v1-0.7': 2.3.44(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + '@openzeppelin/contracts': 5.1.0 + '@openzeppelin/contracts-upgradeable': 5.1.0(@openzeppelin/contracts@5.1.0) + hardhat-deploy: 0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) + solidity-bytes-utils: 0.8.2 + + '@layerzerolabs/lz-evm-protocol-v2@2.3.44(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2)': + dependencies: + '@openzeppelin/contracts': 5.1.0 + '@openzeppelin/contracts-upgradeable': 5.1.0(@openzeppelin/contracts@5.1.0) + hardhat-deploy: 0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) + solidity-bytes-utils: 0.8.2 + + '@layerzerolabs/lz-evm-sdk-v1@2.3.44(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/providers': 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@layerzerolabs/evm-sdks-core': 2.3.44(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@layerzerolabs/lz-evm-sdk-v2@2.3.44(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@layerzerolabs/evm-sdks-core': 2.3.44(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@layerzerolabs/lz-evm-v1-0.7@2.3.44(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))': + dependencies: + '@openzeppelin/contracts': 5.1.0 + '@openzeppelin/contracts-upgradeable': 5.1.0(@openzeppelin/contracts@5.1.0) + hardhat-deploy: 0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) + + '@layerzerolabs/lz-v2-utilities@2.3.44': + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/solidity': 5.7.0 + bs58: 5.0.0 + tiny-invariant: 1.3.3 + + '@layerzerolabs/oapp-evm@0.0.4(cketphbdqcmpxjcxdldlipr2wy)': + dependencies: + '@layerzerolabs/lz-evm-messagelib-v2': 2.3.44(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@eth-optimism/contracts@0.6.0(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@layerzerolabs/lz-evm-protocol-v2@2.3.44(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2))(@layerzerolabs/lz-evm-v1-0.7@2.3.44(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2) + '@layerzerolabs/lz-evm-protocol-v2': 2.3.44(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2) + '@layerzerolabs/lz-evm-v1-0.7': 2.3.44(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + '@openzeppelin/contracts': 5.1.0 + '@openzeppelin/contracts-upgradeable': 5.1.0(@openzeppelin/contracts@5.1.0) + ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@layerzerolabs/oft-evm@0.1.0(r37wpyomgp2szjqibbqxp2orry)': + dependencies: + '@layerzerolabs/lz-evm-messagelib-v2': 2.3.44(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@eth-optimism/contracts@0.6.0(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@layerzerolabs/lz-evm-protocol-v2@2.3.44(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2))(@layerzerolabs/lz-evm-v1-0.7@2.3.44(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2) + '@layerzerolabs/lz-evm-protocol-v2': 2.3.44(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2) + '@layerzerolabs/lz-evm-v1-0.7': 2.3.44(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + '@layerzerolabs/oapp-evm': 0.0.4(cketphbdqcmpxjcxdldlipr2wy) + '@openzeppelin/contracts': 5.1.0 + '@openzeppelin/contracts-upgradeable': 5.1.0(@openzeppelin/contracts@5.1.0) + + '@layerzerolabs/prettier-config-next@2.3.44': + dependencies: + prettier: 3.3.3 + prettier-plugin-packagejson: 2.5.3(prettier@3.3.3) + prettier-plugin-solidity: 1.4.1(prettier@3.3.3) + + '@layerzerolabs/protocol-devtools-evm@1.2.1(g35xmmspk2min5tmnybgimbzt4)': + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/contracts': 5.7.0 + '@ethersproject/providers': 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@layerzerolabs/devtools': 0.3.28(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@0.1.13(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.44)(zod@3.23.8) + '@layerzerolabs/devtools-evm': 0.4.2(4j3wciojkg3hmai6t7vgohihfi) + '@layerzerolabs/io-devtools': 0.1.13(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8) + '@layerzerolabs/lz-definitions': 2.3.44 + '@layerzerolabs/protocol-devtools': 0.4.3(@layerzerolabs/devtools@0.3.28(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@0.1.13(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.44)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.44)(zod@3.23.8) + p-memoize: 4.0.4 + zod: 3.23.8 + + '@layerzerolabs/protocol-devtools@0.4.3(@layerzerolabs/devtools@0.3.28(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@0.1.13(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.44)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.44)(zod@3.23.8)': + dependencies: + '@layerzerolabs/devtools': 0.3.28(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@0.1.13(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.44)(zod@3.23.8) + '@layerzerolabs/lz-definitions': 2.3.44 + zod: 3.23.8 + + '@layerzerolabs/solhint-config@2.3.44(typescript@5.6.3)': + dependencies: + solhint: 4.5.4(typescript@5.6.3) + transitivePeerDependencies: + - typescript + + '@layerzerolabs/test-devtools-evm-foundry@2.0.0(of4b7iyjndsbixduuoofxcrhsq)': + dependencies: + '@layerzerolabs/lz-evm-messagelib-v2': 2.3.44(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@eth-optimism/contracts@0.6.0(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@layerzerolabs/lz-evm-protocol-v2@2.3.44(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2))(@layerzerolabs/lz-evm-v1-0.7@2.3.44(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2) + '@layerzerolabs/lz-evm-protocol-v2': 2.3.44(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2) + '@layerzerolabs/lz-evm-v1-0.7': 2.3.44(@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0))(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + '@layerzerolabs/oapp-evm': 0.0.4(cketphbdqcmpxjcxdldlipr2wy) + '@layerzerolabs/oft-evm': 0.1.0(r37wpyomgp2szjqibbqxp2orry) + '@openzeppelin/contracts': 5.1.0 + '@openzeppelin/contracts-upgradeable': 5.1.0(@openzeppelin/contracts@5.1.0) + + '@layerzerolabs/test-devtools-evm-hardhat@0.3.0(hardhat@2.22.15(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2)': + dependencies: + hardhat: 2.22.15(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + solidity-bytes-utils: 0.8.2 + + '@layerzerolabs/toolbox-foundry@0.1.9': {} + + '@layerzerolabs/toolbox-hardhat@0.4.0(@ethersproject/abstract-provider@5.7.0)(@ethersproject/abstract-signer@5.7.0)(@ethersproject/bignumber@5.7.0)(@ethersproject/constants@5.7.0)(@ethersproject/providers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@nomicfoundation/hardhat-ethers@3.0.8(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.15(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)))(@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.15(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.15(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2)(utf-8-validate@5.0.10)': + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/contracts': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@layerzerolabs/devtools': 0.3.28(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@0.1.13(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.44)(zod@3.23.8) + '@layerzerolabs/devtools-evm': 0.4.2(4j3wciojkg3hmai6t7vgohihfi) + '@layerzerolabs/devtools-evm-hardhat': 1.2.3(l3dwew44d65aeasvlyqkv5iroy) + '@layerzerolabs/io-devtools': 0.1.13(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8) + '@layerzerolabs/lz-definitions': 2.3.44 + '@layerzerolabs/lz-evm-sdk-v1': 2.3.44(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@layerzerolabs/lz-evm-sdk-v2': 2.3.44(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@layerzerolabs/lz-v2-utilities': 2.3.44 + '@layerzerolabs/protocol-devtools': 0.4.3(@layerzerolabs/devtools@0.3.28(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@0.1.13(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.44)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.44)(zod@3.23.8) + '@layerzerolabs/protocol-devtools-evm': 1.2.1(g35xmmspk2min5tmnybgimbzt4) + '@layerzerolabs/test-devtools-evm-hardhat': 0.3.0(hardhat@2.22.15(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))(solidity-bytes-utils@0.8.2) + '@layerzerolabs/ua-devtools': 1.0.5(ru2pjogm6pdyvget5x6bwrr3fy) + '@layerzerolabs/ua-devtools-evm': 3.0.1(euh3hjmgmftstxgupgay6ugxfu) + '@layerzerolabs/ua-devtools-evm-hardhat': 4.0.1(rxtvg3n3nsrrie2kfswunyhqdq) + '@nomicfoundation/hardhat-ethers': 3.0.8(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.15(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) + ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + fp-ts: 2.16.9 + hardhat: 2.22.15(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + hardhat-deploy: 0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ink: 3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10) + ink-gradient: 2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2) + ink-table: 3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2) + react: 17.0.2 + yoga-layout-prebuilt: 1.10.0 + zod: 3.23.8 + transitivePeerDependencies: + - '@ethersproject/abstract-provider' + - '@ethersproject/abstract-signer' + - '@ethersproject/bignumber' + - '@ethersproject/constants' + - '@ethersproject/providers' + - '@nomiclabs/hardhat-ethers' + - '@types/react' + - bufferutil + - encoding + - solidity-bytes-utils + - supports-color + - utf-8-validate + + '@layerzerolabs/ua-devtools-evm-hardhat@4.0.1(rxtvg3n3nsrrie2kfswunyhqdq)': + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/contracts': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@layerzerolabs/devtools': 0.3.28(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@0.1.13(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.44)(zod@3.23.8) + '@layerzerolabs/devtools-evm': 0.4.2(4j3wciojkg3hmai6t7vgohihfi) + '@layerzerolabs/devtools-evm-hardhat': 1.2.3(l3dwew44d65aeasvlyqkv5iroy) + '@layerzerolabs/io-devtools': 0.1.13(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8) + '@layerzerolabs/lz-definitions': 2.3.44 + '@layerzerolabs/protocol-devtools': 0.4.3(@layerzerolabs/devtools@0.3.28(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@0.1.13(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.44)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.44)(zod@3.23.8) + '@layerzerolabs/protocol-devtools-evm': 1.2.1(g35xmmspk2min5tmnybgimbzt4) + '@layerzerolabs/ua-devtools': 1.0.5(ru2pjogm6pdyvget5x6bwrr3fy) + '@layerzerolabs/ua-devtools-evm': 3.0.1(euh3hjmgmftstxgupgay6ugxfu) + ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + hardhat: 2.22.15(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + hardhat-deploy: 0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) + p-memoize: 4.0.4 + typescript: 5.6.3 + + '@layerzerolabs/ua-devtools-evm@3.0.1(euh3hjmgmftstxgupgay6ugxfu)': + dependencies: + '@ethersproject/constants': 5.7.0 + '@ethersproject/contracts': 5.7.0 + '@layerzerolabs/devtools': 0.3.28(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@0.1.13(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.44)(zod@3.23.8) + '@layerzerolabs/devtools-evm': 0.4.2(4j3wciojkg3hmai6t7vgohihfi) + '@layerzerolabs/io-devtools': 0.1.13(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8) + '@layerzerolabs/lz-definitions': 2.3.44 + '@layerzerolabs/lz-v2-utilities': 2.3.44 + '@layerzerolabs/protocol-devtools': 0.4.3(@layerzerolabs/devtools@0.3.28(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@0.1.13(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.44)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.44)(zod@3.23.8) + '@layerzerolabs/protocol-devtools-evm': 1.2.1(g35xmmspk2min5tmnybgimbzt4) + '@layerzerolabs/ua-devtools': 1.0.5(ru2pjogm6pdyvget5x6bwrr3fy) + p-memoize: 4.0.4 + zod: 3.23.8 + + '@layerzerolabs/ua-devtools@1.0.5(ru2pjogm6pdyvget5x6bwrr3fy)': + dependencies: + '@layerzerolabs/devtools': 0.3.28(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@0.1.13(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.44)(zod@3.23.8) + '@layerzerolabs/io-devtools': 0.1.13(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8) + '@layerzerolabs/lz-definitions': 2.3.44 + '@layerzerolabs/lz-v2-utilities': 2.3.44 + '@layerzerolabs/protocol-devtools': 0.4.3(@layerzerolabs/devtools@0.3.28(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@0.1.13(ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2))(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.44)(zod@3.23.8))(@layerzerolabs/lz-definitions@2.3.44)(zod@3.23.8) + zod: 3.23.8 + + '@mdn/browser-compat-data@5.6.9': {} + + '@metamask/eth-sig-util@4.0.1': + dependencies: + ethereumjs-abi: 0.6.8 + ethereumjs-util: 6.2.1 + ethjs-util: 0.1.6 + tweetnacl: 1.0.3 + tweetnacl-util: 0.15.1 + + '@noble/curves@1.4.2': + dependencies: + '@noble/hashes': 1.4.0 + + '@noble/hashes@1.2.0': {} + + '@noble/hashes@1.4.0': {} + + '@noble/hashes@1.5.0': {} + + '@noble/secp256k1@1.7.1': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@nolyfill/is-core-module@1.0.39': {} + + '@nomicfoundation/edr-darwin-arm64@0.6.4': {} + + '@nomicfoundation/edr-darwin-x64@0.6.4': {} + + '@nomicfoundation/edr-linux-arm64-gnu@0.6.4': {} + + '@nomicfoundation/edr-linux-arm64-musl@0.6.4': {} + + '@nomicfoundation/edr-linux-x64-gnu@0.6.4': {} + + '@nomicfoundation/edr-linux-x64-musl@0.6.4': {} + + '@nomicfoundation/edr-win32-x64-msvc@0.6.4': {} + + '@nomicfoundation/edr@0.6.4': + dependencies: + '@nomicfoundation/edr-darwin-arm64': 0.6.4 + '@nomicfoundation/edr-darwin-x64': 0.6.4 + '@nomicfoundation/edr-linux-arm64-gnu': 0.6.4 + '@nomicfoundation/edr-linux-arm64-musl': 0.6.4 + '@nomicfoundation/edr-linux-x64-gnu': 0.6.4 + '@nomicfoundation/edr-linux-x64-musl': 0.6.4 + '@nomicfoundation/edr-win32-x64-msvc': 0.6.4 + + '@nomicfoundation/ethereumjs-common@4.0.4': + dependencies: + '@nomicfoundation/ethereumjs-util': 9.0.4 + transitivePeerDependencies: + - c-kzg + + '@nomicfoundation/ethereumjs-rlp@5.0.4': {} + + '@nomicfoundation/ethereumjs-tx@5.0.4': + dependencies: + '@nomicfoundation/ethereumjs-common': 4.0.4 + '@nomicfoundation/ethereumjs-rlp': 5.0.4 + '@nomicfoundation/ethereumjs-util': 9.0.4 + ethereum-cryptography: 0.1.3 + + '@nomicfoundation/ethereumjs-util@9.0.4': + dependencies: + '@nomicfoundation/ethereumjs-rlp': 5.0.4 + ethereum-cryptography: 0.1.3 + + '@nomicfoundation/hardhat-ethers@3.0.8(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.15(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))': + dependencies: + debug: 4.3.7(supports-color@8.1.1) + ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + hardhat: 2.22.15(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + lodash.isequal: 4.5.0 + transitivePeerDependencies: + - supports-color + + '@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer-darwin-x64@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer@0.1.2': + optionalDependencies: + '@nomicfoundation/solidity-analyzer-darwin-arm64': 0.1.2 + '@nomicfoundation/solidity-analyzer-darwin-x64': 0.1.2 + '@nomicfoundation/solidity-analyzer-linux-arm64-gnu': 0.1.2 + '@nomicfoundation/solidity-analyzer-linux-arm64-musl': 0.1.2 + '@nomicfoundation/solidity-analyzer-linux-x64-gnu': 0.1.2 + '@nomicfoundation/solidity-analyzer-linux-x64-musl': 0.1.2 + '@nomicfoundation/solidity-analyzer-win32-x64-msvc': 0.1.2 + + '@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.15(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))': + dependencies: + ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + hardhat: 2.22.15(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + + '@openzeppelin/contracts-upgradeable@4.7.3': {} + + '@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0)': + dependencies: + '@openzeppelin/contracts': 5.1.0 + + '@openzeppelin/contracts@3.4.2': {} + + '@openzeppelin/contracts@4.3.3': {} + + '@openzeppelin/contracts@5.1.0': {} + + '@pkgr/core@0.1.1': {} + + '@pnpm/config.env-replace@1.1.0': {} + + '@pnpm/network.ca-file@1.0.2': + dependencies: + graceful-fs: 4.2.10 + + '@pnpm/npm-conf@2.3.1': + dependencies: + '@pnpm/config.env-replace': 1.1.0 + '@pnpm/network.ca-file': 1.0.2 + config-chain: 1.1.13 + + '@rtsao/scc@1.1.0': {} + + '@rushstack/eslint-patch@1.10.4': {} + + '@safe-global/api-kit@1.3.1': + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@safe-global/safe-core-sdk-types': 2.3.0 + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + - supports-color + + '@safe-global/protocol-kit@1.3.0(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)': + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/solidity': 5.7.0 + '@safe-global/safe-deployments': 1.37.13 + ethereumjs-util: 7.1.5 + semver: 7.6.3 + web3: 1.10.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) + web3-core: 1.10.4 + web3-utils: 1.10.4 + zksync-web3: 0.14.4(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + transitivePeerDependencies: + - bufferutil + - encoding + - ethers + - supports-color + - utf-8-validate + + '@safe-global/safe-core-sdk-types@2.3.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/contracts': 5.7.0 + '@safe-global/safe-deployments': 1.37.13 + web3-core: 1.10.4 + web3-utils: 1.10.4 + transitivePeerDependencies: + - encoding + - supports-color + + '@safe-global/safe-deployments@1.37.13': + dependencies: + semver: 7.6.3 + + '@scure/base@1.1.9': {} + + '@scure/bip32@1.1.5': + dependencies: + '@noble/hashes': 1.2.0 + '@noble/secp256k1': 1.7.1 + '@scure/base': 1.1.9 + + '@scure/bip32@1.4.0': + dependencies: + '@noble/curves': 1.4.2 + '@noble/hashes': 1.4.0 + '@scure/base': 1.1.9 + + '@scure/bip39@1.1.1': + dependencies: + '@noble/hashes': 1.2.0 + '@scure/base': 1.1.9 + + '@scure/bip39@1.3.0': + dependencies: + '@noble/hashes': 1.4.0 + '@scure/base': 1.1.9 + + '@sentry/core@5.30.0': + dependencies: + '@sentry/hub': 5.30.0 + '@sentry/minimal': 5.30.0 + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 + tslib: 1.14.1 + + '@sentry/hub@5.30.0': + dependencies: + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 + tslib: 1.14.1 + + '@sentry/minimal@5.30.0': + dependencies: + '@sentry/hub': 5.30.0 + '@sentry/types': 5.30.0 + tslib: 1.14.1 + + '@sentry/node@5.30.0': + dependencies: + '@sentry/core': 5.30.0 + '@sentry/hub': 5.30.0 + '@sentry/tracing': 5.30.0 + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 + cookie: 0.4.2 + https-proxy-agent: 5.0.1 + lru_map: 0.3.3 + tslib: 1.14.1 + transitivePeerDependencies: + - supports-color + + '@sentry/tracing@5.30.0': + dependencies: + '@sentry/hub': 5.30.0 + '@sentry/minimal': 5.30.0 + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 + tslib: 1.14.1 + + '@sentry/types@5.30.0': {} + + '@sentry/utils@5.30.0': + dependencies: + '@sentry/types': 5.30.0 + tslib: 1.14.1 + + '@sindresorhus/is@4.6.0': {} + + '@sindresorhus/is@5.6.0': {} + + '@solidity-parser/parser@0.18.0': {} + + '@szmarczak/http-timer@4.0.6': + dependencies: + defer-to-connect: 2.0.1 + + '@szmarczak/http-timer@5.0.1': + dependencies: + defer-to-connect: 2.0.1 + + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@types/bn.js@4.11.6': + dependencies: + '@types/node': 18.18.14 + + '@types/bn.js@5.1.6': + dependencies: + '@types/node': 18.18.14 + + '@types/cacheable-request@6.0.3': + dependencies: + '@types/http-cache-semantics': 4.0.4 + '@types/keyv': 3.1.4 + '@types/node': 18.18.14 + '@types/responselike': 1.0.3 + + '@types/chai@4.3.20': {} + + '@types/http-cache-semantics@4.0.4': {} + + '@types/json-schema@7.0.15': {} + + '@types/json5@0.0.29': {} + + '@types/keyv@3.1.4': + dependencies: + '@types/node': 18.18.14 + + '@types/lru-cache@5.1.1': {} + + '@types/mocha@10.0.9': {} + + '@types/node@12.20.55': {} + + '@types/node@18.18.14': + dependencies: + undici-types: 5.26.5 + + '@types/pbkdf2@3.1.2': + dependencies: + '@types/node': 18.18.14 + + '@types/qs@6.9.16': {} + + '@types/responselike@1.0.3': + dependencies: + '@types/node': 18.18.14 + + '@types/secp256k1@4.0.6': + dependencies: + '@types/node': 18.18.14 + + '@types/semver@7.5.8': {} + + '@types/tinycolor2@1.4.6': {} + + '@types/triple-beam@1.3.5': {} + + '@types/yoga-layout@1.9.2': {} + + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3)': + dependencies: + '@eslint-community/regexpp': 4.11.1 + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 7.18.0 + eslint: 8.57.1 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 1.3.0(typescript@5.6.3) + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3)': + dependencies: + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 7.18.0 + debug: 4.3.7(supports-color@8.1.1) + eslint: 8.57.1 + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@5.62.0': + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + + '@typescript-eslint/scope-manager@7.18.0': + dependencies: + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 + + '@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.6.3)': + dependencies: + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.3) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.6.3) + debug: 4.3.7(supports-color@8.1.1) + eslint: 8.57.1 + ts-api-utils: 1.3.0(typescript@5.6.3) + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@5.62.0': {} + + '@typescript-eslint/types@7.18.0': {} + + '@typescript-eslint/typescript-estree@5.62.0(typescript@5.6.3)': + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.3.7(supports-color@8.1.1) + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.6.3 + tsutils: 3.21.0(typescript@5.6.3) + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@7.18.0(typescript@5.6.3)': + dependencies: + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 + debug: 4.3.7(supports-color@8.1.1) + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.6.3) + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.6.3)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.3) + eslint: 8.57.1 + eslint-scope: 5.1.1 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.6.3)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.3) + eslint: 8.57.1 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@5.62.0': + dependencies: + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 + + '@typescript-eslint/visitor-keys@7.18.0': + dependencies: + '@typescript-eslint/types': 7.18.0 + eslint-visitor-keys: 3.4.3 + + '@ungap/structured-clone@1.2.0': {} + + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + + abortcontroller-polyfill@1.7.5: {} + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + acorn-jsx@5.3.2(acorn@8.13.0): + dependencies: + acorn: 8.13.0 + + acorn-walk@8.3.4: + dependencies: + acorn: 8.13.0 + + acorn@8.13.0: {} + + adm-zip@0.4.16: {} + + aes-js@3.0.0: {} + + agent-base@6.0.2: + dependencies: + debug: 4.3.7(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + aggregate-error@3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + + ansi-colors@4.1.3: {} + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-regex@5.0.1: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + antlr4@4.13.2: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + arg@4.1.3: {} + + argparse@2.0.1: {} + + array-buffer-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + is-array-buffer: 3.0.4 + + array-flatten@1.1.1: {} + + array-includes@3.1.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + is-string: 1.0.7 + + array-union@2.1.0: {} + + array.prototype.findlastindex@1.2.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + + array.prototype.flat@1.3.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + + array.prototype.flatmap@1.3.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + + arraybuffer.prototype.slice@1.0.3: + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + + asn1@0.2.6: + dependencies: + safer-buffer: 2.1.2 + + assert-plus@1.0.0: {} + + assertion-error@1.1.0: {} + + ast-metadata-inferer@0.8.0: + dependencies: + '@mdn/browser-compat-data': 5.6.9 + + ast-parents@0.0.1: {} + + astral-regex@2.0.0: {} + + async-limiter@1.0.1: {} + + async@3.2.6: {} + + asynckit@0.4.0: {} + + auto-bind@4.0.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 + + aws-sign2@0.7.0: {} + + aws4@1.13.2: {} + + axios@0.21.4(debug@4.3.7): + dependencies: + follow-redirects: 1.15.9(debug@4.3.7) + transitivePeerDependencies: + - debug + + balanced-match@1.0.2: {} + + base-x@3.0.10: + dependencies: + safe-buffer: 5.2.1 + + base-x@4.0.0: {} + + base-x@5.0.0: {} + + base64-js@1.5.1: {} + + bcrypt-pbkdf@1.0.2: + dependencies: + tweetnacl: 0.14.5 + + bech32@1.1.4: {} + + bignumber.js@9.1.2: {} + + binary-extensions@2.3.0: {} + + blakejs@1.2.1: {} + + bluebird@3.7.2: {} + + bn.js@4.11.6: {} + + bn.js@4.12.0: {} + + bn.js@5.2.1: {} + + body-parser@1.20.3: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.13.0 + raw-body: 2.5.2 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + boxen@5.1.2: + dependencies: + ansi-align: 3.0.1 + camelcase: 6.3.0 + chalk: 4.1.2 + cli-boxes: 2.2.1 + string-width: 4.2.3 + type-fest: 0.20.2 + widest-line: 3.1.0 + wrap-ansi: 7.0.0 + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + brorand@1.1.0: {} + + browser-stdout@1.3.1: {} + + browserify-aes@1.2.0: + dependencies: + buffer-xor: 1.0.3 + cipher-base: 1.0.4 + create-hash: 1.2.0 + evp_bytestokey: 1.0.3 + inherits: 2.0.4 + safe-buffer: 5.2.1 + + browserslist@4.24.2: + dependencies: + caniuse-lite: 1.0.30001669 + electron-to-chromium: 1.5.45 + node-releases: 2.0.18 + update-browserslist-db: 1.1.1(browserslist@4.24.2) + + bs58@4.0.1: + dependencies: + base-x: 3.0.10 + + bs58@5.0.0: + dependencies: + base-x: 4.0.0 + + bs58@6.0.0: + dependencies: + base-x: 5.0.0 + + bs58check@2.1.2: + dependencies: + bs58: 4.0.1 + create-hash: 1.2.0 + safe-buffer: 5.2.1 + + buffer-from@1.1.2: {} + + buffer-to-arraybuffer@0.0.5: {} + + buffer-xor@1.0.3: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bufferutil@4.0.8: + dependencies: + node-gyp-build: 4.8.2 + + bufio@1.2.2: {} + + bytes@3.1.2: {} + + cacheable-lookup@5.0.4: {} + + cacheable-lookup@6.1.0: {} + + cacheable-lookup@7.0.0: {} + + cacheable-request@10.2.14: + dependencies: + '@types/http-cache-semantics': 4.0.4 + get-stream: 6.0.1 + http-cache-semantics: 4.1.1 + keyv: 4.5.4 + mimic-response: 4.0.0 + normalize-url: 8.0.1 + responselike: 3.0.0 + + cacheable-request@7.0.4: + dependencies: + clone-response: 1.0.3 + get-stream: 5.2.0 + http-cache-semantics: 4.1.1 + keyv: 4.5.4 + lowercase-keys: 2.0.0 + normalize-url: 6.1.0 + responselike: 2.0.1 + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + callsites@3.1.0: {} + + camelcase@6.3.0: {} + + caniuse-lite@1.0.30001669: {} + + caseless@0.12.0: {} + + chai@4.5.0: + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.4 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.1.0 + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + check-error@1.0.3: + dependencies: + get-func-name: 2.0.2 + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chokidar@4.0.1: + dependencies: + readdirp: 4.0.2 + + chownr@1.1.4: {} + + ci-info@2.0.0: {} + + cids@0.7.5: + dependencies: + buffer: 5.7.1 + class-is: 1.1.0 + multibase: 0.6.1 + multicodec: 1.0.4 + multihashes: 0.4.21 + + cipher-base@1.0.4: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + + class-is@1.1.0: {} + + clean-stack@2.2.0: {} + + cli-boxes@2.2.1: {} + + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-table3@0.6.5: + dependencies: + string-width: 4.2.3 + optionalDependencies: + '@colors/colors': 1.5.0 + + cli-truncate@2.1.0: + dependencies: + slice-ansi: 3.0.0 + string-width: 4.2.3 + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clone-response@1.0.3: + dependencies: + mimic-response: 1.0.1 + + code-excerpt@3.0.0: + dependencies: + convert-to-spaces: 1.0.2 + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + + color@3.2.1: + dependencies: + color-convert: 1.9.3 + color-string: 1.9.1 + + colorspace@1.1.4: + dependencies: + color: 3.2.1 + text-hex: 1.0.0 + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + command-exists@1.2.9: {} + + commander@10.0.1: {} + + commander@8.3.0: {} + + concat-map@0.0.1: {} + + config-chain@1.1.13: + dependencies: + ini: 1.3.8 + proto-list: 1.2.4 + + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + content-hash@2.5.2: + dependencies: + cids: 0.7.5 + multicodec: 0.5.7 + multihashes: 0.4.21 + + content-type@1.0.5: {} + + convert-source-map@2.0.0: {} + + convert-to-spaces@1.0.2: {} + + cookie-signature@1.0.6: {} + + cookie@0.4.2: {} + + cookie@0.7.1: {} + + core-util-is@1.0.2: {} + + cors@2.8.5: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + + cosmiconfig@8.3.6(typescript@5.6.3): + dependencies: + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + optionalDependencies: + typescript: 5.6.3 + + crc-32@1.2.2: {} + + create-hash@1.2.0: + dependencies: + cipher-base: 1.0.4 + inherits: 2.0.4 + md5.js: 1.3.5 + ripemd160: 2.0.2 + sha.js: 2.4.11 + + create-hmac@1.1.7: + dependencies: + cipher-base: 1.0.4 + create-hash: 1.2.0 + inherits: 2.0.4 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + + create-require@1.1.1: {} + + cross-fetch@4.0.0: + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + d@1.0.2: + dependencies: + es5-ext: 0.10.64 + type: 2.7.3 + + dashdash@1.14.1: + dependencies: + assert-plus: 1.0.0 + + data-view-buffer@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-offset@1.0.0: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@3.2.7: + dependencies: + ms: 2.1.3 + + debug@4.3.7(supports-color@8.1.1): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 8.1.1 + + decamelize@4.0.0: {} + + decode-uri-component@0.2.2: {} + + decompress-response@3.3.0: + dependencies: + mimic-response: 1.0.1 + + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + + deep-eql@4.1.4: + dependencies: + type-detect: 4.1.0 + + deep-extend@0.6.0: {} + + deep-is@0.1.4: {} + + defer-to-connect@2.0.1: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + delayed-stream@1.0.0: {} + + depd@2.0.0: {} + + destroy@1.2.0: {} + + detect-indent@7.0.1: {} + + detect-newline@4.0.1: {} + + diff@4.0.2: {} + + diff@5.2.0: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 + + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + + dom-walk@0.1.2: {} + + dotenv@16.4.5: {} + + ds-test@https://codeload.github.com/dapphub/ds-test/tar.gz/e282159d5170298eb2455a6c05280ab5a73a4ef0: {} + + ecc-jsbn@0.1.2: + dependencies: + jsbn: 0.1.1 + safer-buffer: 2.1.2 + + ee-first@1.1.1: {} + + electron-to-chromium@1.5.45: {} + + elliptic@6.5.4: + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + elliptic@6.5.7: + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + emoji-regex@8.0.0: {} + + enabled@2.0.0: {} + + encode-utf8@1.0.3: {} + + encodeurl@1.0.2: {} + + encodeurl@2.0.0: {} + + end-of-stream@1.4.4: + dependencies: + once: 1.4.0 + + enhanced-resolve@5.17.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + + enquirer@2.4.1: + dependencies: + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 + + env-paths@2.2.1: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + es-abstract@1.23.3: + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.2 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.3 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.15 + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + es-object-atoms@1.0.0: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.0.3: + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-shim-unscopables@1.0.2: + dependencies: + hasown: 2.0.2 + + es-to-primitive@1.2.1: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + + es5-ext@0.10.64: + dependencies: + es6-iterator: 2.0.3 + es6-symbol: 3.1.4 + esniff: 2.0.1 + next-tick: 1.1.0 + + es6-iterator@2.0.3: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-symbol: 3.1.4 + + es6-promise@4.2.8: {} + + es6-symbol@3.1.4: + dependencies: + d: 1.0.2 + ext: 1.7.0 + + escalade@3.2.0: {} + + escape-html@1.0.3: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@2.0.0: {} + + escape-string-regexp@4.0.0: {} + + eslint-config-prettier@9.1.0(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + + eslint-import-resolver-node@0.3.9: + dependencies: + debug: 3.2.7 + is-core-module: 2.15.1 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@8.57.1): + dependencies: + '@nolyfill/is-core-module': 1.0.39 + debug: 4.3.7(supports-color@8.1.1) + enhanced-resolve: 5.17.1 + eslint: 8.57.1 + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1) + fast-glob: 3.3.2 + get-tsconfig: 4.8.1 + is-bun-module: 1.2.1 + is-glob: 4.0.3 + optionalDependencies: + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - supports-color + + eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.6.3) + eslint: 8.57.1 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@8.57.1) + transitivePeerDependencies: + - supports-color + + eslint-plugin-autofix@2.2.0(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + eslint-rule-composer: 0.3.0 + espree: 9.6.1 + esutils: 2.0.3 + string-similarity: 4.0.4 + + eslint-plugin-compat@4.2.0(eslint@8.57.1): + dependencies: + '@mdn/browser-compat-data': 5.6.9 + ast-metadata-inferer: 0.8.0 + browserslist: 4.24.2 + caniuse-lite: 1.0.30001669 + eslint: 8.57.1 + find-up: 5.0.0 + lodash.memoize: 4.1.2 + semver: 7.6.3 + + eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.57.1 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1) + hasown: 2.0.2 + is-core-module: 2.15.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 + semver: 6.3.1 + string.prototype.trimend: 1.0.8 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.6.3) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-jest-extended@2.0.3(eslint@8.57.1)(typescript@5.6.3): + dependencies: + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.3) + eslint: 8.57.1 + transitivePeerDependencies: + - supports-color + - typescript + + eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.3.3): + dependencies: + eslint: 8.57.1 + prettier: 3.3.3 + prettier-linter-helpers: 1.0.0 + synckit: 0.9.2 + optionalDependencies: + eslint-config-prettier: 9.1.0(eslint@8.57.1) + + eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + eslint-rule-composer: 0.3.0 + optionalDependencies: + '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3) + + eslint-rule-composer@0.3.0: {} + + eslint-scope@5.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + + eslint-scope@7.2.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint@8.57.1: + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) + '@eslint-community/regexpp': 4.11.1 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.7(supports-color@8.1.1) + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + esniff@2.0.1: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + event-emitter: 0.3.5 + type: 2.7.3 + + espree@9.6.1: + dependencies: + acorn: 8.13.0 + acorn-jsx: 5.3.2(acorn@8.13.0) + eslint-visitor-keys: 3.4.3 + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@4.3.0: {} + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + etag@1.8.1: {} + + eth-ens-namehash@2.0.8: + dependencies: + idna-uts46-hx: 2.3.1 + js-sha3: 0.5.7 + + eth-lib@0.1.29(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + bn.js: 4.12.0 + elliptic: 6.5.7 + nano-json-stream-parser: 0.1.2 + servify: 0.1.12 + ws: 3.3.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) + xhr-request-promise: 0.1.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + eth-lib@0.2.8: + dependencies: + bn.js: 4.12.0 + elliptic: 6.5.7 + xhr-request-promise: 0.1.3 + + ethereum-bloom-filters@1.2.0: + dependencies: + '@noble/hashes': 1.5.0 + + ethereum-cryptography@0.1.3: + dependencies: + '@types/pbkdf2': 3.1.2 + '@types/secp256k1': 4.0.6 + blakejs: 1.2.1 + browserify-aes: 1.2.0 + bs58check: 2.1.2 + create-hash: 1.2.0 + create-hmac: 1.1.7 + hash.js: 1.1.7 + keccak: 3.0.4 + pbkdf2: 3.1.2 + randombytes: 2.1.0 + safe-buffer: 5.2.1 + scrypt-js: 3.0.1 + secp256k1: 4.0.4 + setimmediate: 1.0.5 + + ethereum-cryptography@1.2.0: + dependencies: + '@noble/hashes': 1.2.0 + '@noble/secp256k1': 1.7.1 + '@scure/bip32': 1.1.5 + '@scure/bip39': 1.1.1 + + ethereum-cryptography@2.2.1: + dependencies: + '@noble/curves': 1.4.2 + '@noble/hashes': 1.4.0 + '@scure/bip32': 1.4.0 + '@scure/bip39': 1.3.0 + + ethereumjs-abi@0.6.8: + dependencies: + bn.js: 4.12.0 + ethereumjs-util: 6.2.1 + + ethereumjs-util@6.2.1: + dependencies: + '@types/bn.js': 4.11.6 + bn.js: 4.12.0 + create-hash: 1.2.0 + elliptic: 6.5.7 + ethereum-cryptography: 0.1.3 + ethjs-util: 0.1.6 + rlp: 2.2.7 + + ethereumjs-util@7.1.5: + dependencies: + '@types/bn.js': 5.1.6 + bn.js: 5.2.1 + create-hash: 1.2.0 + ethereum-cryptography: 0.1.3 + rlp: 2.2.7 + + ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/contracts': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/json-wallets': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/providers': 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@ethersproject/random': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/solidity': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/units': 5.7.0 + '@ethersproject/wallet': 5.7.0 + '@ethersproject/web': 5.7.1 + '@ethersproject/wordlists': 5.7.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + ethjs-unit@0.1.6: + dependencies: + bn.js: 4.11.6 + number-to-bn: 1.7.0 + + ethjs-util@0.1.6: + dependencies: + is-hex-prefixed: 1.0.0 + strip-hex-prefix: 1.0.0 + + event-emitter@0.3.5: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + + event-target-shim@5.0.1: {} + + eventemitter3@4.0.4: {} + + events@3.3.0: {} + + evp_bytestokey@1.0.3: + dependencies: + md5.js: 1.3.5 + safe-buffer: 5.2.1 + + exponential-backoff@3.1.1: {} + + express@4.21.1: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.3 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.7.1 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.3.1 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.3 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.10 + proxy-addr: 2.0.7 + qs: 6.13.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.19.0 + serve-static: 1.16.2 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + ext@1.7.0: + dependencies: + type: 2.7.3 + + extend@3.0.2: {} + + extsprintf@1.3.0: {} + + fast-deep-equal@3.1.3: {} + + fast-diff@1.3.0: {} + + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fast-uri@3.0.3: {} + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + fecha@4.2.3: {} + + file-entry-cache@6.0.1: + dependencies: + flat-cache: 3.2.0 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + finalhandler@1.3.1: + dependencies: + debug: 2.6.9 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + find-up@2.1.0: + dependencies: + locate-path: 2.0.0 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@3.2.0: + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + rimraf: 3.0.2 + + flat@5.0.2: {} + + flatted@3.3.1: {} + + fmix@0.1.0: + dependencies: + imul: 1.0.1 + + fn.name@1.1.0: {} + + follow-redirects@1.15.9(debug@4.3.7): + optionalDependencies: + debug: 4.3.7(supports-color@8.1.1) + + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 + + forever-agent@0.6.1: {} + + forge-std@1.1.2: {} + + form-data-encoder@1.7.1: {} + + form-data-encoder@2.1.4: {} + + form-data@2.3.3: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + form-data@4.0.1: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + forwarded@0.2.0: {} + + fp-ts@1.19.3: {} + + fp-ts@2.16.9: {} + + fresh@0.5.2: {} + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-extra@4.0.3: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fs-extra@7.0.1: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fs-minipass@1.2.7: + dependencies: + minipass: 2.9.0 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + function.prototype.name@1.1.6: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + functions-have-names: 1.2.3 + + functions-have-names@1.2.3: {} + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-func-name@2.0.2: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + get-stdin@9.0.0: {} + + get-stream@5.2.0: + dependencies: + pump: 3.0.2 + + get-stream@6.0.1: {} + + get-symbol-description@1.0.2: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + + get-tsconfig@4.8.1: + dependencies: + resolve-pkg-maps: 1.0.0 + + getpass@0.1.7: + dependencies: + assert-plus: 1.0.0 + + git-hooks-list@3.1.0: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@7.2.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + glob@8.1.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + + global@4.4.0: + dependencies: + min-document: 2.19.0 + process: 0.11.10 + + globals@11.12.0: {} + + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.0.1 + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + + globby@13.2.2: + dependencies: + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 4.0.0 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + got@11.8.6: + dependencies: + '@sindresorhus/is': 4.6.0 + '@szmarczak/http-timer': 4.0.6 + '@types/cacheable-request': 6.0.3 + '@types/responselike': 1.0.3 + cacheable-lookup: 5.0.4 + cacheable-request: 7.0.4 + decompress-response: 6.0.0 + http2-wrapper: 1.0.3 + lowercase-keys: 2.0.0 + p-cancelable: 2.1.1 + responselike: 2.0.1 + + got@12.1.0: + dependencies: + '@sindresorhus/is': 4.6.0 + '@szmarczak/http-timer': 5.0.1 + '@types/cacheable-request': 6.0.3 + '@types/responselike': 1.0.3 + cacheable-lookup: 6.1.0 + cacheable-request: 7.0.4 + decompress-response: 6.0.0 + form-data-encoder: 1.7.1 + get-stream: 6.0.1 + http2-wrapper: 2.2.1 + lowercase-keys: 3.0.0 + p-cancelable: 3.0.0 + responselike: 2.0.1 + + got@12.6.1: + dependencies: + '@sindresorhus/is': 5.6.0 + '@szmarczak/http-timer': 5.0.1 + cacheable-lookup: 7.0.0 + cacheable-request: 10.2.14 + decompress-response: 6.0.0 + form-data-encoder: 2.1.4 + get-stream: 6.0.1 + http2-wrapper: 2.2.1 + lowercase-keys: 3.0.0 + p-cancelable: 3.0.0 + responselike: 3.0.0 + + graceful-fs@4.2.10: {} + + graceful-fs@4.2.11: {} + + gradient-string@1.2.0: + dependencies: + chalk: 2.4.2 + tinygradient: 0.4.3 + + graphemer@1.4.0: {} + + har-schema@2.0.0: {} + + har-validator@5.1.5: + dependencies: + ajv: 6.12.6 + har-schema: 2.0.0 + + hardhat-contract-sizer@2.10.0(hardhat@2.22.15(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)): + dependencies: + chalk: 4.1.2 + cli-table3: 0.6.5 + hardhat: 2.22.15(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + strip-ansi: 6.0.1 + + hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/contracts': 5.7.0 + '@ethersproject/providers': 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@ethersproject/solidity': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wallet': 5.7.0 + '@types/qs': 6.9.16 + axios: 0.21.4(debug@4.3.7) + chalk: 4.1.2 + chokidar: 3.6.0 + debug: 4.3.7(supports-color@8.1.1) + enquirer: 2.4.1 + ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + form-data: 4.0.1 + fs-extra: 10.1.0 + match-all: 1.2.6 + murmur-128: 0.2.1 + qs: 6.13.0 + zksync-ethers: 5.9.2(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + hardhat@2.22.15(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.18.14)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10): + dependencies: + '@ethersproject/abi': 5.7.0 + '@metamask/eth-sig-util': 4.0.1 + '@nomicfoundation/edr': 0.6.4 + '@nomicfoundation/ethereumjs-common': 4.0.4 + '@nomicfoundation/ethereumjs-tx': 5.0.4 + '@nomicfoundation/ethereumjs-util': 9.0.4 + '@nomicfoundation/solidity-analyzer': 0.1.2 + '@sentry/node': 5.30.0 + '@types/bn.js': 5.1.6 + '@types/lru-cache': 5.1.1 + adm-zip: 0.4.16 + aggregate-error: 3.1.0 + ansi-escapes: 4.3.2 + boxen: 5.1.2 + chalk: 2.4.2 + chokidar: 4.0.1 + ci-info: 2.0.0 + debug: 4.3.7(supports-color@8.1.1) + enquirer: 2.4.1 + env-paths: 2.2.1 + ethereum-cryptography: 1.2.0 + ethereumjs-abi: 0.6.8 + find-up: 2.1.0 + fp-ts: 1.19.3 + fs-extra: 7.0.1 + glob: 7.2.0 + immutable: 4.3.7 + io-ts: 1.10.4 + json-stream-stringify: 3.1.6 + keccak: 3.0.4 + lodash: 4.17.21 + mnemonist: 0.38.5 + mocha: 10.7.3 + p-map: 4.0.0 + raw-body: 2.5.2 + resolve: 1.17.0 + semver: 6.3.1 + solc: 0.8.26(debug@4.3.7) + source-map-support: 0.5.21 + stacktrace-parser: 0.1.10 + tsort: 0.0.1 + undici: 5.28.4 + uuid: 8.3.2 + ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + ts-node: 10.9.2(@types/node@18.18.14)(typescript@5.6.3) + typescript: 5.6.3 + transitivePeerDependencies: + - bufferutil + - c-kzg + - supports-color + - utf-8-validate + + has-bigints@1.0.2: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.0.3 + + hash-base@3.1.0: + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + safe-buffer: 5.2.1 + + hash.js@1.1.7: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + he@1.2.0: {} + + hmac-drbg@1.0.1: + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + http-cache-semantics@4.1.1: {} + + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + http-https@1.0.0: {} + + http-signature@1.2.0: + dependencies: + assert-plus: 1.0.0 + jsprim: 1.4.2 + sshpk: 1.18.0 + + http2-wrapper@1.0.3: + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + + http2-wrapper@2.2.1: + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.3.7(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + idna-uts46-hx@2.3.1: + dependencies: + punycode: 2.1.0 + + ieee754@1.2.1: {} + + ignore@5.3.2: {} + + immutable@4.3.7: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imul@1.0.1: {} + + imurmurhash@0.1.4: {} + + indent-string@4.0.0: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + ini@1.3.8: {} + + ink-gradient@2.0.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2): + dependencies: + gradient-string: 1.2.0 + ink: 3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10) + prop-types: 15.8.1 + react: 17.0.2 + strip-ansi: 6.0.1 + + ink-table@3.1.0(ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10))(react@17.0.2): + dependencies: + ink: 3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10) + object-hash: 2.2.0 + react: 17.0.2 + + ink@3.2.0(bufferutil@4.0.8)(react@17.0.2)(utf-8-validate@5.0.10): + dependencies: + ansi-escapes: 4.3.2 + auto-bind: 4.0.0 + chalk: 4.1.2 + cli-boxes: 2.2.1 + cli-cursor: 3.1.0 + cli-truncate: 2.1.0 + code-excerpt: 3.0.0 + indent-string: 4.0.0 + is-ci: 2.0.0 + lodash: 4.17.21 + patch-console: 1.0.0 + react: 17.0.2 + react-devtools-core: 4.28.5(bufferutil@4.0.8)(utf-8-validate@5.0.10) + react-reconciler: 0.26.2(react@17.0.2) + scheduler: 0.20.2 + signal-exit: 3.0.7 + slice-ansi: 3.0.0 + stack-utils: 2.0.6 + string-width: 4.2.3 + type-fest: 0.12.0 + widest-line: 3.1.0 + wrap-ansi: 6.2.0 + ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) + yoga-layout-prebuilt: 1.10.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + internal-slot@1.0.7: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 + + io-ts@1.10.4: + dependencies: + fp-ts: 1.19.3 + + ipaddr.js@1.9.1: {} + + is-arguments@1.1.1: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-array-buffer@3.0.4: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + + is-arrayish@0.2.1: {} + + is-arrayish@0.3.2: {} + + is-bigint@1.0.4: + dependencies: + has-bigints: 1.0.2 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-boolean-object@1.1.2: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-bun-module@1.2.1: + dependencies: + semver: 7.6.3 + + is-callable@1.2.7: {} + + is-ci@2.0.0: + dependencies: + ci-info: 2.0.0 + + is-core-module@2.15.1: + dependencies: + hasown: 2.0.2 + + is-data-view@1.0.1: + dependencies: + is-typed-array: 1.1.13 + + is-date-object@1.0.5: + dependencies: + has-tostringtag: 1.0.2 + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-function@1.0.2: {} + + is-generator-function@1.0.10: + dependencies: + has-tostringtag: 1.0.2 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-hex-prefixed@1.0.0: {} + + is-negative-zero@2.0.3: {} + + is-number-object@1.0.7: + dependencies: + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-path-inside@3.0.3: {} + + is-plain-obj@2.1.0: {} + + is-plain-obj@4.1.0: {} + + is-regex@1.1.4: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-shared-array-buffer@1.0.3: + dependencies: + call-bind: 1.0.7 + + is-stream@2.0.1: {} + + is-string@1.0.7: + dependencies: + has-tostringtag: 1.0.2 + + is-symbol@1.0.4: + dependencies: + has-symbols: 1.0.3 + + is-typed-array@1.1.13: + dependencies: + which-typed-array: 1.1.15 + + is-typedarray@1.0.0: {} + + is-unicode-supported@0.1.0: {} + + is-weakref@1.0.2: + dependencies: + call-bind: 1.0.7 + + isarray@2.0.5: {} + + isexe@2.0.0: {} + + isstream@0.1.2: {} + + js-sha3@0.5.7: {} + + js-sha3@0.8.0: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsbn@0.1.1: {} + + jsesc@3.0.2: {} + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-schema@0.4.0: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json-stream-stringify@3.1.6: {} + + json-stringify-safe@5.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + + json5@2.2.3: {} + + jsonfile@4.0.0: + optionalDependencies: + graceful-fs: 4.2.11 + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + jsprim@1.4.2: + dependencies: + assert-plus: 1.0.0 + extsprintf: 1.3.0 + json-schema: 0.4.0 + verror: 1.10.0 + + keccak@3.0.4: + dependencies: + node-addon-api: 2.0.2 + node-gyp-build: 4.8.2 + readable-stream: 3.6.2 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + kleur@3.0.3: {} + + kuler@2.0.0: {} + + latest-version@7.0.0: + dependencies: + package-json: 8.1.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lines-and-columns@1.2.4: {} + + locate-path@2.0.0: + dependencies: + p-locate: 2.0.0 + path-exists: 3.0.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.isequal@4.5.0: {} + + lodash.memoize@4.1.2: {} + + lodash.merge@4.6.2: {} + + lodash.truncate@4.4.2: {} + + lodash@4.17.21: {} + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + logform@2.6.1: + dependencies: + '@colors/colors': 1.6.0 + '@types/triple-beam': 1.3.5 + fecha: 4.2.3 + ms: 2.1.3 + safe-stable-stringify: 2.5.0 + triple-beam: 1.4.1 + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + loupe@2.3.7: + dependencies: + get-func-name: 2.0.2 + + lowercase-keys@2.0.0: {} + + lowercase-keys@3.0.0: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + lru_map@0.3.3: {} + + make-error@1.3.6: {} + + map-age-cleaner@0.1.3: + dependencies: + p-defer: 1.0.0 + + match-all@1.2.6: {} + + md5.js@1.3.5: + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 + + media-typer@0.3.0: {} + + memorystream@0.3.1: {} + + merge-descriptors@1.0.3: {} + + merge2@1.4.1: {} + + methods@1.1.2: {} + + micro-ftch@0.3.1: {} + + micro-memoize@4.1.2: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@1.6.0: {} + + mimic-fn@2.1.0: {} + + mimic-fn@3.1.0: {} + + mimic-response@1.0.1: {} + + mimic-response@3.1.0: {} + + mimic-response@4.0.0: {} + + min-document@2.19.0: + dependencies: + dom-walk: 0.1.2 + + minimalistic-assert@1.0.1: {} + + minimalistic-crypto-utils@1.0.1: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.1 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minimist@1.2.8: {} + + minipass@2.9.0: + dependencies: + safe-buffer: 5.2.1 + yallist: 3.1.1 + + minizlib@1.3.3: + dependencies: + minipass: 2.9.0 + + mkdirp-promise@5.0.1: + dependencies: + mkdirp: 3.0.1 + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mkdirp@3.0.1: {} + + mnemonist@0.38.5: + dependencies: + obliterator: 2.0.4 + + mocha@10.7.3: + dependencies: + ansi-colors: 4.1.3 + browser-stdout: 1.3.1 + chokidar: 3.6.0 + debug: 4.3.7(supports-color@8.1.1) + diff: 5.2.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 8.1.0 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 5.1.6 + ms: 2.1.3 + serialize-javascript: 6.0.2 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + workerpool: 6.5.1 + yargs: 16.2.0 + yargs-parser: 20.2.9 + yargs-unparser: 2.0.0 + + mock-fs@4.14.0: {} + + ms@2.0.0: {} + + ms@2.1.3: {} + + multibase@0.6.1: + dependencies: + base-x: 3.0.10 + buffer: 5.7.1 + + multibase@0.7.0: + dependencies: + base-x: 3.0.10 + buffer: 5.7.1 + + multicodec@0.5.7: + dependencies: + varint: 5.0.2 + + multicodec@1.0.4: + dependencies: + buffer: 5.7.1 + varint: 5.0.2 + + multihashes@0.4.21: + dependencies: + buffer: 5.7.1 + multibase: 0.7.0 + varint: 5.0.2 + + murmur-128@0.2.1: + dependencies: + encode-utf8: 1.0.3 + fmix: 0.1.0 + imul: 1.0.1 + + nano-json-stream-parser@0.1.2: {} + + natural-compare@1.4.0: {} + + negotiator@0.6.3: {} + + next-tick@1.1.0: {} + + node-addon-api@2.0.2: {} + + node-addon-api@5.1.0: {} + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-gyp-build@4.8.2: {} + + node-releases@2.0.18: {} + + normalize-path@3.0.0: {} + + normalize-url@6.1.0: {} + + normalize-url@8.0.1: {} + + number-to-bn@1.7.0: + dependencies: + bn.js: 4.11.6 + strip-hex-prefix: 1.0.0 + + oauth-sign@0.9.0: {} + + object-assign@4.1.1: {} + + object-hash@2.2.0: {} + + object-inspect@1.13.2: {} + + object-keys@1.1.1: {} + + object.assign@4.1.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + + object.fromentries@2.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + + object.groupby@1.0.3: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + + object.values@1.2.0: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + obliterator@2.0.4: {} + + oboe@2.1.5: + dependencies: + http-https: 1.0.0 + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + one-time@1.0.0: + dependencies: + fn.name: 1.1.0 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + os-tmpdir@1.0.2: {} + + p-cancelable@2.1.1: {} + + p-cancelable@3.0.0: {} + + p-defer@1.0.0: {} + + p-limit@1.3.0: + dependencies: + p-try: 1.0.0 + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@2.0.0: + dependencies: + p-limit: 1.3.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-map@4.0.0: + dependencies: + aggregate-error: 3.1.0 + + p-memoize@4.0.4: + dependencies: + map-age-cleaner: 0.1.3 + mimic-fn: 3.1.0 + p-settle: 4.1.1 + + p-reflect@2.1.0: {} + + p-settle@4.1.1: + dependencies: + p-limit: 2.3.0 + p-reflect: 2.1.0 + + p-try@1.0.0: {} + + p-try@2.2.0: {} + + package-json@8.1.1: + dependencies: + got: 12.6.1 + registry-auth-token: 5.0.2 + registry-url: 6.0.1 + semver: 7.6.3 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-headers@2.0.5: {} + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.26.0 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parseurl@1.3.3: {} + + patch-console@1.0.0: {} + + path-exists@3.0.0: {} + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-to-regexp@0.1.10: {} + + path-type@4.0.0: {} + + pathval@1.1.1: {} + + pbkdf2@3.1.2: + dependencies: + create-hash: 1.2.0 + create-hmac: 1.1.7 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + + performance-now@2.1.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + pluralize@8.0.0: {} + + possible-typed-array-names@1.0.0: {} + + prelude-ls@1.2.1: {} + + prettier-linter-helpers@1.0.0: + dependencies: + fast-diff: 1.3.0 + + prettier-plugin-packagejson@2.5.3(prettier@3.3.3): + dependencies: + sort-package-json: 2.10.1 + synckit: 0.9.2 + optionalDependencies: + prettier: 3.3.3 + + prettier-plugin-solidity@1.4.1(prettier@3.3.3): + dependencies: + '@solidity-parser/parser': 0.18.0 + prettier: 3.3.3 + semver: 7.6.3 + + prettier@2.8.8: + optional: true + + prettier@3.3.3: {} + + process@0.11.10: {} + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + proto-list@1.2.4: {} + + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + psl@1.9.0: {} + + pump@3.0.2: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + + punycode@2.1.0: {} + + punycode@2.3.1: {} + + qs@6.13.0: + dependencies: + side-channel: 1.0.6 + + qs@6.5.3: {} + + query-string@5.1.1: + dependencies: + decode-uri-component: 0.2.2 + object-assign: 4.1.1 + strict-uri-encode: 1.1.0 + + queue-microtask@1.2.3: {} + + quick-lru@5.1.1: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + range-parser@1.2.1: {} + + raw-body@2.5.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + + react-devtools-core@4.28.5(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + shell-quote: 1.8.1 + ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + react-is@16.13.1: {} + + react-reconciler@0.26.2(react@17.0.2): + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react: 17.0.2 + scheduler: 0.20.2 + + react@17.0.2: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readable-stream@4.5.2: + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + readdirp@4.0.2: {} + + regexp.prototype.flags@1.5.3: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 + + registry-auth-token@5.0.2: + dependencies: + '@pnpm/npm-conf': 2.3.1 + + registry-url@6.0.1: + dependencies: + rc: 1.2.8 + + request@2.88.2: + dependencies: + aws-sign2: 0.7.0 + aws4: 1.13.2 + caseless: 0.12.0 + combined-stream: 1.0.8 + extend: 3.0.2 + forever-agent: 0.6.1 + form-data: 2.3.3 + har-validator: 5.1.5 + http-signature: 1.2.0 + is-typedarray: 1.0.0 + isstream: 0.1.2 + json-stringify-safe: 5.0.1 + mime-types: 2.1.35 + oauth-sign: 0.9.0 + performance-now: 2.1.0 + qs: 6.5.3 + safe-buffer: 5.2.1 + tough-cookie: 2.5.0 + tunnel-agent: 0.6.0 + uuid: 3.4.0 + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + resolve-alpn@1.2.1: {} + + resolve-from@4.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + resolve@1.17.0: + dependencies: + path-parse: 1.0.7 + + resolve@1.22.8: + dependencies: + is-core-module: 2.15.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + responselike@2.0.1: + dependencies: + lowercase-keys: 2.0.0 + + responselike@3.0.0: + dependencies: + lowercase-keys: 3.0.0 + + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + reusify@1.0.4: {} + + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + ripemd160@2.0.2: + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + + rlp@2.2.7: + dependencies: + bn.js: 5.2.1 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-array-concat@1.1.2: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + isarray: 2.0.5 + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + safe-regex-test@1.0.3: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-regex: 1.1.4 + + safe-stable-stringify@2.5.0: {} + + safer-buffer@2.1.2: {} + + scheduler@0.20.2: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + + scrypt-js@3.0.1: {} + + secp256k1@4.0.4: + dependencies: + elliptic: 6.5.7 + node-addon-api: 5.1.0 + node-gyp-build: 4.8.2 + + semver@5.7.2: {} + + semver@6.3.1: {} + + semver@7.6.3: {} + + send@0.19.0: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + + serve-static@1.16.2: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.19.0 + transitivePeerDependencies: + - supports-color + + servify@0.1.12: + dependencies: + body-parser: 1.20.3 + cors: 2.8.5 + express: 4.21.1 + request: 2.88.2 + xhr: 2.6.0 + transitivePeerDependencies: + - supports-color + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + setimmediate@1.0.5: {} + + setprototypeof@1.2.0: {} + + sha.js@2.4.11: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + shell-quote@1.8.1: {} + + side-channel@1.0.6: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 + + signal-exit@3.0.7: {} + + simple-concat@1.0.1: {} + + simple-get@2.8.2: + dependencies: + decompress-response: 3.3.0 + once: 1.4.0 + simple-concat: 1.0.1 + + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + + sisteransi@1.0.5: {} + + slash@3.0.0: {} + + slash@4.0.0: {} + + slice-ansi@3.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + + slice-ansi@4.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + + solc@0.8.26(debug@4.3.7): + dependencies: + command-exists: 1.2.9 + commander: 8.3.0 + follow-redirects: 1.15.9(debug@4.3.7) + js-sha3: 0.8.0 + memorystream: 0.3.1 + semver: 5.7.2 + tmp: 0.0.33 + transitivePeerDependencies: + - debug + + solhint@4.5.4(typescript@5.6.3): + dependencies: + '@solidity-parser/parser': 0.18.0 + ajv: 6.12.6 + antlr4: 4.13.2 + ast-parents: 0.0.1 + chalk: 4.1.2 + commander: 10.0.1 + cosmiconfig: 8.3.6(typescript@5.6.3) + fast-diff: 1.3.0 + glob: 8.1.0 + ignore: 5.3.2 + js-yaml: 4.1.0 + latest-version: 7.0.0 + lodash: 4.17.21 + pluralize: 8.0.0 + semver: 7.6.3 + strip-ansi: 6.0.1 + table: 6.8.2 + text-table: 0.2.0 + optionalDependencies: + prettier: 2.8.8 + transitivePeerDependencies: + - typescript + + solidity-bytes-utils@0.8.2: + dependencies: + ds-test: https://codeload.github.com/dapphub/ds-test/tar.gz/e282159d5170298eb2455a6c05280ab5a73a4ef0 + forge-std: 1.1.2 + + sort-object-keys@1.1.3: {} + + sort-package-json@2.10.1: + dependencies: + detect-indent: 7.0.1 + detect-newline: 4.0.1 + get-stdin: 9.0.0 + git-hooks-list: 3.1.0 + globby: 13.2.2 + is-plain-obj: 4.1.0 + semver: 7.6.3 + sort-object-keys: 1.1.3 + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + sshpk@1.18.0: + dependencies: + asn1: 0.2.6 + assert-plus: 1.0.0 + bcrypt-pbkdf: 1.0.2 + dashdash: 1.14.1 + ecc-jsbn: 0.1.2 + getpass: 0.1.7 + jsbn: 0.1.1 + safer-buffer: 2.1.2 + tweetnacl: 0.14.5 + + stack-trace@0.0.10: {} + + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 + + stacktrace-parser@0.1.10: + dependencies: + type-fest: 0.7.1 + + statuses@2.0.1: {} + + strict-uri-encode@1.1.0: {} + + string-similarity@4.0.4: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string.prototype.trim@1.2.9: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + + string.prototype.trimend@1.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-bom@3.0.0: {} + + strip-hex-prefix@1.0.0: + dependencies: + is-hex-prefixed: 1.0.0 + + strip-json-comments@2.0.1: {} + + strip-json-comments@3.1.1: {} + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + swarm-js@0.1.42(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + bluebird: 3.7.2 + buffer: 5.7.1 + eth-lib: 0.1.29(bufferutil@4.0.8)(utf-8-validate@5.0.10) + fs-extra: 4.0.3 + got: 11.8.6 + mime-types: 2.1.35 + mkdirp-promise: 5.0.1 + mock-fs: 4.14.0 + setimmediate: 1.0.5 + tar: 4.4.19 + xhr-request: 1.1.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + synckit@0.9.2: + dependencies: + '@pkgr/core': 0.1.1 + tslib: 2.8.0 + + table@6.8.2: + dependencies: + ajv: 8.17.1 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + tapable@2.2.1: {} + + tar@4.4.19: + dependencies: + chownr: 1.1.4 + fs-minipass: 1.2.7 + minipass: 2.9.0 + minizlib: 1.3.3 + mkdirp: 0.5.6 + safe-buffer: 5.2.1 + yallist: 3.1.1 + + text-hex@1.0.0: {} + + text-table@0.2.0: {} + + timed-out@4.0.1: {} + + tiny-invariant@1.3.3: {} + + tinycolor2@1.6.0: {} + + tinygradient@0.4.3: + dependencies: + '@types/tinycolor2': 1.4.6 + tinycolor2: 1.6.0 + + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toidentifier@1.0.1: {} + + tough-cookie@2.5.0: + dependencies: + psl: 1.9.0 + punycode: 2.3.1 + + tr46@0.0.3: {} + + triple-beam@1.4.1: {} + + ts-api-utils@1.3.0(typescript@5.6.3): + dependencies: + typescript: 5.6.3 + + ts-node@10.9.2(@types/node@18.18.14)(typescript@5.6.3): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 18.18.14 + acorn: 8.13.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.6.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + + tslib@1.14.1: {} + + tslib@2.8.0: {} + + tsort@0.0.1: {} + + tsutils@3.21.0(typescript@5.6.3): + dependencies: + tslib: 1.14.1 + typescript: 5.6.3 + + tunnel-agent@0.6.0: + dependencies: + safe-buffer: 5.2.1 + + tweetnacl-util@0.15.1: {} + + tweetnacl@0.14.5: {} + + tweetnacl@1.0.3: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-detect@4.1.0: {} + + type-fest@0.12.0: {} + + type-fest@0.20.2: {} + + type-fest@0.21.3: {} + + type-fest@0.7.1: {} + + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + type@2.7.3: {} + + typed-array-buffer@1.0.2: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 + + typed-array-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + + typed-array-byte-offset@1.0.2: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + + typed-array-length@1.0.6: + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 + + typedarray-to-buffer@3.1.5: + dependencies: + is-typedarray: 1.0.0 + + typescript@5.6.3: {} + + ultron@1.1.1: {} + + unbox-primitive@1.0.2: + dependencies: + call-bind: 1.0.7 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + + undici-types@5.26.5: {} + + undici@5.28.4: + dependencies: + '@fastify/busboy': 2.1.1 + + universalify@0.1.2: {} + + universalify@2.0.1: {} + + unpipe@1.0.0: {} + + update-browserslist-db@1.1.1(browserslist@4.24.2): + dependencies: + browserslist: 4.24.2 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + url-set-query@1.0.0: {} + + utf-8-validate@5.0.10: + dependencies: + node-gyp-build: 4.8.2 + + utf8@3.0.0: {} + + util-deprecate@1.0.2: {} + + util@0.12.5: + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.13 + which-typed-array: 1.1.15 + + utils-merge@1.0.1: {} + + uuid@3.4.0: {} + + uuid@8.3.2: {} + + uuid@9.0.1: {} + + v8-compile-cache-lib@3.0.1: {} + + varint@5.0.2: {} + + vary@1.1.2: {} + + verror@1.10.0: + dependencies: + assert-plus: 1.0.0 + core-util-is: 1.0.2 + extsprintf: 1.3.0 + + web3-bzz@1.10.4(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@types/node': 12.20.55 + got: 12.1.0 + swarm-js: 0.1.42(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + web3-core-helpers@1.10.4: + dependencies: + web3-eth-iban: 1.10.4 + web3-utils: 1.10.4 + + web3-core-method@1.10.4: + dependencies: + '@ethersproject/transactions': 5.7.0 + web3-core-helpers: 1.10.4 + web3-core-promievent: 1.10.4 + web3-core-subscriptions: 1.10.4 + web3-utils: 1.10.4 + + web3-core-promievent@1.10.4: + dependencies: + eventemitter3: 4.0.4 + + web3-core-requestmanager@1.10.4: + dependencies: + util: 0.12.5 + web3-core-helpers: 1.10.4 + web3-providers-http: 1.10.4 + web3-providers-ipc: 1.10.4 + web3-providers-ws: 1.10.4 + transitivePeerDependencies: + - encoding + - supports-color + + web3-core-subscriptions@1.10.4: + dependencies: + eventemitter3: 4.0.4 + web3-core-helpers: 1.10.4 + + web3-core@1.10.4: + dependencies: + '@types/bn.js': 5.1.6 + '@types/node': 12.20.55 + bignumber.js: 9.1.2 + web3-core-helpers: 1.10.4 + web3-core-method: 1.10.4 + web3-core-requestmanager: 1.10.4 + web3-utils: 1.10.4 + transitivePeerDependencies: + - encoding + - supports-color + + web3-eth-abi@1.10.4: + dependencies: + '@ethersproject/abi': 5.7.0 + web3-utils: 1.10.4 + + web3-eth-accounts@1.10.4: + dependencies: + '@ethereumjs/common': 2.6.5 + '@ethereumjs/tx': 3.5.2 + '@ethereumjs/util': 8.1.0 + eth-lib: 0.2.8 + scrypt-js: 3.0.1 + uuid: 9.0.1 + web3-core: 1.10.4 + web3-core-helpers: 1.10.4 + web3-core-method: 1.10.4 + web3-utils: 1.10.4 + transitivePeerDependencies: + - encoding + - supports-color + + web3-eth-contract@1.10.4: + dependencies: + '@types/bn.js': 5.1.6 + web3-core: 1.10.4 + web3-core-helpers: 1.10.4 + web3-core-method: 1.10.4 + web3-core-promievent: 1.10.4 + web3-core-subscriptions: 1.10.4 + web3-eth-abi: 1.10.4 + web3-utils: 1.10.4 + transitivePeerDependencies: + - encoding + - supports-color + + web3-eth-ens@1.10.4: + dependencies: + content-hash: 2.5.2 + eth-ens-namehash: 2.0.8 + web3-core: 1.10.4 + web3-core-helpers: 1.10.4 + web3-core-promievent: 1.10.4 + web3-eth-abi: 1.10.4 + web3-eth-contract: 1.10.4 + web3-utils: 1.10.4 + transitivePeerDependencies: + - encoding + - supports-color + + web3-eth-iban@1.10.4: + dependencies: + bn.js: 5.2.1 + web3-utils: 1.10.4 + + web3-eth-personal@1.10.4: + dependencies: + '@types/node': 12.20.55 + web3-core: 1.10.4 + web3-core-helpers: 1.10.4 + web3-core-method: 1.10.4 + web3-net: 1.10.4 + web3-utils: 1.10.4 + transitivePeerDependencies: + - encoding + - supports-color + + web3-eth@1.10.4: + dependencies: + web3-core: 1.10.4 + web3-core-helpers: 1.10.4 + web3-core-method: 1.10.4 + web3-core-subscriptions: 1.10.4 + web3-eth-abi: 1.10.4 + web3-eth-accounts: 1.10.4 + web3-eth-contract: 1.10.4 + web3-eth-ens: 1.10.4 + web3-eth-iban: 1.10.4 + web3-eth-personal: 1.10.4 + web3-net: 1.10.4 + web3-utils: 1.10.4 + transitivePeerDependencies: + - encoding + - supports-color + + web3-net@1.10.4: + dependencies: + web3-core: 1.10.4 + web3-core-method: 1.10.4 + web3-utils: 1.10.4 + transitivePeerDependencies: + - encoding + - supports-color + + web3-providers-http@1.10.4: + dependencies: + abortcontroller-polyfill: 1.7.5 + cross-fetch: 4.0.0 + es6-promise: 4.2.8 + web3-core-helpers: 1.10.4 + transitivePeerDependencies: + - encoding + + web3-providers-ipc@1.10.4: + dependencies: + oboe: 2.1.5 + web3-core-helpers: 1.10.4 + + web3-providers-ws@1.10.4: + dependencies: + eventemitter3: 4.0.4 + web3-core-helpers: 1.10.4 + websocket: 1.0.35 + transitivePeerDependencies: + - supports-color + + web3-shh@1.10.4: + dependencies: + web3-core: 1.10.4 + web3-core-method: 1.10.4 + web3-core-subscriptions: 1.10.4 + web3-net: 1.10.4 + transitivePeerDependencies: + - encoding + - supports-color + + web3-utils@1.10.4: + dependencies: + '@ethereumjs/util': 8.1.0 + bn.js: 5.2.1 + ethereum-bloom-filters: 1.2.0 + ethereum-cryptography: 2.2.1 + ethjs-unit: 0.1.6 + number-to-bn: 1.7.0 + randombytes: 2.1.0 + utf8: 3.0.0 + + web3@1.10.4(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + web3-bzz: 1.10.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) + web3-core: 1.10.4 + web3-eth: 1.10.4 + web3-eth-personal: 1.10.4 + web3-net: 1.10.4 + web3-shh: 1.10.4 + web3-utils: 1.10.4 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + webidl-conversions@3.0.1: {} + + websocket@1.0.35: + dependencies: + bufferutil: 4.0.8 + debug: 2.6.9 + es5-ext: 0.10.64 + typedarray-to-buffer: 3.1.5 + utf-8-validate: 5.0.10 + yaeti: 0.0.6 + transitivePeerDependencies: + - supports-color + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which-boxed-primitive@1.0.2: + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + + which-typed-array@1.1.15: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + widest-line@3.1.0: + dependencies: + string-width: 4.2.3 + + winston-transport@4.8.0: + dependencies: + logform: 2.6.1 + readable-stream: 4.5.2 + triple-beam: 1.4.1 + + winston@3.15.0: + dependencies: + '@colors/colors': 1.6.0 + '@dabh/diagnostics': 2.0.3 + async: 3.2.6 + is-stream: 2.0.1 + logform: 2.6.1 + one-time: 1.0.0 + readable-stream: 3.6.2 + safe-stable-stringify: 2.5.0 + stack-trace: 0.0.10 + triple-beam: 1.4.1 + winston-transport: 4.8.0 + + word-wrap@1.2.5: {} + + workerpool@6.5.1: {} + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: {} + + ws@3.3.3(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + async-limiter: 1.0.1 + safe-buffer: 5.1.2 + ultron: 1.1.1 + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + ws@7.4.6(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + xhr-request-promise@0.1.3: + dependencies: + xhr-request: 1.1.0 + + xhr-request@1.1.0: + dependencies: + buffer-to-arraybuffer: 0.0.5 + object-assign: 4.1.1 + query-string: 5.1.1 + simple-get: 2.8.2 + timed-out: 4.0.1 + url-set-query: 1.0.0 + xhr: 2.6.0 + + xhr@2.6.0: + dependencies: + global: 4.4.0 + is-function: 1.0.2 + parse-headers: 2.0.5 + xtend: 4.0.2 + + xtend@4.0.2: {} + + y18n@5.0.8: {} + + yaeti@0.0.6: {} + + yallist@3.1.1: {} + + yargs-parser@20.2.9: {} + + yargs-unparser@2.0.0: + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + + yn@3.1.1: {} + + yocto-queue@0.1.0: {} + + yoga-layout-prebuilt@1.10.0: + dependencies: + '@types/yoga-layout': 1.9.2 + + zksync-ethers@5.9.2(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)): + dependencies: + ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + + zksync-web3@0.14.4(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)): + dependencies: + ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + + zod@3.23.8: {} diff --git a/tests/e2e/testing_oapp/solhint.config.js b/tests/e2e/testing_oapp/solhint.config.js new file mode 100644 index 00000000..52efe629 --- /dev/null +++ b/tests/e2e/testing_oapp/solhint.config.js @@ -0,0 +1 @@ +module.exports = require('@layerzerolabs/solhint-config'); diff --git a/tests/e2e/testing_oapp/tasks/index.ts b/tests/e2e/testing_oapp/tasks/index.ts new file mode 100644 index 00000000..4cb064d0 --- /dev/null +++ b/tests/e2e/testing_oapp/tasks/index.ts @@ -0,0 +1,245 @@ +import {task} from 'hardhat/config'; + +import { + createGetHreByEid, + createProviderFactory, + getEidForNetworkName, +} from '@layerzerolabs/devtools-evm-hardhat'; +import {Options} from '@layerzerolabs/lz-v2-utilities'; + +// send messages from a contract on one network to another +task('send', 'test send') + // contract to send a message from + .addParam('contractA', 'contract address on network A') + // network that sender contract resides on + .addParam('networkA', 'name of the network A') + // network that receiver contract resides on + .addParam('networkB', 'name of the network B') + // message to send from network a to network b + //.addParam('message', 'message to send from network A to network B') + .setAction(async (taskArgs, {ethers}) => { + const eidA = getEidForNetworkName(taskArgs.networkA); + const eidB = getEidForNetworkName(taskArgs.networkB); + const contractA = taskArgs.contractA; + const environmentFactory = createGetHreByEid(); + const providerFactory = createProviderFactory(environmentFactory); + const signer = (await providerFactory(eidA)).getSigner(); + + const oappContractFactory = await ethers.getContractFactory('TestingOApp', signer); + const oapp = oappContractFactory.attach(contractA); + + const options = Options.newOptions().addExecutorLzReceiveOption(200000, 0).toHex().toString(); + //const msg = taskArgs.message == "" ? "Hola Mundo" : taskArgs.message; + const msg = "hola nuff"; + const [nativeFee] = await oapp.quote(eidB, msg, options, false); + console.log('native fee:', nativeFee); + + const receipt = await oapp.send(eidB, msg, options, { + value: nativeFee, + }); + console.log('send receipt:', receipt); + + console.log(`Tx initiated. See: https://layerzeroscan.com/tx/${receipt.hash}`); + }); + +// send messages from a contract on one network to another +task('sendm', 'test send') + // contract to send a message from + .addParam('contractA', 'contract address on network A') + // network that sender contract resides on + .addParam('networkA', 'name of the network A') + // network that receiver contract resides on + .addParam('networkB', 'name of the network B') + // message to send from network a to network b + .addParam('message', 'amout to send from network A to network B') + .setAction(async (taskArgs, {ethers}) => { + const eidA = getEidForNetworkName(taskArgs.networkA); + const eidB = getEidForNetworkName(taskArgs.networkB); + const contractA = taskArgs.contractA; + const environmentFactory = createGetHreByEid(); + const providerFactory = createProviderFactory(environmentFactory); + const signer = (await providerFactory(eidA)).getSigner(); + + const oappContractFactory = await ethers.getContractFactory('TestingOApp', signer); + const oapp = oappContractFactory.attach(contractA); + + const options = Options.newOptions().addExecutorLzReceiveOption(200000, 0).toHex().toString(); + const message = taskArgs.message; + const [nativeFee] = await oapp.quote(eidB, message, options, false); + console.log('native fee:', nativeFee); + + const receipt = await oapp.send(eidB, message, options, { + value: nativeFee, + }); + console.log('send receipt:', receipt); + + console.log(`Tx initiated. See: https://layerzeroscan.com/tx/${receipt.hash}`); + }); + +task('read', 'read message stored in OApp') + .addParam('contractA', 'contract address on network A') + .addParam('contractB', 'contract address on network B') + .addParam('networkA', 'name of the network A') + .addParam('networkB', 'name of the network B') + .setAction(async (taskArgs, {ethers}) => { + const eidA = getEidForNetworkName(taskArgs.networkA); + const eidB = getEidForNetworkName(taskArgs.networkB); + const contractA = taskArgs.contractA; + const contractB = taskArgs.contractB; + const environmentFactory = createGetHreByEid(); + const providerFactory = createProviderFactory(environmentFactory); + const signerA = (await providerFactory(eidA)).getSigner(); + const signerB = (await providerFactory(eidB)).getSigner(); + + const oappContractAFactory = await ethers.getContractFactory('TestingOApp', signerA); + const oappContractBFactory = await ethers.getContractFactory('TestingOApp', signerB); + + const oappA = oappContractAFactory.attach(contractA); + const oappB = oappContractBFactory.attach(contractB); + + const dataOnOAppA = await oappA.data(); + const dataOnOAppB = await oappB.data(); + + console.log({ + [taskArgs.networkA]: dataOnOAppA, + [taskArgs.networkB]: dataOnOAppB, + }); + }); + + +import holesky from "../deployments/holesky/TestingOApp.json"; +import amoy from "../deployments/amoy-testnet/TestingOApp.json"; +import arbitrum from "../deployments/arbitrum-sepolia/TestingOApp.json"; +import { assert } from 'console'; + +const chainSelector = ((chain: string) => { + switch (chain) { + case "holesky": return holesky['address']; + case "amoy-testnet": return amoy['address']; + case "arbitrum-sepolia": return arbitrum['address']; + }}); + +task("e2e", "Send a message and check that it has arrived.") + .addParam("source", "source chain of the message") + .addParam("target", "target chain of the message") + .setAction(async (taskArgs, {ethers}) => { + console.log("=== Regular DVN used ==="); + + // Create the necessary data for querying the contracts and calling them + const sourceEid = getEidForNetworkName(taskArgs.source); + const targetEid = getEidForNetworkName(taskArgs.target); + + const sourceContractAddr = chainSelector(taskArgs.source); + const targetContractAddr = chainSelector(taskArgs.target); + + const sourceContract = sourceContractAddr ? sourceContractAddr : "0x0"; + const targetContract = targetContractAddr ? targetContractAddr : "0x0"; + + const environmentFactory = createGetHreByEid(); + const providerFactory = createProviderFactory(environmentFactory); + + const sourceSigner = (await providerFactory(sourceEid)).getSigner(); + const targetSigner = (await providerFactory(targetEid)).getSigner(); + + const oappSourceContractFactory = await ethers.getContractFactory('TestingOApp', sourceSigner); + const oappTargetContractFactory = await ethers.getContractFactory('TestingOApp', targetSigner); + + const sourceOapp = oappSourceContractFactory.attach(sourceContract); + const targetOapp = oappTargetContractFactory.attach(targetContract); + + // Query the data on the target chain using the OApp contract. + const initialdataOnOAppB = await targetOapp.data(); + const initialData = Number(initialdataOnOAppB); + console.log("Initial data on target OApp:", Number(initialData)); + + // Increase the queried value by one, and send it. + const msg = initialData + 1; + + const options = Options.newOptions().addExecutorLzReceiveOption(200000, 0).toHex().toString(); + const [nativeFee] = await sourceOapp.quote(targetEid, msg, options, false); + console.log('native fee:', nativeFee); + + const r = await sourceOapp.send(targetEid, initialData, options, { + value: nativeFee, + }); + console.log("send receipt:", r); + + console.log(`Tx initiated. See: https://layerzeroscan.com/tx/${r.hash}`); + //console.log("Waiting 30 seconds for the message to arrive..."); + console.log("Waiting 30 seconds for the message to arrive..."); + + // Wait for the transaction to arrive on the target chain. + await new Promise((resolve) => setTimeout(resolve, 30000)); + + // Check the value has changed. + const dataOnOAppB = await sourceOapp.data(); + assert(msg == dataOnOAppB, "Newly queried data differs from the expected on. Message did not arrive on target OApp"); + }) + +import simple_holesky from "../deployments/holesky/SimpleTestingOApp.json"; +import simple_amoy from "../deployments/amoy-testnet/SimpleTestingOApp.json"; +import simple_arbitrum from "../deployments/arbitrum-sepolia/SimpleTestingOApp.json"; + +const chainSelectorSimple = ((chain: string) => { + switch (chain) { + case "holesky": return simple_holesky['address']; + case "amoy-testnet": return simple_amoy['address']; + case "arbitrum-sepolia": return simple_arbitrum['address']; + }}); + +task("e2e:simple", "Send a message and check that it has arrived.") + .addParam("source", "source chain of the message") + .addParam("target", "target chain of the message") + .setAction(async (taskArgs, {ethers}) => { + console.log("=== Simple DVN used ==="); + + // Create the necessary data for querying the contracts and calling them + const sourceEid = getEidForNetworkName(taskArgs.source); + const targetEid = getEidForNetworkName(taskArgs.target); + + const sourceContractAddr = chainSelectorSimple(taskArgs.source); + const targetContractAddr = chainSelectorSimple(taskArgs.target); + + const sourceContract = sourceContractAddr ? sourceContractAddr : "0x0"; + const targetContract = targetContractAddr ? targetContractAddr : "0x0"; + + const environmentFactory = createGetHreByEid(); + const providerFactory = createProviderFactory(environmentFactory); + + const sourceSigner = (await providerFactory(sourceEid)).getSigner(); + const targetSigner = (await providerFactory(targetEid)).getSigner(); + + const oappSourceContractFactory = await ethers.getContractFactory('TestingOApp', sourceSigner); + const oappTargetContractFactory = await ethers.getContractFactory('TestingOApp', targetSigner); + + const sourceOapp = oappSourceContractFactory.attach(sourceContract); + const targetOapp = oappTargetContractFactory.attach(targetContract); + + // Query the data on the target chain using the OApp contract. + const initialdataOnOAppB = await targetOapp.data(); + const initialData = Number(initialdataOnOAppB); + console.log("Initial data on target OApp:", Number(initialData)); + + // Increase the queried value by one, and send it. + const msg = initialData + 1; + + const options = Options.newOptions().addExecutorLzReceiveOption(200000, 0).toHex().toString(); + const [nativeFee] = await sourceOapp.quote(targetEid, msg, options, false); + console.log('native fee:', nativeFee); + + const r = await sourceOapp.send(targetEid, initialData, options, { + value: nativeFee, + }); + console.log("send receipt:", r); + + console.log(`Tx initiated. See: https://layerzeroscan.com/tx/${r.hash}`); + console.log("Waiting 30 seconds for the message to arrive..."); + + // Wait for the transaction to arrive on the target chain. + await new Promise((resolve) => setTimeout(resolve, 30000)); + + // Check the value has changed. + const dataOnOAppB = await sourceOapp.data(); + assert(msg == dataOnOAppB, "Newly queried data differs from the expected on. Message did not arrive on target OApp"); + }) + diff --git a/tests/e2e/testing_oapp/test/foundry/TestingOApp.t.sol b/tests/e2e/testing_oapp/test/foundry/TestingOApp.t.sol new file mode 100644 index 00000000..25ef5cf5 --- /dev/null +++ b/tests/e2e/testing_oapp/test/foundry/TestingOApp.t.sol @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.20; + +// MyOApp imports +import { TestingOApp } from "../../contracts/TestingOApp.sol"; + +// OApp imports +import { IOAppOptionsType3, EnforcedOptionParam } from "@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol"; +import { OptionsBuilder } from "@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol"; + +// OZ imports +import { IERC20 } from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; + +// Forge imports +import "forge-std/console.sol"; + +// DevTools imports +import { TestHelperOz5 } from "@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol"; + +contract MyOAppTest is TestHelperOz5 { + using OptionsBuilder for bytes; + + uint32 private aEid = 1; + uint32 private bEid = 2; + + TestingOApp private aOApp; + TestingOApp private bOApp; + + address private userA = address(0x1); + address private userB = address(0x2); + uint256 private initialBalance = 100 ether; + + function setUp() public virtual override { + vm.deal(userA, 1000 ether); + vm.deal(userB, 1000 ether); + + super.setUp(); + setUpEndpoints(2, LibraryType.UltraLightNode); + + aOApp = TestingOApp(_deployOApp(type(TestingOApp).creationCode, abi.encode(address(endpoints[aEid]), address(this)))); + + bOApp = TestingOApp(_deployOApp(type(TestingOApp).creationCode, abi.encode(address(endpoints[bEid]), address(this)))); + + address[] memory oapps = new address[](2); + oapps[0] = address(aOApp); + oapps[1] = address(bOApp); + this.wireOApps(oapps); + } + + function test_constructor() public { + assertEq(aOApp.owner(), address(this)); + assertEq(bOApp.owner(), address(this)); + + assertEq(address(aOApp.endpoint()), address(endpoints[aEid])); + assertEq(address(bOApp.endpoint()), address(endpoints[bEid])); + } +} diff --git a/tests/e2e/testing_oapp/test/hardhat/TestingOApp.test.ts b/tests/e2e/testing_oapp/test/hardhat/TestingOApp.test.ts new file mode 100644 index 00000000..ef723f32 --- /dev/null +++ b/tests/e2e/testing_oapp/test/hardhat/TestingOApp.test.ts @@ -0,0 +1,83 @@ +import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers' +import { expect } from 'chai' +import { Contract, ContractFactory } from 'ethers' +import { deployments, ethers } from 'hardhat' + +import { Options } from '@layerzerolabs/lz-v2-utilities' + +describe('TestingOApp Test', function () { + // Constant representing a mock Endpoint ID for testing purposes + const eidA = 1 + const eidB = 2 + // Declaration of variables to be used in the test suite + let TestingOApp: ContractFactory + let EndpointV2Mock: ContractFactory + let ownerA: SignerWithAddress + let ownerB: SignerWithAddress + let endpointOwner: SignerWithAddress + let myOAppA: Contract + let myOAppB: Contract + let mockEndpointV2A: Contract + let mockEndpointV2B: Contract + + // Before hook for setup that runs once before all tests in the block + before(async function () { + // Contract factory for our tested contract + TestingOApp = await ethers.getContractFactory('TestingOApp') + + // Fetching the first three signers (accounts) from Hardhat's local Ethereum network + const signers = await ethers.getSigners() + + ownerA = signers.at(0)! + ownerB = signers.at(1)! + endpointOwner = signers.at(2)! + + // The EndpointV2Mock contract comes from @layerzerolabs/test-devtools-evm-hardhat package + // and its artifacts are connected as external artifacts to this project + // + // Unfortunately, hardhat itself does not yet provide a way of connecting external artifacts, + // so we rely on hardhat-deploy to create a ContractFactory for EndpointV2Mock + // + // See https://github.com/NomicFoundation/hardhat/issues/1040 + const EndpointV2MockArtifact = await deployments.getArtifact('EndpointV2Mock') + EndpointV2Mock = new ContractFactory(EndpointV2MockArtifact.abi, EndpointV2MockArtifact.bytecode, endpointOwner) + }) + + // beforeEach hook for setup that runs before each test in the block + beforeEach(async function () { + // Deploying a mock LZ EndpointV2 with the given Endpoint ID + mockEndpointV2A = await EndpointV2Mock.deploy(eidA) + mockEndpointV2B = await EndpointV2Mock.deploy(eidB) + + // Deploying two instances of MyOApp contract and linking them to the mock LZEndpoint + myOAppA = await TestingOApp.deploy(mockEndpointV2A.address, ownerA.address) + myOAppB = await TestingOApp.deploy(mockEndpointV2B.address, ownerB.address) + + // Setting destination endpoints in the LZEndpoint mock for each MyOApp instance + await mockEndpointV2A.setDestLzEndpoint(myOAppB.address, mockEndpointV2B.address) + await mockEndpointV2B.setDestLzEndpoint(myOAppA.address, mockEndpointV2A.address) + + // Setting each MyOApp instance as a peer of the other + await myOAppA.connect(ownerA).setPeer(eidB, ethers.utils.zeroPad(myOAppB.address, 32)) + await myOAppB.connect(ownerB).setPeer(eidA, ethers.utils.zeroPad(myOAppA.address, 32)) + }) + + // A test case to verify message sending functionality + it('should send a message to each destination OApp', async function () { + // Assert initial state of data in both MyOApp instances + expect(await myOAppA.data()).to.equal('Nothing received yet.') + expect(await myOAppB.data()).to.equal('Nothing received yet.') + const options = Options.newOptions().addExecutorLzReceiveOption(200000, 0).toHex().toString() + + // Define native fee and quote for the message send operation + let nativeFee = 0 + ;[nativeFee] = await myOAppA.quote(eidB, 'Test message.', options, false) + + // Execute send operation from myOAppA + await myOAppA.send(eidB, 'Test message.', options, { value: nativeFee.toString() }) + + // Assert the resulting state of data in both MyOApp instances + expect(await myOAppA.data()).to.equal('Nothing received yet.') + expect(await myOAppB.data()).to.equal('Test message.') + }) +}) diff --git a/tests/e2e/testing_oapp/tsconfig.json b/tests/e2e/testing_oapp/tsconfig.json new file mode 100644 index 00000000..21d541fa --- /dev/null +++ b/tests/e2e/testing_oapp/tsconfig.json @@ -0,0 +1,14 @@ +{ + "exclude": ["node_modules"], + "include": ["deploy", "test", "tasks", "hardhat.config.ts"], + "compilerOptions": { + "target": "es2020", + "module": "commonjs", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true, + "resolveJsonModule": true, + "types": ["node", "mocha"] + } +} diff --git a/workers/abi/L0V2Endpoint.json b/workers/abi/L0V2Endpoint.json deleted file mode 100644 index f3d83171..00000000 --- a/workers/abi/L0V2Endpoint.json +++ /dev/null @@ -1 +0,0 @@ -{"abi":[{"inputs":[{"internalType":"uint32","name":"_eid","type":"uint32"},{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"LZ_AlreadyRegistered","type":"error"},{"inputs":[],"name":"LZ_ComposeExists","type":"error"},{"inputs":[{"internalType":"bytes32","name":"expected","type":"bytes32"},{"internalType":"bytes32","name":"actual","type":"bytes32"}],"name":"LZ_ComposeNotFound","type":"error"},{"inputs":[],"name":"LZ_DefaultReceiveLibUnavailable","type":"error"},{"inputs":[],"name":"LZ_DefaultSendLibUnavailable","type":"error"},{"inputs":[{"internalType":"uint256","name":"requiredNative","type":"uint256"},{"internalType":"uint256","name":"suppliedNative","type":"uint256"},{"internalType":"uint256","name":"requiredLzToken","type":"uint256"},{"internalType":"uint256","name":"suppliedLzToken","type":"uint256"}],"name":"LZ_InsufficientFee","type":"error"},{"inputs":[],"name":"LZ_InvalidExpiry","type":"error"},{"inputs":[{"internalType":"uint64","name":"nonce","type":"uint64"}],"name":"LZ_InvalidNonce","type":"error"},{"inputs":[],"name":"LZ_InvalidPayloadHash","type":"error"},{"inputs":[],"name":"LZ_InvalidReceiveLibrary","type":"error"},{"inputs":[],"name":"LZ_LzTokenUnavailable","type":"error"},{"inputs":[],"name":"LZ_OnlyNonDefaultLib","type":"error"},{"inputs":[],"name":"LZ_OnlyReceiveLib","type":"error"},{"inputs":[],"name":"LZ_OnlyRegisteredLib","type":"error"},{"inputs":[],"name":"LZ_OnlyRegisteredOrDefaultLib","type":"error"},{"inputs":[],"name":"LZ_OnlySendLib","type":"error"},{"inputs":[],"name":"LZ_PathNotInitializable","type":"error"},{"inputs":[],"name":"LZ_PathNotVerifiable","type":"error"},{"inputs":[{"internalType":"bytes32","name":"expected","type":"bytes32"},{"internalType":"bytes32","name":"actual","type":"bytes32"}],"name":"LZ_PayloadHashNotFound","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"},{"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":"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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"address","name":"executor","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":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":"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":"timeout","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":"EMPTY_PAYLOAD_HASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NIL_PAYLOAD_HASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockedLibrary","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"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":"srcEid","type":"uint32"}],"name":"defaultReceiveLibrary","outputs":[{"internalType":"address","name":"lib","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"srcEid","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":"dstEid","type":"uint32"}],"name":"defaultSendLibrary","outputs":[{"internalType":"address","name":"lib","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"oapp","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"delegate","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eid","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"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":"executable","outputs":[{"internalType":"enum ExecutionState","name":"","type":"uint8"}],"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":"_srcEid","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":"","type":"uint32"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"uint32","name":"_dstEid","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":"inboundNonce","type":"uint64"}],"name":"inboundPayloadHash","outputs":[{"internalType":"bytes32","name":"payloadHash","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":"_dstEid","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":"_srcEid","type":"uint32"},{"internalType":"address","name":"_actualReceiveLib","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":"nonce","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":[{"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":"uint256","name":"_gas","type":"uint256"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_message","type":"bytes"},{"internalType":"bytes","name":"_extraData","type":"bytes"},{"internalType":"bytes","name":"_reason","type":"bytes"}],"name":"lzComposeAlert","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"},{"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":[{"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":"uint256","name":"_gas","type":"uint256"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_message","type":"bytes"},{"internalType":"bytes","name":"_extraData","type":"bytes"},{"internalType":"bytes","name":"_reason","type":"bytes"}],"name":"lzReceiveAlert","outputs":[],"stateMutability":"nonpayable","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":"nonce","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"srcEid","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":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"recoverToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lib","type":"address"}],"name":"registerLibrary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","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"}]} \ No newline at end of file diff --git a/workers/src/bin/dvn.rs b/workers/src/bin/dvn.rs deleted file mode 100644 index 753c6d9d..00000000 --- a/workers/src/bin/dvn.rs +++ /dev/null @@ -1,135 +0,0 @@ -//! Main off-chain workflow for Nuff DVN. - -use alloy::primitives::U256; -use eyre::{OptionExt, Result}; -use futures::stream::StreamExt; -use tracing::{debug, error, info, warn}; -use tracing_subscriber::EnvFilter; -use workers::data::dvn::Dvn; -use workers::verifier::NFFLVerifier; -use workers::{ - abi::{L0V2EndpointAbi::PacketSent, SendLibraryAbi::DVNFeePaid}, - chain::{ - connections::{build_subscriptions, get_abi_from_path, get_http_provider}, - contracts::{create_contract_instance, query_already_verified, query_confirmations, verify}, - }, -}; - -#[tokio::main] -async fn main() -> Result<()> { - // Initialize tracing - tracing_subscriber::fmt() - .with_target(false) - .with_env_filter(EnvFilter::from_default_env()) - .init(); - - let mut dvn_data = Dvn::new_from_env()?; - let verifier = NFFLVerifier::new_from_config(&dvn_data.config).await?; - - // Create the WS subscriptions for listening to the events. - let (_provider, mut endpoint_stream, mut sendlib_stream) = build_subscriptions(&dvn_data.config).await?; - - // Create an HTTP provider to call contract functions. - let http_provider = get_http_provider(&dvn_data.config)?; - - // Get the relevant contract ABI, and create contract. - let receivelib_abi = get_abi_from_path("./abi/ReceiveLibUln302.json")?; - let receivelib_contract = - create_contract_instance(dvn_data.config.receivelib_uln302_addr, http_provider, receivelib_abi)?; - - info!("Listening to chain events..."); - - // FIXME: refactor the operations from this loop into smaller, testable containers. - loop { - dvn_data.listening(); - tokio::select! { - Some(log) = endpoint_stream.next() => { - match log.log_decode::() { - Err(e) => { - error!("Received a `PacketSent` event but failed to decode it: {:?}", e); - } - Ok(inner_log) => { - debug!("PacketSent event found and decoded."); - dvn_data.packet_received(inner_log.data().clone()); - }, - } - } - Some(log) = sendlib_stream.next() => { - match log.log_decode::() { - Err(e) => { - error!("Received a `DVNFeePaid` event but failed to decode it: {:?}", e); - } - Ok(inner_log) if dvn_data.packet.is_some() => { - info!("DVNFeePaid event found and decoded."); - let required_dvns = &inner_log.inner.requiredDVNs; - let own_dvn_addr = dvn_data.config.dvn_addr; - - if required_dvns.contains(&own_dvn_addr) { - debug!("Found DVN in required DVNs."); - - // Query how many confirmations are required. - let eid = U256::from(dvn_data.config.network_eid); - let required_confirmations = query_confirmations(&receivelib_contract, eid).await?; - - // Prepare the header hash. - let header_hash = dvn_data.get_header_hash(); - // Prepate the payload hash. - let message_hash = dvn_data.get_message_hash(); - - // Check if the info from the payload could have been extracted. - match (header_hash, message_hash) { - (Some(header_hash), Some(message_hash)) => { - let already_verified = query_already_verified( - &receivelib_contract, - own_dvn_addr, - header_hash.as_ref(), - message_hash.as_ref(), - required_confirmations, - ) - .await?; - - if already_verified { - debug!("Packet already verified."); - } else { - dvn_data.verifying(); - debug!("Packet NOT verified. Calling verification."); - - if log.block_number.is_none() { - error!("Block number is None, can't verify Packet."); - continue; - } - - if !verifier.verify(log.block_number.unwrap()).await? { - error!("Failed to verify the state root."); - continue; - } - - verify( - &receivelib_contract, - dvn_data.get_header().ok_or_eyre("Cannot extract header from payload")?, - message_hash.as_ref(), - required_confirmations, - ).await?; - } - } - (_, None) => { - error!("Cannot hash payload"); - } - (None, _) => { - error!("Cannot hash message"); - } - } - } else { - dvn_data.reset_packet(); - } - - } - Ok(_)=> { - warn!("Received a `DVNFeePaid` event but don't have information about the `Packet` to be verified"); - } - } - }, - } - dvn_data.reset_packet(); - } -} diff --git a/workers/src/chain/connections.rs b/workers/src/chain/connections.rs deleted file mode 100644 index 03efd71d..00000000 --- a/workers/src/chain/connections.rs +++ /dev/null @@ -1,100 +0,0 @@ -//! Utilities related to connection with a blockchain. - -use crate::{ - chain::HttpProvider, - config::{DVNConfig, LayerZeroEvent}, -}; -use alloy::{ - eips::BlockNumberOrTag, - json_abi::JsonAbi, - providers::{Provider, ProviderBuilder, RootProvider, WsConnect}, - pubsub::{PubSubFrontend, SubscriptionStream}, - rpc::types::{Filter, Log}, -}; -use eyre::{OptionExt, Result}; - -/// Create the subscriptions for the DVN workflow. -pub async fn build_subscriptions( - config: &DVNConfig, -) -> Result<( - RootProvider, - SubscriptionStream, - SubscriptionStream, -)> { - // Create the provider - let ws = WsConnect::new(config.ws_rpc_url.clone()); - let provider = ProviderBuilder::new().on_ws(ws).await?; - - // layerzero endpoint filter - let packet_filter = Filter::new() - .address(config.l0_endpoint_addr) - .event(LayerZeroEvent::PacketSent.as_ref()) - .from_block(BlockNumberOrTag::Latest); - - // messagelib endpoint filter - let fee_paid_filter = Filter::new() - .address(config.sendlib_uln302_addr) - .event(LayerZeroEvent::DVNFeePaid.as_ref()) - .from_block(BlockNumberOrTag::Latest); - - // Subscribe to logs - let endpoint_sub = provider.subscribe_logs(&packet_filter).await?; - let sendlib_sub = provider.subscribe_logs(&fee_paid_filter).await?; - - // Create some streams from the subscriptions - let endpoint_stream = endpoint_sub.into_stream(); - let sendlib_stream = sendlib_sub.into_stream(); - - Ok((provider, endpoint_stream, sendlib_stream)) -} - -pub async fn build_executor_subscriptions( - config: &DVNConfig, -) -> Result<( - SubscriptionStream, - SubscriptionStream, - SubscriptionStream, -)> { - // Create the provider - let ws = WsConnect::new(&config.ws_rpc_url); - let provider = ProviderBuilder::new().on_ws(ws).await?; - - // PacketSent - let packet_sent_filter = Filter::new() - .address(config.l0_endpoint_addr) - .event(LayerZeroEvent::PacketSent.as_ref()) - .from_block(BlockNumberOrTag::Latest); - - let executor_fee_paid = Filter::new() - .address(config.sendlib_uln302_addr) - .event(LayerZeroEvent::ExecutorFeePaid.as_ref()) - .from_block(BlockNumberOrTag::Latest); - - let packet_verified_filter = Filter::new() - .address(config.l0_endpoint_addr) - .event(LayerZeroEvent::PacketVerified.as_ref()) - .from_block(BlockNumberOrTag::Latest); - - Ok(( - provider.subscribe_logs(&packet_sent_filter).await?.into_stream(), - provider.subscribe_logs(&executor_fee_paid).await?.into_stream(), - provider.subscribe_logs(&packet_verified_filter).await?.into_stream(), - )) -} - -/// Load the MessageLib ABI. -pub fn get_abi_from_path(path: &str) -> Result { - // Get the SendLib ABI - let artifact = std::fs::read(path)?; - let json: serde_json::Value = serde_json::from_slice(&artifact)?; - // SAFETY: Assume `unwrap` is safe since the key has been harcoded - let abi_value = json.get("abi").ok_or_eyre("ABI not found in artifact")?; - let abi = serde_json::from_str(&abi_value.to_string())?; - Ok(abi) -} - -/// Construct an HTTP provider given the config. -pub fn get_http_provider(config: &DVNConfig) -> Result { - let http_provider = ProviderBuilder::new().on_http(config.http_rpc_url.to_string().parse()?); - Ok(http_provider) -} diff --git a/workers/src/chain/contracts.rs b/workers/src/chain/contracts.rs deleted file mode 100644 index 764f53d7..00000000 --- a/workers/src/chain/contracts.rs +++ /dev/null @@ -1,194 +0,0 @@ -//! Utilities for interacting with onchain contracts. - -use crate::chain::{ContractInst, HttpProvider}; -use crate::data::packet_v1_codec::{guid, header, message, nonce, receiver, sender, src_eid}; -use alloy::primitives::B256; -use alloy::{ - contract::{ContractInstance, Interface}, - dyn_abi::DynSolValue, - json_abi::JsonAbi, - network::Ethereum, - primitives::{keccak256, Address, U256}, - transports::http::{Client, Http}, -}; -use eyre::{eyre, OptionExt, Result}; -use tracing::{debug, error}; - -/// Create a contract instance from the ABI to interact with on-chain instance. -pub fn create_contract_instance(addr: Address, http_provider: HttpProvider, abi: JsonAbi) -> Result { - let contract: ContractInstance, _, Ethereum> = - ContractInstance::new(addr, http_provider, Interface::new(abi)); - Ok(contract) -} - -/// Get the address of the MessageLib on the destination chain -pub async fn get_messagelib_addr(contract: &ContractInst, eid: U256) -> Result
{ - // Call the `getUlnConfig` function on the contract - let receive_library = contract - .function( - "getReceiveLibrary", - &[DynSolValue::Address(*contract.address()), DynSolValue::Uint(eid, 32)], - )? - .call() - .await?; - - match receive_library - .first() - .ok_or_eyre("ReceiveLibrary not found in contract")? - { - DynSolValue::Address(address) if address.len() == 20 => Ok(*address), - _ => { - error!("Failed to get a valid address"); - Err(eyre!("Failed to get a valid address")) - } - } -} - -/// Get the number of required confirmations by the ULN. -/// -/// The value returned is a solidity `UlnConfig[]` with, at least, one value. -/// -/// See: https://github.com/LayerZero-Labs/LayerZero-v2/blob/main/packages/layerzero-v2/evm/messagelib/contracts/uln/UlnBase.sol -/// The struct `UlnConfig` is defined as follows: -/// -/// ```solidity -/// struct UlnConfig { -/// uint64 confirmations; -/// uint8 requiredDVNCount; -/// uint8 optionalDVNCount; -/// uint8 optionalDVNThreshold; -/// address[] requiredDVNs; -/// address[] optionalDVNs; -/// } -/// ``` -/// -/// and we require only the first value. -pub async fn query_confirmations(contract: &ContractInst, eid: U256) -> Result { - // Call the `getUlnConfig` function on the contract - let uln_config = contract - .function( - "getUlnConfig", - &[DynSolValue::Address(*contract.address()), DynSolValue::Uint(eid, 32)], - )? - .call() - .await?; - - match &uln_config.first().ok_or_eyre("ULN config not found in contract")? { - DynSolValue::Tuple(tupled_int) => { - let value = tupled_int[0] - .as_uint() - .ok_or_eyre("Cannot parse response from MessageLib")?; - Ok(value.0) - } - _ => { - error!("Failed to get confirmations"); - Err(eyre!("Failed to get confirmations")) - } - } -} - -/// Idempotent check to see if there's work to do for the DVN. -pub async fn query_already_verified( - contract: &ContractInst, - dvn_address: Address, - header_hash: &[u8], - payload_hash: &[u8], - required_confirmations: U256, -) -> Result { - // Call the `_verified` function on the 302 contract, to check if the DVN has already verified - // the packet. - debug!("Calling _verified on contract's ReceiveLib"); - - let contract_state = contract - .function( - "_verified", - &[ - DynSolValue::Address(dvn_address), // DVN address - DynSolValue::Bytes(header_hash.to_vec()), // HeaderHash - DynSolValue::Bytes(payload_hash.to_vec()), // PayloadHash - DynSolValue::Uint(required_confirmations, 32), // confirmations - ], - )? - .call() - .await?; - - let packet_state = match contract_state - .first() - .ok_or(eyre!("Empty response when querying `_verified`"))? - { - DynSolValue::Bool(b) => Ok(b), - _ => { - error!("Failed to parse response from ReceiveLib for `_verified`"); - Err(eyre!("Failed to parse response from ReceiveLib for `_verified`")) - } - }?; - - Ok(*packet_state) -} - -pub async fn verify(contract: &ContractInst, packet_header: &[u8], payload: &[u8], confirmations: U256) -> Result<()> { - //// Create the hash of the payload - let payload_hash = keccak256(payload); - - // Call the `verified` function on the contract - let _ = contract - .function( - "verify", - &[ - DynSolValue::Bytes(packet_header.to_vec()), // PacketHeader - DynSolValue::FixedBytes(payload_hash, 32), // PayloadHash - DynSolValue::Uint(confirmations, 64), // Confirmations - ], - )? - .call() - .await?; - - Ok(()) -} - -/// If the state is `Executable`, your `Executor` should decode the packet's options -/// using the options.ts package and call the Endpoint's `lzReceive` function with -/// the packet information: -/// `endpoint.lzReceive(_origin, _receiver, _guid, _message, _extraData)` -pub async fn lz_receive(contract: &ContractInst, packet: &[u8]) -> Result<()> { - let guid = guid(packet); - let call_builder_result = contract.function( - "lzReceive", - &[ - prepare_header(header(packet)), - DynSolValue::Address(Address::from_slice(&receiver(packet)[0..20])), - DynSolValue::FixedBytes(B256::from_slice(guid.as_slice()), 32), - DynSolValue::Bytes(message(packet).to_vec()), - DynSolValue::Bytes(vec![]), - ], - ); - - if call_builder_result.is_err() { - error!("Failed to call lzReceive, because it doesn't exist in the contract/ABI."); - return Ok(()); - } - - call_builder_result.unwrap().call().await.map_err(|e| { - error!("Failed to call lzReceive for packet {:?}: {:?}", guid, e); - eyre!("lzReceive call failed: {}", e) - })?; - debug!("Successfully called lzReceive for packet {:?}", guid); - Ok(()) -} - -/// Converts `Origin` data structure from the received `PacketVerified` -/// to the `DynSolValue`, understandable by `alloy-rs`. -pub(crate) fn prepare_header(packet: &[u8]) -> DynSolValue { - const ORIGIN_STRUCT_NAME: &str = "Origin"; - const ORIGIN_PROPS: [&str; 3] = ["srcEid", "sender", "nonce"]; - - DynSolValue::CustomStruct { - name: String::from(ORIGIN_STRUCT_NAME), - prop_names: ORIGIN_PROPS.iter().map(|&s| String::from(s)).collect(), - tuple: vec![ - DynSolValue::Uint(U256::from(src_eid(packet)), 32), - DynSolValue::FixedBytes(B256::from_slice(sender(packet).as_ref()), 32), - DynSolValue::Uint(U256::from(nonce(packet)), 64), - ], - } -} diff --git a/workers/src/chain/mod.rs b/workers/src/chain/mod.rs deleted file mode 100644 index b6f18ad3..00000000 --- a/workers/src/chain/mod.rs +++ /dev/null @@ -1,16 +0,0 @@ -//! Utilities for interacting with the blockchain. - -use alloy::{ - contract::ContractInstance, - network::Ethereum, - providers::RootProvider, - transports::http::{Client, Http}, -}; - -pub mod connections; -pub mod contracts; - -/// Alias for a contract instance in the Ethereum network. -pub type ContractInst = ContractInstance, RootProvider>, Ethereum>; -/// Alias for an HTTP provider. -pub type HttpProvider = RootProvider>; diff --git a/workers/src/config.rs b/workers/src/config.rs deleted file mode 100644 index 8d7b5b53..00000000 --- a/workers/src/config.rs +++ /dev/null @@ -1,70 +0,0 @@ -//! Configuration for the DVN off-chain workflow. - -use alloy::primitives::Address; -use config::Config; -use eyre::Result; -use serde::Deserialize; - -#[derive(Debug, Deserialize)] -pub struct DVNConfig { - /// The Websocket RPC URL to connect to the Ethereum network. - pub ws_rpc_url: String, - /// The HTTP RPC URL to connect to the Ethereum network. - pub http_rpc_url: String, - /// The LayerZero endpoint address. - pub l0_endpoint_addr: Address, - /// The SendLib Ultra Light Node 302 address. - pub sendlib_uln302_addr: Address, - /// The ReceiveLib Ultra Light Node 302 address. - pub receivelib_uln302_addr: Address, - /// The SendLib Ultra Light Node 301 address. - pub sendlib_uln301_addr: Address, - /// The ReceiveLib Ultra Light Node 301 address. - pub receivelib_uln301_addr: Address, - /// The Ethereum network ID. - pub network_eid: u64, - /// Own DVN address. Used to check when the DVN is assigned to a task. - pub dvn_addr: Address, - /// NFFL Aggregator URL - pub aggregator_url: String, -} - -impl DVNConfig { - /// Load environment variables. - pub fn load_from_env() -> Result { - let settings = Config::builder() - .add_source(config::File::with_name("./config_dvn")) - .build()?; - Ok(settings.try_deserialize::()?) - } -} - -/// Useful events for the DVN workflow. -pub enum LayerZeroEvent { - PacketSent, - DVNFeePaid, - ExecutorFeePaid, - PacketVerified, -} - -impl AsRef for LayerZeroEvent { - fn as_ref(&self) -> &str { - match self { - LayerZeroEvent::PacketSent => "PacketSent(bytes,bytes,address)", - LayerZeroEvent::DVNFeePaid => "DVNFeePaid(address[],address[],uint256[])", - LayerZeroEvent::ExecutorFeePaid => "ExecutorFeePaid(address,uint256)", - LayerZeroEvent::PacketVerified => "PacketVerified(address,bytes,uint256,bytes32)", - } - } -} - -#[cfg(test)] -mod tests { - use super::*; - - // #[test] - #[allow(dead_code)] - fn load_config_from_env() { - let _conf = DVNConfig::load_from_env().unwrap(); - } -} diff --git a/workers/src/data/dvn.rs b/workers/src/data/dvn.rs deleted file mode 100644 index 8bb28991..00000000 --- a/workers/src/data/dvn.rs +++ /dev/null @@ -1,88 +0,0 @@ -use crate::{ - abi::L0V2EndpointAbi::PacketSent, - config::{self, DVNConfig}, - data::packet_v1_codec::{header, message}, -}; -use alloy::primitives::{keccak256, B256}; -use eyre::{eyre, Result}; -use tracing::debug; - -pub struct Dvn { - pub config: DVNConfig, - pub status: DvnStatus, - pub packet: Option, -} - -pub enum DvnStatus { - Stopped, - Listening, - PacketReceived, - Verifying, -} - -impl Dvn { - pub fn new(config: DVNConfig) -> Self { - Self { - config, - status: DvnStatus::Stopped, - packet: None, - } - } - - pub fn new_from_env() -> Result { - Ok(Dvn::new(config::DVNConfig::load_from_env()?)) - } - - pub fn listening(&mut self) { - self.status = DvnStatus::Listening; - } - - pub fn packet_received(&mut self, packet: PacketSent) { - self.packet = Some(packet); - self.status = DvnStatus::PacketReceived; - } - - pub fn reset_packet(&mut self) { - self.packet = None; - self.status = DvnStatus::Listening; - debug!("DVN not required, stored packet dropped") - } - - pub fn verifying(&mut self) { - self.status = DvnStatus::Verifying; - } - - pub fn get_header(&self) -> Option<&[u8]> { - if let Some(packet) = self.packet.as_ref() { - Some(header(packet.encodedPayload.as_ref())) - } else { - None - } - } - - pub fn get_header_hash(&self) -> Option { - self.packet - .as_ref() - .map(|packet| keccak256(header(packet.encodedPayload.as_ref()))) - } - pub fn get_header_hash_result(&self) -> Result { - if let Some(packet) = self.packet.as_ref() { - Ok(keccak256(header(packet.encodedPayload.as_ref()))) - } else { - Err(eyre!("There's no header to hash")) - } - } - - pub fn get_message_hash(&self) -> Option { - self.packet - .as_ref() - .map(|packet| keccak256(message(packet.encodedPayload.as_ref()))) - } - pub fn get_message_hash_result(&self) -> Result { - if let Some(packet) = self.packet.as_ref() { - Ok(keccak256(message(packet.encodedPayload.as_ref()))) - } else { - Err(eyre!("There's no message to hash")) - } - } -} diff --git a/workers/src/executor_def.rs b/workers/src/executor_def.rs deleted file mode 100644 index aad5923c..00000000 --- a/workers/src/executor_def.rs +++ /dev/null @@ -1,166 +0,0 @@ -use crate::abi::L0V2EndpointAbi::PacketSent; -use crate::abi::L0V2EndpointAbi::PacketVerified; -use crate::abi::SendLibraryAbi::ExecutorFeePaid; -use crate::chain::connections::build_executor_subscriptions; -use crate::chain::connections::get_abi_from_path; -use crate::chain::connections::get_http_provider; -use crate::chain::contracts::create_contract_instance; -use crate::chain::contracts::{lz_receive, prepare_header}; -use crate::chain::ContractInst; -use crate::config::DVNConfig; -use alloy::dyn_abi::DynSolValue; -use alloy::primitives::U256; -use eyre::Result; -use futures::StreamExt; -use std::collections::VecDeque; -use std::time::Duration; -use tokio::time::sleep; -use tracing::{debug, error}; - -#[derive(Debug, Clone, Copy, PartialEq)] -pub enum ExecutionState { - NotExecutable = 0, - VerifiedNotExecutable = 1, - Executable = 2, - Executed = 3, -} - -pub struct NFFLExecutor { - config: DVNConfig, - packet_queue: VecDeque, - finish: bool, -} - -impl NFFLExecutor { - pub(crate) const MAX_EXECUTE_ATTEMPTS: usize = 10; - - pub fn new(config: DVNConfig) -> Self { - NFFLExecutor { - config, - packet_queue: VecDeque::new(), - finish: false, - } - } - - pub fn finish(&mut self) { - // Note: we are in a single-threaded event loop, and we do not care about atomicity (yet). - self.finish = true; - } - - pub async fn listen(&mut self) -> Result<()> { - let (mut ps_stream, mut ef_stream, mut pv_stream) = build_executor_subscriptions(&self.config).await?; - - let http_provider = get_http_provider(&self.config)?; - let l0_abi = get_abi_from_path("./abi/L0V2Endpoint.json")?; - // Create a contract instance. - let contract = create_contract_instance(self.config.l0_endpoint_addr, http_provider, l0_abi)?; - - loop { - tokio::select! { - Some(log) = ps_stream.next() => { - match log.log_decode::() { - Ok(packet_log) => { - self.packet_queue.push_back(packet_log.data().clone()); - }, - Err(e) => { error!("Failed to decode PacketSent event: {:?}", e);} - } - } - Some(log) = ef_stream.next() => { - match log.log_decode::() { - Ok(executor_fee_log) => { - if self.packet_queue.is_empty() { - continue; - } - - if !executor_fee_log.data().executor.eq(&self.config.dvn_addr) { - self.packet_queue.clear(); - continue; - } - }, - Err(e) => { error!("Failed to decode ExecutorFeePaid event: {:?}", e);} - } - }, - Some(log) = pv_stream.next() => { - match log.log_decode::() { - Ok(inner_log) => { - Self::handle_verified_packet(&contract, &mut self.packet_queue, inner_log.data()).await?; - }, - Err(e) => { error!("Failed to decode PacketVerified event: {:?}", e);} - } - }, - } - if self.finish { - break; - } - } - Ok(()) - } - - #[cfg(test)] - pub fn is_queue_empty(&self) -> bool { - self.packet_queue.is_empty() - } - - pub async fn handle_verified_packet( - contract: &ContractInst, - queue: &mut VecDeque, - packet_verified: &PacketVerified, - ) -> Result<()> { - if queue.is_empty() { - return Ok(()); - } - - let packet_sent = queue.pop_front().unwrap(); - // We don't expect any more items to be present. If we have any - they are garbage/leftovers. - queue.clear(); - // Despite being described with other arguments, the only real implementation of - // `executable` function is in the contract located here: https://shorturl.at/4H6Yz - // function executable(Origin memory _origin, address _receiver) returns (ExecutionState) - let call_builder = contract.function( - "executable", - &[ - prepare_header(&packet_sent.encodedPayload[..]), - DynSolValue::Address(packet_verified.receiver), - ], - )?; - - let mut retry_count = 0; - // status `Executable` is represented by the integer 2 in the enum. - // To read more: https://tinyurl.com/zur3btzs (line 9) - let not_executable = DynSolValue::Uint(U256::from(ExecutionState::NotExecutable as u8), 8); - let verified_not_executable = DynSolValue::Uint(U256::from(ExecutionState::VerifiedNotExecutable as u8), 8); - let executable = DynSolValue::Uint(U256::from(ExecutionState::Executable as u8), 8); - let executed = DynSolValue::Uint(U256::from(ExecutionState::Executed as u8), 8); - loop { - debug!("Attempt #{retry_count} to call 'executable'"); - if retry_count == Self::MAX_EXECUTE_ATTEMPTS { - error!("Maximum retries reached while waiting for `Executable` state."); - break; - } - let call_result = call_builder.call().await?; - if call_result.len() != 1 { - error!("`executable` function call returned invalid response."); - break; - } - - // Note: why not pattern matching here? fn calls are not allowed in patterns - if call_result[0].eq(¬_executable) || call_result[0].eq(&verified_not_executable) { - debug!("State: NotExecutable or VerifiedNotExecutable, await commits/verifications"); - sleep(Duration::from_secs(1)).await; - retry_count += 1; - continue; - } else if call_result[0].eq(&executable) { - debug!("State: Executable, fire and forget `lzReceive`"); - lz_receive(contract, &packet_sent.encodedPayload[..]).await?; - break; - } else if call_result[0].eq(&executed) { - debug!("State: Executed, free the executor"); - break; - } else { - error!("Unknown state for `executable` call"); - break; - } - } - Ok(()) - } -} diff --git a/workers/src/lib.rs b/workers/src/lib.rs deleted file mode 100644 index 664ab4ea..00000000 --- a/workers/src/lib.rs +++ /dev/null @@ -1,8 +0,0 @@ -//! Tools to build offchain workers for the LayerZero protocol. - -pub mod abi; -pub mod chain; -pub mod config; -pub mod data; -pub mod executor_def; -pub mod verifier; diff --git a/workers/tests/executor_it.rs b/workers/tests/executor_it.rs deleted file mode 100644 index 93a35d44..00000000 --- a/workers/tests/executor_it.rs +++ /dev/null @@ -1,112 +0,0 @@ -#[cfg(test)] -mod tests { - use alloy::primitives::{address, Address, Bytes, FixedBytes}; - use alloy::providers::ProviderBuilder; - - use axum::{routing::post, Json, Router}; - use std::collections::VecDeque; - use std::sync::atomic::{AtomicI32, Ordering}; - use std::sync::Arc; - use tokio::task::JoinHandle; - use tracing::debug; - use tracing::level_filters::LevelFilter; - use tracing_subscriber::EnvFilter; - use workers::abi::L0V2EndpointAbi::{Origin, PacketSent, PacketVerified}; - use workers::chain::connections::get_abi_from_path; - use workers::chain::contracts::create_contract_instance; - use workers::chain::ContractInst; - use workers::executor_def::NFFLExecutor; - - #[derive(serde::Serialize, serde::Deserialize, Debug)] - struct EthCallRequest { - method: String, - params: Vec, - id: u32, - jsonrpc: String, - } - - #[derive(serde::Serialize, serde::Deserialize, Debug)] - struct EthCallResponse { - result: String, - id: u32, - jsonrpc: String, - } - - #[tokio::test] - async fn test_handle_verified_packet_success() -> eyre::Result<()> { - // Initialize tracing - tracing_subscriber::fmt() - .with_target(true) - .with_env_filter( - EnvFilter::builder() - .with_default_directive(LevelFilter::DEBUG.into()) - .from_env_lossy(), - ) - .init(); - - let counter: Arc = Arc::new(AtomicI32::new(0)); - let mut queue: VecDeque = VecDeque::new(); - let verified_packet = PacketVerified { - origin: Origin { - srcEid: 1, - sender: FixedBytes::from(&[1; 32]), - nonce: 101010, - }, - receiver: Address::from_slice(&[1; 20]), - payloadHash: FixedBytes::from(&[2; 32]), - }; - - let _join_handle = prepare_server(counter.clone()).await; - let contract = setup_contract(&mut queue).await?; - - NFFLExecutor::handle_verified_packet(&contract, &mut queue, &verified_packet).await?; - - assert_eq!(counter.load(Ordering::Acquire), 2); - Ok(()) - } - - async fn prepare_server(counter: Arc) -> JoinHandle<()> { - const SERVER_ADDRESS_SHORT: &str = "127.0.0.1:8081"; - - // Define the handler for the POST request. - let app = Router::new().route( - "/", - post(|| async move { - debug!("Server : POST request accepted"); - counter.fetch_add(1, Ordering::Release); - Json(EthCallResponse { - result: "0x0000000000000000000000000000000000000000000000000000000000000002".to_string(), - id: 1, - jsonrpc: "2.0".to_string(), - }) - }), - ); - // Spawn the server on a background task. - let listener = tokio::net::TcpListener::bind(SERVER_ADDRESS_SHORT).await.unwrap(); - - debug!("Listening on {}", listener.local_addr().unwrap()); - - tokio::spawn(async move { axum::serve(listener, app).await.unwrap() }) - } - - async fn setup_contract(packet_sent_queue: &mut VecDeque) -> eyre::Result { - const SERVER_ADDRESS: &str = "http://127.0.0.1:8081"; - - let http_provider = ProviderBuilder::new().on_http(SERVER_ADDRESS.parse()?); - let l0_abi = get_abi_from_path("./abi/L0V2Endpoint.json")?; - - debug!("{:?}", l0_abi.functions.iter().map(|f| f.0).collect::>()); - - packet_sent_queue.push_back(PacketSent { - encodedPayload: Bytes::from(&[1; 256]), - options: Bytes::from(&[1; 32]), - sendLibrary: Address::from_slice(&[2; 20]), - }); - - create_contract_instance( - address!("d8da6bf26964af9d7eed9e03e53415d37aa96045"), - http_provider, - l0_abi, - ) - } -}