Source Code
Overview
GLMR Balance
GLMR Value
$0.00Cross-Chain Transactions
Loading...
Loading
Contract Name:
UniswapWormholeMessageReceiver
Compiler Version
v0.8.9+commit.e5eed63a
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
60e060405260008060006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055503480156200003a57600080fd5b5060405162002169380380620021698339818101604052810190620000609190620002cb565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620000d3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000ca9062000388565b60405180910390fd5b6000801b8214158015620001015750600060a01b8273ffffffffffffffffffffffffffffffffffffffff1916145b62000143576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200013a90620003fa565b60405180910390fd5b600261ffff168161ffff16141562000192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000189906200046c565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505081608081815250508061ffff1660a08161ffff16815250505050506200048e565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200021982620001ec565b9050919050565b6200022b816200020c565b81146200023757600080fd5b50565b6000815190506200024b8162000220565b92915050565b6000819050919050565b620002668162000251565b81146200027257600080fd5b50565b60008151905062000286816200025b565b92915050565b600061ffff82169050919050565b620002a5816200028c565b8114620002b157600080fd5b50565b600081519050620002c5816200029a565b92915050565b600080600060608486031215620002e757620002e6620001e7565b5b6000620002f7868287016200023a565b93505060206200030a8682870162000275565b92505060406200031d86828701620002b4565b9150509250925092565b600082825260208201905092915050565b7f496e76616c696420776f726d686f6c6520616464726573730000000000000000600082015250565b60006200037060188362000327565b91506200037d8262000338565b602082019050919050565b60006020820190508181036000830152620003a38162000361565b9050919050565b7f496e76616c69642073656e64657220636f6e7472616374000000000000000000600082015250565b6000620003e260178362000327565b9150620003ef82620003aa565b602082019050919050565b600060208201905081810360008301526200041581620003d3565b9050919050565b7f496e76616c696420636861696e496420457468657265756d0000000000000000600082015250565b60006200045460188362000327565b915062000461826200041c565b602082019050919050565b60006020820190508181036000830152620004878162000445565b9050919050565b60805160a05160c051611c9d620004cc60003960006102800152600081816102100152610632015260008181610250015261037f0152611c9d6000f3fe60806040526004361061007b5760003560e01c8063a3f4df7e1161004e578063a3f4df7e1461012c578063d67bdd2514610157578063e9fa316214610182578063f953cec7146101ad5761007b565b80630e2ebcb8146100805780631dac56d3146100ab5780637b305b32146100d65780639a8a059214610101575b600080fd5b34801561008c57600080fd5b506100956101c9565b6040516100a291906108c6565b60405180910390f35b3480156100b757600080fd5b506100c06101f1565b6040516100cd91906108fe565b60405180910390f35b3480156100e257600080fd5b506100eb6101f6565b6040516100f8919061093c565b60405180910390f35b34801561010d57600080fd5b5061011661020e565b60405161012391906108fe565b60405180910390f35b34801561013857600080fd5b50610141610232565b60405161014e91906109f0565b60405180910390f35b34801561016357600080fd5b5061016c61024e565b60405161017991906108c6565b60405180910390f35b34801561018e57600080fd5b50610197610272565b6040516101a49190610a2b565b60405180910390f35b6101c760048036038101906101c29190610abf565b610279565b005b6040516020016101d890610c16565b6040516020818303038152906040528051906020012081565b600281565b60008054906101000a900467ffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b604051806060016040528060218152602001611c476021913981565b7f000000000000000000000000000000000000000000000000000000000000000081565b6202a30081565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c0fd8bde86866040518363ffffffff1660e01b81526004016102d9929190610c83565b60006040518083038186803b1580156102f157600080fd5b505afa158015610305573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061032e9190611223565b925092509250818190610377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036e91906109f0565b60405180910390fd5b5082608001517f0000000000000000000000000000000000000000000000000000000000000000146103de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d5906112fa565b60405180910390fd5b600261ffff16836060015161ffff161461042d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042490611366565b60405180910390fd5b60008054906101000a900467ffffffffffffffff1667ffffffffffffffff168360a0015167ffffffffffffffff16101561049c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610493906113d2565b60405180910390fd5b60018360a001516104ad9190611421565b6000806101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550426202a300846020015163ffffffff166104ee919061145f565b101561052f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052690611501565b60405180910390fd5b6000806000806000808860e001518060200190518101906105509190611850565b9550955095509550955095508560405160200161056c90610c16565b60405160208183030381529060405280519060200120146105c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b99061197d565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610630576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610627906119e9565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061ffff168161ffff161461069a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069190611a55565b60405180910390fd5b6000855190508351811480156106b05750845181145b6106ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e690611ac1565b60405180910390fd5b6106f885610859565b610737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072e90611b2d565b60405180910390fd5b60005b8181101561084a57600087828151811061075757610756611b4d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1687838151811061078857610787611b4d565b5b60200260200101518784815181106107a3576107a2611b4d565b5b60200260200101516040516107b89190611bc3565b60006040518083038185875af1925050503d80600081146107f5576040519150601f19603f3d011682016040523d82523d6000602084013e6107fa565b606091505b505090508061083e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083590611c26565b60405180910390fd5b6001820191505061073a565b50505050505050505050505050565b60008060008351905060005b818110156108a0578481815181106108805761087f611b4d565b5b602002602001015183610893919061145f565b9250600181019050610865565b5034821492505050919050565b6000819050919050565b6108c0816108ad565b82525050565b60006020820190506108db60008301846108b7565b92915050565b600061ffff82169050919050565b6108f8816108e1565b82525050565b600060208201905061091360008301846108ef565b92915050565b600067ffffffffffffffff82169050919050565b61093681610919565b82525050565b6000602082019050610951600083018461092d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610991578082015181840152602081019050610976565b838111156109a0576000848401525b50505050565b6000601f19601f8301169050919050565b60006109c282610957565b6109cc8185610962565b93506109dc818560208601610973565b6109e5816109a6565b840191505092915050565b60006020820190508181036000830152610a0a81846109b7565b905092915050565b6000819050919050565b610a2581610a12565b82525050565b6000602082019050610a406000830184610a1c565b92915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f840112610a7f57610a7e610a5a565b5b8235905067ffffffffffffffff811115610a9c57610a9b610a5f565b5b602083019150836001820283011115610ab857610ab7610a64565b5b9250929050565b60008060208385031215610ad657610ad5610a50565b5b600083013567ffffffffffffffff811115610af457610af3610a55565b5b610b0085828601610a69565b92509250509250929050565b7f556e6973776170576f726d686f6c654d65737361676553656e6465725631202860008201527f627974657333322072656365697665644d6573736167655061796c6f6164566560208201527f7273696f6e2c20616464726573735b5d206d656d6f727920746172676574732c60408201527f2075696e743235365b5d206d656d6f72792076616c7565732c2062797465735b60608201527f5d206d656d6f72792064617461732c2061646472657373206d6573736167655260808201527f656365697665722c2075696e743136207265636569766572436861696e49642960a082015250565b6000610c0060c083610962565b9150610c0b82610b0c565b60c082019050919050565b60006020820190508181036000830152610c2f81610bf3565b9050919050565b600082825260208201905092915050565b82818337600083830152505050565b6000610c628385610c36565b9350610c6f838584610c47565b610c78836109a6565b840190509392505050565b60006020820190508181036000830152610c9e818486610c56565b90509392505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610ce4826109a6565b810181811067ffffffffffffffff82111715610d0357610d02610cac565b5b80604052505050565b6000610d16610a46565b9050610d228282610cdb565b919050565b600080fd5b600060ff82169050919050565b610d4281610d2c565b8114610d4d57600080fd5b50565b600081519050610d5f81610d39565b92915050565b600063ffffffff82169050919050565b610d7e81610d65565b8114610d8957600080fd5b50565b600081519050610d9b81610d75565b92915050565b610daa816108e1565b8114610db557600080fd5b50565b600081519050610dc781610da1565b92915050565b610dd6816108ad565b8114610de157600080fd5b50565b600081519050610df381610dcd565b92915050565b610e0281610919565b8114610e0d57600080fd5b50565b600081519050610e1f81610df9565b92915050565b600080fd5b600067ffffffffffffffff821115610e4557610e44610cac565b5b610e4e826109a6565b9050602081019050919050565b6000610e6e610e6984610e2a565b610d0c565b905082815260208101848484011115610e8a57610e89610e25565b5b610e95848285610973565b509392505050565b600082601f830112610eb257610eb1610a5a565b5b8151610ec2848260208601610e5b565b91505092915050565b600067ffffffffffffffff821115610ee657610ee5610cac565b5b602082029050602081019050919050565b600060808284031215610f0d57610f0c610ca7565b5b610f176080610d0c565b90506000610f2784828501610de4565b6000830152506020610f3b84828501610de4565b6020830152506040610f4f84828501610d50565b6040830152506060610f6384828501610d50565b60608301525092915050565b6000610f82610f7d84610ecb565b610d0c565b90508083825260208201905060808402830185811115610fa557610fa4610a64565b5b835b81811015610fce5780610fba8882610ef7565b845260208401935050608081019050610fa7565b5050509392505050565b600082601f830112610fed57610fec610a5a565b5b8151610ffd848260208601610f6f565b91505092915050565b6000610160828403121561101d5761101c610ca7565b5b611028610160610d0c565b9050600061103884828501610d50565b600083015250602061104c84828501610d8c565b602083015250604061106084828501610d8c565b604083015250606061107484828501610db8565b606083015250608061108884828501610de4565b60808301525060a061109c84828501610e10565b60a08301525060c06110b084828501610d50565b60c08301525060e082015167ffffffffffffffff8111156110d4576110d3610d27565b5b6110e084828501610e9d565b60e0830152506101006110f584828501610d8c565b6101008301525061012082015167ffffffffffffffff81111561111b5761111a610d27565b5b61112784828501610fd8565b6101208301525061014061113d84828501610de4565b6101408301525092915050565b60008115159050919050565b61115f8161114a565b811461116a57600080fd5b50565b60008151905061117c81611156565b92915050565b600067ffffffffffffffff82111561119d5761119c610cac565b5b6111a6826109a6565b9050602081019050919050565b60006111c66111c184611182565b610d0c565b9050828152602081018484840111156111e2576111e1610e25565b5b6111ed848285610973565b509392505050565b600082601f83011261120a57611209610a5a565b5b815161121a8482602086016111b3565b91505092915050565b60008060006060848603121561123c5761123b610a50565b5b600084015167ffffffffffffffff81111561125a57611259610a55565b5b61126686828701611006565b93505060206112778682870161116d565b925050604084015167ffffffffffffffff81111561129857611297610a55565b5b6112a4868287016111f5565b9150509250925092565b7f496e76616c696420456d69747465722041646472657373210000000000000000600082015250565b60006112e4601883610962565b91506112ef826112ae565b602082019050919050565b60006020820190508181036000830152611313816112d7565b9050919050565b7f496e76616c696420456d697474657220436861696e0000000000000000000000600082015250565b6000611350601583610962565b915061135b8261131a565b602082019050919050565b6000602082019050818103600083015261137f81611343565b9050919050565b7f496e76616c69642053657175656e6365206e756d626572000000000000000000600082015250565b60006113bc601783610962565b91506113c782611386565b602082019050919050565b600060208201905081810360008301526113eb816113af565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061142c82610919565b915061143783610919565b92508267ffffffffffffffff03821115611454576114536113f2565b5b828201905092915050565b600061146a82610a12565b915061147583610a12565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156114aa576114a96113f2565b5b828201905092915050565b7f4d657373616765206e6f206c6f6e6765722076616c6964000000000000000000600082015250565b60006114eb601783610962565b91506114f6826114b5565b602082019050919050565b6000602082019050818103600083015261151a816114de565b9050919050565b600067ffffffffffffffff82111561153c5761153b610cac565b5b602082029050602081019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006115788261154d565b9050919050565b6115888161156d565b811461159357600080fd5b50565b6000815190506115a58161157f565b92915050565b60006115be6115b984611521565b610d0c565b905080838252602082019050602084028301858111156115e1576115e0610a64565b5b835b8181101561160a57806115f68882611596565b8452602084019350506020810190506115e3565b5050509392505050565b600082601f83011261162957611628610a5a565b5b81516116398482602086016115ab565b91505092915050565b600067ffffffffffffffff82111561165d5761165c610cac565b5b602082029050602081019050919050565b61167781610a12565b811461168257600080fd5b50565b6000815190506116948161166e565b92915050565b60006116ad6116a884611642565b610d0c565b905080838252602082019050602084028301858111156116d0576116cf610a64565b5b835b818110156116f957806116e58882611685565b8452602084019350506020810190506116d2565b5050509392505050565b600082601f83011261171857611717610a5a565b5b815161172884826020860161169a565b91505092915050565b600067ffffffffffffffff82111561174c5761174b610cac565b5b602082029050602081019050919050565b600061177061176b84611731565b610d0c565b9050808382526020820190506020840283018581111561179357611792610a64565b5b835b818110156117da57805167ffffffffffffffff8111156117b8576117b7610a5a565b5b8086016117c58982610e9d565b85526020850194505050602081019050611795565b5050509392505050565b600082601f8301126117f9576117f8610a5a565b5b815161180984826020860161175d565b91505092915050565b600061181d8261154d565b9050919050565b61182d81611812565b811461183857600080fd5b50565b60008151905061184a81611824565b92915050565b60008060008060008060c0878903121561186d5761186c610a50565b5b600061187b89828a01610de4565b965050602087015167ffffffffffffffff81111561189c5761189b610a55565b5b6118a889828a01611614565b955050604087015167ffffffffffffffff8111156118c9576118c8610a55565b5b6118d589828a01611703565b945050606087015167ffffffffffffffff8111156118f6576118f5610a55565b5b61190289828a016117e4565b935050608061191389828a0161183b565b92505060a061192489828a01610db8565b9150509295509295509295565b7f57726f6e67207061796c6f61642076657273696f6e0000000000000000000000600082015250565b6000611967601583610962565b915061197282611931565b602082019050919050565b600060208201905081810360008301526119968161195a565b9050919050565b7f4d657373616765206e6f7420666f722074686973206465737400000000000000600082015250565b60006119d3601983610962565b91506119de8261199d565b602082019050919050565b60006020820190508181036000830152611a02816119c6565b9050919050565b7f4d657373616765206e6f7420666f72207468697320636861696e000000000000600082015250565b6000611a3f601a83610962565b9150611a4a82611a09565b602082019050919050565b60006020820190508181036000830152611a6e81611a32565b9050919050565b7f496e636f6e73697374656e7420617267756d656e74206c656e67746873000000600082015250565b6000611aab601d83610962565b9150611ab682611a75565b602082019050919050565b60006020820190508181036000830152611ada81611a9e565b9050919050565b7f496e636f72726563742076616c75650000000000000000000000000000000000600082015250565b6000611b17600f83610962565b9150611b2282611ae1565b602082019050919050565b60006020820190508181036000830152611b4681611b0a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600081905092915050565b6000611b9d82611b7c565b611ba78185611b87565b9350611bb7818560208601610973565b80840191505092915050565b6000611bcf8284611b92565b915081905092915050565b7f5375622d63616c6c206661696c65640000000000000000000000000000000000600082015250565b6000611c10600f83610962565b9150611c1b82611bda565b602082019050919050565b60006020820190508181036000830152611c3f81611c03565b905091905056fe556e697377617020576f726d686f6c65204d657373616765205265636569766572a26469706673582212200bf21192ff6fda02ab2764cde944b63cd80fe39aff0a075ada676dc33a90708364736f6c63430008090033000000000000000000000000c8e2b0cd52cf01b0ce87d389daa3d414d4ce29f3000000000000000000000000f5f4496219f31cdcba6130b5402873624585615a0000000000000000000000000000000000000000000000000000000000000010
Deployed Bytecode
0x60806040526004361061007b5760003560e01c8063a3f4df7e1161004e578063a3f4df7e1461012c578063d67bdd2514610157578063e9fa316214610182578063f953cec7146101ad5761007b565b80630e2ebcb8146100805780631dac56d3146100ab5780637b305b32146100d65780639a8a059214610101575b600080fd5b34801561008c57600080fd5b506100956101c9565b6040516100a291906108c6565b60405180910390f35b3480156100b757600080fd5b506100c06101f1565b6040516100cd91906108fe565b60405180910390f35b3480156100e257600080fd5b506100eb6101f6565b6040516100f8919061093c565b60405180910390f35b34801561010d57600080fd5b5061011661020e565b60405161012391906108fe565b60405180910390f35b34801561013857600080fd5b50610141610232565b60405161014e91906109f0565b60405180910390f35b34801561016357600080fd5b5061016c61024e565b60405161017991906108c6565b60405180910390f35b34801561018e57600080fd5b50610197610272565b6040516101a49190610a2b565b60405180910390f35b6101c760048036038101906101c29190610abf565b610279565b005b6040516020016101d890610c16565b6040516020818303038152906040528051906020012081565b600281565b60008054906101000a900467ffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000001081565b604051806060016040528060218152602001611c476021913981565b7f000000000000000000000000f5f4496219f31cdcba6130b5402873624585615a81565b6202a30081565b60008060007f000000000000000000000000c8e2b0cd52cf01b0ce87d389daa3d414d4ce29f373ffffffffffffffffffffffffffffffffffffffff1663c0fd8bde86866040518363ffffffff1660e01b81526004016102d9929190610c83565b60006040518083038186803b1580156102f157600080fd5b505afa158015610305573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061032e9190611223565b925092509250818190610377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036e91906109f0565b60405180910390fd5b5082608001517f000000000000000000000000f5f4496219f31cdcba6130b5402873624585615a146103de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d5906112fa565b60405180910390fd5b600261ffff16836060015161ffff161461042d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042490611366565b60405180910390fd5b60008054906101000a900467ffffffffffffffff1667ffffffffffffffff168360a0015167ffffffffffffffff16101561049c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610493906113d2565b60405180910390fd5b60018360a001516104ad9190611421565b6000806101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550426202a300846020015163ffffffff166104ee919061145f565b101561052f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052690611501565b60405180910390fd5b6000806000806000808860e001518060200190518101906105509190611850565b9550955095509550955095508560405160200161056c90610c16565b60405160208183030381529060405280519060200120146105c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b99061197d565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610630576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610627906119e9565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000001061ffff168161ffff161461069a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069190611a55565b60405180910390fd5b6000855190508351811480156106b05750845181145b6106ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e690611ac1565b60405180910390fd5b6106f885610859565b610737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072e90611b2d565b60405180910390fd5b60005b8181101561084a57600087828151811061075757610756611b4d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1687838151811061078857610787611b4d565b5b60200260200101518784815181106107a3576107a2611b4d565b5b60200260200101516040516107b89190611bc3565b60006040518083038185875af1925050503d80600081146107f5576040519150601f19603f3d011682016040523d82523d6000602084013e6107fa565b606091505b505090508061083e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083590611c26565b60405180910390fd5b6001820191505061073a565b50505050505050505050505050565b60008060008351905060005b818110156108a0578481815181106108805761087f611b4d565b5b602002602001015183610893919061145f565b9250600181019050610865565b5034821492505050919050565b6000819050919050565b6108c0816108ad565b82525050565b60006020820190506108db60008301846108b7565b92915050565b600061ffff82169050919050565b6108f8816108e1565b82525050565b600060208201905061091360008301846108ef565b92915050565b600067ffffffffffffffff82169050919050565b61093681610919565b82525050565b6000602082019050610951600083018461092d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610991578082015181840152602081019050610976565b838111156109a0576000848401525b50505050565b6000601f19601f8301169050919050565b60006109c282610957565b6109cc8185610962565b93506109dc818560208601610973565b6109e5816109a6565b840191505092915050565b60006020820190508181036000830152610a0a81846109b7565b905092915050565b6000819050919050565b610a2581610a12565b82525050565b6000602082019050610a406000830184610a1c565b92915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f840112610a7f57610a7e610a5a565b5b8235905067ffffffffffffffff811115610a9c57610a9b610a5f565b5b602083019150836001820283011115610ab857610ab7610a64565b5b9250929050565b60008060208385031215610ad657610ad5610a50565b5b600083013567ffffffffffffffff811115610af457610af3610a55565b5b610b0085828601610a69565b92509250509250929050565b7f556e6973776170576f726d686f6c654d65737361676553656e6465725631202860008201527f627974657333322072656365697665644d6573736167655061796c6f6164566560208201527f7273696f6e2c20616464726573735b5d206d656d6f727920746172676574732c60408201527f2075696e743235365b5d206d656d6f72792076616c7565732c2062797465735b60608201527f5d206d656d6f72792064617461732c2061646472657373206d6573736167655260808201527f656365697665722c2075696e743136207265636569766572436861696e49642960a082015250565b6000610c0060c083610962565b9150610c0b82610b0c565b60c082019050919050565b60006020820190508181036000830152610c2f81610bf3565b9050919050565b600082825260208201905092915050565b82818337600083830152505050565b6000610c628385610c36565b9350610c6f838584610c47565b610c78836109a6565b840190509392505050565b60006020820190508181036000830152610c9e818486610c56565b90509392505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610ce4826109a6565b810181811067ffffffffffffffff82111715610d0357610d02610cac565b5b80604052505050565b6000610d16610a46565b9050610d228282610cdb565b919050565b600080fd5b600060ff82169050919050565b610d4281610d2c565b8114610d4d57600080fd5b50565b600081519050610d5f81610d39565b92915050565b600063ffffffff82169050919050565b610d7e81610d65565b8114610d8957600080fd5b50565b600081519050610d9b81610d75565b92915050565b610daa816108e1565b8114610db557600080fd5b50565b600081519050610dc781610da1565b92915050565b610dd6816108ad565b8114610de157600080fd5b50565b600081519050610df381610dcd565b92915050565b610e0281610919565b8114610e0d57600080fd5b50565b600081519050610e1f81610df9565b92915050565b600080fd5b600067ffffffffffffffff821115610e4557610e44610cac565b5b610e4e826109a6565b9050602081019050919050565b6000610e6e610e6984610e2a565b610d0c565b905082815260208101848484011115610e8a57610e89610e25565b5b610e95848285610973565b509392505050565b600082601f830112610eb257610eb1610a5a565b5b8151610ec2848260208601610e5b565b91505092915050565b600067ffffffffffffffff821115610ee657610ee5610cac565b5b602082029050602081019050919050565b600060808284031215610f0d57610f0c610ca7565b5b610f176080610d0c565b90506000610f2784828501610de4565b6000830152506020610f3b84828501610de4565b6020830152506040610f4f84828501610d50565b6040830152506060610f6384828501610d50565b60608301525092915050565b6000610f82610f7d84610ecb565b610d0c565b90508083825260208201905060808402830185811115610fa557610fa4610a64565b5b835b81811015610fce5780610fba8882610ef7565b845260208401935050608081019050610fa7565b5050509392505050565b600082601f830112610fed57610fec610a5a565b5b8151610ffd848260208601610f6f565b91505092915050565b6000610160828403121561101d5761101c610ca7565b5b611028610160610d0c565b9050600061103884828501610d50565b600083015250602061104c84828501610d8c565b602083015250604061106084828501610d8c565b604083015250606061107484828501610db8565b606083015250608061108884828501610de4565b60808301525060a061109c84828501610e10565b60a08301525060c06110b084828501610d50565b60c08301525060e082015167ffffffffffffffff8111156110d4576110d3610d27565b5b6110e084828501610e9d565b60e0830152506101006110f584828501610d8c565b6101008301525061012082015167ffffffffffffffff81111561111b5761111a610d27565b5b61112784828501610fd8565b6101208301525061014061113d84828501610de4565b6101408301525092915050565b60008115159050919050565b61115f8161114a565b811461116a57600080fd5b50565b60008151905061117c81611156565b92915050565b600067ffffffffffffffff82111561119d5761119c610cac565b5b6111a6826109a6565b9050602081019050919050565b60006111c66111c184611182565b610d0c565b9050828152602081018484840111156111e2576111e1610e25565b5b6111ed848285610973565b509392505050565b600082601f83011261120a57611209610a5a565b5b815161121a8482602086016111b3565b91505092915050565b60008060006060848603121561123c5761123b610a50565b5b600084015167ffffffffffffffff81111561125a57611259610a55565b5b61126686828701611006565b93505060206112778682870161116d565b925050604084015167ffffffffffffffff81111561129857611297610a55565b5b6112a4868287016111f5565b9150509250925092565b7f496e76616c696420456d69747465722041646472657373210000000000000000600082015250565b60006112e4601883610962565b91506112ef826112ae565b602082019050919050565b60006020820190508181036000830152611313816112d7565b9050919050565b7f496e76616c696420456d697474657220436861696e0000000000000000000000600082015250565b6000611350601583610962565b915061135b8261131a565b602082019050919050565b6000602082019050818103600083015261137f81611343565b9050919050565b7f496e76616c69642053657175656e6365206e756d626572000000000000000000600082015250565b60006113bc601783610962565b91506113c782611386565b602082019050919050565b600060208201905081810360008301526113eb816113af565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061142c82610919565b915061143783610919565b92508267ffffffffffffffff03821115611454576114536113f2565b5b828201905092915050565b600061146a82610a12565b915061147583610a12565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156114aa576114a96113f2565b5b828201905092915050565b7f4d657373616765206e6f206c6f6e6765722076616c6964000000000000000000600082015250565b60006114eb601783610962565b91506114f6826114b5565b602082019050919050565b6000602082019050818103600083015261151a816114de565b9050919050565b600067ffffffffffffffff82111561153c5761153b610cac565b5b602082029050602081019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006115788261154d565b9050919050565b6115888161156d565b811461159357600080fd5b50565b6000815190506115a58161157f565b92915050565b60006115be6115b984611521565b610d0c565b905080838252602082019050602084028301858111156115e1576115e0610a64565b5b835b8181101561160a57806115f68882611596565b8452602084019350506020810190506115e3565b5050509392505050565b600082601f83011261162957611628610a5a565b5b81516116398482602086016115ab565b91505092915050565b600067ffffffffffffffff82111561165d5761165c610cac565b5b602082029050602081019050919050565b61167781610a12565b811461168257600080fd5b50565b6000815190506116948161166e565b92915050565b60006116ad6116a884611642565b610d0c565b905080838252602082019050602084028301858111156116d0576116cf610a64565b5b835b818110156116f957806116e58882611685565b8452602084019350506020810190506116d2565b5050509392505050565b600082601f83011261171857611717610a5a565b5b815161172884826020860161169a565b91505092915050565b600067ffffffffffffffff82111561174c5761174b610cac565b5b602082029050602081019050919050565b600061177061176b84611731565b610d0c565b9050808382526020820190506020840283018581111561179357611792610a64565b5b835b818110156117da57805167ffffffffffffffff8111156117b8576117b7610a5a565b5b8086016117c58982610e9d565b85526020850194505050602081019050611795565b5050509392505050565b600082601f8301126117f9576117f8610a5a565b5b815161180984826020860161175d565b91505092915050565b600061181d8261154d565b9050919050565b61182d81611812565b811461183857600080fd5b50565b60008151905061184a81611824565b92915050565b60008060008060008060c0878903121561186d5761186c610a50565b5b600061187b89828a01610de4565b965050602087015167ffffffffffffffff81111561189c5761189b610a55565b5b6118a889828a01611614565b955050604087015167ffffffffffffffff8111156118c9576118c8610a55565b5b6118d589828a01611703565b945050606087015167ffffffffffffffff8111156118f6576118f5610a55565b5b61190289828a016117e4565b935050608061191389828a0161183b565b92505060a061192489828a01610db8565b9150509295509295509295565b7f57726f6e67207061796c6f61642076657273696f6e0000000000000000000000600082015250565b6000611967601583610962565b915061197282611931565b602082019050919050565b600060208201905081810360008301526119968161195a565b9050919050565b7f4d657373616765206e6f7420666f722074686973206465737400000000000000600082015250565b60006119d3601983610962565b91506119de8261199d565b602082019050919050565b60006020820190508181036000830152611a02816119c6565b9050919050565b7f4d657373616765206e6f7420666f72207468697320636861696e000000000000600082015250565b6000611a3f601a83610962565b9150611a4a82611a09565b602082019050919050565b60006020820190508181036000830152611a6e81611a32565b9050919050565b7f496e636f6e73697374656e7420617267756d656e74206c656e67746873000000600082015250565b6000611aab601d83610962565b9150611ab682611a75565b602082019050919050565b60006020820190508181036000830152611ada81611a9e565b9050919050565b7f496e636f72726563742076616c75650000000000000000000000000000000000600082015250565b6000611b17600f83610962565b9150611b2282611ae1565b602082019050919050565b60006020820190508181036000830152611b4681611b0a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600081905092915050565b6000611b9d82611b7c565b611ba78185611b87565b9350611bb7818560208601610973565b80840191505092915050565b6000611bcf8284611b92565b915081905092915050565b7f5375622d63616c6c206661696c65640000000000000000000000000000000000600082015250565b6000611c10600f83610962565b9150611c1b82611bda565b602082019050919050565b60006020820190508181036000830152611c3f81611c03565b905091905056fe556e697377617020576f726d686f6c65204d657373616765205265636569766572a26469706673582212200bf21192ff6fda02ab2764cde944b63cd80fe39aff0a075ada676dc33a90708364736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c8e2b0cd52cf01b0ce87d389daa3d414d4ce29f3000000000000000000000000f5f4496219f31cdcba6130b5402873624585615a0000000000000000000000000000000000000000000000000000000000000010
-----Decoded View---------------
Arg [0] : wormholeAddress (address): 0xC8e2b0cD52Cf01b0Ce87d389Daa3d414d4cE29f3
Arg [1] : _messageSender (bytes32): 0x000000000000000000000000f5f4496219f31cdcba6130b5402873624585615a
Arg [2] : _chainId (uint16): 16
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000c8e2b0cd52cf01b0ce87d389daa3d414d4ce29f3
Arg [1] : 000000000000000000000000f5f4496219f31cdcba6130b5402873624585615a
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000010
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in GLMR
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
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.