More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 237,458 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Swap Exact Input... | 30322678 | 15 hrs ago | IN | 0 CELO | 0.00346665 | ||||
Swap Exact Input... | 30316481 | 23 hrs ago | IN | 0 CELO | 0.00309194 | ||||
Swap Exact Input... | 30312177 | 29 hrs ago | IN | 0 CELO | 0.00306352 | ||||
Swap Exact Input... | 30309276 | 33 hrs ago | IN | 0 CELO | 0.00241571 | ||||
Swap Exact Input... | 30309182 | 34 hrs ago | IN | 0 CELO | 0.00231345 | ||||
Swap Exact Input... | 30307687 | 36 hrs ago | IN | 0 CELO | 0.00170103 | ||||
Swap Exact Input... | 30307685 | 36 hrs ago | IN | 0 CELO | 0.00170103 | ||||
Swap Exact Input... | 30307683 | 36 hrs ago | IN | 0 CELO | 0.00170103 | ||||
Swap Exact Input... | 30306935 | 37 hrs ago | IN | 0 CELO | 0.00256418 | ||||
Swap Exact Input... | 30306905 | 37 hrs ago | IN | 0 CELO | 0.00255226 | ||||
Swap Exact Input... | 30306904 | 37 hrs ago | IN | 0 CELO | 0.0041298 | ||||
Swap Exact Input... | 30306903 | 37 hrs ago | IN | 0 CELO | 0.00255382 | ||||
Swap Exact Input... | 30304448 | 40 hrs ago | IN | 0 CELO | 0.0071642 | ||||
Swap Exact Input... | 30304445 | 40 hrs ago | IN | 0 CELO | 0.00514026 | ||||
Swap Exact Input... | 30304439 | 40 hrs ago | IN | 0 CELO | 0.00617411 | ||||
Swap Exact Input... | 30304429 | 40 hrs ago | IN | 0 CELO | 0.00568305 | ||||
Swap Exact Input... | 30304428 | 40 hrs ago | IN | 0 CELO | 0.00627081 | ||||
Swap Exact Input... | 30304326 | 40 hrs ago | IN | 0 CELO | 0.00356849 | ||||
Swap Exact Input... | 30300432 | 46 hrs ago | IN | 0 CELO | 0.00240662 | ||||
Swap Exact Input... | 30300312 | 46 hrs ago | IN | 0 CELO | 0.00017732 | ||||
Swap Exact Input... | 30300282 | 46 hrs ago | IN | 0 CELO | 0.00620059 | ||||
Swap Exact Input... | 30297002 | 2 days ago | IN | 0 CELO | 0.00242056 | ||||
Swap Exact Input... | 30296958 | 2 days ago | IN | 0 CELO | 0.00981023 | ||||
Swap Exact Input... | 30294581 | 2 days ago | IN | 0 CELO | 0.00230789 | ||||
Swap Exact Input... | 30294580 | 2 days ago | IN | 0 CELO | 0.00255493 |
View more zero value Internal Transactions in Advanced View mode
Loading...
Loading
Contract Name:
SwappaRouterV1
Compiler Version
v0.6.8+commit.0bbfe453
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.6.8; pragma experimental ABIEncoderV2; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "./ISwappaPairV1.sol"; import "./ISwappaRouterV1.sol"; contract SwappaRouterV1 is ISwappaRouterV1 { event Swap( address indexed sender, address to, address indexed input, address indexed output, uint256 inputAmount, uint256 outputAmount ); modifier ensure(uint deadline) { require(deadline >= block.timestamp, 'SwappaRouter: Expired!'); _; } function getOutputAmount( address[] calldata path, address[] calldata pairs, bytes[] calldata extras, uint256 inputAmount ) external override returns (uint256 outputAmount) { outputAmount = inputAmount; for (uint i; i < pairs.length; i++) { outputAmount = ISwappaPairV1(pairs[i]).getOutputAmount(path[i], path[i+1], outputAmount, extras[i]); } } function swapExactInputForOutput( address[] calldata path, address[] calldata pairs, bytes[] calldata extras, uint256 inputAmount, uint256 minOutputAmount, address to, uint deadline ) external override ensure(deadline) returns (uint256 outputAmount) { require(path.length == pairs.length + 1 , "SwappaRouter: Path and Pairs mismatch!"); require(pairs.length == extras.length, "SwappaRouter: Pairs and Extras mismatch!"); require(pairs.length > 0, "SwappaRouter: Must have at least one pair!"); require( ERC20(path[0]).transferFrom(msg.sender, pairs[0], inputAmount), "SwappaRouter: Initial transferFrom failed!"); for (uint i; i < pairs.length; i++) { (address pairInput, address pairOutput) = (path[i], path[i + 1]); address next = i < pairs.length - 1 ? pairs[i+1] : address(this); bytes memory data = extras[i]; ISwappaPairV1(pairs[i]).swap(pairInput, pairOutput, next, data); } // Perform final output check in the router as a final safeguard to make sure // minOutputAmount restriction is honored no matter what. address output = path[path.length - 1]; outputAmount = ERC20(output).balanceOf(address(this)); require( outputAmount >= minOutputAmount, "SwappaRouter: Insufficient output amount!"); require( ERC20(output).transfer(to, outputAmount), "SwappaRouter: Final transfer failed!"); emit Swap(msg.sender, to, path[0], output, inputAmount, outputAmount); } function swapExactInputForOutputWithPrecheck( address[] calldata path, address[] calldata pairs, bytes[] calldata extras, uint256 inputAmount, uint256 minOutputAmount, address to, uint deadline ) external override ensure(deadline) returns (uint256 outputAmount) { require(path.length == pairs.length + 1 , "SwappaRouter: Path and Pairs mismatch!"); require(pairs.length == extras.length, "SwappaRouter: Pairs and Extras mismatch!"); require(pairs.length > 0, "SwappaRouter: Must have at least one pair!"); // Note(zviadm): Full code copying is necessary because `bytes[]` arrays can not easily be // passed around between `calldata` and `memory` locations. Manual copying would be necessary // with quite a bit of annoying code to work around stack issues. { outputAmount = inputAmount; // reuse outputAmount variable to avoid "stack too deep" errors. for (uint i; i < pairs.length; i++) { (address input, address output) = (path[i], path[i+1]); bytes memory data = extras[i]; outputAmount = ISwappaPairV1(pairs[i]).getOutputAmount(input, output, outputAmount, data); } require( outputAmount >= minOutputAmount, "SwappaRouter: Insufficient expected output amount!"); } require( ERC20(path[0]).transferFrom(msg.sender, pairs[0], inputAmount), "SwappaRouter: Initial transferFrom failed!"); for (uint i; i < pairs.length; i++) { (address pairInput, address pairOutput) = (path[i], path[i + 1]); address next = i < pairs.length - 1 ? pairs[i+1] : address(this); bytes memory data = extras[i]; ISwappaPairV1(pairs[i]).swap(pairInput, pairOutput, next, data); } // Perform final output check in the router as a final safeguard to make sure // minOutputAmount restriction is honored no matter what. address output = path[path.length - 1]; outputAmount = ERC20(output).balanceOf(address(this)); require( outputAmount >= minOutputAmount, "SwappaRouter: Insufficient output amount!"); require( ERC20(output).transfer(to, outputAmount), "SwappaRouter: Final transfer failed!"); emit Swap(msg.sender, to, path[0], output, inputAmount, outputAmount); } receive() external payable {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.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; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; import "../../GSN/Context.sol"; import "./IERC20.sol"; import "../../math/SafeMath.sol"; import "../../utils/Address.sol"; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20 { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name, string memory symbol) public { _name = name; _symbol = symbol; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.2; /** * @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 in 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"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); 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); } } } }
// SPDX-License-Identifier: MIT pragma solidity 0.6.8; interface ISwappaPairV1 { function swap( address input, address output, address to, bytes calldata data ) external; // Get the output amount in output token for a given amountIn of the input token, with the encoded extra data. // Output amount is undefined if input token is invalid for the swap pair. function getOutputAmount( address input, address output, uint amountIn, bytes calldata data ) external returns (uint amountOut); }
// SPDX-License-Identifier: MIT pragma solidity 0.6.8; pragma experimental ABIEncoderV2; interface ISwappaRouterV1 { function getOutputAmount( address[] calldata path, address[] calldata pairs, bytes[] calldata extras, uint256 inputAmount ) external returns (uint256 outputAmount); function swapExactInputForOutput( address[] calldata path, address[] calldata pairs, bytes[] calldata extras, uint256 inputAmount, uint256 minOutputAmount, address to, uint deadline ) external returns (uint256 outputAmount); function swapExactInputForOutputWithPrecheck( address[] calldata path, address[] calldata pairs, bytes[] calldata extras, uint256 inputAmount, uint256 minOutputAmount, address to, uint deadline ) external returns (uint256 outputAmount); }
{ "evmVersion": "istanbul", "libraries": {}, "metadata": { "bytecodeHash": "ipfs" }, "optimizer": { "enabled": true, "runs": 10000 }, "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"address","name":"input","type":"address"},{"indexed":true,"internalType":"address","name":"output","type":"address"},{"indexed":false,"internalType":"uint256","name":"inputAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"outputAmount","type":"uint256"}],"name":"Swap","type":"event"},{"inputs":[{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address[]","name":"pairs","type":"address[]"},{"internalType":"bytes[]","name":"extras","type":"bytes[]"},{"internalType":"uint256","name":"inputAmount","type":"uint256"}],"name":"getOutputAmount","outputs":[{"internalType":"uint256","name":"outputAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address[]","name":"pairs","type":"address[]"},{"internalType":"bytes[]","name":"extras","type":"bytes[]"},{"internalType":"uint256","name":"inputAmount","type":"uint256"},{"internalType":"uint256","name":"minOutputAmount","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactInputForOutput","outputs":[{"internalType":"uint256","name":"outputAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address[]","name":"pairs","type":"address[]"},{"internalType":"bytes[]","name":"extras","type":"bytes[]"},{"internalType":"uint256","name":"inputAmount","type":"uint256"},{"internalType":"uint256","name":"minOutputAmount","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactInputForOutputWithPrecheck","outputs":[{"internalType":"uint256","name":"outputAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b50611409806100206000396000f3fe6080604052600436106100385760003560e01c80630862d12f14610044578063adf6fa021461007a578063e2f46a001461009a5761003f565b3661003f57005b600080fd5b34801561005057600080fd5b5061006461005f366004610d93565b6100ba565b6040516100719190611365565b60405180910390f35b34801561008657600080fd5b50610064610095366004610d93565b610666565b3480156100a657600080fd5b506100646100b5366004610cf4565b610b2b565b600081428110156100e65760405162461bcd60e51b81526004016100dd90611217565b60405180910390fd5b600189018b146101085760405162461bcd60e51b81526004016100dd906112ab565b8887146101275760405162461bcd60e51b81526004016100dd9061124e565b886101445760405162461bcd60e51b81526004016100dd906110a3565b8b8b600081811061015157fe5b90506020020160208101906101669190610cd2565b73ffffffffffffffffffffffffffffffffffffffff166323b872dd338c8c600081811061018f57fe5b90506020020160208101906101a49190610cd2565b896040518463ffffffff1660e01b81526004016101c393929190610f18565b602060405180830381600087803b1580156101dd57600080fd5b505af11580156101f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102159190610e56565b6102315760405162461bcd60e51b81526004016100dd90611100565b60005b898110156103e6576000808e8e8481811061024b57fe5b90506020020160208101906102609190610cd2565b8f8f8560010181811061026f57fe5b90506020020160208101906102849190610cd2565b909250905060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8d0184106102ba57306102de565b8d8d856001018181106102c957fe5b90506020020160208101906102de9190610cd2565b905060608c8c868181106102ee57fe5b9050602002810190610300919061136e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090508e8e8681811061035157fe5b90506020020160208101906103669190610cd2565b73ffffffffffffffffffffffffffffffffffffffff166332ef8314858585856040518563ffffffff1660e01b81526004016103a49493929190610f49565b600060405180830381600087803b1580156103be57600080fd5b505af11580156103d2573d6000803e3d6000fd5b505060019096019550610234945050505050565b5060008c8c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061041757fe5b905060200201602081019061042c9190610cd2565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8216906370a0823190610481903090600401610ef7565b60206040518083038186803b15801561049957600080fd5b505afa1580156104ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d19190610e76565b9250858310156104f35760405162461bcd60e51b81526004016100dd90611308565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063a9059cbb90610547908890879060040161104f565b602060405180830381600087803b15801561056157600080fd5b505af1158015610575573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105999190610e56565b6105b55760405162461bcd60e51b81526004016100dd906111ba565b8073ffffffffffffffffffffffffffffffffffffffff168d8d60008181106105d957fe5b90506020020160208101906105ee9190610cd2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f20efd6d5195b7b50273f01cd79a27989255356f9f13293edc53ee142accfdb75888b8860405161064e93929190611075565b60405180910390a450509a9950505050505050505050565b600081428110156106895760405162461bcd60e51b81526004016100dd90611217565b600189018b146106ab5760405162461bcd60e51b81526004016100dd906112ab565b8887146106ca5760405162461bcd60e51b81526004016100dd9061124e565b886106e75760405162461bcd60e51b81526004016100dd906110a3565b85915060005b89811015610868576000808e8e8481811061070457fe5b90506020020160208101906107199190610cd2565b8f8f8560010181811061072857fe5b905060200201602081019061073d9190610cd2565b9150915060608b8b8581811061074f57fe5b9050602002810190610761919061136e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090508d8d858181106107b257fe5b90506020020160208101906107c79190610cd2565b73ffffffffffffffffffffffffffffffffffffffff16637eace892848489856040518563ffffffff1660e01b81526004016108059493929190611010565b602060405180830381600087803b15801561081f57600080fd5b505af1158015610833573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108579190610e76565b955050600190920191506106ed9050565b50848210156108895760405162461bcd60e51b81526004016100dd9061115d565b8b8b600081811061089657fe5b90506020020160208101906108ab9190610cd2565b73ffffffffffffffffffffffffffffffffffffffff166323b872dd338c8c60008181106108d457fe5b90506020020160208101906108e99190610cd2565b896040518463ffffffff1660e01b815260040161090893929190610f18565b602060405180830381600087803b15801561092257600080fd5b505af1158015610936573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095a9190610e56565b6109765760405162461bcd60e51b81526004016100dd90611100565b60005b898110156103e6576000808e8e8481811061099057fe5b90506020020160208101906109a59190610cd2565b8f8f856001018181106109b457fe5b90506020020160208101906109c99190610cd2565b909250905060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8d0184106109ff5730610a23565b8d8d85600101818110610a0e57fe5b9050602002016020810190610a239190610cd2565b905060608c8c86818110610a3357fe5b9050602002810190610a45919061136e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090508e8e86818110610a9657fe5b9050602002016020810190610aab9190610cd2565b73ffffffffffffffffffffffffffffffffffffffff166332ef8314858585856040518563ffffffff1660e01b8152600401610ae99493929190610f49565b600060405180830381600087803b158015610b0357600080fd5b505af1158015610b17573d6000803e3d6000fd5b505060019096019550610979945050505050565b8060005b85811015610c5357868682818110610b4357fe5b9050602002016020810190610b589190610cd2565b73ffffffffffffffffffffffffffffffffffffffff16637eace8928a8a84818110610b7f57fe5b9050602002016020810190610b949190610cd2565b8b8b85600101818110610ba357fe5b9050602002016020810190610bb89190610cd2565b85898987818110610bc557fe5b9050602002810190610bd7919061136e565b6040518663ffffffff1660e01b8152600401610bf7959493929190610f94565b602060405180830381600087803b158015610c1157600080fd5b505af1158015610c25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c499190610e76565b9150600101610b2f565b50979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c8357600080fd5b92915050565b60008083601f840112610c9a578182fd5b50813567ffffffffffffffff811115610cb1578182fd5b6020830191508360208083028501011115610ccb57600080fd5b9250929050565b600060208284031215610ce3578081fd5b610ced8383610c5f565b9392505050565b60008060008060008060006080888a031215610d0e578283fd5b873567ffffffffffffffff80821115610d25578485fd5b610d318b838c01610c89565b909950975060208a0135915080821115610d49578485fd5b610d558b838c01610c89565b909750955060408a0135915080821115610d6d578485fd5b50610d7a8a828b01610c89565b989b979a50959894979596606090950135949350505050565b60008060008060008060008060008060e08b8d031215610db1578283fd5b8a3567ffffffffffffffff80821115610dc8578485fd5b610dd48e838f01610c89565b909c509a5060208d0135915080821115610dec578485fd5b610df88e838f01610c89565b909a50985060408d0135915080821115610e10578485fd5b50610e1d8d828e01610c89565b90975095505060608b0135935060808b01359250610e3e8c60a08d01610c5f565b915060c08b013590509295989b9194979a5092959850565b600060208284031215610e67578081fd5b81518015158114610ced578182fd5b600060208284031215610e87578081fd5b5051919050565b60008151808452815b81811015610eb357602081850181015186830182015201610e97565b81811115610ec45782602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015280851660408401525060806060830152610f8a6080830184610e8e565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015260806060830152826080830152828460a084013781830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101949350505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152610f8a6080830184610e8e565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9390931683526020830191909152604082015260600190565b6020808252602a908201527f537761707061526f757465723a204d7573742068617665206174206c6561737460408201527f206f6e6520706169722100000000000000000000000000000000000000000000606082015260800190565b6020808252602a908201527f537761707061526f757465723a20496e697469616c207472616e73666572467260408201527f6f6d206661696c65642100000000000000000000000000000000000000000000606082015260800190565b60208082526032908201527f537761707061526f757465723a20496e73756666696369656e7420657870656360408201527f746564206f757470757420616d6f756e74210000000000000000000000000000606082015260800190565b60208082526024908201527f537761707061526f757465723a2046696e616c207472616e736665722066616960408201527f6c65642100000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526016908201527f537761707061526f757465723a20457870697265642100000000000000000000604082015260600190565b60208082526028908201527f537761707061526f757465723a20506169727320616e6420457874726173206d60408201527f69736d6174636821000000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f537761707061526f757465723a205061746820616e64205061697273206d697360408201527f6d61746368210000000000000000000000000000000000000000000000000000606082015260800190565b60208082526029908201527f537761707061526f757465723a20496e73756666696369656e74206f7574707560408201527f7420616d6f756e74210000000000000000000000000000000000000000000000606082015260800190565b90815260200190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126113a2578283fd5b8084018035925067ffffffffffffffff8311156113bd578384fd5b60200192505036819003821315610ccb57600080fdfea264697066735822122023bb738c658e3aa4cfb54c6fba9d5256b3b53d5a9862b4163e4570e71772d47164736f6c63430006080033
Deployed Bytecode
0x6080604052600436106100385760003560e01c80630862d12f14610044578063adf6fa021461007a578063e2f46a001461009a5761003f565b3661003f57005b600080fd5b34801561005057600080fd5b5061006461005f366004610d93565b6100ba565b6040516100719190611365565b60405180910390f35b34801561008657600080fd5b50610064610095366004610d93565b610666565b3480156100a657600080fd5b506100646100b5366004610cf4565b610b2b565b600081428110156100e65760405162461bcd60e51b81526004016100dd90611217565b60405180910390fd5b600189018b146101085760405162461bcd60e51b81526004016100dd906112ab565b8887146101275760405162461bcd60e51b81526004016100dd9061124e565b886101445760405162461bcd60e51b81526004016100dd906110a3565b8b8b600081811061015157fe5b90506020020160208101906101669190610cd2565b73ffffffffffffffffffffffffffffffffffffffff166323b872dd338c8c600081811061018f57fe5b90506020020160208101906101a49190610cd2565b896040518463ffffffff1660e01b81526004016101c393929190610f18565b602060405180830381600087803b1580156101dd57600080fd5b505af11580156101f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102159190610e56565b6102315760405162461bcd60e51b81526004016100dd90611100565b60005b898110156103e6576000808e8e8481811061024b57fe5b90506020020160208101906102609190610cd2565b8f8f8560010181811061026f57fe5b90506020020160208101906102849190610cd2565b909250905060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8d0184106102ba57306102de565b8d8d856001018181106102c957fe5b90506020020160208101906102de9190610cd2565b905060608c8c868181106102ee57fe5b9050602002810190610300919061136e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090508e8e8681811061035157fe5b90506020020160208101906103669190610cd2565b73ffffffffffffffffffffffffffffffffffffffff166332ef8314858585856040518563ffffffff1660e01b81526004016103a49493929190610f49565b600060405180830381600087803b1580156103be57600080fd5b505af11580156103d2573d6000803e3d6000fd5b505060019096019550610234945050505050565b5060008c8c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061041757fe5b905060200201602081019061042c9190610cd2565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8216906370a0823190610481903090600401610ef7565b60206040518083038186803b15801561049957600080fd5b505afa1580156104ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d19190610e76565b9250858310156104f35760405162461bcd60e51b81526004016100dd90611308565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063a9059cbb90610547908890879060040161104f565b602060405180830381600087803b15801561056157600080fd5b505af1158015610575573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105999190610e56565b6105b55760405162461bcd60e51b81526004016100dd906111ba565b8073ffffffffffffffffffffffffffffffffffffffff168d8d60008181106105d957fe5b90506020020160208101906105ee9190610cd2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f20efd6d5195b7b50273f01cd79a27989255356f9f13293edc53ee142accfdb75888b8860405161064e93929190611075565b60405180910390a450509a9950505050505050505050565b600081428110156106895760405162461bcd60e51b81526004016100dd90611217565b600189018b146106ab5760405162461bcd60e51b81526004016100dd906112ab565b8887146106ca5760405162461bcd60e51b81526004016100dd9061124e565b886106e75760405162461bcd60e51b81526004016100dd906110a3565b85915060005b89811015610868576000808e8e8481811061070457fe5b90506020020160208101906107199190610cd2565b8f8f8560010181811061072857fe5b905060200201602081019061073d9190610cd2565b9150915060608b8b8581811061074f57fe5b9050602002810190610761919061136e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090508d8d858181106107b257fe5b90506020020160208101906107c79190610cd2565b73ffffffffffffffffffffffffffffffffffffffff16637eace892848489856040518563ffffffff1660e01b81526004016108059493929190611010565b602060405180830381600087803b15801561081f57600080fd5b505af1158015610833573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108579190610e76565b955050600190920191506106ed9050565b50848210156108895760405162461bcd60e51b81526004016100dd9061115d565b8b8b600081811061089657fe5b90506020020160208101906108ab9190610cd2565b73ffffffffffffffffffffffffffffffffffffffff166323b872dd338c8c60008181106108d457fe5b90506020020160208101906108e99190610cd2565b896040518463ffffffff1660e01b815260040161090893929190610f18565b602060405180830381600087803b15801561092257600080fd5b505af1158015610936573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095a9190610e56565b6109765760405162461bcd60e51b81526004016100dd90611100565b60005b898110156103e6576000808e8e8481811061099057fe5b90506020020160208101906109a59190610cd2565b8f8f856001018181106109b457fe5b90506020020160208101906109c99190610cd2565b909250905060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8d0184106109ff5730610a23565b8d8d85600101818110610a0e57fe5b9050602002016020810190610a239190610cd2565b905060608c8c86818110610a3357fe5b9050602002810190610a45919061136e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090508e8e86818110610a9657fe5b9050602002016020810190610aab9190610cd2565b73ffffffffffffffffffffffffffffffffffffffff166332ef8314858585856040518563ffffffff1660e01b8152600401610ae99493929190610f49565b600060405180830381600087803b158015610b0357600080fd5b505af1158015610b17573d6000803e3d6000fd5b505060019096019550610979945050505050565b8060005b85811015610c5357868682818110610b4357fe5b9050602002016020810190610b589190610cd2565b73ffffffffffffffffffffffffffffffffffffffff16637eace8928a8a84818110610b7f57fe5b9050602002016020810190610b949190610cd2565b8b8b85600101818110610ba357fe5b9050602002016020810190610bb89190610cd2565b85898987818110610bc557fe5b9050602002810190610bd7919061136e565b6040518663ffffffff1660e01b8152600401610bf7959493929190610f94565b602060405180830381600087803b158015610c1157600080fd5b505af1158015610c25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c499190610e76565b9150600101610b2f565b50979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c8357600080fd5b92915050565b60008083601f840112610c9a578182fd5b50813567ffffffffffffffff811115610cb1578182fd5b6020830191508360208083028501011115610ccb57600080fd5b9250929050565b600060208284031215610ce3578081fd5b610ced8383610c5f565b9392505050565b60008060008060008060006080888a031215610d0e578283fd5b873567ffffffffffffffff80821115610d25578485fd5b610d318b838c01610c89565b909950975060208a0135915080821115610d49578485fd5b610d558b838c01610c89565b909750955060408a0135915080821115610d6d578485fd5b50610d7a8a828b01610c89565b989b979a50959894979596606090950135949350505050565b60008060008060008060008060008060e08b8d031215610db1578283fd5b8a3567ffffffffffffffff80821115610dc8578485fd5b610dd48e838f01610c89565b909c509a5060208d0135915080821115610dec578485fd5b610df88e838f01610c89565b909a50985060408d0135915080821115610e10578485fd5b50610e1d8d828e01610c89565b90975095505060608b0135935060808b01359250610e3e8c60a08d01610c5f565b915060c08b013590509295989b9194979a5092959850565b600060208284031215610e67578081fd5b81518015158114610ced578182fd5b600060208284031215610e87578081fd5b5051919050565b60008151808452815b81811015610eb357602081850181015186830182015201610e97565b81811115610ec45782602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015280851660408401525060806060830152610f8a6080830184610e8e565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015260806060830152826080830152828460a084013781830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101949350505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152610f8a6080830184610e8e565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9390931683526020830191909152604082015260600190565b6020808252602a908201527f537761707061526f757465723a204d7573742068617665206174206c6561737460408201527f206f6e6520706169722100000000000000000000000000000000000000000000606082015260800190565b6020808252602a908201527f537761707061526f757465723a20496e697469616c207472616e73666572467260408201527f6f6d206661696c65642100000000000000000000000000000000000000000000606082015260800190565b60208082526032908201527f537761707061526f757465723a20496e73756666696369656e7420657870656360408201527f746564206f757470757420616d6f756e74210000000000000000000000000000606082015260800190565b60208082526024908201527f537761707061526f757465723a2046696e616c207472616e736665722066616960408201527f6c65642100000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526016908201527f537761707061526f757465723a20457870697265642100000000000000000000604082015260600190565b60208082526028908201527f537761707061526f757465723a20506169727320616e6420457874726173206d60408201527f69736d6174636821000000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f537761707061526f757465723a205061746820616e64205061697273206d697360408201527f6d61746368210000000000000000000000000000000000000000000000000000606082015260800190565b60208082526029908201527f537761707061526f757465723a20496e73756666696369656e74206f7574707560408201527f7420616d6f756e74210000000000000000000000000000000000000000000000606082015260800190565b90815260200190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126113a2578283fd5b8084018035925067ffffffffffffffff8311156113bd578384fd5b60200192505036819003821315610ccb57600080fdfea264697066735822122023bb738c658e3aa4cfb54c6fba9d5256b3b53d5a9862b4163e4570e71772d47164736f6c63430006080033
Deployed Bytecode Sourcemap
209:4312:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;890:1435:7;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;890:1435:7;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2328:2159;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;2328:2159:7;;;;;;;;:::i;519:368::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;519:368:7;;;;;;;;:::i;890:1435::-;1133:20;1114:8;465:15;453:8;:27;;445:62;;;;-1:-1:-1;;;445:62:7;;;;;;;;;;;;;;;;;1197:1:::1;1182:16:::0;::::1;1167:31:::0;::::1;1159:83;;;;-1:-1:-1::0;;;1159:83:7::1;;;;;;;;;1254:29:::0;;::::1;1246:82;;;;-1:-1:-1::0;;;1246:82:7::1;;;;;;;;;1340:16:::0;1332:71:::1;;;;-1:-1:-1::0;;;1332:71:7::1;;;;;;;;;1426:4;;1431:1;1426:7;;;;;;;;;;;;;;;;;;;;;;1420:27;;;1448:10;1460:5;;1466:1;1460:8;;;;;;;;;;;;;;;;;;;;;;1470:11;1420:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;1420:62:7;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;1420:62:7;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;1420:62:7;;;;;;;;;1408:124;;;;-1:-1:-1::0;;;1408:124:7::1;;;;;;;;;1541:6;1536:281;1549:16:::0;;::::1;1536:281;;;1578:17;1597:18:::0;1620:4:::1;;1625:1;1620:7;;;;;;;;;;;;;;;;;;;;;;1629:4;;1634:1;1638;1634:5;1629:11;;;;;;;;;;;;;;;;;;;;;;1577:64:::0;;-1:-1:-1;1577:64:7;-1:-1:-1;1646:12:7::1;1665:16:::0;;;1661:20;::::1;:49;;1705:4;1661:49;;;1684:5;;1690:1;1692;1690:3;1684:10;;;;;;;;;;;;;;;;;;;;;;1646:64;;1715:17;1735:6;;1742:1;1735:9;;;;;;;;;;;;;;;;;;;;1715:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1715:29:7;;;;;;;;1763:5;;1769:1;1763:8;;;;;;;;;;;;;;;;;;;;;;1749:28;;;1778:9;1789:10;1801:4;1807;1749:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;1749:63:7;;;;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;;1567:3:7::1;::::0;;::::1;::::0;-1:-1:-1;1536:281:7::1;::::0;-1:-1:-1;;;;;1536:281:7::1;;-1:-1:-1::0;1960:14:7::1;1977:4:::0;;1982:15;;;1977:21;;::::1;;;;;;;;;;;;;;;;;;;;2017:38;::::0;;;;1960;;-1:-1:-1;2017:23:7::1;::::0;::::1;::::0;::::1;::::0;:38:::1;::::0;2049:4:::1;::::0;2017:38:::1;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;2017:38:7;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;2017:38:7;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;2017:38:7;;;;;;;;;2002:53;;2087:15;2071:12;:31;;2059:89;;;;-1:-1:-1::0;;;2059:89:7::1;;;;;;;;;2164:40;::::0;;;;:22:::1;::::0;::::1;::::0;::::1;::::0;:40:::1;::::0;2187:2;;2191:12;;2164:40:::1;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;2164:40:7;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;2164:40:7;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;2164:40:7;;;;;;;;;2152:96;;;;-1:-1:-1::0;;;2152:96:7::1;;;;;;;;;2287:6;2257:64;;2278:4;;2283:1;2278:7;;;;;;;;;;;;;;;;;;;;;;2257:64;;2262:10;2257:64;;;2274:2;2295:11;2308:12;2257:64;;;;;;;;;;;;;;;;;511:1;890:1435:::0;;;;;;;;;;;;;:::o;2328:2159::-;2583:20;2564:8;465:15;453:8;:27;;445:62;;;;-1:-1:-1;;;445:62:7;;;;;;;;;2647:1:::1;2632:16:::0;::::1;2617:31:::0;::::1;2609:83;;;;-1:-1:-1::0;;;2609:83:7::1;;;;;;;;;2704:29:::0;;::::1;2696:82;;;;-1:-1:-1::0;;;2696:82:7::1;;;;;;;;;2790:16:::0;2782:71:::1;;;;-1:-1:-1::0;;;2782:71:7::1;;;;;;;;;3136:11;3121:26;;3222:6;3217:237;3230:16:::0;;::::1;3217:237;;;3260:13;3275:14:::0;3294:4:::1;;3299:1;3294:7;;;;;;;;;;;;;;;;;;;;;;3303:4;;3308:1;3310;3308:3;3303:9;;;;;;;;;;;;;;;;;;;;;;3259:54;;;;3319:17;3339:6;;3346:1;3339:9;;;;;;;;;;;;;;;;;;;;3319:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;3319:29:7;;;;;;;;3388:5;;3394:1;3388:8;;;;;;;;;;;;;;;;;;;;;;3374:39;;;3414:5;3421:6;3429:12;3443:4;3374:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;3374:74:7;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;3374:74:7;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;3374:74:7;;;;;;;;;3354:94:::0;-1:-1:-1;;3248:3:7::1;::::0;;::::1;::::0;-1:-1:-1;3217:237:7::1;::::0;-1:-1:-1;3217:237:7::1;;;3487:15;3471:12;:31;;3458:103;;;;-1:-1:-1::0;;;3458:103:7::1;;;;;;;;;3588:4;;3593:1;3588:7;;;;;;;;;;;;;;;;;;;;;;3582:27;;;3610:10;3622:5;;3628:1;3622:8;;;;;;;;;;;;;;;;;;;;;;3632:11;3582:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;3582:62:7;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;3582:62:7;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;3582:62:7;;;;;;;;;3570:124;;;;-1:-1:-1::0;;;3570:124:7::1;;;;;;;;;3703:6;3698:281;3711:16:::0;;::::1;3698:281;;;3740:17;3759:18:::0;3782:4:::1;;3787:1;3782:7;;;;;;;;;;;;;;;;;;;;;;3791:4;;3796:1;3800;3796:5;3791:11;;;;;;;;;;;;;;;;;;;;;;3739:64:::0;;-1:-1:-1;3739:64:7;-1:-1:-1;3808:12:7::1;3827:16:::0;;;3823:20;::::1;:49;;3867:4;3823:49;;;3846:5;;3852:1;3854;3852:3;3846:10;;;;;;;;;;;;;;;;;;;;;;3808:64;;3877:17;3897:6;;3904:1;3897:9;;;;;;;;;;;;;;;;;;;;3877:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;3877:29:7;;;;;;;;3925:5;;3931:1;3925:8;;;;;;;;;;;;;;;;;;;;;;3911:28;;;3940:9;3951:10;3963:4;3969;3911:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;3911:63:7;;;;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;;3729:3:7::1;::::0;;::::1;::::0;-1:-1:-1;3698:281:7::1;::::0;-1:-1:-1;;;;;3698:281:7::1;519:368:::0;720:11;679:20;735:149;748:16;;;735:149;;;809:5;;815:1;809:8;;;;;;;;;;;;;;;;;;;;;;795:39;;;835:4;;840:1;835:7;;;;;;;;;;;;;;;;;;;;;;844:4;;849:1;851;849:3;844:9;;;;;;;;;;;;;;;;;;;;;;855:12;869:6;;876:1;869:9;;;;;;;;;;;;;;;;;;;;795:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;795:84:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;795:84:7;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;795:84:7;;;;;;;;;776:103;-1:-1:-1;766:3:7;;735:149;;;;519:368;;;;;;;;;:::o;5:130:-1:-;72:20;;17141:42;17130:54;;18249:35;;18239:2;;18298:1;;18288:12;18239:2;57:78;;;;;160:352;;;290:3;283:4;275:6;271:17;267:27;257:2;;-1:-1;;298:12;257:2;-1:-1;328:20;;368:18;357:30;;354:2;;;-1:-1;;390:12;354:2;434:4;426:6;422:17;410:29;;485:3;434:4;;469:6;465:17;426:6;451:32;;448:41;445:2;;;502:1;;492:12;445:2;250:262;;;;;;1320:241;;1424:2;1412:9;1403:7;1399:23;1395:32;1392:2;;;-1:-1;;1430:12;1392:2;1492:53;1537:7;1513:22;1492:53;;;1482:63;1386:175;-1:-1;;;1386:175;1568:1107;;;;;;;;1839:3;1827:9;1818:7;1814:23;1810:33;1807:2;;;-1:-1;;1846:12;1807:2;1904:17;1891:31;1942:18;;1934:6;1931:30;1928:2;;;-1:-1;;1964:12;1928:2;2002:80;2074:7;2065:6;2054:9;2050:22;2002:80;;;1992:90;;-1:-1;1992:90;-1:-1;2147:2;2132:18;;2119:32;;-1:-1;2160:30;;;2157:2;;;-1:-1;;2193:12;2157:2;2231:80;2303:7;2294:6;2283:9;2279:22;2231:80;;;2221:90;;-1:-1;2221:90;-1:-1;2376:2;2361:18;;2348:32;;-1:-1;2389:30;;;2386:2;;;-1:-1;;2422:12;2386:2;;2460:91;2543:7;2534:6;2523:9;2519:22;2460:91;;;1801:874;;;;-1:-1;1801:874;;;;;;2588:2;2627:22;;;1109:20;;1801:874;-1:-1;;;;1801:874;2682:1485;;;;;;;;;;;3004:3;2992:9;2983:7;2979:23;2975:33;2972:2;;;-1:-1;;3011:12;2972:2;3069:17;3056:31;3107:18;;3099:6;3096:30;3093:2;;;-1:-1;;3129:12;3093:2;3167:80;3239:7;3230:6;3219:9;3215:22;3167:80;;;3157:90;;-1:-1;3157:90;-1:-1;3312:2;3297:18;;3284:32;;-1:-1;3325:30;;;3322:2;;;-1:-1;;3358:12;3322:2;3396:80;3468:7;3459:6;3448:9;3444:22;3396:80;;;3386:90;;-1:-1;3386:90;-1:-1;3541:2;3526:18;;3513:32;;-1:-1;3554:30;;;3551:2;;;-1:-1;;3587:12;3551:2;;3625:91;3708:7;3699:6;3688:9;3684:22;3625:91;;;3615:101;;-1:-1;3615:101;-1:-1;;3753:2;3792:22;;1109:20;;-1:-1;3861:3;3901:22;;1109:20;;-1:-1;3989:53;4034:7;3970:3;4010:22;;3989:53;;;3979:63;;4079:3;4123:9;4119:22;1109:20;4088:63;;2966:1201;;;;;;;;;;;;;;4174:257;;4286:2;4274:9;4265:7;4261:23;4257:32;4254:2;;;-1:-1;;4292:12;4254:2;988:6;982:13;18395:5;17042:13;17035:21;18373:5;18370:32;18360:2;;-1:-1;;18406:12;4438:263;;4553:2;4541:9;4532:7;4528:23;4524:32;4521:2;;;-1:-1;;4559:12;4521:2;-1:-1;1257:13;;4515:186;-1:-1;4515:186;5305:343;;5447:5;16494:12;16650:6;16645:3;16638:19;-1:-1;17881:101;17895:6;17892:1;17889:13;17881:101;;;16687:4;17962:11;;;;;17956:18;17943:11;;;;;17936:39;17910:10;17881:101;;;17997:6;17994:1;17991:13;17988:2;;;-1:-1;16687:4;18053:6;16682:3;18044:16;;18037:27;17988:2;-1:-1;18173:2;18153:14;18169:7;18149:28;5604:39;;;;16687:4;5604:39;;5395:253;-1:-1;;5395:253;8817:238;17141:42;17130:54;;;;4787:58;;8952:2;8937:18;;8923:132;9062:460;17141:42;17130:54;;;4787:58;;17130:54;;;;9425:2;9410:18;;4928:37;9508:2;9493:18;;8768:37;;;;9253:2;9238:18;;9224:298;9529:640;;17141:42;;4958:5;17130:54;4935:3;4928:37;17141:42;4958:5;17130:54;9923:2;9912:9;9908:18;4928:37;17141:42;4958:5;17130:54;10006:2;9995:9;9991:18;4928:37;;9758:3;10043:2;10032:9;10028:18;10021:48;10083:76;9758:3;9747:9;9743:19;10145:6;10083:76;;;10075:84;9729:440;-1:-1;;;;;;9729:440;10176:660;;17141:42;;17134:5;17130:54;4935:3;4928:37;17141:42;17134:5;17130:54;10580:2;10569:9;10565:18;4928:37;;8798:5;10663:2;10652:9;10648:18;8768:37;10415:3;10700:2;10689:9;10685:18;10678:48;16650:6;10415:3;10404:9;10400:19;16638;17736:6;17731:3;16678:14;10404:9;16678:14;17713:30;17774:16;;;16678:14;17774:16;;;17767:27;;;;18173:2;18153:14;;;18169:7;18149:28;5252:39;;;10386:450;-1:-1;;;;10386:450;10843:640;;17141:42;;17134:5;17130:54;4935:3;4928:37;17141:42;17134:5;17130:54;11237:2;11226:9;11222:18;4928:37;;8798:5;11320:2;11309:9;11305:18;8768:37;11072:3;11357:2;11346:9;11342:18;11335:48;11397:76;11072:3;11061:9;11057:19;11459:6;11397:76;;11490:333;17141:42;17130:54;;;;4928:37;;11809:2;11794:18;;8768:37;11645:2;11630:18;;11616:207;11830:444;17141:42;17130:54;;;;4928:37;;12177:2;12162:18;;8768:37;;;;12260:2;12245:18;;8768:37;12013:2;11998:18;;11984:290;12281:416;12481:2;12495:47;;;5880:2;12466:18;;;16638:19;5916:34;16678:14;;;5896:55;5985:12;5971;;;5964:34;6017:12;;;12452:245;12704:416;12904:2;12918:47;;;6268:2;12889:18;;;16638:19;6304:34;16678:14;;;6284:55;6373:12;6359;;;6352:34;6405:12;;;12875:245;13127:416;13327:2;13341:47;;;6656:2;13312:18;;;16638:19;6692:34;16678:14;;;6672:55;6761:20;6747:12;;;6740:42;6801:12;;;13298:245;13550:416;13750:2;13764:47;;;7052:2;13735:18;;;16638:19;7088:34;16678:14;;;7068:55;7157:6;7143:12;;;7136:28;7183:12;;;13721:245;13973:416;14173:2;14187:47;;;7434:2;14158:18;;;16638:19;7470:24;16678:14;;;7450:45;7514:12;;;14144:245;14396:416;14596:2;14610:47;;;7765:2;14581:18;;;16638:19;7801:34;16678:14;;;7781:55;7870:10;7856:12;;;7849:32;7900:12;;;14567:245;14819:416;15019:2;15033:47;;;8151:2;15004:18;;;16638:19;8187:34;16678:14;;;8167:55;8256:8;8242:12;;;8235:30;8284:12;;;14990:245;15242:416;15442:2;15456:47;;;8535:2;15427:18;;;16638:19;8571:34;16678:14;;;8551:55;8640:11;8626:12;;;8619:33;8671:12;;;15413:245;15665:222;8768:37;;;15792:2;15777:18;;15763:124;15894:506;;;16029:11;16016:25;16080:48;16104:8;16088:14;16084:29;16080:48;16060:18;16056:73;16046:2;;-1:-1;;16133:12;16046:2;16174:18;16164:8;16160:33;16227:4;16214:18;16204:28;;16252:18;16244:6;16241:30;16238:2;;;-1:-1;;16274:12;16238:2;16119:4;16302:13;;-1:-1;;16088:14;16334:38;;;16324:49;;16321:2;;;16386:1;;16376:12
Swarm Source
ipfs://23bb738c658e3aa4cfb54c6fba9d5256b3b53d5a9862b4163e4570e71772d471
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.