More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
12329777 | 1389 days ago | 45.4401507 ETH | ||||
12329777 | 1389 days ago | 45.4401507 ETH | ||||
12329593 | 1389 days ago | 1.60372823 ETH | ||||
12329593 | 1389 days ago | 1.60372823 ETH | ||||
12329593 | 1389 days ago | 11.72169997 ETH | ||||
12329593 | 1389 days ago | 11.72169997 ETH | ||||
12328755 | 1389 days ago | 13.17363388 ETH | ||||
12328755 | 1389 days ago | 13.17363388 ETH | ||||
12328447 | 1389 days ago | 11.00225284 ETH | ||||
12328447 | 1389 days ago | 11.00225284 ETH | ||||
12326548 | 1389 days ago | 0.77378195 ETH | ||||
12326548 | 1389 days ago | 0.77378195 ETH | ||||
12326528 | 1389 days ago | 2.66546982 ETH | ||||
12326528 | 1389 days ago | 2.66546982 ETH | ||||
12326487 | 1389 days ago | 11.00316099 ETH | ||||
12326487 | 1389 days ago | 11.00316099 ETH | ||||
12326093 | 1389 days ago | 1.7305668 ETH | ||||
12326093 | 1389 days ago | 1.7305668 ETH | ||||
12325419 | 1390 days ago | 20.78459 ETH | ||||
12325419 | 1390 days ago | 20.78459 ETH | ||||
12324731 | 1390 days ago | 0.18930498 ETH | ||||
12324731 | 1390 days ago | 0.18930498 ETH | ||||
12324507 | 1390 days ago | 1.63396122 ETH | ||||
12324507 | 1390 days ago | 1.63396122 ETH | ||||
12324507 | 1390 days ago | 39.21506938 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
UniswapV2
Compiler Version
v0.7.5+commit.eb77ed08
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-01-27 */ // File: openzeppelin-solidity/contracts/token/ERC20/IERC20.sol 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); } // File: openzeppelin-solidity/contracts/utils/Address.sol pragma solidity >=0.6.2 <0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: original_contracts/lib/IExchange.sol pragma solidity 0.7.5; /** * @dev This interface should be implemented by all exchanges which needs to integrate with the paraswap protocol */ interface IExchange { /** * @dev The function which performs the swap on an exchange. * Exchange needs to implement this method in order to support swapping of tokens through it * @param fromToken Address of the source token * @param toToken Address of the destination token * @param fromAmount Amount of source tokens to be swapped * @param toAmount Minimum destination token amount expected out of this swap * @param exchange Internal exchange or factory contract address for the exchange. For example Registry address for the Uniswap * @param payload Any exchange specific data which is required can be passed in this argument in encoded format which * will be decoded by the exchange. Each exchange will publish it's own decoding/encoding mechanism */ function swap( IERC20 fromToken, IERC20 toToken, uint256 fromAmount, uint256 toAmount, address exchange, bytes calldata payload) external payable returns (uint256); /** * @dev The function which performs the swap on an exchange. * Exchange needs to implement this method in order to support swapping of tokens through it * @param fromToken Address of the source token * @param toToken Address of the destination token * @param fromAmount Max Amount of source tokens to be swapped * @param toAmount Destination token amount expected out of this swap * @param exchange Internal exchange or factory contract address for the exchange. For example Registry address for the Uniswap * @param payload Any exchange specific data which is required can be passed in this argument in encoded format which * will be decoded by the exchange. Each exchange will publish it's own decoding/encoding mechanism */ function buy( IERC20 fromToken, IERC20 toToken, uint256 fromAmount, uint256 toAmount, address exchange, bytes calldata payload) external payable returns (uint256); /** * @dev This function is used to perform onChainSwap. It build all the parameters onchain. Basically the information * encoded in payload param of swap will calculated in this case * Exchange needs to implement this method in order to support swapping of tokens through it * @param fromToken Address of the source token * @param toToken Address of the destination token * @param fromAmount Amount of source tokens to be swapped * @param toAmount Minimum destination token amount expected out of this swap */ function onChainSwap( IERC20 fromToken, IERC20 toToken, uint256 fromAmount, uint256 toAmount ) external payable returns (uint256); } // File: openzeppelin-solidity/contracts/math/SafeMath.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol pragma solidity >=0.6.0 <0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: original_contracts/ITokenTransferProxy.sol pragma solidity 0.7.5; interface ITokenTransferProxy { function transferFrom( address token, address from, address to, uint256 amount ) external; function freeGSTTokens(uint256 tokensToFree) external; } // File: original_contracts/lib/Utils.sol pragma solidity 0.7.5; library Utils { using SafeMath for uint256; using SafeERC20 for IERC20; address constant ETH_ADDRESS = address( 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE ); uint256 constant MAX_UINT = 2 ** 256 - 1; /** * @param fromToken Address of the source token * @param toToken Address of the destination token * @param fromAmount Amount of source tokens to be swapped * @param toAmount Minimum destination token amount expected out of this swap * @param expectedAmount Expected amount of destination tokens without slippage * @param beneficiary Beneficiary address * 0 then 100% will be transferred to beneficiary. Pass 10000 for 100% * @param referrer referral id * @param path Route to be taken for this swap to take place */ struct SellData { IERC20 fromToken; IERC20 toToken; uint256 fromAmount; uint256 toAmount; uint256 expectedAmount; address payable beneficiary; string referrer; Utils.Path[] path; } struct BuyData { IERC20 fromToken; IERC20 toToken; uint256 fromAmount; uint256 toAmount; address payable beneficiary; string referrer; Utils.BuyRoute[] route; } struct Route { address payable exchange; address targetExchange; uint percent; bytes payload; uint256 networkFee;//Network fee is associated with 0xv3 trades } struct Path { address to; uint256 totalNetworkFee;//Network fee is associated with 0xv3 trades Route[] routes; } struct BuyRoute { address payable exchange; address targetExchange; uint256 fromAmount; uint256 toAmount; bytes payload; uint256 networkFee;//Network fee is associated with 0xv3 trades } function ethAddress() internal pure returns (address) {return ETH_ADDRESS;} function maxUint() internal pure returns (uint256) {return MAX_UINT;} function approve( address addressToApprove, address token, uint256 amount ) internal { if (token != ETH_ADDRESS) { IERC20 _token = IERC20(token); uint allowance = _token.allowance(address(this), addressToApprove); if (allowance < amount) { _token.safeApprove(addressToApprove, 0); _token.safeIncreaseAllowance(addressToApprove, MAX_UINT); } } } function transferTokens( address token, address payable destination, uint256 amount ) internal { if (amount > 0) { if (token == ETH_ADDRESS) { destination.call{value: amount}(""); } else { IERC20(token).safeTransfer(destination, amount); } } } function tokenBalance( address token, address account ) internal view returns (uint256) { if (token == ETH_ADDRESS) { return account.balance; } else { return IERC20(token).balanceOf(account); } } /** * @dev Helper method to refund gas using gas tokens */ function refundGas( address tokenProxy, uint256 initialGas, uint256 mintPrice ) internal { uint256 mintBase = 32254; uint256 mintToken = 36543; uint256 freeBase = 14154; uint256 freeToken = 6870; uint256 reimburse = 24000; uint256 tokens = initialGas.sub( gasleft()).add(freeBase).div(reimburse.mul(2).sub(freeToken) ); uint256 mintCost = mintBase.add(tokens.mul(mintToken)); uint256 freeCost = freeBase.add(tokens.mul(freeToken)); uint256 maxreimburse = tokens.mul(reimburse); uint256 efficiency = maxreimburse.mul(tx.gasprice).mul(100).div( mintCost.mul(mintPrice).add(freeCost.mul(tx.gasprice)) ); if (efficiency > 100) { freeGasTokens(tokenProxy, tokens); } } /** * @dev Helper method to free gas tokens */ function freeGasTokens(address tokenProxy, uint256 tokens) internal { uint256 tokensToFree = tokens; uint256 safeNumTokens = 0; uint256 gas = gasleft(); if (gas >= 27710) { safeNumTokens = gas.sub(27710).div(1148 + 5722 + 150); } if (tokensToFree > safeNumTokens) { tokensToFree = safeNumTokens; } ITokenTransferProxy(tokenProxy).freeGSTTokens(tokensToFree); } } // File: original_contracts/lib/uniswapv2/IUniswapV3Router.sol pragma solidity 0.7.5; interface IUniswapV3Router { function swap( uint256 amountIn, uint256 amountOutMin, address[] calldata path ) external payable returns (uint256 tokensBought); function buy( uint256 amountInMax, uint256 amountOut, address[] calldata path ) external payable returns (uint256 tokensSold); } // File: openzeppelin-solidity/contracts/GSN/Context.sol pragma solidity >=0.6.0 <0.8.0; /* * @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 GSN 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 payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: openzeppelin-solidity/contracts/access/Ownable.sol pragma solidity >=0.6.0 <0.8.0; /** * @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 () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: original_contracts/lib/TokenFetcher.sol pragma solidity 0.7.5; contract TokenFetcher is Ownable { /** * @dev Allows owner of the contract to transfer any tokens which are assigned to the contract * This method is for safety if by any chance tokens or ETHs are assigned to the contract by mistake * @dev token Address of the token to be transferred * @dev destination Recepient of the token * @dev amount Amount of tokens to be transferred */ function transferTokens( address token, address payable destination, uint256 amount ) external onlyOwner { Utils.transferTokens(token, destination, amount); } } // File: original_contracts/lib/uniswapv2/UniswapV2.sol pragma solidity 0.7.5; pragma experimental ABIEncoderV2; contract UniswapV2 is IExchange, TokenFetcher { using SafeMath for uint256; using Address for address; struct UniswapV2Data { address[] path; } address public weth; address public uinswapV2Router; constructor(address _weth, address uinswapV2Router_) public { weth = _weth; uinswapV2Router = uinswapV2Router_; } /** * @dev Fallback method to allow exchanges to transfer back ethers for a particular swap */ receive() external payable { } function swap( IERC20 fromToken, IERC20 toToken, uint256 fromAmount, uint256 toAmount, address exchange, bytes calldata payload ) external override payable returns (uint256) { UniswapV2Data memory data = abi.decode(payload, (UniswapV2Data)); return _swap( fromToken, toToken, fromAmount, toAmount, exchange, data.path ); } function buy( IERC20 fromToken, IERC20 toToken, uint256 fromAmount, uint256 toAmount, address exchange, bytes calldata payload ) external override payable returns (uint256) { UniswapV2Data memory data = abi.decode(payload, (UniswapV2Data)); uint256 value = 0; if (address(fromToken) == Utils.ethAddress()) { value = fromAmount; } else { Utils.approve(address(exchange), address(fromToken), fromAmount); } IUniswapV3Router(exchange).buy{value: value}( fromAmount, toAmount, data.path ); uint256 remainingAmount = Utils.tokenBalance( address(fromToken), address(this) ); uint256 receivedAmount = Utils.tokenBalance( address(toToken), address(this) ); Utils.transferTokens(address(toToken), msg.sender, receivedAmount); Utils.transferTokens(address(fromToken), msg.sender, remainingAmount); return receivedAmount; } //PATH Token -> Token function onChainSwap( IERC20 fromToken, IERC20 toToken, uint256 fromAmount, uint256 toAmount ) external override payable returns (uint256) { address[] memory path = new address[](2); path[0] = address(fromToken); path[1] = address(toToken); return _swap( fromToken, toToken, fromAmount, toAmount, uinswapV2Router, path ); } function _swap( IERC20 fromToken, IERC20 toToken, uint256 fromAmount, uint256 toAmount, address exchange, address[] memory path ) private returns(uint256) { uint256 value = 0; if (address(fromToken) == Utils.ethAddress()) { value = fromAmount; } else { Utils.approve(address(exchange), address(fromToken), fromAmount); } IUniswapV3Router(exchange).swap{value: value}( fromAmount, toAmount, path ); uint256 receivedAmount = Utils.tokenBalance( address(toToken), address(this) ); Utils.transferTokens(address(toToken), msg.sender, receivedAmount); return receivedAmount; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_weth","type":"address"},{"internalType":"address","name":"uinswapV2Router_","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":[{"internalType":"contract IERC20","name":"fromToken","type":"address"},{"internalType":"contract IERC20","name":"toToken","type":"address"},{"internalType":"uint256","name":"fromAmount","type":"uint256"},{"internalType":"uint256","name":"toAmount","type":"uint256"},{"internalType":"address","name":"exchange","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"}],"name":"buy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"fromToken","type":"address"},{"internalType":"contract IERC20","name":"toToken","type":"address"},{"internalType":"uint256","name":"fromAmount","type":"uint256"},{"internalType":"uint256","name":"toAmount","type":"uint256"}],"name":"onChainSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","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":"contract IERC20","name":"fromToken","type":"address"},{"internalType":"contract IERC20","name":"toToken","type":"address"},{"internalType":"uint256","name":"fromAmount","type":"uint256"},{"internalType":"uint256","name":"toAmount","type":"uint256"},{"internalType":"address","name":"exchange","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"}],"name":"swap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address payable","name":"destination","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uinswapV2Router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b5060405161130638038061130683398101604081905261002f916100d4565b60006100396100b4565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055610106565b3390565b80516001600160a01b03811681146100cf57600080fd5b919050565b600080604083850312156100e6578182fd5b6100ef836100b8565b91506100fd602084016100b8565b90509250929050565b6111f1806101156000396000f3fe60806040526004361061008a5760003560e01c80638da5cb5b116100595780638da5cb5b1461010b5780639728032a14610120578063a64b6e5f14610135578063b69cbf9f14610155578063f2fde38b1461016857610091565b80633fc8cef3146100965780635f0a1862146100c1578063715018a6146100e1578063815d3871146100f857610091565b3661009157005b600080fd5b3480156100a257600080fd5b506100ab610188565b6040516100b89190610ea4565b60405180910390f35b6100d46100cf366004610cd0565b610197565b6040516100b891906110ed565b3480156100ed57600080fd5b506100f66102aa565b005b6100d4610106366004610c8b565b610332565b34801561011757600080fd5b506100ab6103ca565b34801561012c57600080fd5b506100ab6103d9565b34801561014157600080fd5b506100f6610150366004610c2b565b6103e8565b6100d4610163366004610cd0565b61042d565b34801561017457600080fd5b506100f6610183366004610c0f565b610464565b6001546001600160a01b031681565b60006101a1610bf1565b6101ad83850185610d89565b905060006101b961051a565b6001600160a01b03168a6001600160a01b031614156101d95750866101e4565b6101e4868b8a610532565b8151604051632f0fa0bf60e11b81526001600160a01b03881691635e1f417e918491610216918d918d916004016110f6565b6020604051808303818588803b15801561022f57600080fd5b505af1158015610243573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906102689190610e6d565b5060006102758b30610615565b905060006102838b30610615565b90506102908b33836106d2565b61029b8c33846106d2565b9b9a5050505050505050505050565b6102b2610772565b6000546001600160a01b039081169116146102e85760405162461bcd60e51b81526004016102df90610fe1565b60405180910390fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6040805160028082526060808301845260009390929190602083019080368337019050509050858160008151811061036657fe5b60200260200101906001600160a01b031690816001600160a01b031681525050848160018151811061039457fe5b6001600160a01b0392831660209182029290920101526002546103c09188918891889188911686610776565b9695505050505050565b6000546001600160a01b031690565b6002546001600160a01b031681565b6103f0610772565b6000546001600160a01b0390811691161461041d5760405162461bcd60e51b81526004016102df90610fe1565b6104288383836106d2565b505050565b6000610437610bf1565b61044383850185610d89565b905061045789898989898660000151610776565b9998505050505050505050565b61046c610772565b6000546001600160a01b039081169116146104995760405162461bcd60e51b81526004016102df90610fe1565b6001600160a01b0381166104bf5760405162461bcd60e51b81526004016102df90610f1e565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee90565b6001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1461042857604051636eb1769f60e11b815282906000906001600160a01b0383169063dd62ed3e906105899030908990600401610eb8565b60206040518083038186803b1580156105a157600080fd5b505afa1580156105b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d99190610e6d565b90508281101561060e576105f86001600160a01b038316866000610856565b61060e6001600160a01b03831686600019610950565b5050505050565b60006001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561064d57506001600160a01b038116316106cc565b6040516370a0823160e01b81526001600160a01b038416906370a0823190610679908590600401610ea4565b60206040518083038186803b15801561069157600080fd5b505afa1580156106a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c99190610e6d565b90505b92915050565b8015610428576001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561075e57816001600160a01b03168160405161071490610ea1565b60006040518083038185875af1925050503d8060008114610751576040519150601f19603f3d011682016040523d82523d6000602084013e610756565b606091505b505050610428565b6104286001600160a01b0384168383610a01565b3390565b60008061078161051a565b6001600160a01b0316886001600160a01b031614156107a15750846107ac565b6107ac848988610532565b60405163265616ab60e21b81526001600160a01b038516906399585aac9083906107de908a908a9089906004016110f6565b6020604051808303818588803b1580156107f757600080fd5b505af115801561080b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906108309190610e6d565b50600061083d8830610615565b905061084a8833836106d2565b98975050505050505050565b8015806108de5750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e9061088c9030908690600401610eb8565b60206040518083038186803b1580156108a457600080fd5b505afa1580156108b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108dc9190610e6d565b155b6108fa5760405162461bcd60e51b81526004016102df90611097565b6104288363095ea7b360e01b8484604051602401610919929190610ed2565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a20565b60006109da82856001600160a01b031663dd62ed3e30876040518363ffffffff1660e01b8152600401610984929190610eb8565b60206040518083038186803b15801561099c57600080fd5b505afa1580156109b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d49190610e6d565b90610aaf565b90506109fb8463095ea7b360e01b8584604051602401610919929190610ed2565b50505050565b6104288363a9059cbb60e01b8484604051602401610919929190610ed2565b6060610a75826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610ad49092919063ffffffff16565b8051909150156104285780806020019051810190610a939190610c6b565b6104285760405162461bcd60e51b81526004016102df9061104d565b6000828201838110156106c95760405162461bcd60e51b81526004016102df90610f64565b6060610ae38484600085610aed565b90505b9392505050565b606082471015610b0f5760405162461bcd60e51b81526004016102df90610f9b565b610b1885610bae565b610b345760405162461bcd60e51b81526004016102df90611016565b60006060866001600160a01b03168587604051610b519190610e85565b60006040518083038185875af1925050503d8060008114610b8e576040519150601f19603f3d011682016040523d82523d6000602084013e610b93565b606091505b5091509150610ba3828286610bb8565b979650505050505050565b803b15155b919050565b60608315610bc7575081610ae6565b825115610bd75782518084602001fd5b8160405162461bcd60e51b81526004016102df9190610eeb565b6040518060200160405280606081525090565b8035610bb3816111a3565b600060208284031215610c20578081fd5b81356106c9816111a3565b600080600060608486031215610c3f578182fd5b8335610c4a816111a3565b92506020840135610c5a816111a3565b929592945050506040919091013590565b600060208284031215610c7c578081fd5b815180151581146106c9578182fd5b60008060008060808587031215610ca0578081fd5b8435610cab816111a3565b93506020850135610cbb816111a3565b93969395505050506040820135916060013590565b600080600080600080600060c0888a031215610cea578283fd5b8735610cf5816111a3565b96506020880135610d05816111a3565b955060408801359450606088013593506080880135610d23816111a3565b925060a088013567ffffffffffffffff80821115610d3f578384fd5b818a0191508a601f830112610d52578384fd5b813581811115610d60578485fd5b8b6020828501011115610d71578485fd5b60208301945080935050505092959891949750929550565b60006020808385031215610d9b578182fd5b823567ffffffffffffffff80821115610db2578384fd5b8185019150828287031215610dc5578384fd5b6040518381018181108382111715610dd957fe5b604052823582811115610dea578586fd5b80840193505086601f840112610dfe578485fd5b823582811115610e0a57fe5b8481029250610e1a858401611153565b8181528581019085870185870188018b1015610e34578889fd5b8896505b83871015610e5d57610e4981610c04565b835260019690960195918701918701610e38565b5083525090979650505050505050565b600060208284031215610e7e578081fd5b5051919050565b60008251610e97818460208701611177565b9190910192915050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b6000602082528251806020840152610f0a816040850160208701611177565b601f01601f19169190910160400192915050565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60208082526036908201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60408201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b606082015260800190565b90815260200190565b60006060820185835260208581850152606060408501528185518084526080860191508287019350845b818110156111455784516001600160a01b031683529383019391830191600101611120565b509098975050505050505050565b60405181810167ffffffffffffffff8111828210171561116f57fe5b604052919050565b60005b8381101561119257818101518382015260200161117a565b838111156109fb5750506000910152565b6001600160a01b03811681146111b857600080fd5b5056fea2646970667358221220d7fb9ffa4358293b54c41fb1c06f67494c3227b7fd77afe4b70fcb04364f9af964736f6c63430007050033000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061008a5760003560e01c80638da5cb5b116100595780638da5cb5b1461010b5780639728032a14610120578063a64b6e5f14610135578063b69cbf9f14610155578063f2fde38b1461016857610091565b80633fc8cef3146100965780635f0a1862146100c1578063715018a6146100e1578063815d3871146100f857610091565b3661009157005b600080fd5b3480156100a257600080fd5b506100ab610188565b6040516100b89190610ea4565b60405180910390f35b6100d46100cf366004610cd0565b610197565b6040516100b891906110ed565b3480156100ed57600080fd5b506100f66102aa565b005b6100d4610106366004610c8b565b610332565b34801561011757600080fd5b506100ab6103ca565b34801561012c57600080fd5b506100ab6103d9565b34801561014157600080fd5b506100f6610150366004610c2b565b6103e8565b6100d4610163366004610cd0565b61042d565b34801561017457600080fd5b506100f6610183366004610c0f565b610464565b6001546001600160a01b031681565b60006101a1610bf1565b6101ad83850185610d89565b905060006101b961051a565b6001600160a01b03168a6001600160a01b031614156101d95750866101e4565b6101e4868b8a610532565b8151604051632f0fa0bf60e11b81526001600160a01b03881691635e1f417e918491610216918d918d916004016110f6565b6020604051808303818588803b15801561022f57600080fd5b505af1158015610243573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906102689190610e6d565b5060006102758b30610615565b905060006102838b30610615565b90506102908b33836106d2565b61029b8c33846106d2565b9b9a5050505050505050505050565b6102b2610772565b6000546001600160a01b039081169116146102e85760405162461bcd60e51b81526004016102df90610fe1565b60405180910390fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6040805160028082526060808301845260009390929190602083019080368337019050509050858160008151811061036657fe5b60200260200101906001600160a01b031690816001600160a01b031681525050848160018151811061039457fe5b6001600160a01b0392831660209182029290920101526002546103c09188918891889188911686610776565b9695505050505050565b6000546001600160a01b031690565b6002546001600160a01b031681565b6103f0610772565b6000546001600160a01b0390811691161461041d5760405162461bcd60e51b81526004016102df90610fe1565b6104288383836106d2565b505050565b6000610437610bf1565b61044383850185610d89565b905061045789898989898660000151610776565b9998505050505050505050565b61046c610772565b6000546001600160a01b039081169116146104995760405162461bcd60e51b81526004016102df90610fe1565b6001600160a01b0381166104bf5760405162461bcd60e51b81526004016102df90610f1e565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee90565b6001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1461042857604051636eb1769f60e11b815282906000906001600160a01b0383169063dd62ed3e906105899030908990600401610eb8565b60206040518083038186803b1580156105a157600080fd5b505afa1580156105b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d99190610e6d565b90508281101561060e576105f86001600160a01b038316866000610856565b61060e6001600160a01b03831686600019610950565b5050505050565b60006001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561064d57506001600160a01b038116316106cc565b6040516370a0823160e01b81526001600160a01b038416906370a0823190610679908590600401610ea4565b60206040518083038186803b15801561069157600080fd5b505afa1580156106a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c99190610e6d565b90505b92915050565b8015610428576001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561075e57816001600160a01b03168160405161071490610ea1565b60006040518083038185875af1925050503d8060008114610751576040519150601f19603f3d011682016040523d82523d6000602084013e610756565b606091505b505050610428565b6104286001600160a01b0384168383610a01565b3390565b60008061078161051a565b6001600160a01b0316886001600160a01b031614156107a15750846107ac565b6107ac848988610532565b60405163265616ab60e21b81526001600160a01b038516906399585aac9083906107de908a908a9089906004016110f6565b6020604051808303818588803b1580156107f757600080fd5b505af115801561080b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906108309190610e6d565b50600061083d8830610615565b905061084a8833836106d2565b98975050505050505050565b8015806108de5750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e9061088c9030908690600401610eb8565b60206040518083038186803b1580156108a457600080fd5b505afa1580156108b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108dc9190610e6d565b155b6108fa5760405162461bcd60e51b81526004016102df90611097565b6104288363095ea7b360e01b8484604051602401610919929190610ed2565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a20565b60006109da82856001600160a01b031663dd62ed3e30876040518363ffffffff1660e01b8152600401610984929190610eb8565b60206040518083038186803b15801561099c57600080fd5b505afa1580156109b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d49190610e6d565b90610aaf565b90506109fb8463095ea7b360e01b8584604051602401610919929190610ed2565b50505050565b6104288363a9059cbb60e01b8484604051602401610919929190610ed2565b6060610a75826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610ad49092919063ffffffff16565b8051909150156104285780806020019051810190610a939190610c6b565b6104285760405162461bcd60e51b81526004016102df9061104d565b6000828201838110156106c95760405162461bcd60e51b81526004016102df90610f64565b6060610ae38484600085610aed565b90505b9392505050565b606082471015610b0f5760405162461bcd60e51b81526004016102df90610f9b565b610b1885610bae565b610b345760405162461bcd60e51b81526004016102df90611016565b60006060866001600160a01b03168587604051610b519190610e85565b60006040518083038185875af1925050503d8060008114610b8e576040519150601f19603f3d011682016040523d82523d6000602084013e610b93565b606091505b5091509150610ba3828286610bb8565b979650505050505050565b803b15155b919050565b60608315610bc7575081610ae6565b825115610bd75782518084602001fd5b8160405162461bcd60e51b81526004016102df9190610eeb565b6040518060200160405280606081525090565b8035610bb3816111a3565b600060208284031215610c20578081fd5b81356106c9816111a3565b600080600060608486031215610c3f578182fd5b8335610c4a816111a3565b92506020840135610c5a816111a3565b929592945050506040919091013590565b600060208284031215610c7c578081fd5b815180151581146106c9578182fd5b60008060008060808587031215610ca0578081fd5b8435610cab816111a3565b93506020850135610cbb816111a3565b93969395505050506040820135916060013590565b600080600080600080600060c0888a031215610cea578283fd5b8735610cf5816111a3565b96506020880135610d05816111a3565b955060408801359450606088013593506080880135610d23816111a3565b925060a088013567ffffffffffffffff80821115610d3f578384fd5b818a0191508a601f830112610d52578384fd5b813581811115610d60578485fd5b8b6020828501011115610d71578485fd5b60208301945080935050505092959891949750929550565b60006020808385031215610d9b578182fd5b823567ffffffffffffffff80821115610db2578384fd5b8185019150828287031215610dc5578384fd5b6040518381018181108382111715610dd957fe5b604052823582811115610dea578586fd5b80840193505086601f840112610dfe578485fd5b823582811115610e0a57fe5b8481029250610e1a858401611153565b8181528581019085870185870188018b1015610e34578889fd5b8896505b83871015610e5d57610e4981610c04565b835260019690960195918701918701610e38565b5083525090979650505050505050565b600060208284031215610e7e578081fd5b5051919050565b60008251610e97818460208701611177565b9190910192915050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b6000602082528251806020840152610f0a816040850160208701611177565b601f01601f19169190910160400192915050565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60208082526036908201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60408201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b606082015260800190565b90815260200190565b60006060820185835260208581850152606060408501528185518084526080860191508287019350845b818110156111455784516001600160a01b031683529383019391830191600101611120565b509098975050505050505050565b60405181810167ffffffffffffffff8111828210171561116f57fe5b604052919050565b60005b8381101561119257818101518382015260200161117a565b838111156109fb5750506000910152565b6001600160a01b03811681146111b857600080fd5b5056fea2646970667358221220d7fb9ffa4358293b54c41fb1c06f67494c3227b7fd77afe4b70fcb04364f9af964736f6c63430007050033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _weth (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [1] : uinswapV2Router_ (address): 0x0000000000000000000000000000000000000000
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
31842:3707:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32024:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32932:1173;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;30415:148::-;;;;;;;;;;;;;:::i;:::-;;34140:543;;;;;;:::i;:::-;;:::i;29773:79::-;;;;;;;;;;;;;:::i;32052:30::-;;;;;;;;;;;;;:::i;31474:227::-;;;;;;;;;;-1:-1:-1;31474:227:0;;;;;:::i;:::-;;:::i;32388:536::-;;;;;;:::i;:::-;;:::i;30718:244::-;;;;;;;;;;-1:-1:-1;30718:244:0;;;;;:::i;:::-;;:::i;32024:19::-;;;-1:-1:-1;;;;;32024:19:0;;:::o;32932:1173::-;33191:7;33218:25;;:::i;:::-;33246:36;;;;33257:7;33246:36;:::i;:::-;33218:64;;33295:13;33351:18;:16;:18::i;:::-;-1:-1:-1;;;;;33329:40:0;33337:9;-1:-1:-1;;;;;33329:40:0;;33325:195;;;-1:-1:-1;33392:10:0;33325:195;;;33444:64;33466:8;33485:9;33497:10;33444:13;:64::i;:::-;33639:9;;33532:127;;-1:-1:-1;;;33532:127:0;;-1:-1:-1;;;;;33532:30:0;;;;;33570:5;;33532:127;;33591:10;;33616:8;;33532:127;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33672:23;33698:86;33737:9;33768:4;33698:18;:86::i;:::-;33672:112;;33795:22;33820:84;33859:7;33888:4;33820:18;:84::i;:::-;33795:109;;33917:66;33946:7;33956:10;33968:14;33917:20;:66::i;:::-;33994:69;34023:9;34035:10;34047:15;33994:20;:69::i;:::-;34083:14;32932:1173;-1:-1:-1;;;;;;;;;;;32932:1173:0:o;30415:148::-;29995:12;:10;:12::i;:::-;29985:6;;-1:-1:-1;;;;;29985:6:0;;;:22;;;29977:67;;;;-1:-1:-1;;;29977:67:0;;;;;;;:::i;:::-;;;;;;;;;30522:1:::1;30506:6:::0;;30485:40:::1;::::0;-1:-1:-1;;;;;30506:6:0;;::::1;::::0;30485:40:::1;::::0;30522:1;;30485:40:::1;30553:1;30536:19:::0;;-1:-1:-1;;;;;;30536:19:0::1;::::0;;30415:148::o;34140:543::-;34398:16;;;34412:1;34398:16;;;34374:21;34398:16;;;;;34347:7;;34374:21;;34398:16;34412:1;34398:16;;;;;;;;;;-1:-1:-1;34398:16:0;34374:40;;34445:9;34427:4;34432:1;34427:7;;;;;;;;;;;;;:28;-1:-1:-1;;;;;34427:28:0;;;-1:-1:-1;;;;;34427:28:0;;;;;34484:7;34466:4;34471:1;34466:7;;;;;;;;-1:-1:-1;;;;;34466:26:0;;;:7;;;;;;;;;:26;34626:15;;34512:159;;34532:9;;34556:7;;34578:10;;34603:8;;34626:15;34656:4;34512:5;:159::i;:::-;34505:166;34140:543;-1:-1:-1;;;;;;34140:543:0:o;29773:79::-;29811:7;29838:6;-1:-1:-1;;;;;29838:6:0;29773:79;:::o;32052:30::-;;;-1:-1:-1;;;;;32052:30:0;;:::o;31474:227::-;29995:12;:10;:12::i;:::-;29985:6;;-1:-1:-1;;;;;29985:6:0;;;:22;;;29977:67;;;;-1:-1:-1;;;29977:67:0;;;;;;;:::i;:::-;31645:48:::1;31666:5;31673:11;31686:6;31645:20;:48::i;:::-;31474:227:::0;;;:::o;32388:536::-;32648:7;32675:25;;:::i;:::-;32703:36;;;;32714:7;32703:36;:::i;:::-;32675:64;;32757:157;32777:9;32801:7;32823:10;32848:8;32871;32894:4;:9;;;32757:5;:157::i;:::-;32750:164;32388:536;-1:-1:-1;;;;;;;;;32388:536:0:o;30718:244::-;29995:12;:10;:12::i;:::-;29985:6;;-1:-1:-1;;;;;29985:6:0;;;:22;;;29977:67;;;;-1:-1:-1;;;29977:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30807:22:0;::::1;30799:73;;;;-1:-1:-1::0;;;30799:73:0::1;;;;;;;:::i;:::-;30909:6;::::0;;30888:38:::1;::::0;-1:-1:-1;;;;;30888:38:0;;::::1;::::0;30909:6;::::1;::::0;30888:38:::1;::::0;::::1;30937:6;:17:::0;;-1:-1:-1;;;;;;30937:17:0::1;-1:-1:-1::0;;;;;30937:17:0;;;::::1;::::0;;;::::1;::::0;;30718:244::o;24314:75::-;22516:42;24314:75;:::o;24474:489::-;-1:-1:-1;;;;;24606:20:0;;22516:42;24606:20;24602:354;;24706:49;;-1:-1:-1;;;24706:49:0;;24666:5;;24643:13;;-1:-1:-1;;;;;24706:16:0;;;;;:49;;24731:4;;24738:16;;24706:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24689:66;;24788:6;24776:9;:18;24772:173;;;24815:39;-1:-1:-1;;;;;24815:18:0;;24834:16;24852:1;24815:18;:39::i;:::-;24873:56;-1:-1:-1;;;;;24873:28:0;;24902:16;-1:-1:-1;;24873:28:0;:56::i;:::-;24602:354;;24474:489;;;:::o;25375:296::-;25492:7;-1:-1:-1;;;;;25521:20:0;;22516:42;25521:20;25517:147;;;-1:-1:-1;;;;;;25565:15:0;;;25558:22;;25517:147;25620:32;;-1:-1:-1;;;25620:32:0;;-1:-1:-1;;;;;25620:23:0;;;;;:32;;25644:7;;25620:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25613:39;;25517:147;25375:296;;;;:::o;24971:396::-;25123:10;;25119:239;;-1:-1:-1;;;;;25154:20:0;;22516:42;25154:20;25150:197;;;25195:11;-1:-1:-1;;;;;25195:16:0;25219:6;25195:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25150:197;;;25284:47;-1:-1:-1;;;;;25284:26:0;;25311:11;25324:6;25284:26;:47::i;28300:106::-;28388:10;28300:106;:::o;34691:855::-;34914:7;;34997:18;:16;:18::i;:::-;-1:-1:-1;;;;;34975:40:0;34983:9;-1:-1:-1;;;;;34975:40:0;;34971:197;;;-1:-1:-1;35040:10:0;34971:197;;;35092:64;35114:8;35133:9;35145:10;35092:13;:64::i;:::-;35180:123;;-1:-1:-1;;;35180:123:0;;-1:-1:-1;;;;;35180:31:0;;;;;35219:5;;35180:123;;35240:10;;35265:8;;35288:4;;35180:123;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35316:22;35341:84;35380:7;35409:4;35341:18;:84::i;:::-;35316:109;;35438:66;35467:7;35477:10;35489:14;35438:20;:66::i;:::-;35524:14;34691:855;-1:-1:-1;;;;;;;;34691:855:0:o;19550:622::-;19920:10;;;19919:62;;-1:-1:-1;19936:39:0;;-1:-1:-1;;;19936:39:0;;-1:-1:-1;;;;;19936:15:0;;;;;:39;;19960:4;;19967:7;;19936:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;19919:62;19911:152;;;;-1:-1:-1;;;19911:152:0;;;;;;;:::i;:::-;20074:90;20094:5;20124:22;;;20148:7;20157:5;20101:62;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;20101:62:0;;;;;;;;;;;;;;-1:-1:-1;;;;;20101:62:0;-1:-1:-1;;;;;;20101:62:0;;;;;;;;;;20074:19;:90::i;20180:286::-;20277:20;20300:50;20344:5;20300;-1:-1:-1;;;;;20300:15:0;;20324:4;20331:7;20300:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;;:50::i;:::-;20277:73;;20361:97;20381:5;20411:22;;;20435:7;20444:12;20388:69;;;;;;;;;:::i;20361:97::-;20180:286;;;;:::o;18891:177::-;18974:86;18994:5;19024:23;;;19049:2;19053:5;19001:58;;;;;;;;;:::i;21196:761::-;21620:23;21646:69;21674:4;21646:69;;;;;;;;;;;;;;;;;21654:5;-1:-1:-1;;;;;21646:27:0;;;:69;;;;;:::i;:::-;21730:17;;21620:95;;-1:-1:-1;21730:21:0;21726:224;;21872:10;21861:30;;;;;;;;;;;;:::i;:::-;21853:85;;;;-1:-1:-1;;;21853:85:0;;;;;;;:::i;13757:181::-;13815:7;13847:5;;;13871:6;;;;13863:46;;;;-1:-1:-1;;;13863:46:0;;;;;;;:::i;6519:195::-;6622:12;6654:52;6676:6;6684:4;6690:1;6693:12;6654:21;:52::i;:::-;6647:59;;6519:195;;;;;;:::o;7571:530::-;7698:12;7756:5;7731:21;:30;;7723:81;;;;-1:-1:-1;;;7723:81:0;;;;;;;:::i;:::-;7823:18;7834:6;7823:10;:18::i;:::-;7815:60;;;;-1:-1:-1;;;7815:60:0;;;;;;;:::i;:::-;7949:12;7963:23;7990:6;-1:-1:-1;;;;;7990:11:0;8010:5;8018:4;7990:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7948:75;;;;8041:52;8059:7;8068:10;8080:12;8041:17;:52::i;:::-;8034:59;7571:530;-1:-1:-1;;;;;;;7571:530:0:o;3601:422::-;3968:20;;4007:8;;3601:422;;;;:::o;9107:742::-;9222:12;9251:7;9247:595;;;-1:-1:-1;9282:10:0;9275:17;;9247:595;9396:17;;:21;9392:439;;9659:10;9653:17;9720:15;9707:10;9703:2;9699:19;9692:44;9607:148;9802:12;9795:20;;-1:-1:-1;;;9795:20:0;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;:::o;14:138:1:-;84:20;;113:33;84:20;113:33;:::i;157:259::-;;269:2;257:9;248:7;244:23;240:32;237:2;;;290:6;282;275:22;237:2;334:9;321:23;353:33;380:5;353:33;:::i;421:478::-;;;;575:2;563:9;554:7;550:23;546:32;543:2;;;596:6;588;581:22;543:2;640:9;627:23;659:33;686:5;659:33;:::i;:::-;711:5;-1:-1:-1;768:2:1;753:18;;740:32;781:35;740:32;781:35;:::i;:::-;533:366;;835:7;;-1:-1:-1;;;889:2:1;874:18;;;;861:32;;533:366::o;904:297::-;;1024:2;1012:9;1003:7;999:23;995:32;992:2;;;1045:6;1037;1030:22;992:2;1082:9;1076:16;1135:5;1128:13;1121:21;1114:5;1111:32;1101:2;;1162:6;1154;1147:22;1206:565;;;;;1395:3;1383:9;1374:7;1370:23;1366:33;1363:2;;;1417:6;1409;1402:22;1363:2;1461:9;1448:23;1480:33;1507:5;1480:33;:::i;:::-;1532:5;-1:-1:-1;1589:2:1;1574:18;;1561:32;1602:35;1561:32;1602:35;:::i;:::-;1353:418;;1656:7;;-1:-1:-1;;;;1710:2:1;1695:18;;1682:32;;1761:2;1746:18;1733:32;;1353:418::o;1776:1229::-;;;;;;;;2018:3;2006:9;1997:7;1993:23;1989:33;1986:2;;;2040:6;2032;2025:22;1986:2;2084:9;2071:23;2103:33;2130:5;2103:33;:::i;:::-;2155:5;-1:-1:-1;2212:2:1;2197:18;;2184:32;2225:35;2184:32;2225:35;:::i;:::-;2279:7;-1:-1:-1;2333:2:1;2318:18;;2305:32;;-1:-1:-1;2384:2:1;2369:18;;2356:32;;-1:-1:-1;2440:3:1;2425:19;;2412:33;2454:35;2412:33;2454:35;:::i;:::-;2508:7;-1:-1:-1;2566:3:1;2551:19;;2538:33;2590:18;2620:14;;;2617:2;;;2652:6;2644;2637:22;2617:2;2695:6;2684:9;2680:22;2670:32;;2740:7;2733:4;2729:2;2725:13;2721:27;2711:2;;2767:6;2759;2752:22;2711:2;2812;2799:16;2838:2;2830:6;2827:14;2824:2;;;2859:6;2851;2844:22;2824:2;2909:7;2904:2;2895:6;2891:2;2887:15;2883:24;2880:37;2877:2;;;2935:6;2927;2920:22;2877:2;2971;2967;2963:11;2953:21;;2993:6;2983:16;;;;;1976:1029;;;;;;;;;;:::o;3010:1431::-;;3131:2;3174;3162:9;3153:7;3149:23;3145:32;3142:2;;;3195:6;3187;3180:22;3142:2;3240:9;3227:23;3269:18;3310:2;3302:6;3299:14;3296:2;;;3331:6;3323;3316:22;3296:2;3374:6;3363:9;3359:22;3349:32;;3415:2;3410;3401:7;3397:16;3393:25;3390:2;;;3436:6;3428;3421:22;3390:2;3474;3468:9;3516:2;3508:6;3504:15;3569:6;3557:10;3554:22;3549:2;3537:10;3534:18;3531:46;3528:2;;;3580:9;3528:2;3607;3600:22;3647:16;;3675;;;3672:2;;;3709:6;3701;3694:22;3672:2;3745:8;3741:2;3737:17;3727:27;;;3792:7;3785:4;3781:2;3777:13;3773:27;3763:2;;3819:6;3811;3804:22;3763:2;3864;3851:16;3890:2;3882:6;3879:14;3876:2;;;3896:9;3876:2;3938;3930:6;3926:15;3916:25;;3961:27;3984:2;3980;3976:11;3961:27;:::i;:::-;4022:19;;;4057:12;;;;4089:11;;;4119;;;4115:20;;4112:33;-1:-1:-1;4109:2:1;;;4163:6;4155;4148:22;4109:2;4190:6;4181:15;;4205:175;4219:6;4216:1;4213:13;4205:175;;;4280:25;4301:3;4280:25;:::i;:::-;4268:38;;4241:1;4234:9;;;;;4326:12;;;;4358;;4205:175;;;-1:-1:-1;4389:21:1;;-1:-1:-1;4396:6:1;;3111:1330;-1:-1:-1;;;;;;;3111:1330:1:o;4446:194::-;;4569:2;4557:9;4548:7;4544:23;4540:32;4537:2;;;4590:6;4582;4575:22;4537:2;-1:-1:-1;4618:16:1;;4527:113;-1:-1:-1;4527:113:1:o;4645:274::-;;4812:6;4806:13;4828:53;4874:6;4869:3;4862:4;4854:6;4850:17;4828:53;:::i;:::-;4897:16;;;;;4782:137;-1:-1:-1;;4782:137:1:o;4924:205::-;5124:3;5115:14::o;5134:203::-;-1:-1:-1;;;;;5298:32:1;;;;5280:51;;5268:2;5253:18;;5235:102::o;5342:304::-;-1:-1:-1;;;;;5572:15:1;;;5554:34;;5624:15;;5619:2;5604:18;;5597:43;5504:2;5489:18;;5471:175::o;5651:274::-;-1:-1:-1;;;;;5843:32:1;;;;5825:51;;5907:2;5892:18;;5885:34;5813:2;5798:18;;5780:145::o;5930:383::-;;6079:2;6068:9;6061:21;6111:6;6105:13;6154:6;6149:2;6138:9;6134:18;6127:34;6170:66;6229:6;6224:2;6213:9;6209:18;6204:2;6196:6;6192:15;6170:66;:::i;:::-;6297:2;6276:15;-1:-1:-1;;6272:29:1;6257:45;;;;6304:2;6253:54;;6051:262;-1:-1:-1;;6051:262:1:o;6318:402::-;6520:2;6502:21;;;6559:2;6539:18;;;6532:30;6598:34;6593:2;6578:18;;6571:62;-1:-1:-1;;;6664:2:1;6649:18;;6642:36;6710:3;6695:19;;6492:228::o;6725:351::-;6927:2;6909:21;;;6966:2;6946:18;;;6939:30;7005:29;7000:2;6985:18;;6978:57;7067:2;7052:18;;6899:177::o;7081:402::-;7283:2;7265:21;;;7322:2;7302:18;;;7295:30;7361:34;7356:2;7341:18;;7334:62;-1:-1:-1;;;7427:2:1;7412:18;;7405:36;7473:3;7458:19;;7255:228::o;7488:356::-;7690:2;7672:21;;;7709:18;;;7702:30;7768:34;7763:2;7748:18;;7741:62;7835:2;7820:18;;7662:182::o;7849:353::-;8051:2;8033:21;;;8090:2;8070:18;;;8063:30;8129:31;8124:2;8109:18;;8102:59;8193:2;8178:18;;8023:179::o;8207:406::-;8409:2;8391:21;;;8448:2;8428:18;;;8421:30;8487:34;8482:2;8467:18;;8460:62;-1:-1:-1;;;8553:2:1;8538:18;;8531:40;8603:3;8588:19;;8381:232::o;8618:418::-;8820:2;8802:21;;;8859:2;8839:18;;;8832:30;8898:34;8893:2;8878:18;;8871:62;-1:-1:-1;;;8964:2:1;8949:18;;8942:52;9026:3;9011:19;;8792:244::o;9041:177::-;9187:25;;;9175:2;9160:18;;9142:76::o;9223:804::-;;9469:2;9458:9;9454:18;9499:6;9488:9;9481:25;9525:2;9563:6;9558:2;9547:9;9543:18;9536:34;9606:2;9601;9590:9;9586:18;9579:30;9629:6;9664;9658:13;9695:6;9687;9680:22;9733:3;9722:9;9718:19;9711:26;;9772:2;9764:6;9760:15;9746:29;;9793:4;9806:195;9820:6;9817:1;9814:13;9806:195;;;9885:13;;-1:-1:-1;;;;;9881:39:1;9869:52;;9976:15;;;;9941:12;;;;9917:1;9835:9;9806:195;;;-1:-1:-1;10018:3:1;;9430:597;-1:-1:-1;;;;;;;;9430:597:1:o;10032:242::-;10102:2;10096:9;10132:17;;;10179:18;10164:34;;10200:22;;;10161:62;10158:2;;;10226:9;10158:2;10253;10246:22;10076:198;;-1:-1:-1;10076:198:1:o;10279:258::-;10351:1;10361:113;10375:6;10372:1;10369:13;10361:113;;;10451:11;;;10445:18;10432:11;;;10425:39;10397:2;10390:10;10361:113;;;10492:6;10489:1;10486:13;10483:2;;;-1:-1:-1;;10527:1:1;10509:16;;10502:27;10332:205::o;10542:133::-;-1:-1:-1;;;;;10619:31:1;;10609:42;;10599:2;;10665:1;10662;10655:12;10599:2;10589:86;:::o
Swarm Source
ipfs://d7fb9ffa4358293b54c41fb1c06f67494c3227b7fd77afe4b70fcb04364f9af9
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.