Latest 25 from a total of 7,997 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Sell Fei | 20415439 | 572 days ago | IN | 0 ETH | 0.00006758 | ||||
| Sell Fei | 15106955 | 1323 days ago | IN | 0 ETH | 0.0012066 | ||||
| Buy Fei | 14370772 | 1442 days ago | IN | 0.01 ETH | 0.00045543 | ||||
| Sell Fei | 13842049 | 1524 days ago | IN | 0 ETH | 0.0041051 | ||||
| Sell Fei | 13830530 | 1526 days ago | IN | 0 ETH | 0.00558435 | ||||
| Buy Fei | 13827436 | 1526 days ago | IN | 4.98 ETH | 0.0096185 | ||||
| Sell Fei | 13821428 | 1527 days ago | IN | 0 ETH | 0.00675196 | ||||
| Sell Fei | 13810807 | 1529 days ago | IN | 0 ETH | 0.00941044 | ||||
| Buy Fei | 13805905 | 1530 days ago | IN | 6.1 ETH | 0.01191865 | ||||
| Sell Fei | 13802034 | 1530 days ago | IN | 0 ETH | 0.00722226 | ||||
| Sell Fei | 13799249 | 1531 days ago | IN | 0 ETH | 0.01309095 | ||||
| Sell Fei | 13796528 | 1531 days ago | IN | 0 ETH | 0.00391541 | ||||
| Sell Fei | 13791857 | 1532 days ago | IN | 0 ETH | 0.00848171 | ||||
| Sell Fei | 13788539 | 1532 days ago | IN | 0 ETH | 0.00493507 | ||||
| Buy Fei | 13783234 | 1533 days ago | IN | 0.143 ETH | 0.00346174 | ||||
| Buy Fei | 13783234 | 1533 days ago | IN | 0.143 ETH | 0.00356065 | ||||
| Buy Fei | 13783234 | 1533 days ago | IN | 0.143 ETH | 0.00415409 | ||||
| Buy Fei | 13783234 | 1533 days ago | IN | 0.1441 ETH | 0.00360726 | ||||
| Buy Fei | 13782843 | 1533 days ago | IN | 0.133 ETH | 0.00524207 | ||||
| Buy Fei | 13782843 | 1533 days ago | IN | 0.123 ETH | 0.00385737 | ||||
| Buy Fei | 13782843 | 1533 days ago | IN | 0.123 ETH | 0.0038263 | ||||
| Buy Fei | 13780976 | 1534 days ago | IN | 0.4 ETH | 0.00855776 | ||||
| Buy Fei | 13780963 | 1534 days ago | IN | 0.4 ETH | 0.01438597 | ||||
| Buy Fei | 13780905 | 1534 days ago | IN | 0.5 ETH | 0.01028321 | ||||
| Buy Fei | 13780894 | 1534 days ago | IN | 1 ETH | 0.01308629 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 15106955 | 1323 days ago | 0.06529471 ETH | ||||
| Transfer | 15106955 | 1323 days ago | 0.06529471 ETH | ||||
| - | 13842049 | 1524 days ago | 0.345628 ETH | ||||
| - | 13842049 | 1524 days ago | 0.345628 ETH | ||||
| - | 13830530 | 1526 days ago | 0.13276111 ETH | ||||
| - | 13830530 | 1526 days ago | 0.13276111 ETH | ||||
| - | 13827436 | 1526 days ago | 4.98 ETH | ||||
| - | 13821428 | 1527 days ago | 0.26905502 ETH | ||||
| - | 13821428 | 1527 days ago | 0.26905502 ETH | ||||
| - | 13810807 | 1529 days ago | 0.10800016 ETH | ||||
| - | 13810807 | 1529 days ago | 0.10800016 ETH | ||||
| - | 13805905 | 1530 days ago | 6.1 ETH | ||||
| - | 13802034 | 1530 days ago | 2.28943087 ETH | ||||
| - | 13802034 | 1530 days ago | 2.28943087 ETH | ||||
| - | 13799249 | 1531 days ago | 0.13980249 ETH | ||||
| - | 13799249 | 1531 days ago | 0.13980249 ETH | ||||
| - | 13796528 | 1531 days ago | 0.13735667 ETH | ||||
| - | 13796528 | 1531 days ago | 0.13735667 ETH | ||||
| - | 13791857 | 1532 days ago | 0.16193128 ETH | ||||
| - | 13791857 | 1532 days ago | 0.16193128 ETH | ||||
| - | 13788539 | 1532 days ago | 0.03527649 ETH | ||||
| - | 13788539 | 1532 days ago | 0.03527649 ETH | ||||
| - | 13783234 | 1533 days ago | 0.143 ETH | ||||
| - | 13783234 | 1533 days ago | 0.143 ETH | ||||
| - | 13783234 | 1533 days ago | 0.143 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
FeiRouter
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity ^0.6.0;
pragma experimental ABIEncoderV2;
import "@uniswap/v2-periphery/contracts/interfaces/IWETH.sol";
import "@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol";
import "@uniswap/lib/contracts/libraries/TransferHelper.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "../external/UniswapV2Library.sol";
import "./IFeiRouter.sol";
/// @title A Uniswap Router for FEI/ETH swaps
/// @author Fei Protocol
contract FeiRouter is IFeiRouter {
using SafeMathCopy for uint256;
// solhint-disable-next-line var-name-mixedcase
IWETH public immutable WETH;
// solhint-disable-next-line var-name-mixedcase
IUniswapV2Pair public immutable PAIR;
constructor(
address pair,
address weth
) public {
PAIR = IUniswapV2Pair(pair);
WETH = IWETH(weth);
}
modifier ensure(uint256 deadline) {
// solhint-disable-next-line not-rely-on-time
require(deadline >= block.timestamp, "FeiRouter: Expired");
_;
}
receive() external payable {
assert(msg.sender == address(WETH)); // only accept ETH via fallback from the WETH contract
}
/// @notice buy FEI for ETH with some protections
/// @param minReward minimum mint reward for purchasing
/// @param amountOutMin minimum FEI received
/// @param to address to send FEI
/// @param deadline block timestamp after which trade is invalid
function buyFei(
uint256 minReward,
uint256 amountOutMin,
address to,
uint256 deadline
) external payable override ensure(deadline) returns (uint256 amountOut) {
(uint256 reservesETH, uint256 reservesOther, bool isWETHPairToken0) = _getReserves();
uint256 amountIn = msg.value;
amountOut = UniswapV2Library.getAmountOut(
amountIn,
reservesETH,
reservesOther
);
require(
amountOut >= amountOutMin,
"FeiRouter: Insufficient output amount"
);
// Convert sent ETH to wrapped ETH and assert successful transfer to pair
IWETH(WETH).deposit{value: amountIn}();
assert(IWETH(WETH).transfer(address(PAIR), amountIn));
address fei = isWETHPairToken0 ? PAIR.token1() : PAIR.token0();
// Check fei balance of recipient before to compare against
uint256 feiBalanceBefore = IERC20(fei).balanceOf(to);
(uint256 amount0Out, uint256 amount1Out) =
isWETHPairToken0 ? (uint256(0), amountOut) : (amountOut, uint256(0));
PAIR.swap(amount0Out, amount1Out, to, new bytes(0));
// Check that FEI recipient got at least minReward on top of trade amount
uint256 feiBalanceAfter = IERC20(fei).balanceOf(to);
uint256 reward = feiBalanceAfter.sub(feiBalanceBefore).sub(amountOut);
require(reward >= minReward, "FeiRouter: Not enough reward");
return amountOut;
}
/// @notice sell FEI for ETH with some protections
/// @param maxPenalty maximum fei burn for purchasing
/// @param amountIn amount of FEI to sell
/// @param amountOutMin minimum ETH received
/// @param to address to send ETH
/// @param deadline block timestamp after which trade is invalid
function sellFei(
uint256 maxPenalty,
uint256 amountIn,
uint256 amountOutMin,
address to,
uint256 deadline
) external override ensure(deadline) returns (uint256 amountOut) {
(uint256 reservesETH, uint256 reservesOther, bool isWETHPairToken0) =
_getReserves();
address fei = isWETHPairToken0 ? PAIR.token1() : PAIR.token0();
IERC20(fei).transferFrom(msg.sender, address(PAIR), amountIn);
// Figure out how much the PAIR actually received net of FEI burn
uint256 effectiveAmountIn = IERC20(fei).balanceOf(address(PAIR)).sub(reservesOther);
// Check that burned fee-on-transfer is not more than the maxPenalty
if (effectiveAmountIn < amountIn) {
uint256 penalty = amountIn - effectiveAmountIn;
require(penalty <= maxPenalty, "FeiRouter: Penalty too high");
}
amountOut = UniswapV2Library.getAmountOut(
effectiveAmountIn,
reservesOther,
reservesETH
);
require(
amountOut >= amountOutMin,
"FeiRouter: Insufficient output amount"
);
(uint256 amount0Out, uint256 amount1Out) =
isWETHPairToken0 ? (amountOut, uint256(0)) : (uint256(0), amountOut);
PAIR.swap(amount0Out, amount1Out, address(this), new bytes(0));
IWETH(WETH).withdraw(amountOut);
TransferHelper.safeTransferETH(to, amountOut);
return amountOut;
}
function _getReserves()
internal
view
returns (
uint256 reservesETH,
uint256 reservesOther,
bool isWETHPairToken0
)
{
(uint256 reserves0, uint256 reserves1, ) = PAIR.getReserves();
isWETHPairToken0 = PAIR.token0() == address(WETH);
return
isWETHPairToken0
? (reserves0, reserves1, isWETHPairToken0)
: (reserves1, reserves0, isWETHPairToken0);
}
}pragma solidity >=0.6.0;
import "./SafeMathCopy.sol";
library UniswapV2Library {
using SafeMathCopy for uint;
// given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset
function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {
require(amountIn > 0, 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT');
require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');
uint amountInWithFee = amountIn.mul(997);
uint numerator = amountInWithFee.mul(reserveOut);
uint denominator = reserveIn.mul(1000).add(amountInWithFee);
amountOut = numerator / denominator;
}
}pragma solidity ^0.6.0;
import "../token/IUniswapIncentive.sol";
/// @title FeiRouter interface
/// @author Fei Protocol
interface IFeiRouter {
// ----------- state changing api -----------
function buyFei(
uint256 minReward,
uint256 amountOutMin,
address to,
uint256 deadline
) external payable returns (uint256 amountOut);
function sellFei(
uint256 maxPenalty,
uint256 amountIn,
uint256 amountOutMin,
address to,
uint256 deadline
) external returns (uint256 amountOut);
}pragma solidity ^0.6.2;
pragma experimental ABIEncoderV2;
import "./IIncentive.sol";
import "../external/Decimal.sol";
/// @title UniswapIncentive interface
/// @author Fei Protocol
interface IUniswapIncentive is IIncentive {
// ----------- Events -----------
event TimeWeightUpdate(uint256 _weight, bool _active);
event GrowthRateUpdate(uint256 _growthRate);
event ExemptAddressUpdate(address indexed _account, bool _isExempt);
// ----------- Governor only state changing api -----------
function setExemptAddress(address account, bool isExempt) external;
function setTimeWeightGrowth(uint32 growthRate) external;
function setTimeWeight(
uint32 weight,
uint32 growth,
bool active
) external;
// ----------- Getters -----------
function isIncentiveParity() external view returns (bool);
function isExemptAddress(address account) external view returns (bool);
// solhint-disable-next-line func-name-mixedcase
function TIME_WEIGHT_GRANULARITY() external view returns (uint32);
function getGrowthRate() external view returns (uint32);
function getTimeWeight() external view returns (uint32);
function isTimeWeightActive() external view returns (bool);
function getBuyIncentive(uint256 amount)
external
view
returns (
uint256 incentive,
uint32 weight,
Decimal.D256 memory initialDeviation,
Decimal.D256 memory finalDeviation
);
function getSellPenalty(uint256 amount)
external
view
returns (
uint256 penalty,
Decimal.D256 memory initialDeviation,
Decimal.D256 memory finalDeviation
);
function getSellPenaltyMultiplier(
Decimal.D256 calldata initialDeviation,
Decimal.D256 calldata finalDeviation
) external view returns (Decimal.D256 memory);
function getBuyIncentiveMultiplier(
Decimal.D256 calldata initialDeviation,
Decimal.D256 calldata finalDeviation
) external view returns (Decimal.D256 memory);
}pragma solidity ^0.6.2;
/// @title incentive contract interface
/// @author Fei Protocol
/// @notice Called by FEI token contract when transferring with an incentivized address
/// @dev should be appointed as a Minter or Burner as needed
interface IIncentive {
// ----------- Fei only state changing api -----------
/// @notice apply incentives on transfer
/// @param sender the sender address of the FEI
/// @param receiver the receiver address of the FEI
/// @param operator the operator (msg.sender) of the transfer
/// @param amount the amount of FEI transferred
function incentivize(
address sender,
address receiver,
address operator,
uint256 amount
) external;
}/*
Copyright 2019 dYdX Trading Inc.
Copyright 2020 Empty Set Squad <emptysetsquad@protonmail.com>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
pragma solidity ^0.6.0;
pragma experimental ABIEncoderV2;
import "./SafeMathCopy.sol";
/**
* @title Decimal
* @author dYdX
*
* Library that defines a fixed-point number with 18 decimal places.
*/
library Decimal {
using SafeMathCopy for uint256;
// ============ Constants ============
uint256 private constant BASE = 10**18;
// ============ Structs ============
struct D256 {
uint256 value;
}
// ============ Static Functions ============
function zero()
internal
pure
returns (D256 memory)
{
return D256({ value: 0 });
}
function one()
internal
pure
returns (D256 memory)
{
return D256({ value: BASE });
}
function from(
uint256 a
)
internal
pure
returns (D256 memory)
{
return D256({ value: a.mul(BASE) });
}
function ratio(
uint256 a,
uint256 b
)
internal
pure
returns (D256 memory)
{
return D256({ value: getPartial(a, BASE, b) });
}
// ============ Self Functions ============
function add(
D256 memory self,
uint256 b
)
internal
pure
returns (D256 memory)
{
return D256({ value: self.value.add(b.mul(BASE)) });
}
function sub(
D256 memory self,
uint256 b
)
internal
pure
returns (D256 memory)
{
return D256({ value: self.value.sub(b.mul(BASE)) });
}
function sub(
D256 memory self,
uint256 b,
string memory reason
)
internal
pure
returns (D256 memory)
{
return D256({ value: self.value.sub(b.mul(BASE), reason) });
}
function mul(
D256 memory self,
uint256 b
)
internal
pure
returns (D256 memory)
{
return D256({ value: self.value.mul(b) });
}
function div(
D256 memory self,
uint256 b
)
internal
pure
returns (D256 memory)
{
return D256({ value: self.value.div(b) });
}
function pow(
D256 memory self,
uint256 b
)
internal
pure
returns (D256 memory)
{
if (b == 0) {
return from(1);
}
D256 memory temp = D256({ value: self.value });
for (uint256 i = 1; i < b; i++) {
temp = mul(temp, self);
}
return temp;
}
function add(
D256 memory self,
D256 memory b
)
internal
pure
returns (D256 memory)
{
return D256({ value: self.value.add(b.value) });
}
function sub(
D256 memory self,
D256 memory b
)
internal
pure
returns (D256 memory)
{
return D256({ value: self.value.sub(b.value) });
}
function sub(
D256 memory self,
D256 memory b,
string memory reason
)
internal
pure
returns (D256 memory)
{
return D256({ value: self.value.sub(b.value, reason) });
}
function mul(
D256 memory self,
D256 memory b
)
internal
pure
returns (D256 memory)
{
return D256({ value: getPartial(self.value, b.value, BASE) });
}
function div(
D256 memory self,
D256 memory b
)
internal
pure
returns (D256 memory)
{
return D256({ value: getPartial(self.value, BASE, b.value) });
}
function equals(D256 memory self, D256 memory b) internal pure returns (bool) {
return self.value == b.value;
}
function greaterThan(D256 memory self, D256 memory b) internal pure returns (bool) {
return compareTo(self, b) == 2;
}
function lessThan(D256 memory self, D256 memory b) internal pure returns (bool) {
return compareTo(self, b) == 0;
}
function greaterThanOrEqualTo(D256 memory self, D256 memory b) internal pure returns (bool) {
return compareTo(self, b) > 0;
}
function lessThanOrEqualTo(D256 memory self, D256 memory b) internal pure returns (bool) {
return compareTo(self, b) < 2;
}
function isZero(D256 memory self) internal pure returns (bool) {
return self.value == 0;
}
function asUint256(D256 memory self) internal pure returns (uint256) {
return self.value.div(BASE);
}
// ============ Core Methods ============
function getPartial(
uint256 target,
uint256 numerator,
uint256 denominator
)
private
pure
returns (uint256)
{
return target.mul(numerator).div(denominator);
}
function compareTo(
D256 memory a,
D256 memory b
)
private
pure
returns (uint256)
{
if (a.value == b.value) {
return 1;
}
return a.value > b.value ? 2 : 0;
}
}// 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 SafeMathCopy { // To avoid namespace collision between openzeppelin safemath and uniswap 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;
interface IWETH {
function deposit() external payable;
function transfer(address to, uint value) external returns (bool);
function withdraw(uint) external;
}pragma solidity >=0.5.0;
interface IUniswapV2Pair {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint);
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
event Mint(address indexed sender, uint amount0, uint amount1);
event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
event Swap(
address indexed sender,
uint amount0In,
uint amount1In,
uint amount0Out,
uint amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function price0CumulativeLast() external view returns (uint);
function price1CumulativeLast() external view returns (uint);
function kLast() external view returns (uint);
function mint(address to) external returns (uint liquidity);
function burn(address to) external returns (uint amount0, uint amount1);
function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity >=0.6.0;
// 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, uint 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(address token, address to, uint value) internal {
// bytes4(keccak256(bytes('transfer(address,uint256)')));
(bool success, bytes memory data) = 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, uint 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, uint value) internal {
(bool success,) = to.call{value:value}(new bytes(0));
require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
}
}// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}{
"metadata": {
"useLiteralContent": true
},
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"address","name":"weth","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"PAIR","outputs":[{"internalType":"contract IUniswapV2Pair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"minReward","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"buyFei","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxPenalty","type":"uint256"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"sellFei","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60c060405234801561001057600080fd5b5060405161142b38038061142b83398101604081905261002f9161004d565b6001600160601b0319606092831b811660a052911b1660805261009e565b6000806040838503121561005f578182fd5b825161006a81610086565b602084015190925061007b81610086565b809150509250929050565b6001600160a01b038116811461009b57600080fd5b50565b60805160601c60a05160601c6113156101166000398061014952806101df5280610297528061032b528061045c528061067e5280610709528061079f52806108d35280610a465280610a965280610b68525080605352806104dd52806105c8528061064e5280610a6a5280610b3e52506113156000f3fe6080604052600436106100435760003560e01c80638f8e4fb714610081578063a4eba383146100b7578063ace3a8a7146100ca578063ad5c4648146100ec5761007c565b3661007c57336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461007a57fe5b005b600080fd5b34801561008d57600080fd5b506100a161009c366004610f21565b610101565b6040516100ae9190611242565b60405180910390f35b6100a16100c5366004610ee3565b610561565b3480156100d657600080fd5b506100df610a44565b6040516100ae9190610fb1565b3480156100f857600080fd5b506100df610a68565b6000814281101561012d5760405162461bcd60e51b815260040161012490611151565b60405180910390fd5b600080600061013a610a8c565b9250925092506000816101dd577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156101a057600080fd5b505afa1580156101b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d89190610e3b565b61026e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561023657600080fd5b505afa15801561024a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026e9190610e3b565b6040516323b872dd60e01b81529091506001600160a01b038216906323b872dd906102c19033907f0000000000000000000000000000000000000000000000000000000000000000908f90600401610fc5565b602060405180830381600087803b1580156102db57600080fd5b505af11580156102ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103139190610e57565b5060006103c284836001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016103669190610fb1565b60206040518083038186803b15801561037e57600080fd5b505afa158015610392573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b69190610ecb565b9063ffffffff610c2116565b90508a8110156103f157808b038c8111156103ef5760405162461bcd60e51b81526004016101249061117d565b505b6103fc818587610c6c565b96508987101561041e5760405162461bcd60e51b815260040161012490611015565b6000808461042e57600089610432565b8860005b6040805160008152602081019182905263022c0d9f60e01b90915291935091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063022c0d9f90610496908590859030906024810161124b565b600060405180830381600087803b1580156104b057600080fd5b505af11580156104c4573d6000803e3d6000fd5b5050604051632e1a7d4d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169250632e1a7d4d9150610514908c90600401611242565b600060405180830381600087803b15801561052e57600080fd5b505af1158015610542573d6000803e3d6000fd5b505050506105508b8a610d1e565b505050505050505095945050505050565b600081428110156105845760405162461bcd60e51b815260040161012490611151565b6000806000610591610a8c565b91945092509050346105a4818585610c6c565b9550888610156105c65760405162461bcd60e51b815260040161012490611015565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561062157600080fd5b505af1158015610635573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506106a891507f0000000000000000000000000000000000000000000000000000000000000000908590600401610fe9565b602060405180830381600087803b1580156106c257600080fd5b505af11580156106d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fa9190610e57565b61070057fe5b60008261079d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561076057600080fd5b505afa158015610774573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107989190610e3b565b61082e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156107f657600080fd5b505afa15801561080a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082e9190610e3b565b90506000816001600160a01b03166370a082318b6040518263ffffffff1660e01b815260040161085e9190610fb1565b60206040518083038186803b15801561087657600080fd5b505afa15801561088a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ae9190610ecb565b9050600080856108c0578960006108c4565b60008a5b90925090506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663022c0d9f83838f60006040519080825280601f01601f191660200182016040528015610927576020820181803683370190505b506040518563ffffffff1660e01b8152600401610947949392919061124b565b600060405180830381600087803b15801561096157600080fd5b505af1158015610975573d6000803e3d6000fd5b505050506000846001600160a01b03166370a082318e6040518263ffffffff1660e01b81526004016109a79190610fb1565b60206040518083038186803b1580156109bf57600080fd5b505afa1580156109d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f79190610ecb565b90506000610a0f8c6103b6848863ffffffff610c2116565b90508f811015610a315760405162461bcd60e51b815260040161012490611091565b5050505050505050505050949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008060008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015610aed57600080fd5b505afa158015610b01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b259190610e77565b506001600160701b031691506001600160701b031691507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610bbf57600080fd5b505afa158015610bd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf79190610e3b565b6001600160a01b031614925082610c1057808284610c14565b8181845b9450945094505050909192565b6000610c6383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610db0565b90505b92915050565b6000808411610c8d5760405162461bcd60e51b8152600401610124906111f7565b600083118015610c9d5750600082115b610cb95760405162461bcd60e51b8152600401610124906110c8565b6000610ccd856103e563ffffffff610ddc16565b90506000610ce1828563ffffffff610ddc16565b90506000610d0783610cfb886103e863ffffffff610ddc16565b9063ffffffff610e1616565b9050808281610d1257fe5b04979650505050505050565b604080516000808252602082019092526001600160a01b038416908390604051610d489190610f95565b60006040518083038185875af1925050503d8060008114610d85576040519150601f19603f3d011682016040523d82523d6000602084013e610d8a565b606091505b5050905080610dab5760405162461bcd60e51b8152600401610124906111b4565b505050565b60008184841115610dd45760405162461bcd60e51b81526004016101249190611002565b505050900390565b600082610deb57506000610c66565b82820282848281610df857fe5b0414610c635760405162461bcd60e51b815260040161012490611110565b600082820183811015610c635760405162461bcd60e51b81526004016101249061105a565b600060208284031215610e4c578081fd5b8151610c63816112b2565b600060208284031215610e68578081fd5b81518015158114610c63578182fd5b600080600060608486031215610e8b578182fd5b8351610e96816112ca565b6020850151909350610ea7816112ca565b604085015190925063ffffffff81168114610ec0578182fd5b809150509250925092565b600060208284031215610edc578081fd5b5051919050565b60008060008060808587031215610ef8578081fd5b84359350602085013592506040850135610f11816112b2565b9396929550929360600135925050565b600080600080600060a08688031215610f38578081fd5b8535945060208601359350604086013592506060860135610f58816112b2565b949793965091946080013592915050565b60008151808452610f81816020860160208601611282565b601f01601f19169290920160200192915050565b60008251610fa7818460208701611282565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b600060208252610c636020830184610f69565b60208082526025908201527f466569526f757465723a20496e73756666696369656e74206f757470757420616040820152641b5bdd5b9d60da1b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601c908201527f466569526f757465723a204e6f7420656e6f7567682072657761726400000000604082015260600190565b60208082526028908201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4c604082015267495155494449545960c01b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526012908201527111995a549bdd5d195c8e88115e1c1a5c995960721b604082015260600190565b6020808252601b908201527f466569526f757465723a2050656e616c747920746f6f20686967680000000000604082015260600190565b60208082526023908201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960408201526213115160ea1b606082015260800190565b6020808252602b908201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4960408201526a1394155517d05353d5539560aa1b606082015260800190565b90815260200190565b600085825284602083015260018060a01b0384166040830152608060608301526112786080830184610f69565b9695505050505050565b60005b8381101561129d578181015183820152602001611285565b838111156112ac576000848401525b50505050565b6001600160a01b03811681146112c757600080fd5b50565b6001600160701b03811681146112c757600080fdfea264697066735822122077d8e84c47cee3f0d5065210a0b5f820e26db31e9aea8bb61f02c0262284423764736f6c6343000606003300000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a878000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Deployed Bytecode
0x6080604052600436106100435760003560e01c80638f8e4fb714610081578063a4eba383146100b7578063ace3a8a7146100ca578063ad5c4648146100ec5761007c565b3661007c57336001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2161461007a57fe5b005b600080fd5b34801561008d57600080fd5b506100a161009c366004610f21565b610101565b6040516100ae9190611242565b60405180910390f35b6100a16100c5366004610ee3565b610561565b3480156100d657600080fd5b506100df610a44565b6040516100ae9190610fb1565b3480156100f857600080fd5b506100df610a68565b6000814281101561012d5760405162461bcd60e51b815260040161012490611151565b60405180910390fd5b600080600061013a610a8c565b9250925092506000816101dd577f00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a8786001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156101a057600080fd5b505afa1580156101b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d89190610e3b565b61026e565b7f00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a8786001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561023657600080fd5b505afa15801561024a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026e9190610e3b565b6040516323b872dd60e01b81529091506001600160a01b038216906323b872dd906102c19033907f00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a878908f90600401610fc5565b602060405180830381600087803b1580156102db57600080fd5b505af11580156102ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103139190610e57565b5060006103c284836001600160a01b03166370a082317f00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a8786040518263ffffffff1660e01b81526004016103669190610fb1565b60206040518083038186803b15801561037e57600080fd5b505afa158015610392573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b69190610ecb565b9063ffffffff610c2116565b90508a8110156103f157808b038c8111156103ef5760405162461bcd60e51b81526004016101249061117d565b505b6103fc818587610c6c565b96508987101561041e5760405162461bcd60e51b815260040161012490611015565b6000808461042e57600089610432565b8860005b6040805160008152602081019182905263022c0d9f60e01b90915291935091506001600160a01b037f00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a878169063022c0d9f90610496908590859030906024810161124b565b600060405180830381600087803b1580156104b057600080fd5b505af11580156104c4573d6000803e3d6000fd5b5050604051632e1a7d4d60e01b81526001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2169250632e1a7d4d9150610514908c90600401611242565b600060405180830381600087803b15801561052e57600080fd5b505af1158015610542573d6000803e3d6000fd5b505050506105508b8a610d1e565b505050505050505095945050505050565b600081428110156105845760405162461bcd60e51b815260040161012490611151565b6000806000610591610a8c565b91945092509050346105a4818585610c6c565b9550888610156105c65760405162461bcd60e51b815260040161012490611015565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561062157600080fd5b505af1158015610635573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216935063a9059cbb92506106a891507f00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a878908590600401610fe9565b602060405180830381600087803b1580156106c257600080fd5b505af11580156106d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fa9190610e57565b61070057fe5b60008261079d577f00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a8786001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561076057600080fd5b505afa158015610774573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107989190610e3b565b61082e565b7f00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a8786001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156107f657600080fd5b505afa15801561080a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082e9190610e3b565b90506000816001600160a01b03166370a082318b6040518263ffffffff1660e01b815260040161085e9190610fb1565b60206040518083038186803b15801561087657600080fd5b505afa15801561088a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ae9190610ecb565b9050600080856108c0578960006108c4565b60008a5b90925090506001600160a01b037f00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a8781663022c0d9f83838f60006040519080825280601f01601f191660200182016040528015610927576020820181803683370190505b506040518563ffffffff1660e01b8152600401610947949392919061124b565b600060405180830381600087803b15801561096157600080fd5b505af1158015610975573d6000803e3d6000fd5b505050506000846001600160a01b03166370a082318e6040518263ffffffff1660e01b81526004016109a79190610fb1565b60206040518083038186803b1580156109bf57600080fd5b505afa1580156109d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f79190610ecb565b90506000610a0f8c6103b6848863ffffffff610c2116565b90508f811015610a315760405162461bcd60e51b815260040161012490611091565b5050505050505050505050949350505050565b7f00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a87881565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b60008060008060007f00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a8786001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015610aed57600080fd5b505afa158015610b01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b259190610e77565b506001600160701b031691506001600160701b031691507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03167f00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a8786001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610bbf57600080fd5b505afa158015610bd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf79190610e3b565b6001600160a01b031614925082610c1057808284610c14565b8181845b9450945094505050909192565b6000610c6383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610db0565b90505b92915050565b6000808411610c8d5760405162461bcd60e51b8152600401610124906111f7565b600083118015610c9d5750600082115b610cb95760405162461bcd60e51b8152600401610124906110c8565b6000610ccd856103e563ffffffff610ddc16565b90506000610ce1828563ffffffff610ddc16565b90506000610d0783610cfb886103e863ffffffff610ddc16565b9063ffffffff610e1616565b9050808281610d1257fe5b04979650505050505050565b604080516000808252602082019092526001600160a01b038416908390604051610d489190610f95565b60006040518083038185875af1925050503d8060008114610d85576040519150601f19603f3d011682016040523d82523d6000602084013e610d8a565b606091505b5050905080610dab5760405162461bcd60e51b8152600401610124906111b4565b505050565b60008184841115610dd45760405162461bcd60e51b81526004016101249190611002565b505050900390565b600082610deb57506000610c66565b82820282848281610df857fe5b0414610c635760405162461bcd60e51b815260040161012490611110565b600082820183811015610c635760405162461bcd60e51b81526004016101249061105a565b600060208284031215610e4c578081fd5b8151610c63816112b2565b600060208284031215610e68578081fd5b81518015158114610c63578182fd5b600080600060608486031215610e8b578182fd5b8351610e96816112ca565b6020850151909350610ea7816112ca565b604085015190925063ffffffff81168114610ec0578182fd5b809150509250925092565b600060208284031215610edc578081fd5b5051919050565b60008060008060808587031215610ef8578081fd5b84359350602085013592506040850135610f11816112b2565b9396929550929360600135925050565b600080600080600060a08688031215610f38578081fd5b8535945060208601359350604086013592506060860135610f58816112b2565b949793965091946080013592915050565b60008151808452610f81816020860160208601611282565b601f01601f19169290920160200192915050565b60008251610fa7818460208701611282565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b600060208252610c636020830184610f69565b60208082526025908201527f466569526f757465723a20496e73756666696369656e74206f757470757420616040820152641b5bdd5b9d60da1b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601c908201527f466569526f757465723a204e6f7420656e6f7567682072657761726400000000604082015260600190565b60208082526028908201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4c604082015267495155494449545960c01b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526012908201527111995a549bdd5d195c8e88115e1c1a5c995960721b604082015260600190565b6020808252601b908201527f466569526f757465723a2050656e616c747920746f6f20686967680000000000604082015260600190565b60208082526023908201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960408201526213115160ea1b606082015260800190565b6020808252602b908201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4960408201526a1394155517d05353d5539560aa1b606082015260800190565b90815260200190565b600085825284602083015260018060a01b0384166040830152608060608301526112786080830184610f69565b9695505050505050565b60005b8381101561129d578181015183820152602001611285565b838111156112ac576000848401525b50505050565b6001600160a01b03811681146112c757600080fd5b50565b6001600160701b03811681146112c757600080fdfea264697066735822122077d8e84c47cee3f0d5065210a0b5f820e26db31e9aea8bb61f02c0262284423764736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a878000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
-----Decoded View---------------
Arg [0] : pair (address): 0x94B0A3d511b6EcDb17eBF877278Ab030acb0A878
Arg [1] : weth (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a878
Arg [1] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Deployed Bytecode Sourcemap
450:4827:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1078:10;-1:-1:-1;;;;;1100:4:3;1078:27;;1071:35;;;;450:4827;;12:1:-1;9;2:12;3277:1504:3;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;3277:1504:3;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1444:1512;;;;;;;;;:::i;664:36::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;664:36:3;;;:::i;:::-;;;;;;;;578:27;;5:9:-1;2:2;;;27:1;24;17:12;2:2;578:27:3;;;:::i;3277:1504::-;3474:17;3455:8;972:15;960:8;:27;;952:58;;;;-1:-1:-1;;;952:58:3;;;;;;;;;;;;;;;;;3504:19:::1;3525:21:::0;3548::::1;3585:14;:12;:14::i;:::-;3503:96;;;;;;3610:11;3624:16;:48;;3659:4;-1:-1:-1::0;;;;;3659:11:3::1;;:13;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;3659:13:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;3659:13:3;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;3659:13:3;;;;;;;;;3624:48;;;3643:4;-1:-1:-1::0;;;;;3643:11:3::1;;:13;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;3643:13:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;3643:13:3;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;3643:13:3;;;;;;;;;3683:61;::::0;-1:-1:-1;;;3683:61:3;;3610:62;;-1:-1:-1;;;;;;3683:24:3;::::1;::::0;::::1;::::0;:61:::1;::::0;3708:10:::1;::::0;3728:4:::1;::::0;3735:8;;3683:61:::1;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;3683:61:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;3683:61:3;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;3683:61:3;;;;;;;;;;3829:25;3857:55;3898:13;3864:3;-1:-1:-1::0;;;;;3857:21:3::1;;3887:4;3857:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;3857:36:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;3857:36:3;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;3857:36:3;;;;;;;;;:40:::0;:55:::1;:40;:55;:::i;:::-;3829:83;;4024:8;4004:17;:28;4000:180;;;4066:28:::0;;::::1;4116:21:::0;;::::1;;4108:61;;;;-1:-1:-1::0;;;4108:61:3::1;;;;;;;;;4000:180;;4202:122;4245:17;4276:13;4303:11;4202:29;:122::i;:::-;4190:134;;4368:12;4355:9;:25;;4334:109;;;;-1:-1:-1::0;;;4334:109:3::1;;;;;;;;;4455:18;4475::::0;4509:16:::1;:68;;4563:1;4567:9;4509:68;;;4529:9;4548:1;4509:68;4637:12;::::0;;4647:1:::1;4637:12:::0;;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;4588:62:3;;;4454:123;;-1:-1:-1;4454:123:3;-1:-1:-1;;;;;;4588:4:3::1;:9;::::0;::::1;::::0;:62:::1;::::0;4454:123;;;;4630:4:::1;::::0;4588:62;;;::::1;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;4588:62:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;4661:31:3::1;::::0;-1:-1:-1;;;4661:31:3;;-1:-1:-1;;;;;4667:4:3::1;4661:20;::::0;-1:-1:-1;4661:20:3::1;::::0;-1:-1:-1;4661:31:3::1;::::0;4682:9;;4661:31:::1;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;4661:31:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;4661:31:3;;;;4703:45;4734:2;4738:9;4703:30;:45::i;:::-;-1:-1:-1::0;;;;;;;3277:1504:3;;;;;;;;:::o;1444:1512::-;1621:17;1602:8;972:15;960:8;:27;;952:58;;;;-1:-1:-1;;;952:58:3;;;;;;;;;1652:19:::1;1673:21:::0;1696::::1;1721:14;:12;:14::i;:::-;1651:84:::0;;-1:-1:-1;1651:84:3;-1:-1:-1;1651:84:3;-1:-1:-1;1765:9:3::1;1796:113;1765:9:::0;1651:84;;1796:29:::1;:113::i;:::-;1784:125;;1962:12;1949:9;:25;;1928:109;;;;-1:-1:-1::0;;;1928:109:3::1;;;;;;;;;2135:4;-1:-1:-1::0;;;;;2129:19:3::1;;2156:8;2129:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;2129:38:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;2184:45:3::1;::::0;-1:-1:-1;;;2184:45:3;;-1:-1:-1;;;;;2190:4:3::1;2184:20;::::0;-1:-1:-1;2184:20:3::1;::::0;-1:-1:-1;2184:45:3::1;::::0;-1:-1:-1;2213:4:3::1;::::0;2220:8;;2184:45:::1;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;2184:45:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;2184:45:3;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;2184:45:3;;;;;;;;;2177:53;;;;2241:11;2255:16;:48;;2290:4;-1:-1:-1::0;;;;;2290:11:3::1;;:13;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;2290:13:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;2290:13:3;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;2290:13:3;;;;;;;;;2255:48;;;2274:4;-1:-1:-1::0;;;;;2274:11:3::1;;:13;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;2274:13:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;2274:13:3;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;2274:13:3;;;;;;;;;2241:62;;2382:24;2416:3;-1:-1:-1::0;;;;;2409:21:3::1;;2431:2;2409:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;2409:25:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;2409:25:3;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;2409:25:3;;;;;;;;;2382:52;;2446:18;2466::::0;2500:16:::1;:68;;2546:9;2565:1;2500:68;;;2528:1;2532:9;2500:68;2445:123:::0;;-1:-1:-1;2445:123:3;-1:-1:-1;;;;;;2578:4:3::1;:9;;2445:123:::0;;2612:2;2626:1:::1;2616:12;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;21:6:-1::0;;108:14:::1;2616:12:3::0;87:42:-1::1;143:17;::::0;-1:-1;2616:12:3::1;;2578:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;2578:51:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;2578:51:3;;;;2722:23;2755:3;-1:-1:-1::0;;;;;2748:21:3::1;;2770:2;2748:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;2748:25:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;2748:25:3;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;2748:25:3;;;;;;;;;2722:51:::0;-1:-1:-1;2783:14:3::1;2800:52;2842:9:::0;2800:37:::1;2722:51:::0;2820:16;2800:37:::1;:19;:37;:::i;:52::-;2783:69;;2880:9;2870:6;:19;;2862:60;;;;-1:-1:-1::0;;;2862:60:3::1;;;;;;;;;-1:-1:-1::0;;;;;;;;;;1444:1512:3;;;;;;;:::o;664:36::-;;;:::o;578:27::-;;;:::o;4787:488::-;4871:19;4904:21;4939;4986:17;5005;5028:4;-1:-1:-1;;;;;5028:16:3;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5028:18:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5028:18:3;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;5028:18:3;;;;;;;;;4985:61;-1:-1:-1;;;;;4985:61:3;;;-1:-1:-1;;;;;4985:61:3;;;5100:4;-1:-1:-1;;;;;5075:30:3;:4;-1:-1:-1;;;;;5075:11:3;;:13;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5075:13:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5075:13:3;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;5075:13:3;;;;;;;;;-1:-1:-1;;;;;5075:30:3;;5056:49;;5134:16;:134;;5229:9;5240;5251:16;5134:134;;;5170:9;5181;5192:16;5134:134;5115:153;;;;;;;;4787:488;;;:::o;1408:134:1:-;1466:7;1492:43;1496:1;1499;1492:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1485:50;;1408:134;;;;;:::o;237:510:2:-;330:14;375:1;364:8;:12;356:68;;;;-1:-1:-1;;;356:68:2;;;;;;;;;454:1;442:9;:13;:31;;;;;472:1;459:10;:14;442:31;434:84;;;;-1:-1:-1;;;434:84:2;;;;;;;;;528:20;551:17;:8;564:3;551:17;:12;:17;:::i;:::-;528:40;-1:-1:-1;578:14:2;595:31;528:40;615:10;595:31;:19;:31;:::i;:::-;578:48;-1:-1:-1;636:16:2;655:40;679:15;655:19;:9;669:4;655:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;636:59;;729:11;717:9;:23;;;;;;;237:510;-1:-1:-1;;;;;;;237:510:2:o;1339:192:8:-;1446:12;;;1408;1446;;;;;;;;;-1:-1:-1;;;;;1425:7:8;;;1439:5;;1425:34;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1407:52:8;;;1477:7;1469:55;;;;-1:-1:-1;;;1469:55:8;;;;;;;;;1339:192;;;:::o;1833:187:1:-;1919:7;1954:12;1946:6;;;;1938:29;;;;-1:-1:-1;;;1938:29:1;;;;;;;;;;-1:-1:-1;;;1989:5:1;;;1833:187::o;2267:459::-;2325:7;2566:6;2562:45;;-1:-1:-1;2595:1:1;2588:8;;2562:45;2629:5;;;2633:1;2629;:5;:1;2652:5;;;;;:10;2644:56;;;;-1:-1:-1;;;2644:56:1;;;;;;;;961:176;1019:7;1050:5;;;1073:6;;;;1065:46;;;;-1:-1:-1;;;1065:46:1;;;;;;;;976:263:-1;;1091:2;1079:9;1070:7;1066:23;1062:32;1059:2;;;-1:-1;;1097:12;1059:2;226:6;220:13;238:33;265:5;238:33;;1246:257;;1358:2;1346:9;1337:7;1333:23;1329:32;1326:2;;;-1:-1;;1364:12;1326:2;364:6;358:13;19006:5;16999:13;16992:21;18984:5;18981:32;18971:2;;-1:-1;;19017:12;1510:533;;;;1658:2;1646:9;1637:7;1633:23;1629:32;1626:2;;;-1:-1;;1664:12;1626:2;502:6;496:13;514:33;541:5;514:33;;;1827:2;1877:22;;496:13;1716:74;;-1:-1;514:33;496:13;514:33;;;1946:2;1995:22;;914:13;1835:74;;-1:-1;17420:10;17409:22;;19349:34;;19339:2;;-1:-1;;19387:12;19339:2;1954:73;;;;1620:423;;;;;;2050:263;;2165:2;2153:9;2144:7;2140:23;2136:32;2133:2;;;-1:-1;;2171:12;2133:2;-1:-1;774:13;;2127:186;-1:-1;2127:186;2320:617;;;;;2475:3;2463:9;2454:7;2450:23;2446:33;2443:2;;;-1:-1;;2482:12;2443:2;639:6;626:20;2534:63;;2634:2;2677:9;2673:22;626:20;2642:63;;2742:2;2785:9;2781:22;72:20;97:33;124:5;97:33;;;2437:500;;;;-1:-1;2750:63;;2850:2;2889:22;626:20;;-1:-1;;2437:500;2944:743;;;;;;3116:3;3104:9;3095:7;3091:23;3087:33;3084:2;;;-1:-1;;3123:12;3084:2;639:6;626:20;3175:63;;3275:2;3318:9;3314:22;626:20;3283:63;;3383:2;3426:9;3422:22;626:20;3391:63;;3491:2;3534:9;3530:22;72:20;97:33;124:5;97:33;;;3078:609;;;;-1:-1;3078:609;;3599:3;3639:22;626:20;;3078:609;-1:-1;;3078:609;3963:343;;4105:5;16169:12;16454:6;16449:3;16442:19;4198:52;4243:6;16491:4;16486:3;16482:14;16491:4;4224:5;4220:16;4198:52;;;18780:7;18764:14;-1:-1;;18760:28;4262:39;;;;16491:4;4262:39;;4053:253;-1:-1;;4053:253;8744:262;;4473:5;16169:12;4584:52;4629:6;4624:3;4617:4;4610:5;4606:16;4584:52;;;4648:16;;;;;8869:137;-1:-1;;8869:137;9013:213;-1:-1;;;;;17203:54;;;;3914:37;;9131:2;9116:18;;9102:124;9233:451;-1:-1;;;;;17203:54;;;3773:58;;17203:54;;;;9587:2;9572:18;;3914:37;9670:2;9655:18;;8695:37;;;;9415:2;9400:18;;9386:298;9691:324;-1:-1;;;;;17203:54;;;;3914:37;;10001:2;9986:18;;8695:37;9837:2;9822:18;;9808:207;10536:301;;10674:2;10695:17;10688:47;10749:78;10674:2;10663:9;10659:18;10813:6;10749:78;;10844:407;11035:2;11049:47;;;5595:2;11020:18;;;16442:19;5631:34;16482:14;;;5611:55;-1:-1;;;5686:12;;;5679:29;5727:12;;;11006:245;11258:407;11449:2;11463:47;;;5978:2;11434:18;;;16442:19;6014:29;16482:14;;;5994:50;6063:12;;;11420:245;11672:407;11863:2;11877:47;;;6314:2;11848:18;;;16442:19;6350:30;16482:14;;;6330:51;6400:12;;;11834:245;12086:407;12277:2;12291:47;;;6651:2;12262:18;;;16442:19;6687:34;16482:14;;;6667:55;-1:-1;;;6742:12;;;6735:32;6786:12;;;12248:245;12500:407;12691:2;12705:47;;;7037:2;12676:18;;;16442:19;7073:34;16482:14;;;7053:55;-1:-1;;;7128:12;;;7121:25;7165:12;;;12662:245;12914:407;13105:2;13119:47;;;7416:2;13090:18;;;16442:19;-1:-1;;;16482:14;;;7432:41;7492:12;;;13076:245;13328:407;13519:2;13533:47;;;7743:2;13504:18;;;16442:19;7779:29;16482:14;;;7759:50;7828:12;;;13490:245;13742:407;13933:2;13947:47;;;8079:2;13918:18;;;16442:19;8115:34;16482:14;;;8095:55;-1:-1;;;8170:12;;;8163:27;8209:12;;;13904:245;14156:407;14347:2;14361:47;;;8460:2;14332:18;;;16442:19;8496:34;16482:14;;;8476:55;-1:-1;;;8551:12;;;8544:35;8598:12;;;14318:245;14570:213;8695:37;;;14688:2;14673:18;;14659:124;14790:647;;8725:5;8702:3;8695:37;8725:5;15183:2;15172:9;15168:18;8695:37;17420:10;;17214:42;;;16915:5;17203:54;15274:2;15263:9;15259:18;3773:58;15018:3;15311:2;15300:9;15296:18;15289:48;15351:76;15018:3;15007:9;15003:19;15413:6;15351:76;;;15343:84;14989:448;-1:-1;;;;;;14989:448;18420:268;18485:1;18492:101;18506:6;18503:1;18500:13;18492:101;;;18573:11;;;18567:18;18554:11;;;18547:39;18528:2;18521:10;18492:101;;;18608:6;18605:1;18602:13;18599:2;;;18485:1;18664:6;18659:3;18655:16;18648:27;18599:2;;18469:219;;;;18801:117;-1:-1;;;;;17203:54;;18860:35;;18850:2;;18909:1;;18899:12;18850:2;18844:74;;19043:117;-1:-1;;;;;19130:5;17087:42;19105:5;19102:35;19092:2;;19151:1;;19141:12
Swarm Source
ipfs://77d8e84c47cee3f0d5065210a0b5f820e26db31e9aea8bb61f02c02622844237
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.