Overview
S Balance
0 S
S Value
-More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Name:
UniswapWormholeMessageReceiver
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
/** * Copyright Uniswap Foundation 2023 * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. * * SPDX-License-Identifier: Apache-2.0 */ pragma solidity ^0.8.7; // solhint-disable-next-line no-global-import import "./Structs.sol"; interface IWormhole { function parseAndVerifyVM(bytes calldata encodedVM) external view returns (Structs.VM memory vm, bool valid, string memory reason); } /** * @title Uniswap Wormhole Message Receiver * @dev This contract receives and executes Uniswap governance proposals that were sent from the UniswapWormholeMessageSender * contract on Ethereum via Wormhole. * * It enforces that proposals are executed in order, but it does not guarantee that all proposals are executed. * i.e. The message sequence number of proposals must be strictly monotonically increasing, but need not be consecutive * The maximum number of proposals that can be received is therefore UINT64_MAX. * For example, if there are proposals 1, 2 and 3, then the following are valid executions (not exhaustive): * - 1,2,3 * - 1,3 * But the following are impossible (not exhaustive): * - 1,3,2 */ contract UniswapWormholeMessageReceiver { string public constant NAME = "Uniswap Wormhole Message Receiver"; bytes32 public constant EXPECTED_MESSAGE_PAYLOAD_VERSION = keccak256( abi.encode( "UniswapWormholeMessageSenderV1 (bytes32 receivedMessagePayloadVersion, address[] memory targets, uint256[] memory values, bytes[] memory datas, address messageReceiver, uint16 receiverChainId)" ) ); // Address of the UniswapWormholeMessageSender contract on ethereum in Wormhole format, // i.e. 12 zero bytes followed by a 20-byte Ethereum address. bytes32 public immutable messageSender; // A uint16 definining the destination chain of a VAA this contract will trust uint16 public immutable chainId; // A uint16 definining the source chain of a VAA this contract will trust uint16 public constant ETHEREUM_CHAIN_ID = 2; IWormhole private immutable wormhole; // the next message must have at least this sequence number uint64 public nextMinimumSequence = 0; /** * Message timeout in seconds: Time out needs to account for: * - Finality time on source chain * - Time for Wormhole validators to sign and make VAA available to relayers * - Time to relay VAA to the target chain * - Congestion on target chain leading to delayed inclusion of transaction in target chain * * Note that there is no way to alter this hard coded value. Including such a feature * would require some governance structure and some minumum and maximum values. */ uint256 public constant MESSAGE_TIME_OUT_SECONDS = 2 days; /** * @param wormholeAddress Address of Wormhole core messaging contract on this chain. * @param _messageSender Address of the UniswapWormholeMessageSender contract on ethereum in Wormhole format, * i.e. 12 zero bytes followed by a 20-byte Ethereum address. */ constructor(address wormholeAddress, bytes32 _messageSender, uint16 _chainId) { // sanity check constructor args require(wormholeAddress != address(0), "Invalid wormhole address"); require(_messageSender != bytes32(0) && bytes12(_messageSender) == 0, "Invalid sender contract"); require(_chainId != ETHEREUM_CHAIN_ID, "Invalid chainId Ethereum"); wormhole = IWormhole(wormholeAddress); messageSender = _messageSender; chainId = _chainId; } /** * @param whMessage Wormhole message relayed from a source chain. */ function receiveMessage(bytes calldata whMessage) external payable { (Structs.VM memory vm, bool valid, string memory reason) = wormhole.parseAndVerifyVM(whMessage); // validate require(valid, reason); // ensure the emitterAddress of this VAA is the Uniswap message sender require(messageSender == vm.emitterAddress, "Invalid Emitter Address!"); // ensure the emitterChainId is Ethereum to prevent impersonation require(vm.emitterChainId == ETHEREUM_CHAIN_ID, "Invalid Emitter Chain"); /** * Ensure that the sequence field in the VAA is strictly monotonically increasing. This also acts as * a replay protection mechanism to ensure that already executed messages don't execute again. * * WARNING: Be mindful that if the sender is ever adapted to support multiple consistency levels, the sequence number * enforcement in the receiver could result in delivery of a message with a higher sequence number first and thus * invalidate the lower sequence number message from being processable on the receiver. As long as CONSISTENCY_LEVEL * remains a constant this is a non-issue. If this changes, changes to the receiver may be required to address messages * of variable consistency. */ require(vm.sequence >= nextMinimumSequence, "Invalid Sequence number"); // increase nextMinimumSequence nextMinimumSequence = vm.sequence + 1; // check if the message is still valid as defined by the validity period // solhint-disable-next-line not-rely-on-time require(vm.timestamp + MESSAGE_TIME_OUT_SECONDS >= block.timestamp, "Message no longer valid"); // verify destination ( bytes32 receivedMessagePayloadVersion, address[] memory targets, uint256[] memory values, bytes[] memory calldatas, address messageReceiver, uint16 receiverChainId ) = abi.decode(vm.payload, (bytes32, address[], uint256[], bytes[], address, uint16)); require(EXPECTED_MESSAGE_PAYLOAD_VERSION == receivedMessagePayloadVersion, "Wrong payload version"); require(messageReceiver == address(this), "Message not for this dest"); require(receiverChainId == chainId, "Message not for this chain"); // cache target length and verify that each argument has the same length uint256 targetsLength = targets.length; require(targetsLength == calldatas.length && targetsLength == values.length, "Inconsistent argument lengths"); // verify that the caller sent enough value to make each target call require(verifyTargetValues(values), "Incorrect value"); // execute each message for (uint256 i = 0; i < targetsLength;) { (bool success,) = targets[i].call{value: values[i]}(calldatas[i]); require(success, "Sub-call failed"); unchecked { i += 1; } } } function verifyTargetValues(uint256[] memory values) internal view returns (bool) { uint256 valuesSum; uint256 valuesLength = values.length; for (uint256 i = 0; i < valuesLength;) { valuesSum += values[i]; unchecked { i += 1; } } return valuesSum == msg.value; } }
// contracts/Structs.sol // SPDX-License-Identifier: Apache 2 pragma solidity ^0.8.9; interface Structs { struct Provider { uint16 chainId; uint16 governanceChainId; bytes32 governanceContract; } struct GuardianSet { address[] keys; uint32 expirationTime; } struct Signature { bytes32 r; bytes32 s; uint8 v; uint8 guardianIndex; } struct VM { uint8 version; uint32 timestamp; uint32 nonce; uint16 emitterChainId; bytes32 emitterAddress; uint64 sequence; uint8 consistencyLevel; bytes payload; uint32 guardianSetIndex; Signature[] signatures; bytes32 hash; } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"wormholeAddress","type":"address"},{"internalType":"bytes32","name":"_messageSender","type":"bytes32"},{"internalType":"uint16","name":"_chainId","type":"uint16"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ETHEREUM_CHAIN_ID","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EXPECTED_MESSAGE_PAYLOAD_VERSION","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MESSAGE_TIME_OUT_SECONDS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NAME","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chainId","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"messageSender","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextMinimumSequence","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"whMessage","type":"bytes"}],"name":"receiveMessage","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60e060405260008060006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055503480156200003a57600080fd5b506040516200212b3803806200212b8339818101604052810190620000609190620002c9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620000d2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000c99062000386565b60405180910390fd5b6000801b8214158015620001005750600060a01b8273ffffffffffffffffffffffffffffffffffffffff1916145b62000142576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200013990620003f8565b60405180910390fd5b600261ffff168161ffff160362000190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000187906200046a565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505081608081815250508061ffff1660a08161ffff16815250505050506200048c565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200021782620001ea565b9050919050565b62000229816200020a565b81146200023557600080fd5b50565b60008151905062000249816200021e565b92915050565b6000819050919050565b62000264816200024f565b81146200027057600080fd5b50565b600081519050620002848162000259565b92915050565b600061ffff82169050919050565b620002a3816200028a565b8114620002af57600080fd5b50565b600081519050620002c38162000298565b92915050565b600080600060608486031215620002e557620002e4620001e5565b5b6000620002f58682870162000238565b9350506020620003088682870162000273565b92505060406200031b86828701620002b2565b9150509250925092565b600082825260208201905092915050565b7f496e76616c696420776f726d686f6c6520616464726573730000000000000000600082015250565b60006200036e60188362000325565b91506200037b8262000336565b602082019050919050565b60006020820190508181036000830152620003a1816200035f565b9050919050565b7f496e76616c69642073656e64657220636f6e7472616374000000000000000000600082015250565b6000620003e060178362000325565b9150620003ed82620003a8565b602082019050919050565b600060208201905081810360008301526200041381620003d1565b9050919050565b7f496e76616c696420636861696e496420457468657265756d0000000000000000600082015250565b60006200045260188362000325565b91506200045f826200041a565b602082019050919050565b60006020820190508181036000830152620004858162000443565b9050919050565b60805160a05160c051611c61620004ca6000396000610280015260008181610210015261062301526000818161025001526103700152611c616000f3fe60806040526004361061007b5760003560e01c8063a3f4df7e1161004e578063a3f4df7e1461012c578063d67bdd2514610157578063e9fa316214610182578063f953cec7146101ad5761007b565b80630e2ebcb8146100805780631dac56d3146100ab5780637b305b32146100d65780639a8a059214610101575b600080fd5b34801561008c57600080fd5b506100956101c9565b6040516100a291906108b7565b60405180910390f35b3480156100b757600080fd5b506100c06101f1565b6040516100cd91906108ef565b60405180910390f35b3480156100e257600080fd5b506100eb6101f6565b6040516100f8919061092d565b60405180910390f35b34801561010d57600080fd5b5061011661020e565b60405161012391906108ef565b60405180910390f35b34801561013857600080fd5b50610141610232565b60405161014e91906109d8565b60405180910390f35b34801561016357600080fd5b5061016c61024e565b60405161017991906108b7565b60405180910390f35b34801561018e57600080fd5b50610197610272565b6040516101a49190610a13565b60405180910390f35b6101c760048036038101906101c29190610aa7565b610279565b005b6040516020016101d890610bfe565b6040516020818303038152906040528051906020012081565b600281565b60008054906101000a900467ffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b604051806060016040528060218152602001611c0b6021913981565b7f000000000000000000000000000000000000000000000000000000000000000081565b6202a30081565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c0fd8bde86866040518363ffffffff1660e01b81526004016102d9929190610c6b565b600060405180830381865afa1580156102f6573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061031f919061120b565b925092509250818190610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161035f91906109d8565b60405180910390fd5b5082608001517f0000000000000000000000000000000000000000000000000000000000000000146103cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103c6906112e2565b60405180910390fd5b600261ffff16836060015161ffff161461041e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104159061134e565b60405180910390fd5b60008054906101000a900467ffffffffffffffff1667ffffffffffffffff168360a0015167ffffffffffffffff16101561048d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610484906113ba565b60405180910390fd5b60018360a0015161049e9190611409565b6000806101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550426202a300846020015163ffffffff166104df9190611445565b1015610520576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610517906114c5565b60405180910390fd5b6000806000806000808860e001518060200190518101906105419190611814565b9550955095509550955095508560405160200161055d90610bfe565b60405160208183030381529060405280519060200120146105b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105aa90611941565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610621576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610618906119ad565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061ffff168161ffff161461068b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068290611a19565b60405180910390fd5b6000855190508351811480156106a15750845181145b6106e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d790611a85565b60405180910390fd5b6106e98561084a565b610728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071f90611af1565b60405180910390fd5b60005b8181101561083b57600087828151811061074857610747611b11565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1687838151811061077957610778611b11565b5b602002602001015187848151811061079457610793611b11565b5b60200260200101516040516107a99190611b87565b60006040518083038185875af1925050503d80600081146107e6576040519150601f19603f3d011682016040523d82523d6000602084013e6107eb565b606091505b505090508061082f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082690611bea565b60405180910390fd5b6001820191505061072b565b50505050505050505050505050565b60008060008351905060005b818110156108915784818151811061087157610870611b11565b5b6020026020010151836108849190611445565b9250600181019050610856565b5034821492505050919050565b6000819050919050565b6108b18161089e565b82525050565b60006020820190506108cc60008301846108a8565b92915050565b600061ffff82169050919050565b6108e9816108d2565b82525050565b600060208201905061090460008301846108e0565b92915050565b600067ffffffffffffffff82169050919050565b6109278161090a565b82525050565b6000602082019050610942600083018461091e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610982578082015181840152602081019050610967565b60008484015250505050565b6000601f19601f8301169050919050565b60006109aa82610948565b6109b48185610953565b93506109c4818560208601610964565b6109cd8161098e565b840191505092915050565b600060208201905081810360008301526109f2818461099f565b905092915050565b6000819050919050565b610a0d816109fa565b82525050565b6000602082019050610a286000830184610a04565b92915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f840112610a6757610a66610a42565b5b8235905067ffffffffffffffff811115610a8457610a83610a47565b5b602083019150836001820283011115610aa057610a9f610a4c565b5b9250929050565b60008060208385031215610abe57610abd610a38565b5b600083013567ffffffffffffffff811115610adc57610adb610a3d565b5b610ae885828601610a51565b92509250509250929050565b7f556e6973776170576f726d686f6c654d65737361676553656e6465725631202860008201527f627974657333322072656365697665644d6573736167655061796c6f6164566560208201527f7273696f6e2c20616464726573735b5d206d656d6f727920746172676574732c60408201527f2075696e743235365b5d206d656d6f72792076616c7565732c2062797465735b60608201527f5d206d656d6f72792064617461732c2061646472657373206d6573736167655260808201527f656365697665722c2075696e743136207265636569766572436861696e49642960a082015250565b6000610be860c083610953565b9150610bf382610af4565b60c082019050919050565b60006020820190508181036000830152610c1781610bdb565b9050919050565b600082825260208201905092915050565b82818337600083830152505050565b6000610c4a8385610c1e565b9350610c57838584610c2f565b610c608361098e565b840190509392505050565b60006020820190508181036000830152610c86818486610c3e565b90509392505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610ccc8261098e565b810181811067ffffffffffffffff82111715610ceb57610cea610c94565b5b80604052505050565b6000610cfe610a2e565b9050610d0a8282610cc3565b919050565b600080fd5b600060ff82169050919050565b610d2a81610d14565b8114610d3557600080fd5b50565b600081519050610d4781610d21565b92915050565b600063ffffffff82169050919050565b610d6681610d4d565b8114610d7157600080fd5b50565b600081519050610d8381610d5d565b92915050565b610d92816108d2565b8114610d9d57600080fd5b50565b600081519050610daf81610d89565b92915050565b610dbe8161089e565b8114610dc957600080fd5b50565b600081519050610ddb81610db5565b92915050565b610dea8161090a565b8114610df557600080fd5b50565b600081519050610e0781610de1565b92915050565b600080fd5b600067ffffffffffffffff821115610e2d57610e2c610c94565b5b610e368261098e565b9050602081019050919050565b6000610e56610e5184610e12565b610cf4565b905082815260208101848484011115610e7257610e71610e0d565b5b610e7d848285610964565b509392505050565b600082601f830112610e9a57610e99610a42565b5b8151610eaa848260208601610e43565b91505092915050565b600067ffffffffffffffff821115610ece57610ecd610c94565b5b602082029050602081019050919050565b600060808284031215610ef557610ef4610c8f565b5b610eff6080610cf4565b90506000610f0f84828501610dcc565b6000830152506020610f2384828501610dcc565b6020830152506040610f3784828501610d38565b6040830152506060610f4b84828501610d38565b60608301525092915050565b6000610f6a610f6584610eb3565b610cf4565b90508083825260208201905060808402830185811115610f8d57610f8c610a4c565b5b835b81811015610fb65780610fa28882610edf565b845260208401935050608081019050610f8f565b5050509392505050565b600082601f830112610fd557610fd4610a42565b5b8151610fe5848260208601610f57565b91505092915050565b6000610160828403121561100557611004610c8f565b5b611010610160610cf4565b9050600061102084828501610d38565b600083015250602061103484828501610d74565b602083015250604061104884828501610d74565b604083015250606061105c84828501610da0565b606083015250608061107084828501610dcc565b60808301525060a061108484828501610df8565b60a08301525060c061109884828501610d38565b60c08301525060e082015167ffffffffffffffff8111156110bc576110bb610d0f565b5b6110c884828501610e85565b60e0830152506101006110dd84828501610d74565b6101008301525061012082015167ffffffffffffffff81111561110357611102610d0f565b5b61110f84828501610fc0565b6101208301525061014061112584828501610dcc565b6101408301525092915050565b60008115159050919050565b61114781611132565b811461115257600080fd5b50565b6000815190506111648161113e565b92915050565b600067ffffffffffffffff82111561118557611184610c94565b5b61118e8261098e565b9050602081019050919050565b60006111ae6111a98461116a565b610cf4565b9050828152602081018484840111156111ca576111c9610e0d565b5b6111d5848285610964565b509392505050565b600082601f8301126111f2576111f1610a42565b5b815161120284826020860161119b565b91505092915050565b60008060006060848603121561122457611223610a38565b5b600084015167ffffffffffffffff81111561124257611241610a3d565b5b61124e86828701610fee565b935050602061125f86828701611155565b925050604084015167ffffffffffffffff8111156112805761127f610a3d565b5b61128c868287016111dd565b9150509250925092565b7f496e76616c696420456d69747465722041646472657373210000000000000000600082015250565b60006112cc601883610953565b91506112d782611296565b602082019050919050565b600060208201905081810360008301526112fb816112bf565b9050919050565b7f496e76616c696420456d697474657220436861696e0000000000000000000000600082015250565b6000611338601583610953565b915061134382611302565b602082019050919050565b600060208201905081810360008301526113678161132b565b9050919050565b7f496e76616c69642053657175656e6365206e756d626572000000000000000000600082015250565b60006113a4601783610953565b91506113af8261136e565b602082019050919050565b600060208201905081810360008301526113d381611397565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006114148261090a565b915061141f8361090a565b9250828201905067ffffffffffffffff81111561143f5761143e6113da565b5b92915050565b6000611450826109fa565b915061145b836109fa565b9250828201905080821115611473576114726113da565b5b92915050565b7f4d657373616765206e6f206c6f6e6765722076616c6964000000000000000000600082015250565b60006114af601783610953565b91506114ba82611479565b602082019050919050565b600060208201905081810360008301526114de816114a2565b9050919050565b600067ffffffffffffffff821115611500576114ff610c94565b5b602082029050602081019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061153c82611511565b9050919050565b61154c81611531565b811461155757600080fd5b50565b60008151905061156981611543565b92915050565b600061158261157d846114e5565b610cf4565b905080838252602082019050602084028301858111156115a5576115a4610a4c565b5b835b818110156115ce57806115ba888261155a565b8452602084019350506020810190506115a7565b5050509392505050565b600082601f8301126115ed576115ec610a42565b5b81516115fd84826020860161156f565b91505092915050565b600067ffffffffffffffff82111561162157611620610c94565b5b602082029050602081019050919050565b61163b816109fa565b811461164657600080fd5b50565b60008151905061165881611632565b92915050565b600061167161166c84611606565b610cf4565b9050808382526020820190506020840283018581111561169457611693610a4c565b5b835b818110156116bd57806116a98882611649565b845260208401935050602081019050611696565b5050509392505050565b600082601f8301126116dc576116db610a42565b5b81516116ec84826020860161165e565b91505092915050565b600067ffffffffffffffff8211156117105761170f610c94565b5b602082029050602081019050919050565b600061173461172f846116f5565b610cf4565b9050808382526020820190506020840283018581111561175757611756610a4c565b5b835b8181101561179e57805167ffffffffffffffff81111561177c5761177b610a42565b5b8086016117898982610e85565b85526020850194505050602081019050611759565b5050509392505050565b600082601f8301126117bd576117bc610a42565b5b81516117cd848260208601611721565b91505092915050565b60006117e182611511565b9050919050565b6117f1816117d6565b81146117fc57600080fd5b50565b60008151905061180e816117e8565b92915050565b60008060008060008060c0878903121561183157611830610a38565b5b600061183f89828a01610dcc565b965050602087015167ffffffffffffffff8111156118605761185f610a3d565b5b61186c89828a016115d8565b955050604087015167ffffffffffffffff81111561188d5761188c610a3d565b5b61189989828a016116c7565b945050606087015167ffffffffffffffff8111156118ba576118b9610a3d565b5b6118c689828a016117a8565b93505060806118d789828a016117ff565b92505060a06118e889828a01610da0565b9150509295509295509295565b7f57726f6e67207061796c6f61642076657273696f6e0000000000000000000000600082015250565b600061192b601583610953565b9150611936826118f5565b602082019050919050565b6000602082019050818103600083015261195a8161191e565b9050919050565b7f4d657373616765206e6f7420666f722074686973206465737400000000000000600082015250565b6000611997601983610953565b91506119a282611961565b602082019050919050565b600060208201905081810360008301526119c68161198a565b9050919050565b7f4d657373616765206e6f7420666f72207468697320636861696e000000000000600082015250565b6000611a03601a83610953565b9150611a0e826119cd565b602082019050919050565b60006020820190508181036000830152611a32816119f6565b9050919050565b7f496e636f6e73697374656e7420617267756d656e74206c656e67746873000000600082015250565b6000611a6f601d83610953565b9150611a7a82611a39565b602082019050919050565b60006020820190508181036000830152611a9e81611a62565b9050919050565b7f496e636f72726563742076616c75650000000000000000000000000000000000600082015250565b6000611adb600f83610953565b9150611ae682611aa5565b602082019050919050565b60006020820190508181036000830152611b0a81611ace565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600081905092915050565b6000611b6182611b40565b611b6b8185611b4b565b9350611b7b818560208601610964565b80840191505092915050565b6000611b938284611b56565b915081905092915050565b7f5375622d63616c6c206661696c65640000000000000000000000000000000000600082015250565b6000611bd4600f83610953565b9150611bdf82611b9e565b602082019050919050565b60006020820190508181036000830152611c0381611bc7565b905091905056fe556e697377617020576f726d686f6c65204d657373616765205265636569766572a2646970667358221220f1da821b920c94f017bdfa3693384ad759bfdb368e749a9b70b2a6864d1d074c64736f6c63430008130033000000000000000000000000352a86168e6988a1adf9a15cb00017aad3b67155000000000000000000000000f5f4496219f31cdcba6130b5402873624585615a00000000000000000000000000000000000000000000000000000000000000be
Deployed Bytecode
0x60806040526004361061007b5760003560e01c8063a3f4df7e1161004e578063a3f4df7e1461012c578063d67bdd2514610157578063e9fa316214610182578063f953cec7146101ad5761007b565b80630e2ebcb8146100805780631dac56d3146100ab5780637b305b32146100d65780639a8a059214610101575b600080fd5b34801561008c57600080fd5b506100956101c9565b6040516100a291906108b7565b60405180910390f35b3480156100b757600080fd5b506100c06101f1565b6040516100cd91906108ef565b60405180910390f35b3480156100e257600080fd5b506100eb6101f6565b6040516100f8919061092d565b60405180910390f35b34801561010d57600080fd5b5061011661020e565b60405161012391906108ef565b60405180910390f35b34801561013857600080fd5b50610141610232565b60405161014e91906109d8565b60405180910390f35b34801561016357600080fd5b5061016c61024e565b60405161017991906108b7565b60405180910390f35b34801561018e57600080fd5b50610197610272565b6040516101a49190610a13565b60405180910390f35b6101c760048036038101906101c29190610aa7565b610279565b005b6040516020016101d890610bfe565b6040516020818303038152906040528051906020012081565b600281565b60008054906101000a900467ffffffffffffffff1681565b7f00000000000000000000000000000000000000000000000000000000000000be81565b604051806060016040528060218152602001611c0b6021913981565b7f000000000000000000000000f5f4496219f31cdcba6130b5402873624585615a81565b6202a30081565b60008060007f000000000000000000000000352a86168e6988a1adf9a15cb00017aad3b6715573ffffffffffffffffffffffffffffffffffffffff1663c0fd8bde86866040518363ffffffff1660e01b81526004016102d9929190610c6b565b600060405180830381865afa1580156102f6573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061031f919061120b565b925092509250818190610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161035f91906109d8565b60405180910390fd5b5082608001517f000000000000000000000000f5f4496219f31cdcba6130b5402873624585615a146103cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103c6906112e2565b60405180910390fd5b600261ffff16836060015161ffff161461041e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104159061134e565b60405180910390fd5b60008054906101000a900467ffffffffffffffff1667ffffffffffffffff168360a0015167ffffffffffffffff16101561048d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610484906113ba565b60405180910390fd5b60018360a0015161049e9190611409565b6000806101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550426202a300846020015163ffffffff166104df9190611445565b1015610520576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610517906114c5565b60405180910390fd5b6000806000806000808860e001518060200190518101906105419190611814565b9550955095509550955095508560405160200161055d90610bfe565b60405160208183030381529060405280519060200120146105b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105aa90611941565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610621576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610618906119ad565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000be61ffff168161ffff161461068b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068290611a19565b60405180910390fd5b6000855190508351811480156106a15750845181145b6106e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d790611a85565b60405180910390fd5b6106e98561084a565b610728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071f90611af1565b60405180910390fd5b60005b8181101561083b57600087828151811061074857610747611b11565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1687838151811061077957610778611b11565b5b602002602001015187848151811061079457610793611b11565b5b60200260200101516040516107a99190611b87565b60006040518083038185875af1925050503d80600081146107e6576040519150601f19603f3d011682016040523d82523d6000602084013e6107eb565b606091505b505090508061082f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082690611bea565b60405180910390fd5b6001820191505061072b565b50505050505050505050505050565b60008060008351905060005b818110156108915784818151811061087157610870611b11565b5b6020026020010151836108849190611445565b9250600181019050610856565b5034821492505050919050565b6000819050919050565b6108b18161089e565b82525050565b60006020820190506108cc60008301846108a8565b92915050565b600061ffff82169050919050565b6108e9816108d2565b82525050565b600060208201905061090460008301846108e0565b92915050565b600067ffffffffffffffff82169050919050565b6109278161090a565b82525050565b6000602082019050610942600083018461091e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610982578082015181840152602081019050610967565b60008484015250505050565b6000601f19601f8301169050919050565b60006109aa82610948565b6109b48185610953565b93506109c4818560208601610964565b6109cd8161098e565b840191505092915050565b600060208201905081810360008301526109f2818461099f565b905092915050565b6000819050919050565b610a0d816109fa565b82525050565b6000602082019050610a286000830184610a04565b92915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f840112610a6757610a66610a42565b5b8235905067ffffffffffffffff811115610a8457610a83610a47565b5b602083019150836001820283011115610aa057610a9f610a4c565b5b9250929050565b60008060208385031215610abe57610abd610a38565b5b600083013567ffffffffffffffff811115610adc57610adb610a3d565b5b610ae885828601610a51565b92509250509250929050565b7f556e6973776170576f726d686f6c654d65737361676553656e6465725631202860008201527f627974657333322072656365697665644d6573736167655061796c6f6164566560208201527f7273696f6e2c20616464726573735b5d206d656d6f727920746172676574732c60408201527f2075696e743235365b5d206d656d6f72792076616c7565732c2062797465735b60608201527f5d206d656d6f72792064617461732c2061646472657373206d6573736167655260808201527f656365697665722c2075696e743136207265636569766572436861696e49642960a082015250565b6000610be860c083610953565b9150610bf382610af4565b60c082019050919050565b60006020820190508181036000830152610c1781610bdb565b9050919050565b600082825260208201905092915050565b82818337600083830152505050565b6000610c4a8385610c1e565b9350610c57838584610c2f565b610c608361098e565b840190509392505050565b60006020820190508181036000830152610c86818486610c3e565b90509392505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610ccc8261098e565b810181811067ffffffffffffffff82111715610ceb57610cea610c94565b5b80604052505050565b6000610cfe610a2e565b9050610d0a8282610cc3565b919050565b600080fd5b600060ff82169050919050565b610d2a81610d14565b8114610d3557600080fd5b50565b600081519050610d4781610d21565b92915050565b600063ffffffff82169050919050565b610d6681610d4d565b8114610d7157600080fd5b50565b600081519050610d8381610d5d565b92915050565b610d92816108d2565b8114610d9d57600080fd5b50565b600081519050610daf81610d89565b92915050565b610dbe8161089e565b8114610dc957600080fd5b50565b600081519050610ddb81610db5565b92915050565b610dea8161090a565b8114610df557600080fd5b50565b600081519050610e0781610de1565b92915050565b600080fd5b600067ffffffffffffffff821115610e2d57610e2c610c94565b5b610e368261098e565b9050602081019050919050565b6000610e56610e5184610e12565b610cf4565b905082815260208101848484011115610e7257610e71610e0d565b5b610e7d848285610964565b509392505050565b600082601f830112610e9a57610e99610a42565b5b8151610eaa848260208601610e43565b91505092915050565b600067ffffffffffffffff821115610ece57610ecd610c94565b5b602082029050602081019050919050565b600060808284031215610ef557610ef4610c8f565b5b610eff6080610cf4565b90506000610f0f84828501610dcc565b6000830152506020610f2384828501610dcc565b6020830152506040610f3784828501610d38565b6040830152506060610f4b84828501610d38565b60608301525092915050565b6000610f6a610f6584610eb3565b610cf4565b90508083825260208201905060808402830185811115610f8d57610f8c610a4c565b5b835b81811015610fb65780610fa28882610edf565b845260208401935050608081019050610f8f565b5050509392505050565b600082601f830112610fd557610fd4610a42565b5b8151610fe5848260208601610f57565b91505092915050565b6000610160828403121561100557611004610c8f565b5b611010610160610cf4565b9050600061102084828501610d38565b600083015250602061103484828501610d74565b602083015250604061104884828501610d74565b604083015250606061105c84828501610da0565b606083015250608061107084828501610dcc565b60808301525060a061108484828501610df8565b60a08301525060c061109884828501610d38565b60c08301525060e082015167ffffffffffffffff8111156110bc576110bb610d0f565b5b6110c884828501610e85565b60e0830152506101006110dd84828501610d74565b6101008301525061012082015167ffffffffffffffff81111561110357611102610d0f565b5b61110f84828501610fc0565b6101208301525061014061112584828501610dcc565b6101408301525092915050565b60008115159050919050565b61114781611132565b811461115257600080fd5b50565b6000815190506111648161113e565b92915050565b600067ffffffffffffffff82111561118557611184610c94565b5b61118e8261098e565b9050602081019050919050565b60006111ae6111a98461116a565b610cf4565b9050828152602081018484840111156111ca576111c9610e0d565b5b6111d5848285610964565b509392505050565b600082601f8301126111f2576111f1610a42565b5b815161120284826020860161119b565b91505092915050565b60008060006060848603121561122457611223610a38565b5b600084015167ffffffffffffffff81111561124257611241610a3d565b5b61124e86828701610fee565b935050602061125f86828701611155565b925050604084015167ffffffffffffffff8111156112805761127f610a3d565b5b61128c868287016111dd565b9150509250925092565b7f496e76616c696420456d69747465722041646472657373210000000000000000600082015250565b60006112cc601883610953565b91506112d782611296565b602082019050919050565b600060208201905081810360008301526112fb816112bf565b9050919050565b7f496e76616c696420456d697474657220436861696e0000000000000000000000600082015250565b6000611338601583610953565b915061134382611302565b602082019050919050565b600060208201905081810360008301526113678161132b565b9050919050565b7f496e76616c69642053657175656e6365206e756d626572000000000000000000600082015250565b60006113a4601783610953565b91506113af8261136e565b602082019050919050565b600060208201905081810360008301526113d381611397565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006114148261090a565b915061141f8361090a565b9250828201905067ffffffffffffffff81111561143f5761143e6113da565b5b92915050565b6000611450826109fa565b915061145b836109fa565b9250828201905080821115611473576114726113da565b5b92915050565b7f4d657373616765206e6f206c6f6e6765722076616c6964000000000000000000600082015250565b60006114af601783610953565b91506114ba82611479565b602082019050919050565b600060208201905081810360008301526114de816114a2565b9050919050565b600067ffffffffffffffff821115611500576114ff610c94565b5b602082029050602081019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061153c82611511565b9050919050565b61154c81611531565b811461155757600080fd5b50565b60008151905061156981611543565b92915050565b600061158261157d846114e5565b610cf4565b905080838252602082019050602084028301858111156115a5576115a4610a4c565b5b835b818110156115ce57806115ba888261155a565b8452602084019350506020810190506115a7565b5050509392505050565b600082601f8301126115ed576115ec610a42565b5b81516115fd84826020860161156f565b91505092915050565b600067ffffffffffffffff82111561162157611620610c94565b5b602082029050602081019050919050565b61163b816109fa565b811461164657600080fd5b50565b60008151905061165881611632565b92915050565b600061167161166c84611606565b610cf4565b9050808382526020820190506020840283018581111561169457611693610a4c565b5b835b818110156116bd57806116a98882611649565b845260208401935050602081019050611696565b5050509392505050565b600082601f8301126116dc576116db610a42565b5b81516116ec84826020860161165e565b91505092915050565b600067ffffffffffffffff8211156117105761170f610c94565b5b602082029050602081019050919050565b600061173461172f846116f5565b610cf4565b9050808382526020820190506020840283018581111561175757611756610a4c565b5b835b8181101561179e57805167ffffffffffffffff81111561177c5761177b610a42565b5b8086016117898982610e85565b85526020850194505050602081019050611759565b5050509392505050565b600082601f8301126117bd576117bc610a42565b5b81516117cd848260208601611721565b91505092915050565b60006117e182611511565b9050919050565b6117f1816117d6565b81146117fc57600080fd5b50565b60008151905061180e816117e8565b92915050565b60008060008060008060c0878903121561183157611830610a38565b5b600061183f89828a01610dcc565b965050602087015167ffffffffffffffff8111156118605761185f610a3d565b5b61186c89828a016115d8565b955050604087015167ffffffffffffffff81111561188d5761188c610a3d565b5b61189989828a016116c7565b945050606087015167ffffffffffffffff8111156118ba576118b9610a3d565b5b6118c689828a016117a8565b93505060806118d789828a016117ff565b92505060a06118e889828a01610da0565b9150509295509295509295565b7f57726f6e67207061796c6f61642076657273696f6e0000000000000000000000600082015250565b600061192b601583610953565b9150611936826118f5565b602082019050919050565b6000602082019050818103600083015261195a8161191e565b9050919050565b7f4d657373616765206e6f7420666f722074686973206465737400000000000000600082015250565b6000611997601983610953565b91506119a282611961565b602082019050919050565b600060208201905081810360008301526119c68161198a565b9050919050565b7f4d657373616765206e6f7420666f72207468697320636861696e000000000000600082015250565b6000611a03601a83610953565b9150611a0e826119cd565b602082019050919050565b60006020820190508181036000830152611a32816119f6565b9050919050565b7f496e636f6e73697374656e7420617267756d656e74206c656e67746873000000600082015250565b6000611a6f601d83610953565b9150611a7a82611a39565b602082019050919050565b60006020820190508181036000830152611a9e81611a62565b9050919050565b7f496e636f72726563742076616c75650000000000000000000000000000000000600082015250565b6000611adb600f83610953565b9150611ae682611aa5565b602082019050919050565b60006020820190508181036000830152611b0a81611ace565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600081905092915050565b6000611b6182611b40565b611b6b8185611b4b565b9350611b7b818560208601610964565b80840191505092915050565b6000611b938284611b56565b915081905092915050565b7f5375622d63616c6c206661696c65640000000000000000000000000000000000600082015250565b6000611bd4600f83610953565b9150611bdf82611b9e565b602082019050919050565b60006020820190508181036000830152611c0381611bc7565b905091905056fe556e697377617020576f726d686f6c65204d657373616765205265636569766572a2646970667358221220f1da821b920c94f017bdfa3693384ad759bfdb368e749a9b70b2a6864d1d074c64736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000352a86168e6988a1adf9a15cb00017aad3b67155000000000000000000000000f5f4496219f31cdcba6130b5402873624585615a00000000000000000000000000000000000000000000000000000000000000be
-----Decoded View---------------
Arg [0] : wormholeAddress (address): 0x352A86168e6988A1aDF9A15Cb00017AAd3B67155
Arg [1] : _messageSender (bytes32): 0x000000000000000000000000f5f4496219f31cdcba6130b5402873624585615a
Arg [2] : _chainId (uint16): 190
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000352a86168e6988a1adf9a15cb00017aad3b67155
Arg [1] : 000000000000000000000000f5f4496219f31cdcba6130b5402873624585615a
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000be
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.