Overview
ETH Balance
0 ETH
Eth Value
$0.00Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
AMMQuoter
Compiler Version
v0.6.12+commit.27d51765
Optimization Enabled:
Yes with 1000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity ^0.6.0;
import "@openzeppelin/contracts/math/SafeMath.sol";
import "./interface/IUniswapExchange.sol";
import "./interface/IUniswapFactory.sol";
import "./interface/IUniswapRouterV2.sol";
import "./interface/ICurveFi.sol";
import "./interface/IWeth.sol";
import "./interface/IPermanentStorage.sol";
contract AMMQuoter {
using SafeMath for uint256;
/* Constants */
string public constant version = "5.1.0";
address private constant ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
address private constant ZERO_ADDRESS = address(0);
address public constant UNISWAP_V2_ROUTER_02_ADDRESS = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
address public constant SUSHISWAP_ROUTER_ADDRESS = 0xd9e1cE17f2641f24aE83637ab66a2cca9C378B9F;
address public immutable weth;
IPermanentStorage public immutable permStorage;
event CurveTokenAdded(
address indexed makerAddress,
address indexed assetAddress,
int128 index
);
constructor (IPermanentStorage _permStorage, address _weth) public {
permStorage = _permStorage;
weth = _weth;
}
function isETH(address assetAddress) public pure returns (bool) {
return (assetAddress == ZERO_ADDRESS || assetAddress == ETH_ADDRESS);
}
function getMakerOutAmount(
address _makerAddr,
address _takerAssetAddr,
address _makerAssetAddr,
uint256 _takerAssetAmount
)
public
view
returns (uint256)
{
uint256 makerAssetAmount;
if (_makerAddr == UNISWAP_V2_ROUTER_02_ADDRESS ||
_makerAddr == SUSHISWAP_ROUTER_ADDRESS) {
IUniswapRouterV2 router = IUniswapRouterV2(_makerAddr);
address[] memory path = new address[](2);
if (isETH(_takerAssetAddr)) {
path[0] = weth;
path[1] = _makerAssetAddr;
} else if (isETH(_makerAssetAddr)) {
path[0] = _takerAssetAddr;
path[1] = weth;
} else {
path[0] = _takerAssetAddr;
path[1] = _makerAssetAddr;
}
uint256[] memory amounts = router.getAmountsOut(_takerAssetAmount, path);
makerAssetAmount = amounts[1];
} else {
address curveTakerIntenalAsset = isETH(_takerAssetAddr) ? ETH_ADDRESS : _takerAssetAddr;
address curveMakerIntenalAsset = isETH(_makerAssetAddr) ? ETH_ADDRESS : _makerAssetAddr;
(int128 fromTokenCurveIndex, int128 toTokenCurveIndex, uint16 swapMethod,) = permStorage.getCurvePoolInfo(_makerAddr, curveTakerIntenalAsset, curveMakerIntenalAsset);
if (fromTokenCurveIndex > 0 && toTokenCurveIndex > 0) {
require(swapMethod != 0, "AMMQuoter: swap method not registered");
// Substract index by 1 because indices stored in `permStorage` starts from 1
fromTokenCurveIndex = fromTokenCurveIndex - 1;
toTokenCurveIndex = toTokenCurveIndex - 1;
ICurveFi curve = ICurveFi(_makerAddr);
if (swapMethod == 1) {
makerAssetAmount = curve.get_dy(fromTokenCurveIndex, toTokenCurveIndex, _takerAssetAmount).sub(1);
} else if (swapMethod == 2) {
makerAssetAmount = curve.get_dy_underlying(fromTokenCurveIndex, toTokenCurveIndex, _takerAssetAmount).sub(1);
}
} else {
revert("AMMQuoter: Unsupported makerAddr");
}
}
return makerAssetAmount;
}
function getBestOutAmount(
address[] calldata _makerAddresses,
address _takerAssetAddr,
address _makerAssetAddr,
uint256 _takerAssetAmount
)
external
view
returns (address bestMaker, uint256 bestAmount)
{
bestAmount = 0;
uint256 poolLength = _makerAddresses.length;
for (uint256 i = 0; i < poolLength; i++) {
address makerAddress = _makerAddresses[i];
uint256 makerAssetAmount = getMakerOutAmount(makerAddress, _takerAssetAddr, _makerAssetAddr, _takerAssetAmount);
if (makerAssetAmount > bestAmount) {
bestAmount = makerAssetAmount;
bestMaker = makerAddress;
}
}
return (bestMaker, bestAmount);
}
function getTakerInAmount(
address _makerAddr,
address _takerAssetAddr,
address _makerAssetAddr,
uint256 _makerAssetAmount
)
public
view
returns (uint256)
{
uint256 takerAssetAmount;
if (_makerAddr == UNISWAP_V2_ROUTER_02_ADDRESS ||
_makerAddr == SUSHISWAP_ROUTER_ADDRESS) {
IUniswapRouterV2 router = IUniswapRouterV2(_makerAddr);
address[] memory path = new address[](2);
if (isETH(_takerAssetAddr)) {
path[0] = weth;
path[1] = _makerAssetAddr;
} else if (isETH(_makerAssetAddr)) {
path[0] = _takerAssetAddr;
path[1] = weth;
} else {
path[0] = _takerAssetAddr;
path[1] = _makerAssetAddr;
}
uint256[] memory amounts = router.getAmountsIn(_makerAssetAmount, path);
takerAssetAmount = amounts[0];
} else {
address curveTakerIntenalAsset = isETH(_takerAssetAddr) ? ETH_ADDRESS : _takerAssetAddr;
address curveMakerIntenalAsset = isETH(_makerAssetAddr) ? ETH_ADDRESS : _makerAssetAddr;
(int128 fromTokenCurveIndex, int128 toTokenCurveIndex, uint16 swapMethod, bool supportGetDx) = permStorage.getCurvePoolInfo(_makerAddr, curveTakerIntenalAsset, curveMakerIntenalAsset);
if (fromTokenCurveIndex > 0 && toTokenCurveIndex > 0) {
require(swapMethod != 0, "AMMQuoter: swap method not registered");
// Substract index by 1 because indices stored in `permStorage` starts from 1
fromTokenCurveIndex = fromTokenCurveIndex - 1;
toTokenCurveIndex = toTokenCurveIndex - 1;
ICurveFi curve = ICurveFi(_makerAddr);
if (supportGetDx) {
if (swapMethod == 1) {
takerAssetAmount = curve.get_dx(fromTokenCurveIndex, toTokenCurveIndex, _makerAssetAmount);
} else if (swapMethod == 2) {
takerAssetAmount = curve.get_dx_underlying(fromTokenCurveIndex, toTokenCurveIndex, _makerAssetAmount);
}
} else {
if (swapMethod == 1) {
// does not support get_dx_underlying, try to get an estimated rate here
takerAssetAmount = curve.get_dy(toTokenCurveIndex, fromTokenCurveIndex, _makerAssetAmount);
} else if (swapMethod == 2) {
takerAssetAmount = curve.get_dy_underlying(toTokenCurveIndex, fromTokenCurveIndex, _makerAssetAmount);
}
}
} else {
revert("AMMQuoter: Unsupported makerAddr");
}
}
return takerAssetAmount;
}
function getBestInAmount(
address[] calldata _makerAddresses,
address _takerAssetAddr,
address _makerAssetAddr,
uint256 _makerAssetAmount
)
external
view
returns (address bestMaker, uint256 bestAmount)
{
bestAmount = 2**256 - 1;
uint256 poolLength = _makerAddresses.length;
for (uint256 i = 0; i < poolLength; i++) {
address makerAddress = _makerAddresses[i];
uint256 takerAssetAmount = getTakerInAmount(makerAddress, _takerAssetAddr, _makerAssetAddr, _makerAssetAmount);
if (takerAssetAmount < bestAmount) {
bestAmount = takerAssetAmount;
bestMaker = makerAddress;
}
}
return (bestMaker, bestAmount);
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}pragma solidity >=0.5.0 <0.8.0;
interface IUniswapExchange {
// Address of ERC20 token sold on this exchange
function tokenAddress() external view returns (address token);
// Address of Uniswap Factory
function factoryAddress() external view returns (address factory);
// Provide Liquidity
function addLiquidity(uint256 min_liquidity, uint256 max_tokens, uint256 deadline) external payable returns (uint256);
function removeLiquidity(uint256 amount, uint256 min_eth, uint256 min_tokens, uint256 deadline) external returns (uint256, uint256);
// Get Prices
function getEthToTokenInputPrice(uint256 eth_sold) external view returns (uint256 tokens_bought);
function getEthToTokenOutputPrice(uint256 tokens_bought) external view returns (uint256 eth_sold);
function getTokenToEthInputPrice(uint256 tokens_sold) external view returns (uint256 eth_bought);
function getTokenToEthOutputPrice(uint256 eth_bought) external view returns (uint256 tokens_sold);
// Trade ETH to ERC20
function ethToTokenSwapInput(uint256 min_tokens, uint256 deadline) external payable returns (uint256 tokens_bought);
function ethToTokenTransferInput(uint256 min_tokens, uint256 deadline, address recipient) external payable returns (uint256 tokens_bought);
function ethToTokenSwapOutput(uint256 tokens_bought, uint256 deadline) external payable returns (uint256 eth_sold);
function ethToTokenTransferOutput(uint256 tokens_bought, uint256 deadline, address recipient) external payable returns (uint256 eth_sold);
// Trade ERC20 to ETH
function tokenToEthSwapInput(uint256 tokens_sold, uint256 min_eth, uint256 deadline) external returns (uint256 eth_bought);
function tokenToEthTransferInput(uint256 tokens_sold, uint256 min_eth, uint256 deadline, address recipient) external returns (uint256 eth_bought);
function tokenToEthSwapOutput(uint256 eth_bought, uint256 max_tokens, uint256 deadline) external returns (uint256 tokens_sold);
function tokenToEthTransferOutput(uint256 eth_bought, uint256 max_tokens, uint256 deadline, address recipient) external returns (uint256 tokens_sold);
// Trade ERC20 to ERC20
function tokenToTokenSwapInput(uint256 tokens_sold, uint256 min_tokens_bought, uint256 min_eth_bought, uint256 deadline, address token_addr) external returns (uint256 tokens_bought);
function tokenToTokenTransferInput(uint256 tokens_sold, uint256 min_tokens_bought, uint256 min_eth_bought, uint256 deadline, address recipient, address token_addr) external returns (uint256 tokens_bought);
function tokenToTokenSwapOutput(uint256 tokens_bought, uint256 max_tokens_sold, uint256 max_eth_sold, uint256 deadline, address token_addr) external returns (uint256 tokens_sold);
function tokenToTokenTransferOutput(uint256 tokens_bought, uint256 max_tokens_sold, uint256 max_eth_sold, uint256 deadline, address recipient, address token_addr) external returns (uint256 tokens_sold);
// Trade ERC20 to Custom Pool
function tokenToExchangeSwapInput(uint256 tokens_sold, uint256 min_tokens_bought, uint256 min_eth_bought, uint256 deadline, address exchange_addr) external returns (uint256 tokens_bought);
function tokenToExchangeTransferInput(uint256 tokens_sold, uint256 min_tokens_bought, uint256 min_eth_bought, uint256 deadline, address recipient, address exchange_addr) external returns (uint256 tokens_bought);
function tokenToExchangeSwapOutput(uint256 tokens_bought, uint256 max_tokens_sold, uint256 max_eth_sold, uint256 deadline, address exchange_addr) external returns (uint256 tokens_sold);
function tokenToExchangeTransferOutput(uint256 tokens_bought, uint256 max_tokens_sold, uint256 max_eth_sold, uint256 deadline, address recipient, address exchange_addr) external returns (uint256 tokens_sold);
// ERC20 comaptibility for liquidity tokens
function name() external view returns (bytes32);
function symbol() external view returns (bytes32);
function decimals() external view returns (uint256);
function transfer(address _to, uint256 _value) external returns (bool);
function transferFrom(address _from, address _to, uint256 value) external returns (bool);
function approve(address _spender, uint256 _value) external returns (bool);
function allowance(address _owner, address _spender) external view returns (uint256);
function balanceOf(address _owner) external view returns (uint256);
function totalSupply() external view returns (uint256);
// Never use
function setup(address token_addr) external;
}pragma solidity >=0.5.0 <0.8.0;
interface IUniswapFactory {
event PairCreated(
address indexed token0,
address indexed token1,
address pair,
uint256
);
function getPair(address tokenA, address tokenB)
external
view
returns (address pair);
function allPairs(uint256) external view returns (address pair);
function allPairsLength() external view returns (uint256);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function createPair(address tokenA, address tokenB)
external
returns (address pair);
// Create Exchange
function createExchange(address token) external returns (address exchange);
// Get Exchange and Token Info
function getExchange(address token) external view returns (address exchange);
function getToken(address exchange) external view returns (address token);
function getTokenWithId(uint256 tokenId) external view returns (address token);
// Never use
function initializeFactory(address template) external;
}// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0 <0.8.0;
interface IUniswapRouterV2 {
function swapExactTokensForTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function addLiquidity(
address tokenA,
address tokenB,
uint256 amountADesired,
uint256 amountBDesired,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
)
external
returns (
uint256 amountA,
uint256 amountB,
uint256 liquidity
);
function addLiquidityETH(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
)
external
payable
returns (
uint256 amountToken,
uint256 amountETH,
uint256 liquidity
);
function removeLiquidity(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
) external returns (uint256 amountA, uint256 amountB);
function getAmountsOut(uint256 amountIn, address[] calldata path)
external
view
returns (uint256[] memory amounts);
function getAmountsIn(uint256 amountOut, address[] calldata path)
external
view
returns (uint256[] memory amounts);
function swapETHForExactTokens(
uint256 amountOut,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
function swapExactETHForTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
}pragma solidity >=0.5.0 <0.8.0;
interface ICurveFi {
function get_virtual_price() external returns (uint256 out);
function add_liquidity(
uint256[2] calldata amounts,
uint256 deadline
) external;
function add_liquidity(
// sBTC pool
uint256[3] calldata amounts,
uint256 min_mint_amount
) external;
function add_liquidity(
// bUSD pool
uint256[4] calldata amounts,
uint256 min_mint_amount
) external;
function get_dx(
int128 i,
int128 j,
uint256 dy
) external view returns (uint256 out);
function get_dx_underlying(
int128 i,
int128 j,
uint256 dy
) external view returns (uint256 out);
function get_dy(
int128 i,
int128 j,
uint256 dx
) external view returns (uint256 out);
function get_dy_underlying(
int128 i,
int128 j,
uint256 dx
) external view returns (uint256 out);
function exchange(
int128 i,
int128 j,
uint256 dx,
uint256 min_dy
) external payable;
function exchange(
int128 i,
int128 j,
uint256 dx,
uint256 min_dy,
uint256 deadline
) external payable;
function exchange_underlying(
int128 i,
int128 j,
uint256 dx,
uint256 min_dy
) external payable;
function exchange_underlying(
int128 i,
int128 j,
uint256 dx,
uint256 min_dy,
uint256 deadline
) external payable;
function remove_liquidity(
uint256 _amount,
uint256 deadline,
uint256[2] calldata min_amounts
) external;
function remove_liquidity_imbalance(
uint256[2] calldata amounts,
uint256 deadline
) external;
function remove_liquidity_imbalance(
uint256[3] calldata amounts,
uint256 max_burn_amount
) external;
function remove_liquidity(uint256 _amount, uint256[3] calldata amounts)
external;
function remove_liquidity_imbalance(
uint256[4] calldata amounts,
uint256 max_burn_amount
) external;
function remove_liquidity(uint256 _amount, uint256[4] calldata amounts)
external;
function commit_new_parameters(
int128 amplification,
int128 new_fee,
int128 new_admin_fee
) external;
function apply_new_parameters() external;
function revert_new_parameters() external;
function commit_transfer_ownership(address _owner) external;
function apply_transfer_ownership() external;
function revert_transfer_ownership() external;
function withdraw_admin_fees() external;
function coins(int128 arg0) external returns (address out);
function underlying_coins(int128 arg0) external returns (address out);
function balances(int128 arg0) external returns (uint256 out);
function A() external returns (int128 out);
function fee() external returns (int128 out);
function admin_fee() external returns (int128 out);
function owner() external returns (address out);
function admin_actions_deadline() external returns (uint256 out);
function transfer_ownership_deadline() external returns (uint256 out);
function future_A() external returns (int128 out);
function future_fee() external returns (int128 out);
function future_admin_fee() external returns (int128 out);
function future_owner() external returns (address out);
}pragma solidity ^0.6.0;
interface IWETH {
function deposit() external payable;
function withdraw(uint256 amount) external;
function transferFrom(address src, address dst, uint wad) external returns (bool);
}pragma solidity ^0.6.0;
interface IPermanentStorage {
function wethAddr() external view returns (address);
function getCurvePoolInfo(address _makerAddr, address _takerAssetAddr, address _makerAssetAddr) external view returns (int128 takerAssetIndex, int128 makerAssetIndex, uint16 swapMethod, bool supportGetDx);
function setCurvePoolInfo(address _makerAddr, address[] calldata _underlyingCoins, address[] calldata _coins, bool _supportGetDx) external;
function isTransactionSeen(bytes32 _transactionHash) external view returns (bool);
function isRelayerValid(address _relayer) external view returns (bool);
function setTransactionSeen(bytes32 _transactionHash) external;
function setRelayersValid(address[] memory _relayers, bool[] memory _isValids) external;
}{
"optimizer": {
"enabled": true,
"runs": 1000
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IPermanentStorage","name":"_permStorage","type":"address"},{"internalType":"address","name":"_weth","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"makerAddress","type":"address"},{"indexed":true,"internalType":"address","name":"assetAddress","type":"address"},{"indexed":false,"internalType":"int128","name":"index","type":"int128"}],"name":"CurveTokenAdded","type":"event"},{"inputs":[],"name":"SUSHISWAP_ROUTER_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNISWAP_V2_ROUTER_02_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_makerAddresses","type":"address[]"},{"internalType":"address","name":"_takerAssetAddr","type":"address"},{"internalType":"address","name":"_makerAssetAddr","type":"address"},{"internalType":"uint256","name":"_makerAssetAmount","type":"uint256"}],"name":"getBestInAmount","outputs":[{"internalType":"address","name":"bestMaker","type":"address"},{"internalType":"uint256","name":"bestAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_makerAddresses","type":"address[]"},{"internalType":"address","name":"_takerAssetAddr","type":"address"},{"internalType":"address","name":"_makerAssetAddr","type":"address"},{"internalType":"uint256","name":"_takerAssetAmount","type":"uint256"}],"name":"getBestOutAmount","outputs":[{"internalType":"address","name":"bestMaker","type":"address"},{"internalType":"uint256","name":"bestAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_makerAddr","type":"address"},{"internalType":"address","name":"_takerAssetAddr","type":"address"},{"internalType":"address","name":"_makerAssetAddr","type":"address"},{"internalType":"uint256","name":"_takerAssetAmount","type":"uint256"}],"name":"getMakerOutAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_makerAddr","type":"address"},{"internalType":"address","name":"_takerAssetAddr","type":"address"},{"internalType":"address","name":"_makerAssetAddr","type":"address"},{"internalType":"uint256","name":"_makerAssetAmount","type":"uint256"}],"name":"getTakerInAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"assetAddress","type":"address"}],"name":"isETH","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"permStorage","outputs":[{"internalType":"contract IPermanentStorage","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60c060405234801561001057600080fd5b506040516114e83803806114e88339818101604052604081101561003357600080fd5b5080516020909101516001600160601b0319606092831b811660a052911b1660805260805160601c60a05160601c61144c61009c600039806108485280610ecd52806112b55250806103dc528061051252806105cf5280610ba85280610c65525061144c6000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c8063a94c12bc11610076578063bc2990331161005b578063bc299033146102f7578063c49e4fd914610333578063f70a25081461033b576100be565b8063a94c12bc146102e7578063bb8a43b9146102ef576100be565b80634bbf902b116100a75780634bbf902b1461019357806354fd4d501461021c578063a673e16314610299576100be565b806319cff21e146100c35780633fc8cef31461016f575b600080fd5b61014c600480360360808110156100d957600080fd5b8101906020810181356401000000008111156100f457600080fd5b82018360208201111561010657600080fd5b8035906020019184602083028401116401000000008311171561012857600080fd5b91935091506001600160a01b03813581169160208101359091169060400135610375565b604080516001600160a01b03909316835260208301919091528051918290030190f35b6101776103da565b604080516001600160a01b039092168252519081900360200190f35b61014c600480360360808110156101a957600080fd5b8101906020810181356401000000008111156101c457600080fd5b8201836020820111156101d657600080fd5b803590602001918460208302840111640100000000831117156101f857600080fd5b91935091506001600160a01b038135811691602081013590911690604001356103fe565b610224610455565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561025e578181015183820152602001610246565b50505050905090810190601f16801561028b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102d5600480360360808110156102af57600080fd5b506001600160a01b0381358116916020810135821691604082013516906060013561048e565b60408051918252519081900360200190f35b610177610af4565b610177610b0c565b6102d56004803603608081101561030d57600080fd5b506001600160a01b03813581169160208101358216916040820135169060600135610b24565b6101776112b3565b6103616004803603602081101561035157600080fd5b50356001600160a01b03166112d7565b604080519115158252519081900360200190f35b600060001985825b818110156103ce57600089898381811061039357fe5b905060200201356001600160a01b0316905060006103b3828a8a8a610b24565b9050848110156103c4578094508195505b505060010161037d565b50509550959350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008085815b818110156103ce57600089898381811061041a57fe5b905060200201356001600160a01b03169050600061043a828a8a8a61048e565b90508481111561044b578094508195505b5050600101610404565b6040518060400160405280600581526020017f352e312e3000000000000000000000000000000000000000000000000000000081525081565b6000806001600160a01b038616737a250d5630b4cf539739df2c5dacb4c659f2488d14806104d857506001600160a01b03861673d9e1ce17f2641f24ae83637ab66a2cca9c378b9f145b156107e7576040805160028082526060808301845289939092919060208301908036833701905050905061050b876112d7565b15610591577f00000000000000000000000000000000000000000000000000000000000000008160008151811061053e57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050858160018151811061056c57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050610658565b61059a866112d7565b156105fb5786816000815181106105ad57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000008160018151811061056c57fe5b868160008151811061060957fe5b60200260200101906001600160a01b031690816001600160a01b031681525050858160018151811061063757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b604080517fd06ca61f00000000000000000000000000000000000000000000000000000000815260048101878152602482019283528351604483015283516060936001600160a01b0387169363d06ca61f938b9388939192606401906020808601910280838360005b838110156106d95781810151838201526020016106c1565b50505050905001935050505060006040518083038186803b1580156106fd57600080fd5b505afa158015610711573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561073a57600080fd5b810190808051604051939291908464010000000082111561075a57600080fd5b90830190602082018581111561076f57600080fd5b825186602082028301116401000000008211171561078c57600080fd5b82525081516020918201928201910280838360005b838110156107b95781810151838201526020016107a1565b505050509050016040525050509050806001815181106107d557fe5b60200260200101519350505050610aeb565b60006107f2866112d7565b6107fc5785610812565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee5b9050600061081f866112d7565b610829578561083f565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee5b905060008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638ab4a8cc8c87876040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b03168152602001826001600160a01b03168152602001935050505060806040518083038186803b1580156108d557600080fd5b505afa1580156108e9573d6000803e3d6000fd5b505050506040513d60808110156108ff57600080fd5b508051602082015160409092015190945090925090506000600f84900b13801561092c5750600082600f0b135b15610a985761ffff81166109715760405162461bcd60e51b81526004018080602001828103825260258152602001806113f26025913960400191505060405180910390fd5b6000199283019291909101908a61ffff821660011415610a2357610a1c6001826001600160a01b0316635e0d443f87878e6040518463ffffffff1660e01b81526004018084600f0b815260200183600f0b8152602001828152602001935050505060206040518083038186803b1580156109ea57600080fd5b505afa1580156109fe573d6000803e3d6000fd5b505050506040513d6020811015610a1457600080fd5b505190611311565b9650610a92565b8161ffff1660021415610a9257610a8f6001826001600160a01b03166307211ef787878e6040518463ffffffff1660e01b81526004018084600f0b815260200183600f0b8152602001828152602001935050505060206040518083038186803b1580156109ea57600080fd5b96505b50610ae5565b6040805162461bcd60e51b815260206004820181905260248201527f414d4d51756f7465723a20556e737570706f72746564206d616b657241646472604482015290519081900360640190fd5b50505050505b95945050505050565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b73d9e1ce17f2641f24ae83637ab66a2cca9c378b9f81565b6000806001600160a01b038616737a250d5630b4cf539739df2c5dacb4c659f2488d1480610b6e57506001600160a01b03861673d9e1ce17f2641f24ae83637ab66a2cca9c378b9f145b15610e6b5760408051600280825260608083018452899390929190602083019080368337019050509050610ba1876112d7565b15610c27577f000000000000000000000000000000000000000000000000000000000000000081600081518110610bd457fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508581600181518110610c0257fe5b60200260200101906001600160a01b031690816001600160a01b031681525050610cee565b610c30866112d7565b15610c91578681600081518110610c4357fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110610c0257fe5b8681600081518110610c9f57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508581600181518110610ccd57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b604080517f1f00ca7400000000000000000000000000000000000000000000000000000000815260048101878152602482019283528351604483015283516060936001600160a01b03871693631f00ca74938b9388939192606401906020808601910280838360005b83811015610d6f578181015183820152602001610d57565b50505050905001935050505060006040518083038186803b158015610d9357600080fd5b505afa158015610da7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610dd057600080fd5b8101908080516040519392919084640100000000821115610df057600080fd5b908301906020820185811115610e0557600080fd5b8251866020820283011164010000000082111715610e2257600080fd5b82525081516020918201928201910280838360005b83811015610e4f578181015183820152602001610e37565b505050509050016040525050509050806000815181106107d557fe5b6000610e76866112d7565b610e805785610e96565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee5b90506000610ea3866112d7565b610ead5785610ec3565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee5b90506000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638ab4a8cc8d88886040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b03168152602001826001600160a01b03168152602001935050505060806040518083038186803b158015610f5a57600080fd5b505afa158015610f6e573d6000803e3d6000fd5b505050506040513d6080811015610f8457600080fd5b50805160208201516040830151606090930151919650945090925090506000600f85900b138015610fb85750600083600f0b135b15610a985761ffff8216610ffd5760405162461bcd60e51b81526004018080602001828103825260258152602001806113f26025913960400191505060405180910390fd5b6000199384019392909201918b8115611175578261ffff16600114156110c257604080517f67df02ca000000000000000000000000000000000000000000000000000000008152600f87810b600483015286900b6024820152604481018c905290516001600160a01b038316916367df02ca916064808301926020929190829003018186803b15801561108f57600080fd5b505afa1580156110a3573d6000803e3d6000fd5b505050506040513d60208110156110b957600080fd5b50519750611170565b8261ffff166002141561117057604080517f0e71d1b9000000000000000000000000000000000000000000000000000000008152600f87810b600483015286900b6024820152604481018c905290516001600160a01b03831691630e71d1b9916064808301926020929190829003018186803b15801561114157600080fd5b505afa158015611155573d6000803e3d6000fd5b505050506040513d602081101561116b57600080fd5b505197505b6112a2565b8261ffff16600114156111f457604080517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f86810b600483015287900b6024820152604481018c905290516001600160a01b03831691635e0d443f916064808301926020929190829003018186803b15801561114157600080fd5b8261ffff16600214156112a257604080517f07211ef7000000000000000000000000000000000000000000000000000000008152600f86810b600483015287900b6024820152604481018c905290516001600160a01b038316916307211ef7916064808301926020929190829003018186803b15801561127357600080fd5b505afa158015611287573d6000803e3d6000fd5b505050506040513d602081101561129d57600080fd5b505197505b505050505050509050949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006001600160a01b038216158061130b57506001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b92915050565b600061135383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061135a565b9392505050565b600081848411156113e95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156113ae578181015183820152602001611396565b50505050905090810190601f1680156113db5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe414d4d51756f7465723a2073776170206d6574686f64206e6f742072656769737465726564a26469706673582212206e2b5e4d39bf411a6e84859d1bf83ff8174174f698266ecc92359775a302162464736f6c634300060c00330000000000000000000000006d9cc14a1d36e6ff13fc6efa9e9326fcd12e7903000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100be5760003560e01c8063a94c12bc11610076578063bc2990331161005b578063bc299033146102f7578063c49e4fd914610333578063f70a25081461033b576100be565b8063a94c12bc146102e7578063bb8a43b9146102ef576100be565b80634bbf902b116100a75780634bbf902b1461019357806354fd4d501461021c578063a673e16314610299576100be565b806319cff21e146100c35780633fc8cef31461016f575b600080fd5b61014c600480360360808110156100d957600080fd5b8101906020810181356401000000008111156100f457600080fd5b82018360208201111561010657600080fd5b8035906020019184602083028401116401000000008311171561012857600080fd5b91935091506001600160a01b03813581169160208101359091169060400135610375565b604080516001600160a01b03909316835260208301919091528051918290030190f35b6101776103da565b604080516001600160a01b039092168252519081900360200190f35b61014c600480360360808110156101a957600080fd5b8101906020810181356401000000008111156101c457600080fd5b8201836020820111156101d657600080fd5b803590602001918460208302840111640100000000831117156101f857600080fd5b91935091506001600160a01b038135811691602081013590911690604001356103fe565b610224610455565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561025e578181015183820152602001610246565b50505050905090810190601f16801561028b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102d5600480360360808110156102af57600080fd5b506001600160a01b0381358116916020810135821691604082013516906060013561048e565b60408051918252519081900360200190f35b610177610af4565b610177610b0c565b6102d56004803603608081101561030d57600080fd5b506001600160a01b03813581169160208101358216916040820135169060600135610b24565b6101776112b3565b6103616004803603602081101561035157600080fd5b50356001600160a01b03166112d7565b604080519115158252519081900360200190f35b600060001985825b818110156103ce57600089898381811061039357fe5b905060200201356001600160a01b0316905060006103b3828a8a8a610b24565b9050848110156103c4578094508195505b505060010161037d565b50509550959350505050565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b60008085815b818110156103ce57600089898381811061041a57fe5b905060200201356001600160a01b03169050600061043a828a8a8a61048e565b90508481111561044b578094508195505b5050600101610404565b6040518060400160405280600581526020017f352e312e3000000000000000000000000000000000000000000000000000000081525081565b6000806001600160a01b038616737a250d5630b4cf539739df2c5dacb4c659f2488d14806104d857506001600160a01b03861673d9e1ce17f2641f24ae83637ab66a2cca9c378b9f145b156107e7576040805160028082526060808301845289939092919060208301908036833701905050905061050b876112d7565b15610591577f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160008151811061053e57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050858160018151811061056c57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050610658565b61059a866112d7565b156105fb5786816000815181106105ad57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061056c57fe5b868160008151811061060957fe5b60200260200101906001600160a01b031690816001600160a01b031681525050858160018151811061063757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b604080517fd06ca61f00000000000000000000000000000000000000000000000000000000815260048101878152602482019283528351604483015283516060936001600160a01b0387169363d06ca61f938b9388939192606401906020808601910280838360005b838110156106d95781810151838201526020016106c1565b50505050905001935050505060006040518083038186803b1580156106fd57600080fd5b505afa158015610711573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561073a57600080fd5b810190808051604051939291908464010000000082111561075a57600080fd5b90830190602082018581111561076f57600080fd5b825186602082028301116401000000008211171561078c57600080fd5b82525081516020918201928201910280838360005b838110156107b95781810151838201526020016107a1565b505050509050016040525050509050806001815181106107d557fe5b60200260200101519350505050610aeb565b60006107f2866112d7565b6107fc5785610812565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee5b9050600061081f866112d7565b610829578561083f565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee5b905060008060007f0000000000000000000000006d9cc14a1d36e6ff13fc6efa9e9326fcd12e79036001600160a01b0316638ab4a8cc8c87876040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b03168152602001826001600160a01b03168152602001935050505060806040518083038186803b1580156108d557600080fd5b505afa1580156108e9573d6000803e3d6000fd5b505050506040513d60808110156108ff57600080fd5b508051602082015160409092015190945090925090506000600f84900b13801561092c5750600082600f0b135b15610a985761ffff81166109715760405162461bcd60e51b81526004018080602001828103825260258152602001806113f26025913960400191505060405180910390fd5b6000199283019291909101908a61ffff821660011415610a2357610a1c6001826001600160a01b0316635e0d443f87878e6040518463ffffffff1660e01b81526004018084600f0b815260200183600f0b8152602001828152602001935050505060206040518083038186803b1580156109ea57600080fd5b505afa1580156109fe573d6000803e3d6000fd5b505050506040513d6020811015610a1457600080fd5b505190611311565b9650610a92565b8161ffff1660021415610a9257610a8f6001826001600160a01b03166307211ef787878e6040518463ffffffff1660e01b81526004018084600f0b815260200183600f0b8152602001828152602001935050505060206040518083038186803b1580156109ea57600080fd5b96505b50610ae5565b6040805162461bcd60e51b815260206004820181905260248201527f414d4d51756f7465723a20556e737570706f72746564206d616b657241646472604482015290519081900360640190fd5b50505050505b95945050505050565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b73d9e1ce17f2641f24ae83637ab66a2cca9c378b9f81565b6000806001600160a01b038616737a250d5630b4cf539739df2c5dacb4c659f2488d1480610b6e57506001600160a01b03861673d9e1ce17f2641f24ae83637ab66a2cca9c378b9f145b15610e6b5760408051600280825260608083018452899390929190602083019080368337019050509050610ba1876112d7565b15610c27577f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600081518110610bd457fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508581600181518110610c0257fe5b60200260200101906001600160a01b031690816001600160a01b031681525050610cee565b610c30866112d7565b15610c91578681600081518110610c4357fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110610c0257fe5b8681600081518110610c9f57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508581600181518110610ccd57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b604080517f1f00ca7400000000000000000000000000000000000000000000000000000000815260048101878152602482019283528351604483015283516060936001600160a01b03871693631f00ca74938b9388939192606401906020808601910280838360005b83811015610d6f578181015183820152602001610d57565b50505050905001935050505060006040518083038186803b158015610d9357600080fd5b505afa158015610da7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610dd057600080fd5b8101908080516040519392919084640100000000821115610df057600080fd5b908301906020820185811115610e0557600080fd5b8251866020820283011164010000000082111715610e2257600080fd5b82525081516020918201928201910280838360005b83811015610e4f578181015183820152602001610e37565b505050509050016040525050509050806000815181106107d557fe5b6000610e76866112d7565b610e805785610e96565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee5b90506000610ea3866112d7565b610ead5785610ec3565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee5b90506000806000807f0000000000000000000000006d9cc14a1d36e6ff13fc6efa9e9326fcd12e79036001600160a01b0316638ab4a8cc8d88886040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b03168152602001826001600160a01b03168152602001935050505060806040518083038186803b158015610f5a57600080fd5b505afa158015610f6e573d6000803e3d6000fd5b505050506040513d6080811015610f8457600080fd5b50805160208201516040830151606090930151919650945090925090506000600f85900b138015610fb85750600083600f0b135b15610a985761ffff8216610ffd5760405162461bcd60e51b81526004018080602001828103825260258152602001806113f26025913960400191505060405180910390fd5b6000199384019392909201918b8115611175578261ffff16600114156110c257604080517f67df02ca000000000000000000000000000000000000000000000000000000008152600f87810b600483015286900b6024820152604481018c905290516001600160a01b038316916367df02ca916064808301926020929190829003018186803b15801561108f57600080fd5b505afa1580156110a3573d6000803e3d6000fd5b505050506040513d60208110156110b957600080fd5b50519750611170565b8261ffff166002141561117057604080517f0e71d1b9000000000000000000000000000000000000000000000000000000008152600f87810b600483015286900b6024820152604481018c905290516001600160a01b03831691630e71d1b9916064808301926020929190829003018186803b15801561114157600080fd5b505afa158015611155573d6000803e3d6000fd5b505050506040513d602081101561116b57600080fd5b505197505b6112a2565b8261ffff16600114156111f457604080517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f86810b600483015287900b6024820152604481018c905290516001600160a01b03831691635e0d443f916064808301926020929190829003018186803b15801561114157600080fd5b8261ffff16600214156112a257604080517f07211ef7000000000000000000000000000000000000000000000000000000008152600f86810b600483015287900b6024820152604481018c905290516001600160a01b038316916307211ef7916064808301926020929190829003018186803b15801561127357600080fd5b505afa158015611287573d6000803e3d6000fd5b505050506040513d602081101561129d57600080fd5b505197505b505050505050509050949350505050565b7f0000000000000000000000006d9cc14a1d36e6ff13fc6efa9e9326fcd12e790381565b60006001600160a01b038216158061130b57506001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b92915050565b600061135383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061135a565b9392505050565b600081848411156113e95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156113ae578181015183820152602001611396565b50505050905090810190601f1680156113db5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe414d4d51756f7465723a2073776170206d6574686f64206e6f742072656769737465726564a26469706673582212206e2b5e4d39bf411a6e84859d1bf83ff8174174f698266ecc92359775a302162464736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006d9cc14a1d36e6ff13fc6efa9e9326fcd12e7903000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
-----Decoded View---------------
Arg [0] : _permStorage (address): 0x6D9Cc14a1d36E6fF13fc6efA9e9326FcD12E7903
Arg [1] : _weth (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000006d9cc14a1d36e6ff13fc6efa9e9326fcd12e7903
Arg [1] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 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.