Source Code
Overview
ETH Balance
0 ETH
ETH Value
$0.00| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
Latest 12 internal transactions
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 6447813 | 223 days ago | 0.01107604 ETH | ||||
| 6447813 | 223 days ago | 0.00011284 ETH | ||||
| 6447813 | 223 days ago | 0.01118888 ETH | ||||
| 1436465 | 339 days ago | 0.00001 ETH | ||||
| 1436465 | 339 days ago | 0.00001 ETH | ||||
| 651371 | 357 days ago | 0.000001 ETH | ||||
| 651371 | 357 days ago | 0.0000015 ETH | ||||
| 651371 | 357 days ago | 0.0000025 ETH | ||||
| 648752 | 357 days ago | 0.00001 ETH | ||||
| 648752 | 357 days ago | 0.00001 ETH | ||||
| 648752 | 357 days ago | 0.00001 ETH | ||||
| 648752 | 357 days ago | 0.00001 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
LimitOrders
Compiler Version
v0.7.6+commit.7338295f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity 0.7.6;
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(
newOwner != address(0),
"Ownable: new owner is the zero address"
);
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
interface IERC20 {
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
event Transfer(address indexed from, address indexed to, uint256 value);
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
function totalSupply() external view returns (uint256);
function balanceOf(address owner) external view returns (uint256);
function allowance(address owner, address spender)
external
view
returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transfer(address to, uint256 value) external returns (bool);
function transferFrom(
address from,
address to,
uint256 value
) external returns (bool);
}
// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
function safeApprove(
address token,
address to,
uint256 value
) internal {
// bytes4(keccak256(bytes('approve(address,uint256)')));
(bool success, bytes memory data) = token.call(
abi.encodeWithSelector(0x095ea7b3, to, value)
);
require(
success && (data.length == 0 || abi.decode(data, (bool))),
"TransferHelper: APPROVE_FAILED"
);
}
function safeTransfer(
IERC20 token,
address to,
uint256 value
) internal {
// bytes4(keccak256(bytes('transfer(address,uint256)')));
(bool success, bytes memory data) = address(token).call(
abi.encodeWithSelector(0xa9059cbb, to, value)
);
require(
success && (data.length == 0 || abi.decode(data, (bool))),
"TransferHelper: TRANSFER_FAILED"
);
}
function safeTransferFrom(
address token,
address from,
address to,
uint256 value
) internal {
// bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
(bool success, bytes memory data) = token.call(
abi.encodeWithSelector(0x23b872dd, from, to, value)
);
require(
success && (data.length == 0 || abi.decode(data, (bool))),
"TransferHelper: TRANSFER_FROM_FAILED"
);
}
function safeTransferETH(address to, uint256 value) internal {
(bool success, ) = to.call{value: value}(new bytes(0));
require(success, "TransferHelper: ETH_TRANSFER_FAILED");
}
}
// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)
library SafeMath {
function add(uint256 x, uint256 y) internal pure returns (uint256 z) {
require((z = x + y) >= x, "ds-math-add-overflow");
}
function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {
require((z = x - y) <= x, "ds-math-sub-underflow");
}
function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {
require(y == 0 || (z = x * y) / y == x, "ds-math-mul-overflow");
}
function div(uint256 a, uint256 b) internal pure returns (uint256 c) {
require(b > 0, "ds-math-division-by-zero");
c = a / b;
}
}
library PineUtils {
address internal constant ETH_ADDRESS =
address(0x00eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee);
/**
* @notice Get the account's balance of token or ETH
* @param _token - Address of the token
* @param _addr - Address of the account
* @return uint256 - Account's balance of token or ETH
*/
function balanceOf(IERC20 _token, address _addr)
internal
view
returns (uint256)
{
if (ETH_ADDRESS == address(_token)) {
return _addr.balance;
}
return _token.balanceOf(_addr);
}
/**
* @notice Transfer token or ETH to a destinatary
* @param _token - Address of the token
* @param _to - Address of the recipient
* @param _val - Uint256 of the amount to transfer
* @return bool - Whether the transfer was success or not
*/
function transfer(
IERC20 _token,
address _to,
uint256 _val
) internal returns (bool) {
if (ETH_ADDRESS == address(_token)) {
(bool success, ) = _to.call{value: _val}("");
return success;
}
TransferHelper.safeTransfer(_token, _to, _val);
return true;
}
}
interface IERC20Permit {
function permit(
address owner,
address spender,
uint256 amount,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
}
library RevertReasonParser {
function parse(bytes memory data, string memory prefix)
internal
pure
returns (string memory)
{
// https://solidity.readthedocs.io/en/latest/control-structures.html#revert
// We assume that revert reason is abi-encoded as Error(string)
// 68 = 4-byte selector 0x08c379a0 + 32 bytes offset + 32 bytes length
if (
data.length >= 68 &&
data[0] == "\x08" &&
data[1] == "\xc3" &&
data[2] == "\x79" &&
data[3] == "\xa0"
) {
string memory reason;
// solhint-disable no-inline-assembly
assembly {
// 68 = 32 bytes data length + 4-byte selector + 32 bytes offset
reason := add(data, 68)
}
/*
revert reason is padded up to 32 bytes with ABI encoder: Error(string)
also sometimes there is extra 32 bytes of zeros padded in the end:
https://github.com/ethereum/solidity/issues/10170
because of that we can't check for equality and instead check
that string length + extra 68 bytes is less than overall data length
*/
require(
data.length >= 68 + bytes(reason).length,
"Invalid revert reason"
);
return string(abi.encodePacked(prefix, "Error(", reason, ")"));
}
// 36 = 4-byte selector 0x4e487b71 + 32 bytes integer
else if (
data.length == 36 &&
data[0] == "\x4e" &&
data[1] == "\x48" &&
data[2] == "\x7b" &&
data[3] == "\x71"
) {
uint256 code;
// solhint-disable no-inline-assembly
assembly {
// 36 = 32 bytes data length + 4-byte selector
code := mload(add(data, 36))
}
return
string(abi.encodePacked(prefix, "Panic(", _toHex(code), ")"));
}
return string(abi.encodePacked(prefix, "Unknown(", _toHex(data), ")"));
}
function _toHex(uint256 value) private pure returns (string memory) {
return _toHex(abi.encodePacked(value));
}
function _toHex(bytes memory data) private pure returns (string memory) {
bytes16 alphabet = 0x30313233343536373839616263646566;
bytes memory str = new bytes(2 + data.length * 2);
str[0] = "0";
str[1] = "x";
for (uint256 i = 0; i < data.length; i++) {
str[2 * i + 2] = alphabet[uint8(data[i] >> 4)];
str[2 * i + 3] = alphabet[uint8(data[i] & 0x0f)];
}
return string(str);
}
}
contract Permitable {
event Error(string reason);
function _permit(
IERC20 token,
uint256 amount,
bytes calldata permit
) internal {
if (permit.length == 32 * 7) {
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory result) = address(token).call(
abi.encodePacked(IERC20Permit.permit.selector, permit)
);
if (!success) {
string memory reason = RevertReasonParser.parse(
result,
"Permit call failed: "
);
if (token.allowance(msg.sender, address(this)) < amount) {
revert(reason);
} else {
emit Error(reason);
}
}
}
}
}
/**
* Original work by Pine.Finance
* - https://github.com/pine-finance
*
* Authors:
* - Ignacio Mazzara <nachomazzara>
* - Agustin Aguilar <agusx1211>
*/
interface IModule {
/// @notice receive ETH
receive() external payable;
/**
* @notice Executes an order
* @param _inputToken - Address of the input token
* @param _inputAmount - uint256 of the input token amount (order amount)
* @param _owner - Address of the order's owner
* @param _data - Bytes of the order's data
* @param _auxData - Bytes of the auxiliar data used for the handlers to execute the order
* @return bought - amount of output token bought
* @return fee - amount of fee token
*/
function execute(
IERC20 _inputToken,
uint256 _inputAmount,
address payable _owner,
bytes calldata _data,
bytes calldata _auxData
) external returns (uint256 bought, uint256 fee);
}
interface IWETH {
function deposit() external payable;
function transfer(address to, uint256 value) external returns (bool);
function withdraw(uint256) external;
function balanceOf(address account) external view returns (uint256);
}
//
// Original work by Pine.Finance
// - https://github.com/pine-finance
//
// Authors:
// - Ignacio Mazzara <@nachomazzara>
// - Agustin Aguilar <@agusx1211>
/*
* Original work by Pine.Finance
* - https://github.com/pine-finance
*
* Authors:
* - Agustin Aguilar <agusx1211>
* - Ignacio Mazzara <nachomazzara>
*/
contract LimitOrders is IModule, ReentrancyGuard, Ownable {
address public constant ETH_ADDRESS =
address(0x00eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee);
address public immutable WETH;
using SafeMath for uint256;
address payable public TREASURY;
constructor(address payable _treasury, address _WETH) public {
TREASURY = _treasury;
WETH = _WETH;
}
/// @notice receive ETH
receive() external payable override {}
/**
* @notice Executes an order
* @param _inputToken - Address of the input token
* @param _owner - Address of the order's owner
* @param _data - Bytes of the order's data
* @param _auxData - Bytes of the auxiliar data used for the handlers to execute the order
* @return bought - amount of output token bought
*/
function execute(
IERC20 _inputToken,
uint256,
address payable _owner,
bytes calldata _data,
bytes calldata _auxData
)
external
override
nonReentrant
returns (uint256 bought, uint256 treasuryAmount)
{
{
(address handler, bytes memory swapData) = abi.decode(
_auxData,
(address, bytes)
);
// Do not trust on _inputToken, it can mismatch the real balance
uint256 inputAmount = PineUtils.balanceOf(
_inputToken,
address(this)
);
if (address(_inputToken) != ETH_ADDRESS) {
TransferHelper.safeApprove(
address(_inputToken),
address(handler),
inputAmount
);
}
{
(bool success, bytes memory result) = address(handler).call{
value: address(_inputToken) == ETH_ADDRESS ? inputAmount : 0
}(swapData);
if (!success) {
revert(
RevertReasonParser.parse(result, "aggregator failed: ")
);
}
}
}
(IERC20 outputToken, uint256 minReturn) = abi.decode(
_data,
(IERC20, uint256)
);
bought = PineUtils.balanceOf(outputToken, address(this));
require(
bought >= minReturn,
"LimitOrders: ISSUFICIENT_BOUGHT_TOKENS"
);
if (bought > minReturn && TREASURY != address(0)) {
treasuryAmount = bought - minReturn;
if (address(outputToken) == ETH_ADDRESS) {
IWETH(WETH).deposit{value: treasuryAmount}();
}
TransferHelper.safeTransfer(
address(outputToken) == ETH_ADDRESS
? IERC20(WETH)
: outputToken,
TREASURY,
treasuryAmount
);
bought = minReturn;
}
uint256 balanceBefore = PineUtils.balanceOf(outputToken, _owner);
_transferAmount(outputToken, _owner, bought);
uint256 returnAmount = PineUtils.balanceOf(outputToken, _owner) -
balanceBefore;
require(
returnAmount >= minReturn,
"LimitOrders: ISSUFICIENT_RECEIVED_TOKENS"
);
}
/**
* @notice Transfer token or Ether amount to a recipient
* @param _token - Address of the token
* @param _to - Address of the recipient
* @param _amount - uint256 of the amount to be transferred
*/
function _transferAmount(
IERC20 _token,
address payable _to,
uint256 _amount
) internal {
if (address(_token) == ETH_ADDRESS) {
(bool success, ) = _to.call{value: _amount}("");
require(
success,
"LimitOrders: ETH_TRANSFER_FAILED"
);
} else {
TransferHelper.safeTransfer(_token, _to, _amount);
}
}
function setTreasury(address payable _treasury) public onlyOwner {
TREASURY = _treasury;
}
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"bytecodeHash": "none",
"useLiteralContent": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"remappings": [
"@nomad-xyz/=lib/ExcessivelySafeCall/",
"@openzeppelin/=lib/openzeppelin-contracts/",
"@uniswap/=lib/solidity-lib/",
"ExcessivelySafeCall/=lib/ExcessivelySafeCall/src/",
"base64-sol/=lib/base64/",
"base64/=lib/base64/",
"ds-test/=lib/forge-std/lib/ds-test/src/",
"forge-std/=lib/forge-std/src/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/",
"solidity-lib/=lib/solidity-lib/contracts/"
],
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address payable","name":"_treasury","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"ETH_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TREASURY","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_inputToken","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address payable","name":"_owner","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_auxData","type":"bytes"}],"name":"execute","outputs":[{"internalType":"uint256","name":"bought","type":"uint256"},{"internalType":"uint256","name":"treasuryAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_treasury","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60a060405234801561001057600080fd5b506040516114ee3803806114ee8339818101604052604081101561003357600080fd5b508051602090910151600160005561005161004c610087565b61008b565b600280546001600160a01b0319166001600160a01b03939093169290921790915560601b6001600160601b0319166080526100dd565b3390565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60805160601c6113ea610104600039806102cb528061069c528061073e52506113ea6000f3fe60806040526004361061007f5760003560e01c8063ad5c46481161004e578063ad5c4648146100fd578063e7ed35e314610112578063f0f4426014610219578063f2fde38b1461024c57610086565b80632d2c55651461008b578063715018a6146100bc5780638da5cb5b146100d3578063a734f06e146100e857610086565b3661008657005b600080fd5b34801561009757600080fd5b506100a061027f565b604080516001600160a01b039092168252519081900360200190f35b3480156100c857600080fd5b506100d161028e565b005b3480156100df57600080fd5b506100a06102a2565b3480156100f457600080fd5b506100a06102b1565b34801561010957600080fd5b506100a06102c9565b34801561011e57600080fd5b50610200600480360360a081101561013557600080fd5b6001600160a01b03823581169260208101359260408201359092169181019060808101606082013564010000000081111561016f57600080fd5b82018360208201111561018157600080fd5b803590602001918460018302840111640100000000831117156101a357600080fd5b9193909290916020810190356401000000008111156101c157600080fd5b8201836020820111156101d357600080fd5b803590602001918460018302840111640100000000831117156101f557600080fd5b5090925090506102ed565b6040805192835260208301919091528051918290030190f35b34801561022557600080fd5b506100d16004803603602081101561023c57600080fd5b50356001600160a01b03166107f3565b34801561025857600080fd5b506100d16004803603602081101561026f57600080fd5b50356001600160a01b031661081d565b6002546001600160a01b031681565b610296610876565b6102a060006108ea565b565b6001546001600160a01b031690565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008060026000541415610348576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026000908155808585604081101561036057600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561038b57600080fd5b82018360208201111561039d57600080fd5b803590602001918460018302840111640100000000831117156103bf57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505091509150600061041c8c3061093c565b90506001600160a01b038c1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1461044d5761044d8c84836109f6565b6000806001600160a01b03808616908f1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1461047f576000610481565b835b856040518082805190602001908083835b602083106104b15780518252601f199092019160209182019101610492565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610513576040519150601f19603f3d011682016040523d82523d6000602084013e610518565b606091505b5091509150816105db576105578160405180604001604052806013815260200172030b3b3b932b3b0ba37b9103330b4b632b21d1606d1b815250610b5f565b60405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156105a0578181015183820152602001610588565b50505050905090810190601f1680156105cd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5050505050600080878760408110156105f357600080fd5b506001600160a01b038135169250602001359050610611823061093c565b9350808410156106525760405162461bcd60e51b81526004018080602001828103825260268152602001806113b86026913960400191505060405180910390fd5b808411801561066b57506002546001600160a01b031615155b156107745780840392506001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561070f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156106f557600080fd5b505af1158015610709573d6000803e3d6000fd5b50505050505b6107706001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1461073c578261075e565b7f00000000000000000000000000000000000000000000000000000000000000005b6002546001600160a01b031685610f7d565b8093505b6000610780838b61093c565b905061078d838b876110df565b60008161079a858d61093c565b039050828110156107dc5760405162461bcd60e51b815260040180806020018281038252602881526020018061136a6028913960400191505060405180910390fd5b505060016000555091999098509650505050505050565b6107fb610876565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b610825610876565b6001600160a01b03811661086a5760405162461bcd60e51b81526004018080602001828103825260268152602001806113926026913960400191505060405180910390fd5b610873816108ea565b50565b61087e6111c0565b6001600160a01b031661088f6102a2565b6001600160a01b0316146102a0576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b038416141561097457506001600160a01b038116316109f0565b826001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156109c157600080fd5b505afa1580156109d5573d6000803e3d6000fd5b505050506040513d60208110156109eb57600080fd5b505190505b92915050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b1781529251825160009485949389169392918291908083835b60208310610a725780518252601f199092019160209182019101610a53565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610ad4576040519150601f19603f3d011682016040523d82523d6000602084013e610ad9565b606091505b5091509150818015610b07575080511580610b075750808060200190516020811015610b0457600080fd5b50515b610b58576040805162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a20415050524f56455f4641494c45440000604482015290519081900360640190fd5b5050505050565b60606044835110158015610b92575082600081518110610b7b57fe5b6020910101516001600160f81b031916600160fb1b145b8015610bbd575082600181518110610ba657fe5b6020910101516001600160f81b03191660c360f81b145b8015610be8575082600281518110610bd157fe5b6020910101516001600160f81b031916607960f81b145b8015610c13575082600381518110610bfc57fe5b6020910101516001600160f81b031916600560fd1b145b15610d49576060604484019050805160440184511015610c72576040805162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103932bb32b93a103932b0b9b7b760591b604482015290519081900360640190fd5b82816040516020018083805190602001908083835b60208310610ca65780518252601f199092019160209182019101610c87565b51815160209384036101000a60001901801990921691161790526508ae4e4dee4560d31b919093019081528451600690910192850191508083835b60208310610d005780518252601f199092019160209182019101610ce1565b6001836020036101000a03801982511681845116808217855250505050505090500180602960f81b815250600101925050506040516020818303038152906040529150506109f0565b82516024148015610d79575082600081518110610d6257fe5b6020910101516001600160f81b031916602760f91b145b8015610da4575082600181518110610d8d57fe5b6020910101516001600160f81b031916600960fb1b145b8015610dcf575082600281518110610db857fe5b6020910101516001600160f81b031916607b60f81b145b8015610dfa575082600381518110610de357fe5b6020910101516001600160f81b031916607160f81b145b15610e9c57602483015182610e0e826111c4565b6040516020018083805190602001908083835b60208310610e405780518252601f199092019160209182019101610e21565b51815160001960209485036101000a01908116901991909116179052650a0c2dcd2c6560d31b939091019283528451600690930192908501915080838360208310610d005780518252601f199092019160209182019101610ce1565b81610ea6846111ea565b6040516020018083805190602001908083835b60208310610ed85780518252601f199092019160209182019101610eb9565b51815160209384036101000a6000190180199092169116179052670aadcd6dcdeeedc560c31b919093019081528451600890910192850191508083835b60208310610f345780518252601f199092019160209182019101610f15565b6001836020036101000a03801982511681845116808217855250505050505090500180602960f81b81525060010192505050604051602081830303815290604052905092915050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b60208310610ff95780518252601f199092019160209182019101610fda565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461105b576040519150601f19603f3d011682016040523d82523d6000602084013e611060565b606091505b509150915081801561108e57508051158061108e575080806020019051602081101561108b57600080fd5b50515b610b58576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156111b0576040516000906001600160a01b0384169083908381818185875af1925050503d806000811461114f576040519150601f19603f3d011682016040523d82523d6000602084013e611154565b606091505b50509050806111aa576040805162461bcd60e51b815260206004820181905260248201527f4c696d69744f72646572733a204554485f5452414e534645525f4641494c4544604482015290519081900360640190fd5b506111bb565b6111bb838383610f7d565b505050565b3390565b60606109f082604051602001808281526020019150506040516020818303038152906040525b80516060906f181899199a1a9b1b9c1cb0b131b232b360811b9060009060029081020167ffffffffffffffff8111801561122357600080fd5b506040519080825280601f01601f19166020018201604052801561124e576020820181803683370190505b509050600360fc1b8160008151811061126357fe5b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061128c57fe5b60200101906001600160f81b031916908160001a90535060005b8451811015611361578260048683815181106112be57fe5b01602001516001600160f81b031916901c60f81c601081106112dc57fe5b1a60f81b8282600202600201815181106112f257fe5b60200101906001600160f81b031916908160001a9053508285828151811061131657fe5b60209101015160f81c600f166010811061132c57fe5b1a60f81b82826002026003018151811061134257fe5b60200101906001600160f81b031916908160001a9053506001016112a6565b50939250505056fe4c696d69744f72646572733a204953535546494349454e545f52454345495645445f544f4b454e534f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734c696d69744f72646572733a204953535546494349454e545f424f554748545f544f4b454e53a164736f6c6343000706000a0000000000000000000000001167e457803e2d8b75b8b0a33fa3314fbe5595340000000000000000000000004200000000000000000000000000000000000006
Deployed Bytecode
0x60806040526004361061007f5760003560e01c8063ad5c46481161004e578063ad5c4648146100fd578063e7ed35e314610112578063f0f4426014610219578063f2fde38b1461024c57610086565b80632d2c55651461008b578063715018a6146100bc5780638da5cb5b146100d3578063a734f06e146100e857610086565b3661008657005b600080fd5b34801561009757600080fd5b506100a061027f565b604080516001600160a01b039092168252519081900360200190f35b3480156100c857600080fd5b506100d161028e565b005b3480156100df57600080fd5b506100a06102a2565b3480156100f457600080fd5b506100a06102b1565b34801561010957600080fd5b506100a06102c9565b34801561011e57600080fd5b50610200600480360360a081101561013557600080fd5b6001600160a01b03823581169260208101359260408201359092169181019060808101606082013564010000000081111561016f57600080fd5b82018360208201111561018157600080fd5b803590602001918460018302840111640100000000831117156101a357600080fd5b9193909290916020810190356401000000008111156101c157600080fd5b8201836020820111156101d357600080fd5b803590602001918460018302840111640100000000831117156101f557600080fd5b5090925090506102ed565b6040805192835260208301919091528051918290030190f35b34801561022557600080fd5b506100d16004803603602081101561023c57600080fd5b50356001600160a01b03166107f3565b34801561025857600080fd5b506100d16004803603602081101561026f57600080fd5b50356001600160a01b031661081d565b6002546001600160a01b031681565b610296610876565b6102a060006108ea565b565b6001546001600160a01b031690565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b7f000000000000000000000000420000000000000000000000000000000000000681565b60008060026000541415610348576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026000908155808585604081101561036057600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561038b57600080fd5b82018360208201111561039d57600080fd5b803590602001918460018302840111640100000000831117156103bf57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505091509150600061041c8c3061093c565b90506001600160a01b038c1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1461044d5761044d8c84836109f6565b6000806001600160a01b03808616908f1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1461047f576000610481565b835b856040518082805190602001908083835b602083106104b15780518252601f199092019160209182019101610492565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610513576040519150601f19603f3d011682016040523d82523d6000602084013e610518565b606091505b5091509150816105db576105578160405180604001604052806013815260200172030b3b3b932b3b0ba37b9103330b4b632b21d1606d1b815250610b5f565b60405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156105a0578181015183820152602001610588565b50505050905090810190601f1680156105cd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5050505050600080878760408110156105f357600080fd5b506001600160a01b038135169250602001359050610611823061093c565b9350808410156106525760405162461bcd60e51b81526004018080602001828103825260268152602001806113b86026913960400191505060405180910390fd5b808411801561066b57506002546001600160a01b031615155b156107745780840392506001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561070f577f00000000000000000000000042000000000000000000000000000000000000066001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156106f557600080fd5b505af1158015610709573d6000803e3d6000fd5b50505050505b6107706001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1461073c578261075e565b7f00000000000000000000000042000000000000000000000000000000000000065b6002546001600160a01b031685610f7d565b8093505b6000610780838b61093c565b905061078d838b876110df565b60008161079a858d61093c565b039050828110156107dc5760405162461bcd60e51b815260040180806020018281038252602881526020018061136a6028913960400191505060405180910390fd5b505060016000555091999098509650505050505050565b6107fb610876565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b610825610876565b6001600160a01b03811661086a5760405162461bcd60e51b81526004018080602001828103825260268152602001806113926026913960400191505060405180910390fd5b610873816108ea565b50565b61087e6111c0565b6001600160a01b031661088f6102a2565b6001600160a01b0316146102a0576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b038416141561097457506001600160a01b038116316109f0565b826001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156109c157600080fd5b505afa1580156109d5573d6000803e3d6000fd5b505050506040513d60208110156109eb57600080fd5b505190505b92915050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b1781529251825160009485949389169392918291908083835b60208310610a725780518252601f199092019160209182019101610a53565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610ad4576040519150601f19603f3d011682016040523d82523d6000602084013e610ad9565b606091505b5091509150818015610b07575080511580610b075750808060200190516020811015610b0457600080fd5b50515b610b58576040805162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a20415050524f56455f4641494c45440000604482015290519081900360640190fd5b5050505050565b60606044835110158015610b92575082600081518110610b7b57fe5b6020910101516001600160f81b031916600160fb1b145b8015610bbd575082600181518110610ba657fe5b6020910101516001600160f81b03191660c360f81b145b8015610be8575082600281518110610bd157fe5b6020910101516001600160f81b031916607960f81b145b8015610c13575082600381518110610bfc57fe5b6020910101516001600160f81b031916600560fd1b145b15610d49576060604484019050805160440184511015610c72576040805162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103932bb32b93a103932b0b9b7b760591b604482015290519081900360640190fd5b82816040516020018083805190602001908083835b60208310610ca65780518252601f199092019160209182019101610c87565b51815160209384036101000a60001901801990921691161790526508ae4e4dee4560d31b919093019081528451600690910192850191508083835b60208310610d005780518252601f199092019160209182019101610ce1565b6001836020036101000a03801982511681845116808217855250505050505090500180602960f81b815250600101925050506040516020818303038152906040529150506109f0565b82516024148015610d79575082600081518110610d6257fe5b6020910101516001600160f81b031916602760f91b145b8015610da4575082600181518110610d8d57fe5b6020910101516001600160f81b031916600960fb1b145b8015610dcf575082600281518110610db857fe5b6020910101516001600160f81b031916607b60f81b145b8015610dfa575082600381518110610de357fe5b6020910101516001600160f81b031916607160f81b145b15610e9c57602483015182610e0e826111c4565b6040516020018083805190602001908083835b60208310610e405780518252601f199092019160209182019101610e21565b51815160001960209485036101000a01908116901991909116179052650a0c2dcd2c6560d31b939091019283528451600690930192908501915080838360208310610d005780518252601f199092019160209182019101610ce1565b81610ea6846111ea565b6040516020018083805190602001908083835b60208310610ed85780518252601f199092019160209182019101610eb9565b51815160209384036101000a6000190180199092169116179052670aadcd6dcdeeedc560c31b919093019081528451600890910192850191508083835b60208310610f345780518252601f199092019160209182019101610f15565b6001836020036101000a03801982511681845116808217855250505050505090500180602960f81b81525060010192505050604051602081830303815290604052905092915050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b60208310610ff95780518252601f199092019160209182019101610fda565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461105b576040519150601f19603f3d011682016040523d82523d6000602084013e611060565b606091505b509150915081801561108e57508051158061108e575080806020019051602081101561108b57600080fd5b50515b610b58576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156111b0576040516000906001600160a01b0384169083908381818185875af1925050503d806000811461114f576040519150601f19603f3d011682016040523d82523d6000602084013e611154565b606091505b50509050806111aa576040805162461bcd60e51b815260206004820181905260248201527f4c696d69744f72646572733a204554485f5452414e534645525f4641494c4544604482015290519081900360640190fd5b506111bb565b6111bb838383610f7d565b505050565b3390565b60606109f082604051602001808281526020019150506040516020818303038152906040525b80516060906f181899199a1a9b1b9c1cb0b131b232b360811b9060009060029081020167ffffffffffffffff8111801561122357600080fd5b506040519080825280601f01601f19166020018201604052801561124e576020820181803683370190505b509050600360fc1b8160008151811061126357fe5b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061128c57fe5b60200101906001600160f81b031916908160001a90535060005b8451811015611361578260048683815181106112be57fe5b01602001516001600160f81b031916901c60f81c601081106112dc57fe5b1a60f81b8282600202600201815181106112f257fe5b60200101906001600160f81b031916908160001a9053508285828151811061131657fe5b60209101015160f81c600f166010811061132c57fe5b1a60f81b82826002026003018151811061134257fe5b60200101906001600160f81b031916908160001a9053506001016112a6565b50939250505056fe4c696d69744f72646572733a204953535546494349454e545f52454345495645445f544f4b454e534f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734c696d69744f72646572733a204953535546494349454e545f424f554748545f544f4b454e53a164736f6c6343000706000a
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000001167e457803e2d8b75b8b0a33fa3314fbe5595340000000000000000000000004200000000000000000000000000000000000006
-----Decoded View---------------
Arg [0] : _treasury (address): 0x1167e457803e2D8b75b8b0a33Fa3314Fbe559534
Arg [1] : _WETH (address): 0x4200000000000000000000000000000000000006
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000001167e457803e2d8b75b8b0a33fa3314fbe559534
Arg [1] : 0000000000000000000000004200000000000000000000000000000000000006
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.