Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
Latest 25 from a total of 2,802 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
Amount
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Quote Update | 42315989 | 58 mins ago | IN | 0 ETH | 0.000000062511 | ||||
| Quote Update | 42314213 | 1 hr ago | IN | 0 ETH | 0.000000062203 | ||||
| Quote Update | 42312423 | 2 hrs ago | IN | 0 ETH | 0.000000062141 | ||||
| Quote Update | 42310594 | 3 hrs ago | IN | 0 ETH | 0.000000064528 | ||||
| Quote Update | 42308804 | 4 hrs ago | IN | 0 ETH | 0.000000109666 | ||||
| Quote Update | 42307003 | 5 hrs ago | IN | 0 ETH | 0.000000230498 | ||||
| Quote Update | 42305208 | 6 hrs ago | IN | 0 ETH | 0.00000081099 | ||||
| Quote Update | 42303395 | 7 hrs ago | IN | 0 ETH | 0.000000241274 | ||||
| Quote Update | 42301587 | 8 hrs ago | IN | 0 ETH | 0.000000120149 | ||||
| Quote Update | 42299802 | 9 hrs ago | IN | 0 ETH | 0.000000068732 | ||||
| Quote Update | 42298000 | 10 hrs ago | IN | 0 ETH | 0.000000094385 | ||||
| Quote Update | 42296199 | 11 hrs ago | IN | 0 ETH | 0.000000066349 | ||||
| Quote Update | 42294390 | 12 hrs ago | IN | 0 ETH | 0.000000064405 | ||||
| Quote Update | 42292590 | 13 hrs ago | IN | 0 ETH | 0.000000061524 | ||||
| Quote Update | 42290813 | 14 hrs ago | IN | 0 ETH | 0.000000060987 | ||||
| Quote Update | 42289031 | 15 hrs ago | IN | 0 ETH | 0.000000060975 | ||||
| Quote Update | 42287214 | 16 hrs ago | IN | 0 ETH | 0.000000061049 | ||||
| Quote Update | 42285403 | 17 hrs ago | IN | 0 ETH | 0.000000061154 | ||||
| Quote Update | 42283605 | 18 hrs ago | IN | 0 ETH | 0.000000061452 | ||||
| Quote Update | 42281812 | 19 hrs ago | IN | 0 ETH | 0.000000061267 | ||||
| Quote Update | 42280015 | 20 hrs ago | IN | 0 ETH | 0.000000062508 | ||||
| Quote Update | 42278220 | 21 hrs ago | IN | 0 ETH | 0.000000062893 | ||||
| Quote Update | 42276380 | 22 hrs ago | IN | 0 ETH | 0.00000007834 | ||||
| Quote Update | 42274604 | 23 hrs ago | IN | 0 ETH | 0.00000006501 | ||||
| Quote Update | 42272783 | 24 hrs ago | IN | 0 ETH | 0.000000063572 |
Latest 1 internal transaction
| Parent Transaction Hash | Block | From | To | Amount | ||
|---|---|---|---|---|---|---|
| 36535158 | 133 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
ExecutorQuoter
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
Yes with 200 runs
Other Settings:
london EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.13;
import "./interfaces/IExecutorQuoter.sol";
string constant EXECUTOR_QUOTER_VERSION_STR = "Executor-Quoter-0.0.1";
contract ExecutorQuoter is IExecutorQuoter {
string public constant EXECUTOR_QUOTER_VERSION = EXECUTOR_QUOTER_VERSION_STR;
uint8 private constant QUOTE_DECIMALS = 10;
uint8 private constant DECIMAL_RESOLUTION = 18;
address public immutable QUOTER_ADDRESS;
address public immutable UPDATER_ADDRESS;
uint8 public immutable SRC_TOKEN_DECIMALS;
bytes32 public immutable PAYEE_ADDRESS;
/// This is the same as an EQ01 quote body
/// It fits into a single bytes32 storage slot
/// It is listed in reverse order so that it is stored in the correct order (EVM stores right to left)
struct OnChainQuoteBody {
/// The USD price, in 10^10, of the destinationChain native currency
uint64 dstPrice;
/// The USD price, in 10^10, of the sourceChain native currency
uint64 srcPrice;
/// The current gas price on the destination chain
uint64 dstGasPrice;
/// The base fee, in sourceChain native currency, required by the quoter to perform an execution on the destination chain
uint64 baseFee;
}
struct ChainInfo {
bool enabled;
uint8 gasPriceDecimals;
uint8 nativeDecimals;
}
struct Update {
uint16 chainId;
bytes32 update;
}
mapping(uint16 => OnChainQuoteBody) public quoteByDstChain;
mapping(uint16 => ChainInfo) public chainInfos;
/// @dev Selector 0x40788bb5.
error InvalidUpdater(address sender, address expected);
/// @dev Selector 0x4dc2c273.
error ChainDisabled(uint16 chainId);
/// @dev Selector 0x0d2e6713.
error UnsupportedInstruction(uint8 ixType);
/// @dev Selector 0x3a5a1720.
error MoreThanOneDropOff();
modifier onlyUpdater() {
if (msg.sender != UPDATER_ADDRESS) {
revert InvalidUpdater(msg.sender, UPDATER_ADDRESS);
}
_;
}
constructor(address _quoterAddress, address _updaterAddress, uint8 _srcTokenDecimals, bytes32 _payeeAddress) {
QUOTER_ADDRESS = _quoterAddress;
UPDATER_ADDRESS = _updaterAddress;
SRC_TOKEN_DECIMALS = _srcTokenDecimals;
PAYEE_ADDRESS = _payeeAddress;
}
function _batchUpdate(Update[] calldata updates, uint256 mappingSlot) private {
assembly {
let len := updates.length
let baseOffset := updates.offset
for { let i := 0 } lt(i, len) { i := add(i, 1) } {
// Load update directly from calldata
let updatePtr := add(baseOffset, mul(i, 0x40))
let chainId := calldataload(updatePtr)
let newValue := calldataload(add(updatePtr, 0x20))
// Calculate storage slot for mapping[chainId]
mstore(0x00, chainId)
mstore(0x20, mappingSlot)
let slot := keccak256(0x00, 0x40)
sstore(slot, newValue)
}
}
}
function chainInfoUpdate(Update[] calldata updates) external onlyUpdater {
uint256 slot;
assembly {
slot := chainInfos.slot
}
_batchUpdate(updates, slot);
}
function quoteUpdate(Update[] calldata updates) external onlyUpdater {
uint256 slot;
assembly {
slot := quoteByDstChain.slot
}
_batchUpdate(updates, slot);
}
function normalize(uint256 amount, uint8 from, uint8 to) private pure returns (uint256) {
if (from > to) {
return amount / 10 ** uint256(from - to);
} else if (from < to) {
return amount * 10 ** uint256(to - from);
}
return amount;
}
function mul(uint256 a, uint256 b, uint8 decimals) private pure returns (uint256) {
return (a * b) / 10 ** uint256(decimals);
}
function div(uint256 a, uint256 b, uint8 decimals) private pure returns (uint256) {
return (a * 10 ** uint256(decimals)) / b;
}
/// Calculates the total gas limit and total message value from a set of relay instructions.
/// Each relay instruction can be either a `GasInstruction` or a `GasDropOffInstruction`.
/// - `GasInstruction` contributes to both `gasLimit` and `msgValue`.
/// - `GasDropOffInstruction` contributes only to `msgValue`.
/// Throws If an unsupported instruction type is encountered.
function totalGasLimitAndMsgValue(bytes calldata relayInstructions)
private
pure
returns (uint256 gasLimit, uint256 msgValue)
{
uint256 offset = 0;
uint8 ixType;
uint128 ixGasLimit;
uint128 ixMsgValue;
bool hasDropOff = false;
uint256 relayInstructionsLength = relayInstructions.length;
while (offset < relayInstructionsLength) {
assembly {
ixType := shr(248, calldataload(add(relayInstructions.offset, offset)))
offset := add(offset, 1)
}
if (ixType == 1) {
assembly {
ixGasLimit := shr(128, calldataload(add(relayInstructions.offset, offset)))
offset := add(offset, 16)
ixMsgValue := shr(128, calldataload(add(relayInstructions.offset, offset)))
offset := add(offset, 16)
}
gasLimit = gasLimit + ixGasLimit;
msgValue = msgValue + ixMsgValue;
} else if (ixType == 2) {
if (hasDropOff) {
revert MoreThanOneDropOff();
}
hasDropOff = true;
assembly {
ixMsgValue := shr(128, calldataload(add(relayInstructions.offset, offset)))
offset := add(offset, 48)
}
msgValue = msgValue + ixMsgValue;
} else {
revert UnsupportedInstruction(ixType);
}
}
}
function estimateQuote(
OnChainQuoteBody storage quote,
ChainInfo storage dstChainInfo,
uint256 gasLimit,
uint256 msgValue
) private view returns (uint256) {
uint256 srcChainValueForBaseFee = normalize(quote.baseFee, QUOTE_DECIMALS, SRC_TOKEN_DECIMALS);
uint256 nSrcPrice = normalize(quote.srcPrice, QUOTE_DECIMALS, DECIMAL_RESOLUTION);
uint256 nDstPrice = normalize(quote.dstPrice, QUOTE_DECIMALS, DECIMAL_RESOLUTION);
uint256 scaledConversion = div(nDstPrice, nSrcPrice, DECIMAL_RESOLUTION);
uint256 nGasLimitCost =
normalize(gasLimit * quote.dstGasPrice, dstChainInfo.gasPriceDecimals, DECIMAL_RESOLUTION);
uint256 srcChainValueForGasLimit =
normalize(mul(nGasLimitCost, scaledConversion, DECIMAL_RESOLUTION), DECIMAL_RESOLUTION, SRC_TOKEN_DECIMALS);
uint256 nMsgValue = normalize(msgValue, dstChainInfo.nativeDecimals, DECIMAL_RESOLUTION);
uint256 srcChainValueForMsgValue =
normalize(mul(nMsgValue, scaledConversion, DECIMAL_RESOLUTION), DECIMAL_RESOLUTION, SRC_TOKEN_DECIMALS);
return srcChainValueForBaseFee + srcChainValueForGasLimit + srcChainValueForMsgValue;
}
function requestQuote(
uint16 dstChain,
bytes32, //dstAddr,
address, //refundAddr,
bytes calldata, //requestBytes,
bytes calldata relayInstructions
) external view returns (uint256 requiredPayment) {
ChainInfo storage dstChainInfo = chainInfos[dstChain];
if (!dstChainInfo.enabled) {
revert ChainDisabled(dstChain);
}
(uint256 gasLimit, uint256 msgValue) = totalGasLimitAndMsgValue(relayInstructions);
// NOTE: this does not include any maxGasLimit or maxMsgValue checks
requiredPayment = estimateQuote(quoteByDstChain[dstChain], dstChainInfo, gasLimit, msgValue);
return requiredPayment;
}
function requestExecutionQuote(
uint16 dstChain,
bytes32, //dstAddr,
address, //refundAddr,
bytes calldata, //requestBytes,
bytes calldata relayInstructions
) external view returns (uint256 requiredPayment, bytes32, bytes32 quoteBody) {
ChainInfo storage dstChainInfo = chainInfos[dstChain];
if (!dstChainInfo.enabled) {
revert ChainDisabled(dstChain);
}
OnChainQuoteBody storage quote = quoteByDstChain[dstChain];
assembly {
quoteBody := sload(quote.slot)
}
(uint256 gasLimit, uint256 msgValue) = totalGasLimitAndMsgValue(relayInstructions);
// NOTE: this does not include any maxGasLimit or maxMsgValue checks
requiredPayment = estimateQuote(quote, dstChainInfo, gasLimit, msgValue);
return (requiredPayment, PAYEE_ADDRESS, quoteBody);
}
}// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.19;
interface IExecutorQuoter {
/// This method is used by on- or off-chain services which need to determine the cost of a relay
/// It only returns the required cost (msg.value)
/// It is explicitly marked view
function requestQuote(
uint16 dstChain,
bytes32 dstAddr,
address refundAddr,
bytes calldata requestBytes,
bytes calldata relayInstructions
) external view returns (uint256);
/// This method is used by an ExecutorQuoterRouter during the execution flow
/// It returns the required cost (msg.value) in addition to the payee and EQ02 quote body
/// It is explicitly NOT marked view in order to allow the quoter the flexibility to emit events or update state
function requestExecutionQuote(
uint16 dstChain,
bytes32 dstAddr,
address refundAddr,
bytes calldata requestBytes,
bytes calldata relayInstructions
) external returns (uint256, bytes32, bytes32);
}{
"remappings": [
"forge-std/=lib/forge-std/src/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "london",
"viaIR": true
}Contract ABI
API[{"inputs":[{"internalType":"address","name":"_quoterAddress","type":"address"},{"internalType":"address","name":"_updaterAddress","type":"address"},{"internalType":"uint8","name":"_srcTokenDecimals","type":"uint8"},{"internalType":"bytes32","name":"_payeeAddress","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint16","name":"chainId","type":"uint16"}],"name":"ChainDisabled","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"expected","type":"address"}],"name":"InvalidUpdater","type":"error"},{"inputs":[],"name":"MoreThanOneDropOff","type":"error"},{"inputs":[{"internalType":"uint8","name":"ixType","type":"uint8"}],"name":"UnsupportedInstruction","type":"error"},{"inputs":[],"name":"EXECUTOR_QUOTER_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAYEE_ADDRESS","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"QUOTER_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SRC_TOKEN_DECIMALS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UPDATER_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint16","name":"chainId","type":"uint16"},{"internalType":"bytes32","name":"update","type":"bytes32"}],"internalType":"struct ExecutorQuoter.Update[]","name":"updates","type":"tuple[]"}],"name":"chainInfoUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"chainInfos","outputs":[{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"uint8","name":"gasPriceDecimals","type":"uint8"},{"internalType":"uint8","name":"nativeDecimals","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"quoteByDstChain","outputs":[{"internalType":"uint64","name":"dstPrice","type":"uint64"},{"internalType":"uint64","name":"srcPrice","type":"uint64"},{"internalType":"uint64","name":"dstGasPrice","type":"uint64"},{"internalType":"uint64","name":"baseFee","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint16","name":"chainId","type":"uint16"},{"internalType":"bytes32","name":"update","type":"bytes32"}],"internalType":"struct ExecutorQuoter.Update[]","name":"updates","type":"tuple[]"}],"name":"quoteUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"dstChain","type":"uint16"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"bytes","name":"relayInstructions","type":"bytes"}],"name":"requestExecutionQuote","outputs":[{"internalType":"uint256","name":"requiredPayment","type":"uint256"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"quoteBody","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"dstChain","type":"uint16"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"bytes","name":"relayInstructions","type":"bytes"}],"name":"requestQuote","outputs":[{"internalType":"uint256","name":"requiredPayment","type":"uint256"}],"stateMutability":"view","type":"function"}]Contract Creation Code
610100346100c557601f610ac438819003918201601f19168301916001600160401b038311848410176100ca578084926080946040528339810103126100c557610048816100e0565b90610055602082016100e0565b60408201519160ff831683036100c557606001519260805260a05260c05260e0526040516109cf90816100f58239608051816101fa015260a0518181816101b5015281816102cb0152610471015260c051818181610243015261074f015260e0518181816105e7015261062e0152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036100c55756fe6080604052600436101561001257600080fd5b60003560e01c806331522e8f146100c75780634750c2fd146100c257806351435be7146100bd5780635880c7eb146100b85780636afe1b4a146100b35780636ea5d58f146100ae578063a578ae13146100a9578063ad17ceea146100a4578063b0c5177f1461009f578063bddddedd1461009a5763c1315aec1461009557600080fd5b610616565b610584565b6104cf565b610461565b6103ea565b6102bb565b610229565b6101e4565b61019f565b61014f565b6100e2565b6004359061ffff821682036100dd57565b600080fd5b346100dd5760203660031901126100dd5761ffff6100fe6100cc565b16600052600060205260806040600020546040519067ffffffffffffffff8116825267ffffffffffffffff8160401c16602083015267ffffffffffffffff81841c16604083015260c01c6060820152f35b346100dd5760203660031901126100dd5761ffff61016b6100cc565b166000526001602052606060406000205460ff6040519181811615158352818160081c16602084015260101c166040820152f35b346100dd5760003660031901126100dd576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346100dd5760003660031901126100dd576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346100dd5760003660031901126100dd57602060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9060206003198301126100dd5760043567ffffffffffffffff81116100dd57826023820112156100dd5780600401359267ffffffffffffffff84116100dd5760248460061b830101116100dd576024019190565b346100dd576102c936610267565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163381900361032a575060005b81811061030857005b80602060019260061b85018035600052600082520135604060002055016102ff565b6340788bb560e01b6000523360045260245260446000fd5b9181601f840112156100dd5782359167ffffffffffffffff83116100dd57602083818601950101116100dd57565b9060a06003198301126100dd5760043561ffff811681036100dd5791602435916044356001600160a01b03811681036100dd579160643567ffffffffffffffff81116100dd57816103c391600401610342565b929092916084359067ffffffffffffffff82116100dd576103e691600401610342565b9091565b346100dd5761ffff6103fb36610370565b9694509492505050169182600052600160205260406000209160ff8354161561044c57610441939161042c91610679565b9290916000526000602052604060002061074b565b604051908152602090f35b83634dc2c27360e01b60005260045260246000fd5b346100dd5761046f36610267565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163381900361032a575060005b8181106104ae57005b80602060019260061b850180356000528382520135604060002055016104a5565b346100dd5760003660031901126100dd576040516040810181811067ffffffffffffffff82111761056e5760405260158152744578656375746f722d51756f7465722d302e302e3160581b602082015260405180916020825280519081602084015260005b8281106105565750508060006040809385010152601f80199101168201010390f35b60208282018101516040878401015285945001610534565b634e487b7160e01b600052604160045260246000fd5b346100dd5761ffff61059536610370565b9694509492505050169182600052600160205260406000209060ff8254161561044c576105de929360005260006020526105d6604060002091825495610679565b92909161074b565b604080519182527f00000000000000000000000000000000000000000000000000000000000000006020830152810191909152606090f35b346100dd5760003660031901126100dd5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b634e487b7160e01b600052601160045260246000fd5b9190820180921161067457565b610651565b916000916000906000805b808382101561072f57600182019188013560f81c60001981016106d4575050806106c46106ca92890160206010823560801c92013560801c930198610667565b94610667565b935b939294610684565b9496949092915060028103610718575061070757610701600191603183828a01013560801c910196610667565b936106cc565b6301d2d0b960e51b60005260046000fd5b630d2e671360e01b60005260ff1660045260246000fd5b50505050919250565b8181029291811591840414171561067457565b54927f000000000000000000000000000000000000000000000000000000000000000092909161077f8460c087901c610872565b9361079667ffffffffffffffff8760401c166108d0565b926107aa67ffffffffffffffff88166108d0565b90670de0b6b3a7640000918281029281840414901517156106745761082261083c9661081c61082c866108276108419d6108226108369b61080e67ffffffffffffffff9a61081c9f6108008d916108279f610852565b9c8d9660801c161690610738565b90549d8e60ff9060081c1690565b906108df565b610981565b61092f565b9760101c60ff1690565b92610667565b610667565b90565b604d811161067457600a0a90565b811561085c570490565b634e487b7160e01b600052601260045260246000fd5b9060ff1680600a116000146108a257600a039060ff82116106745761089c60ff6108419316610844565b90610852565b80600a106108ae575090565b600919019060ff8211610674576108ca60ff6108419316610844565b90610738565b610841906305f5e10090610738565b9060ff16601281111561090857601119019060ff82116106745761089c60ff6108419316610844565b60128110610914575090565b6012039060ff8211610674576108ca60ff6108419316610844565b9060ff1680601211600014610959576012039060ff82116106745761089c60ff6108419316610844565b80601210610965575090565b601119019060ff8211610674576108ca60ff6108419316610844565b9061098b91610738565b670de0b6b3a764000090049056fea264697066735822122072378b9f984521e1dac118cee90fc0218f67f3f64a8786c2300cb354080092b264736f6c634300081c00330000000000000000000000005241c9276698439fef2780dbab76fec90b633fbd0000000000000000000000001cfec7e6883222c2db520a2b3ed04da154b59b8200000000000000000000000000000000000000000000000000000000000000120000000000000000000000004842781be7ba414c29029e6d7a70f6092e9d8beb
Deployed Bytecode
0x6080604052600436101561001257600080fd5b60003560e01c806331522e8f146100c75780634750c2fd146100c257806351435be7146100bd5780635880c7eb146100b85780636afe1b4a146100b35780636ea5d58f146100ae578063a578ae13146100a9578063ad17ceea146100a4578063b0c5177f1461009f578063bddddedd1461009a5763c1315aec1461009557600080fd5b610616565b610584565b6104cf565b610461565b6103ea565b6102bb565b610229565b6101e4565b61019f565b61014f565b6100e2565b6004359061ffff821682036100dd57565b600080fd5b346100dd5760203660031901126100dd5761ffff6100fe6100cc565b16600052600060205260806040600020546040519067ffffffffffffffff8116825267ffffffffffffffff8160401c16602083015267ffffffffffffffff81841c16604083015260c01c6060820152f35b346100dd5760203660031901126100dd5761ffff61016b6100cc565b166000526001602052606060406000205460ff6040519181811615158352818160081c16602084015260101c166040820152f35b346100dd5760003660031901126100dd576040517f0000000000000000000000001cfec7e6883222c2db520a2b3ed04da154b59b826001600160a01b03168152602090f35b346100dd5760003660031901126100dd576040517f0000000000000000000000005241c9276698439fef2780dbab76fec90b633fbd6001600160a01b03168152602090f35b346100dd5760003660031901126100dd57602060405160ff7f0000000000000000000000000000000000000000000000000000000000000012168152f35b9060206003198301126100dd5760043567ffffffffffffffff81116100dd57826023820112156100dd5780600401359267ffffffffffffffff84116100dd5760248460061b830101116100dd576024019190565b346100dd576102c936610267565b7f0000000000000000000000001cfec7e6883222c2db520a2b3ed04da154b59b826001600160a01b03163381900361032a575060005b81811061030857005b80602060019260061b85018035600052600082520135604060002055016102ff565b6340788bb560e01b6000523360045260245260446000fd5b9181601f840112156100dd5782359167ffffffffffffffff83116100dd57602083818601950101116100dd57565b9060a06003198301126100dd5760043561ffff811681036100dd5791602435916044356001600160a01b03811681036100dd579160643567ffffffffffffffff81116100dd57816103c391600401610342565b929092916084359067ffffffffffffffff82116100dd576103e691600401610342565b9091565b346100dd5761ffff6103fb36610370565b9694509492505050169182600052600160205260406000209160ff8354161561044c57610441939161042c91610679565b9290916000526000602052604060002061074b565b604051908152602090f35b83634dc2c27360e01b60005260045260246000fd5b346100dd5761046f36610267565b7f0000000000000000000000001cfec7e6883222c2db520a2b3ed04da154b59b826001600160a01b03163381900361032a575060005b8181106104ae57005b80602060019260061b850180356000528382520135604060002055016104a5565b346100dd5760003660031901126100dd576040516040810181811067ffffffffffffffff82111761056e5760405260158152744578656375746f722d51756f7465722d302e302e3160581b602082015260405180916020825280519081602084015260005b8281106105565750508060006040809385010152601f80199101168201010390f35b60208282018101516040878401015285945001610534565b634e487b7160e01b600052604160045260246000fd5b346100dd5761ffff61059536610370565b9694509492505050169182600052600160205260406000209060ff8254161561044c576105de929360005260006020526105d6604060002091825495610679565b92909161074b565b604080519182527f0000000000000000000000004842781be7ba414c29029e6d7a70f6092e9d8beb6020830152810191909152606090f35b346100dd5760003660031901126100dd5760206040517f0000000000000000000000004842781be7ba414c29029e6d7a70f6092e9d8beb8152f35b634e487b7160e01b600052601160045260246000fd5b9190820180921161067457565b610651565b916000916000906000805b808382101561072f57600182019188013560f81c60001981016106d4575050806106c46106ca92890160206010823560801c92013560801c930198610667565b94610667565b935b939294610684565b9496949092915060028103610718575061070757610701600191603183828a01013560801c910196610667565b936106cc565b6301d2d0b960e51b60005260046000fd5b630d2e671360e01b60005260ff1660045260246000fd5b50505050919250565b8181029291811591840414171561067457565b54927f000000000000000000000000000000000000000000000000000000000000001292909161077f8460c087901c610872565b9361079667ffffffffffffffff8760401c166108d0565b926107aa67ffffffffffffffff88166108d0565b90670de0b6b3a7640000918281029281840414901517156106745761082261083c9661081c61082c866108276108419d6108226108369b61080e67ffffffffffffffff9a61081c9f6108008d916108279f610852565b9c8d9660801c161690610738565b90549d8e60ff9060081c1690565b906108df565b610981565b61092f565b9760101c60ff1690565b92610667565b610667565b90565b604d811161067457600a0a90565b811561085c570490565b634e487b7160e01b600052601260045260246000fd5b9060ff1680600a116000146108a257600a039060ff82116106745761089c60ff6108419316610844565b90610852565b80600a106108ae575090565b600919019060ff8211610674576108ca60ff6108419316610844565b90610738565b610841906305f5e10090610738565b9060ff16601281111561090857601119019060ff82116106745761089c60ff6108419316610844565b60128110610914575090565b6012039060ff8211610674576108ca60ff6108419316610844565b9060ff1680601211600014610959576012039060ff82116106745761089c60ff6108419316610844565b80601210610965575090565b601119019060ff8211610674576108ca60ff6108419316610844565b9061098b91610738565b670de0b6b3a764000090049056fea264697066735822122072378b9f984521e1dac118cee90fc0218f67f3f64a8786c2300cb354080092b264736f6c634300081c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005241c9276698439fef2780dbab76fec90b633fbd0000000000000000000000001cfec7e6883222c2db520a2b3ed04da154b59b8200000000000000000000000000000000000000000000000000000000000000120000000000000000000000004842781be7ba414c29029e6d7a70f6092e9d8beb
-----Decoded View---------------
Arg [0] : _quoterAddress (address): 0x5241C9276698439fEf2780DbaB76fEc90B633Fbd
Arg [1] : _updaterAddress (address): 0x1CfEC7e6883222c2dB520a2B3ed04DA154b59B82
Arg [2] : _srcTokenDecimals (uint8): 18
Arg [3] : _payeeAddress (bytes32): 0x0000000000000000000000004842781be7ba414c29029e6d7a70f6092e9d8beb
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000005241c9276698439fef2780dbab76fec90b633fbd
Arg [1] : 0000000000000000000000001cfec7e6883222c2db520a2b3ed04da154b59b82
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 0000000000000000000000004842781be7ba414c29029e6d7a70f6092e9d8beb
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
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.