Overview
XDC Balance
XDC Value
$0.00Loading...
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
Contract ABI
API[{"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
60e060405260008060006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055503480156200003a57600080fd5b506040516200212b3803806200212b8339818101604052810190620000609190620002c9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620000d2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000c99062000386565b60405180910390fd5b6000801b8214158015620001005750600060a01b8273ffffffffffffffffffffffffffffffffffffffff1916145b62000142576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200013990620003f8565b60405180910390fd5b600261ffff168161ffff160362000190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000187906200046a565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505081608081815250508061ffff1660a08161ffff16815250505050506200048c565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200021782620001ea565b9050919050565b62000229816200020a565b81146200023557600080fd5b50565b60008151905062000249816200021e565b92915050565b6000819050919050565b62000264816200024f565b81146200027057600080fd5b50565b600081519050620002848162000259565b92915050565b600061ffff82169050919050565b620002a3816200028a565b8114620002af57600080fd5b50565b600081519050620002c38162000298565b92915050565b600080600060608486031215620002e557620002e4620001e5565b5b6000620002f58682870162000238565b9350506020620003088682870162000273565b92505060406200031b86828701620002b2565b9150509250925092565b600082825260208201905092915050565b7f496e76616c696420776f726d686f6c6520616464726573730000000000000000600082015250565b60006200036e60188362000325565b91506200037b8262000336565b602082019050919050565b60006020820190508181036000830152620003a1816200035f565b9050919050565b7f496e76616c69642073656e64657220636f6e7472616374000000000000000000600082015250565b6000620003e060178362000325565b9150620003ed82620003a8565b602082019050919050565b600060208201905081810360008301526200041381620003d1565b9050919050565b7f496e76616c696420636861696e496420457468657265756d0000000000000000600082015250565b60006200045260188362000325565b91506200045f826200041a565b602082019050919050565b60006020820190508181036000830152620004858162000443565b9050919050565b60805160a05160c051611c61620004ca6000396000610280015260008181610210015261062301526000818161025001526103700152611c616000f3fe60806040526004361061007b5760003560e01c8063a3f4df7e1161004e578063a3f4df7e1461012c578063d67bdd2514610157578063e9fa316214610182578063f953cec7146101ad5761007b565b80630e2ebcb8146100805780631dac56d3146100ab5780637b305b32146100d65780639a8a059214610101575b600080fd5b34801561008c57600080fd5b506100956101c9565b6040516100a291906108b7565b60405180910390f35b3480156100b757600080fd5b506100c06101f1565b6040516100cd91906108ef565b60405180910390f35b3480156100e257600080fd5b506100eb6101f6565b6040516100f8919061092d565b60405180910390f35b34801561010d57600080fd5b5061011661020e565b60405161012391906108ef565b60405180910390f35b34801561013857600080fd5b50610141610232565b60405161014e91906109d8565b60405180910390f35b34801561016357600080fd5b5061016c61024e565b60405161017991906108b7565b60405180910390f35b34801561018e57600080fd5b50610197610272565b6040516101a49190610a13565b60405180910390f35b6101c760048036038101906101c29190610aa7565b610279565b005b6040516020016101d890610bfe565b6040516020818303038152906040528051906020012081565b600281565b60008054906101000a900467ffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b604051806060016040528060218152602001611c0b6021913981565b7f000000000000000000000000000000000000000000000000000000000000000081565b6202a30081565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c0fd8bde86866040518363ffffffff1660e01b81526004016102d9929190610c6b565b600060405180830381865afa1580156102f6573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061031f919061120b565b925092509250818190610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161035f91906109d8565b60405180910390fd5b5082608001517f0000000000000000000000000000000000000000000000000000000000000000146103cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103c6906112e2565b60405180910390fd5b600261ffff16836060015161ffff161461041e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104159061134e565b60405180910390fd5b60008054906101000a900467ffffffffffffffff1667ffffffffffffffff168360a0015167ffffffffffffffff16101561048d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610484906113ba565b60405180910390fd5b60018360a0015161049e9190611409565b6000806101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550426202a300846020015163ffffffff166104df9190611445565b1015610520576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610517906114c5565b60405180910390fd5b6000806000806000808860e001518060200190518101906105419190611814565b9550955095509550955095508560405160200161055d90610bfe565b60405160208183030381529060405280519060200120146105b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105aa90611941565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610621576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610618906119ad565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061ffff168161ffff161461068b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068290611a19565b60405180910390fd5b6000855190508351811480156106a15750845181145b6106e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d790611a85565b60405180910390fd5b6106e98561084a565b610728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071f90611af1565b60405180910390fd5b60005b8181101561083b57600087828151811061074857610747611b11565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1687838151811061077957610778611b11565b5b602002602001015187848151811061079457610793611b11565b5b60200260200101516040516107a99190611b87565b60006040518083038185875af1925050503d80600081146107e6576040519150601f19603f3d011682016040523d82523d6000602084013e6107eb565b606091505b505090508061082f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082690611bea565b60405180910390fd5b6001820191505061072b565b50505050505050505050505050565b60008060008351905060005b818110156108915784818151811061087157610870611b11565b5b6020026020010151836108849190611445565b9250600181019050610856565b5034821492505050919050565b6000819050919050565b6108b18161089e565b82525050565b60006020820190506108cc60008301846108a8565b92915050565b600061ffff82169050919050565b6108e9816108d2565b82525050565b600060208201905061090460008301846108e0565b92915050565b600067ffffffffffffffff82169050919050565b6109278161090a565b82525050565b6000602082019050610942600083018461091e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610982578082015181840152602081019050610967565b60008484015250505050565b6000601f19601f8301169050919050565b60006109aa82610948565b6109b48185610953565b93506109c4818560208601610964565b6109cd8161098e565b840191505092915050565b600060208201905081810360008301526109f2818461099f565b905092915050565b6000819050919050565b610a0d816109fa565b82525050565b6000602082019050610a286000830184610a04565b92915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f840112610a6757610a66610a42565b5b8235905067ffffffffffffffff811115610a8457610a83610a47565b5b602083019150836001820283011115610aa057610a9f610a4c565b5b9250929050565b60008060208385031215610abe57610abd610a38565b5b600083013567ffffffffffffffff811115610adc57610adb610a3d565b5b610ae885828601610a51565b92509250509250929050565b7f556e6973776170576f726d686f6c654d65737361676553656e6465725631202860008201527f627974657333322072656365697665644d6573736167655061796c6f6164566560208201527f7273696f6e2c20616464726573735b5d206d656d6f727920746172676574732c60408201527f2075696e743235365b5d206d656d6f72792076616c7565732c2062797465735b60608201527f5d206d656d6f72792064617461732c2061646472657373206d6573736167655260808201527f656365697665722c2075696e743136207265636569766572436861696e49642960a082015250565b6000610be860c083610953565b9150610bf382610af4565b60c082019050919050565b60006020820190508181036000830152610c1781610bdb565b9050919050565b600082825260208201905092915050565b82818337600083830152505050565b6000610c4a8385610c1e565b9350610c57838584610c2f565b610c608361098e565b840190509392505050565b60006020820190508181036000830152610c86818486610c3e565b90509392505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610ccc8261098e565b810181811067ffffffffffffffff82111715610ceb57610cea610c94565b5b80604052505050565b6000610cfe610a2e565b9050610d0a8282610cc3565b919050565b600080fd5b600060ff82169050919050565b610d2a81610d14565b8114610d3557600080fd5b50565b600081519050610d4781610d21565b92915050565b600063ffffffff82169050919050565b610d6681610d4d565b8114610d7157600080fd5b50565b600081519050610d8381610d5d565b92915050565b610d92816108d2565b8114610d9d57600080fd5b50565b600081519050610daf81610d89565b92915050565b610dbe8161089e565b8114610dc957600080fd5b50565b600081519050610ddb81610db5565b92915050565b610dea8161090a565b8114610df557600080fd5b50565b600081519050610e0781610de1565b92915050565b600080fd5b600067ffffffffffffffff821115610e2d57610e2c610c94565b5b610e368261098e565b9050602081019050919050565b6000610e56610e5184610e12565b610cf4565b905082815260208101848484011115610e7257610e71610e0d565b5b610e7d848285610964565b509392505050565b600082601f830112610e9a57610e99610a42565b5b8151610eaa848260208601610e43565b91505092915050565b600067ffffffffffffffff821115610ece57610ecd610c94565b5b602082029050602081019050919050565b600060808284031215610ef557610ef4610c8f565b5b610eff6080610cf4565b90506000610f0f84828501610dcc565b6000830152506020610f2384828501610dcc565b6020830152506040610f3784828501610d38565b6040830152506060610f4b84828501610d38565b60608301525092915050565b6000610f6a610f6584610eb3565b610cf4565b90508083825260208201905060808402830185811115610f8d57610f8c610a4c565b5b835b81811015610fb65780610fa28882610edf565b845260208401935050608081019050610f8f565b5050509392505050565b600082601f830112610fd557610fd4610a42565b5b8151610fe5848260208601610f57565b91505092915050565b6000610160828403121561100557611004610c8f565b5b611010610160610cf4565b9050600061102084828501610d38565b600083015250602061103484828501610d74565b602083015250604061104884828501610d74565b604083015250606061105c84828501610da0565b606083015250608061107084828501610dcc565b60808301525060a061108484828501610df8565b60a08301525060c061109884828501610d38565b60c08301525060e082015167ffffffffffffffff8111156110bc576110bb610d0f565b5b6110c884828501610e85565b60e0830152506101006110dd84828501610d74565b6101008301525061012082015167ffffffffffffffff81111561110357611102610d0f565b5b61110f84828501610fc0565b6101208301525061014061112584828501610dcc565b6101408301525092915050565b60008115159050919050565b61114781611132565b811461115257600080fd5b50565b6000815190506111648161113e565b92915050565b600067ffffffffffffffff82111561118557611184610c94565b5b61118e8261098e565b9050602081019050919050565b60006111ae6111a98461116a565b610cf4565b9050828152602081018484840111156111ca576111c9610e0d565b5b6111d5848285610964565b509392505050565b600082601f8301126111f2576111f1610a42565b5b815161120284826020860161119b565b91505092915050565b60008060006060848603121561122457611223610a38565b5b600084015167ffffffffffffffff81111561124257611241610a3d565b5b61124e86828701610fee565b935050602061125f86828701611155565b925050604084015167ffffffffffffffff8111156112805761127f610a3d565b5b61128c868287016111dd565b9150509250925092565b7f496e76616c696420456d69747465722041646472657373210000000000000000600082015250565b60006112cc601883610953565b91506112d782611296565b602082019050919050565b600060208201905081810360008301526112fb816112bf565b9050919050565b7f496e76616c696420456d697474657220436861696e0000000000000000000000600082015250565b6000611338601583610953565b915061134382611302565b602082019050919050565b600060208201905081810360008301526113678161132b565b9050919050565b7f496e76616c69642053657175656e6365206e756d626572000000000000000000600082015250565b60006113a4601783610953565b91506113af8261136e565b602082019050919050565b600060208201905081810360008301526113d381611397565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006114148261090a565b915061141f8361090a565b9250828201905067ffffffffffffffff81111561143f5761143e6113da565b5b92915050565b6000611450826109fa565b915061145b836109fa565b9250828201905080821115611473576114726113da565b5b92915050565b7f4d657373616765206e6f206c6f6e6765722076616c6964000000000000000000600082015250565b60006114af601783610953565b91506114ba82611479565b602082019050919050565b600060208201905081810360008301526114de816114a2565b9050919050565b600067ffffffffffffffff821115611500576114ff610c94565b5b602082029050602081019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061153c82611511565b9050919050565b61154c81611531565b811461155757600080fd5b50565b60008151905061156981611543565b92915050565b600061158261157d846114e5565b610cf4565b905080838252602082019050602084028301858111156115a5576115a4610a4c565b5b835b818110156115ce57806115ba888261155a565b8452602084019350506020810190506115a7565b5050509392505050565b600082601f8301126115ed576115ec610a42565b5b81516115fd84826020860161156f565b91505092915050565b600067ffffffffffffffff82111561162157611620610c94565b5b602082029050602081019050919050565b61163b816109fa565b811461164657600080fd5b50565b60008151905061165881611632565b92915050565b600061167161166c84611606565b610cf4565b9050808382526020820190506020840283018581111561169457611693610a4c565b5b835b818110156116bd57806116a98882611649565b845260208401935050602081019050611696565b5050509392505050565b600082601f8301126116dc576116db610a42565b5b81516116ec84826020860161165e565b91505092915050565b600067ffffffffffffffff8211156117105761170f610c94565b5b602082029050602081019050919050565b600061173461172f846116f5565b610cf4565b9050808382526020820190506020840283018581111561175757611756610a4c565b5b835b8181101561179e57805167ffffffffffffffff81111561177c5761177b610a42565b5b8086016117898982610e85565b85526020850194505050602081019050611759565b5050509392505050565b600082601f8301126117bd576117bc610a42565b5b81516117cd848260208601611721565b91505092915050565b60006117e182611511565b9050919050565b6117f1816117d6565b81146117fc57600080fd5b50565b60008151905061180e816117e8565b92915050565b60008060008060008060c0878903121561183157611830610a38565b5b600061183f89828a01610dcc565b965050602087015167ffffffffffffffff8111156118605761185f610a3d565b5b61186c89828a016115d8565b955050604087015167ffffffffffffffff81111561188d5761188c610a3d565b5b61189989828a016116c7565b945050606087015167ffffffffffffffff8111156118ba576118b9610a3d565b5b6118c689828a016117a8565b93505060806118d789828a016117ff565b92505060a06118e889828a01610da0565b9150509295509295509295565b7f57726f6e67207061796c6f61642076657273696f6e0000000000000000000000600082015250565b600061192b601583610953565b9150611936826118f5565b602082019050919050565b6000602082019050818103600083015261195a8161191e565b9050919050565b7f4d657373616765206e6f7420666f722074686973206465737400000000000000600082015250565b6000611997601983610953565b91506119a282611961565b602082019050919050565b600060208201905081810360008301526119c68161198a565b9050919050565b7f4d657373616765206e6f7420666f72207468697320636861696e000000000000600082015250565b6000611a03601a83610953565b9150611a0e826119cd565b602082019050919050565b60006020820190508181036000830152611a32816119f6565b9050919050565b7f496e636f6e73697374656e7420617267756d656e74206c656e67746873000000600082015250565b6000611a6f601d83610953565b9150611a7a82611a39565b602082019050919050565b60006020820190508181036000830152611a9e81611a62565b9050919050565b7f496e636f72726563742076616c75650000000000000000000000000000000000600082015250565b6000611adb600f83610953565b9150611ae682611aa5565b602082019050919050565b60006020820190508181036000830152611b0a81611ace565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600081905092915050565b6000611b6182611b40565b611b6b8185611b4b565b9350611b7b818560208601610964565b80840191505092915050565b6000611b938284611b56565b915081905092915050565b7f5375622d63616c6c206661696c65640000000000000000000000000000000000600082015250565b6000611bd4600f83610953565b9150611bdf82611b9e565b602082019050919050565b60006020820190508181036000830152611c0381611bc7565b905091905056fe556e697377617020576f726d686f6c65204d657373616765205265636569766572a2646970667358221220f1da821b920c94f017bdfa3693384ad759bfdb368e749a9b70b2a6864d1d074c64736f6c63430008130033000000000000000000000000352a86168e6988a1adf9a15cb00017aad3b67155000000000000000000000000f5f4496219f31cdcba6130b5402873624585615a00000000000000000000000000000000000000000000000000000000000000c4
Deployed Bytecode
0x60806040526004361061007b5760003560e01c8063a3f4df7e1161004e578063a3f4df7e1461012c578063d67bdd2514610157578063e9fa316214610182578063f953cec7146101ad5761007b565b80630e2ebcb8146100805780631dac56d3146100ab5780637b305b32146100d65780639a8a059214610101575b600080fd5b34801561008c57600080fd5b506100956101c9565b6040516100a291906108b7565b60405180910390f35b3480156100b757600080fd5b506100c06101f1565b6040516100cd91906108ef565b60405180910390f35b3480156100e257600080fd5b506100eb6101f6565b6040516100f8919061092d565b60405180910390f35b34801561010d57600080fd5b5061011661020e565b60405161012391906108ef565b60405180910390f35b34801561013857600080fd5b50610141610232565b60405161014e91906109d8565b60405180910390f35b34801561016357600080fd5b5061016c61024e565b60405161017991906108b7565b60405180910390f35b34801561018e57600080fd5b50610197610272565b6040516101a49190610a13565b60405180910390f35b6101c760048036038101906101c29190610aa7565b610279565b005b6040516020016101d890610bfe565b6040516020818303038152906040528051906020012081565b600281565b60008054906101000a900467ffffffffffffffff1681565b7f00000000000000000000000000000000000000000000000000000000000000c481565b604051806060016040528060218152602001611c0b6021913981565b7f000000000000000000000000f5f4496219f31cdcba6130b5402873624585615a81565b6202a30081565b60008060007f000000000000000000000000352a86168e6988a1adf9a15cb00017aad3b6715573ffffffffffffffffffffffffffffffffffffffff1663c0fd8bde86866040518363ffffffff1660e01b81526004016102d9929190610c6b565b600060405180830381865afa1580156102f6573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061031f919061120b565b925092509250818190610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161035f91906109d8565b60405180910390fd5b5082608001517f000000000000000000000000f5f4496219f31cdcba6130b5402873624585615a146103cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103c6906112e2565b60405180910390fd5b600261ffff16836060015161ffff161461041e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104159061134e565b60405180910390fd5b60008054906101000a900467ffffffffffffffff1667ffffffffffffffff168360a0015167ffffffffffffffff16101561048d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610484906113ba565b60405180910390fd5b60018360a0015161049e9190611409565b6000806101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550426202a300846020015163ffffffff166104df9190611445565b1015610520576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610517906114c5565b60405180910390fd5b6000806000806000808860e001518060200190518101906105419190611814565b9550955095509550955095508560405160200161055d90610bfe565b60405160208183030381529060405280519060200120146105b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105aa90611941565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610621576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610618906119ad565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000c461ffff168161ffff161461068b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068290611a19565b60405180910390fd5b6000855190508351811480156106a15750845181145b6106e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d790611a85565b60405180910390fd5b6106e98561084a565b610728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071f90611af1565b60405180910390fd5b60005b8181101561083b57600087828151811061074857610747611b11565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1687838151811061077957610778611b11565b5b602002602001015187848151811061079457610793611b11565b5b60200260200101516040516107a99190611b87565b60006040518083038185875af1925050503d80600081146107e6576040519150601f19603f3d011682016040523d82523d6000602084013e6107eb565b606091505b505090508061082f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082690611bea565b60405180910390fd5b6001820191505061072b565b50505050505050505050505050565b60008060008351905060005b818110156108915784818151811061087157610870611b11565b5b6020026020010151836108849190611445565b9250600181019050610856565b5034821492505050919050565b6000819050919050565b6108b18161089e565b82525050565b60006020820190506108cc60008301846108a8565b92915050565b600061ffff82169050919050565b6108e9816108d2565b82525050565b600060208201905061090460008301846108e0565b92915050565b600067ffffffffffffffff82169050919050565b6109278161090a565b82525050565b6000602082019050610942600083018461091e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610982578082015181840152602081019050610967565b60008484015250505050565b6000601f19601f8301169050919050565b60006109aa82610948565b6109b48185610953565b93506109c4818560208601610964565b6109cd8161098e565b840191505092915050565b600060208201905081810360008301526109f2818461099f565b905092915050565b6000819050919050565b610a0d816109fa565b82525050565b6000602082019050610a286000830184610a04565b92915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f840112610a6757610a66610a42565b5b8235905067ffffffffffffffff811115610a8457610a83610a47565b5b602083019150836001820283011115610aa057610a9f610a4c565b5b9250929050565b60008060208385031215610abe57610abd610a38565b5b600083013567ffffffffffffffff811115610adc57610adb610a3d565b5b610ae885828601610a51565b92509250509250929050565b7f556e6973776170576f726d686f6c654d65737361676553656e6465725631202860008201527f627974657333322072656365697665644d6573736167655061796c6f6164566560208201527f7273696f6e2c20616464726573735b5d206d656d6f727920746172676574732c60408201527f2075696e743235365b5d206d656d6f72792076616c7565732c2062797465735b60608201527f5d206d656d6f72792064617461732c2061646472657373206d6573736167655260808201527f656365697665722c2075696e743136207265636569766572436861696e49642960a082015250565b6000610be860c083610953565b9150610bf382610af4565b60c082019050919050565b60006020820190508181036000830152610c1781610bdb565b9050919050565b600082825260208201905092915050565b82818337600083830152505050565b6000610c4a8385610c1e565b9350610c57838584610c2f565b610c608361098e565b840190509392505050565b60006020820190508181036000830152610c86818486610c3e565b90509392505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610ccc8261098e565b810181811067ffffffffffffffff82111715610ceb57610cea610c94565b5b80604052505050565b6000610cfe610a2e565b9050610d0a8282610cc3565b919050565b600080fd5b600060ff82169050919050565b610d2a81610d14565b8114610d3557600080fd5b50565b600081519050610d4781610d21565b92915050565b600063ffffffff82169050919050565b610d6681610d4d565b8114610d7157600080fd5b50565b600081519050610d8381610d5d565b92915050565b610d92816108d2565b8114610d9d57600080fd5b50565b600081519050610daf81610d89565b92915050565b610dbe8161089e565b8114610dc957600080fd5b50565b600081519050610ddb81610db5565b92915050565b610dea8161090a565b8114610df557600080fd5b50565b600081519050610e0781610de1565b92915050565b600080fd5b600067ffffffffffffffff821115610e2d57610e2c610c94565b5b610e368261098e565b9050602081019050919050565b6000610e56610e5184610e12565b610cf4565b905082815260208101848484011115610e7257610e71610e0d565b5b610e7d848285610964565b509392505050565b600082601f830112610e9a57610e99610a42565b5b8151610eaa848260208601610e43565b91505092915050565b600067ffffffffffffffff821115610ece57610ecd610c94565b5b602082029050602081019050919050565b600060808284031215610ef557610ef4610c8f565b5b610eff6080610cf4565b90506000610f0f84828501610dcc565b6000830152506020610f2384828501610dcc565b6020830152506040610f3784828501610d38565b6040830152506060610f4b84828501610d38565b60608301525092915050565b6000610f6a610f6584610eb3565b610cf4565b90508083825260208201905060808402830185811115610f8d57610f8c610a4c565b5b835b81811015610fb65780610fa28882610edf565b845260208401935050608081019050610f8f565b5050509392505050565b600082601f830112610fd557610fd4610a42565b5b8151610fe5848260208601610f57565b91505092915050565b6000610160828403121561100557611004610c8f565b5b611010610160610cf4565b9050600061102084828501610d38565b600083015250602061103484828501610d74565b602083015250604061104884828501610d74565b604083015250606061105c84828501610da0565b606083015250608061107084828501610dcc565b60808301525060a061108484828501610df8565b60a08301525060c061109884828501610d38565b60c08301525060e082015167ffffffffffffffff8111156110bc576110bb610d0f565b5b6110c884828501610e85565b60e0830152506101006110dd84828501610d74565b6101008301525061012082015167ffffffffffffffff81111561110357611102610d0f565b5b61110f84828501610fc0565b6101208301525061014061112584828501610dcc565b6101408301525092915050565b60008115159050919050565b61114781611132565b811461115257600080fd5b50565b6000815190506111648161113e565b92915050565b600067ffffffffffffffff82111561118557611184610c94565b5b61118e8261098e565b9050602081019050919050565b60006111ae6111a98461116a565b610cf4565b9050828152602081018484840111156111ca576111c9610e0d565b5b6111d5848285610964565b509392505050565b600082601f8301126111f2576111f1610a42565b5b815161120284826020860161119b565b91505092915050565b60008060006060848603121561122457611223610a38565b5b600084015167ffffffffffffffff81111561124257611241610a3d565b5b61124e86828701610fee565b935050602061125f86828701611155565b925050604084015167ffffffffffffffff8111156112805761127f610a3d565b5b61128c868287016111dd565b9150509250925092565b7f496e76616c696420456d69747465722041646472657373210000000000000000600082015250565b60006112cc601883610953565b91506112d782611296565b602082019050919050565b600060208201905081810360008301526112fb816112bf565b9050919050565b7f496e76616c696420456d697474657220436861696e0000000000000000000000600082015250565b6000611338601583610953565b915061134382611302565b602082019050919050565b600060208201905081810360008301526113678161132b565b9050919050565b7f496e76616c69642053657175656e6365206e756d626572000000000000000000600082015250565b60006113a4601783610953565b91506113af8261136e565b602082019050919050565b600060208201905081810360008301526113d381611397565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006114148261090a565b915061141f8361090a565b9250828201905067ffffffffffffffff81111561143f5761143e6113da565b5b92915050565b6000611450826109fa565b915061145b836109fa565b9250828201905080821115611473576114726113da565b5b92915050565b7f4d657373616765206e6f206c6f6e6765722076616c6964000000000000000000600082015250565b60006114af601783610953565b91506114ba82611479565b602082019050919050565b600060208201905081810360008301526114de816114a2565b9050919050565b600067ffffffffffffffff821115611500576114ff610c94565b5b602082029050602081019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061153c82611511565b9050919050565b61154c81611531565b811461155757600080fd5b50565b60008151905061156981611543565b92915050565b600061158261157d846114e5565b610cf4565b905080838252602082019050602084028301858111156115a5576115a4610a4c565b5b835b818110156115ce57806115ba888261155a565b8452602084019350506020810190506115a7565b5050509392505050565b600082601f8301126115ed576115ec610a42565b5b81516115fd84826020860161156f565b91505092915050565b600067ffffffffffffffff82111561162157611620610c94565b5b602082029050602081019050919050565b61163b816109fa565b811461164657600080fd5b50565b60008151905061165881611632565b92915050565b600061167161166c84611606565b610cf4565b9050808382526020820190506020840283018581111561169457611693610a4c565b5b835b818110156116bd57806116a98882611649565b845260208401935050602081019050611696565b5050509392505050565b600082601f8301126116dc576116db610a42565b5b81516116ec84826020860161165e565b91505092915050565b600067ffffffffffffffff8211156117105761170f610c94565b5b602082029050602081019050919050565b600061173461172f846116f5565b610cf4565b9050808382526020820190506020840283018581111561175757611756610a4c565b5b835b8181101561179e57805167ffffffffffffffff81111561177c5761177b610a42565b5b8086016117898982610e85565b85526020850194505050602081019050611759565b5050509392505050565b600082601f8301126117bd576117bc610a42565b5b81516117cd848260208601611721565b91505092915050565b60006117e182611511565b9050919050565b6117f1816117d6565b81146117fc57600080fd5b50565b60008151905061180e816117e8565b92915050565b60008060008060008060c0878903121561183157611830610a38565b5b600061183f89828a01610dcc565b965050602087015167ffffffffffffffff8111156118605761185f610a3d565b5b61186c89828a016115d8565b955050604087015167ffffffffffffffff81111561188d5761188c610a3d565b5b61189989828a016116c7565b945050606087015167ffffffffffffffff8111156118ba576118b9610a3d565b5b6118c689828a016117a8565b93505060806118d789828a016117ff565b92505060a06118e889828a01610da0565b9150509295509295509295565b7f57726f6e67207061796c6f61642076657273696f6e0000000000000000000000600082015250565b600061192b601583610953565b9150611936826118f5565b602082019050919050565b6000602082019050818103600083015261195a8161191e565b9050919050565b7f4d657373616765206e6f7420666f722074686973206465737400000000000000600082015250565b6000611997601983610953565b91506119a282611961565b602082019050919050565b600060208201905081810360008301526119c68161198a565b9050919050565b7f4d657373616765206e6f7420666f72207468697320636861696e000000000000600082015250565b6000611a03601a83610953565b9150611a0e826119cd565b602082019050919050565b60006020820190508181036000830152611a32816119f6565b9050919050565b7f496e636f6e73697374656e7420617267756d656e74206c656e67746873000000600082015250565b6000611a6f601d83610953565b9150611a7a82611a39565b602082019050919050565b60006020820190508181036000830152611a9e81611a62565b9050919050565b7f496e636f72726563742076616c75650000000000000000000000000000000000600082015250565b6000611adb600f83610953565b9150611ae682611aa5565b602082019050919050565b60006020820190508181036000830152611b0a81611ace565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600081905092915050565b6000611b6182611b40565b611b6b8185611b4b565b9350611b7b818560208601610964565b80840191505092915050565b6000611b938284611b56565b915081905092915050565b7f5375622d63616c6c206661696c65640000000000000000000000000000000000600082015250565b6000611bd4600f83610953565b9150611bdf82611b9e565b602082019050919050565b60006020820190508181036000830152611c0381611bc7565b905091905056fe556e697377617020576f726d686f6c65204d657373616765205265636569766572a2646970667358221220f1da821b920c94f017bdfa3693384ad759bfdb368e749a9b70b2a6864d1d074c64736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000352a86168e6988a1adf9a15cb00017aad3b67155000000000000000000000000f5f4496219f31cdcba6130b5402873624585615a00000000000000000000000000000000000000000000000000000000000000c4
-----Decoded View---------------
Arg [0] : wormholeAddress (address): 0x352A86168e6988A1aDF9A15Cb00017AAd3B67155
Arg [1] : _messageSender (bytes32): 0x000000000000000000000000f5f4496219f31cdcba6130b5402873624585615a
Arg [2] : _chainId (uint16): 196
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000352a86168e6988a1adf9a15cb00017aad3b67155
Arg [1] : 000000000000000000000000f5f4496219f31cdcba6130b5402873624585615a
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000c4
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.