Polygon Sponsored slots available. Book your slot here!
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
OpenOceanExchange
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-07-28 */ // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // 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); } // File: @openzeppelin/contracts/math/SafeMath.sol 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; } } // File: @openzeppelin/contracts/utils/Address.sol 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) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @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); } } } } // File: @openzeppelin/contracts/token/ERC20/SafeERC20.sol pragma solidity ^0.6.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: @openzeppelin/contracts/GSN/Context.sol 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; } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.6.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. */ 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: contracts/lib/Shutdownable.sol pragma solidity ^0.6.0; contract Shutdownable is Ownable { bool public isShutdown; event Shutdown(); modifier notShutdown { require(!isShutdown, "Smart contract is shut down."); _; } function shutdown() public onlyOwner { isShutdown = true; emit Shutdown(); } } // File: contracts/lib/UniversalERC20.sol pragma solidity ^0.6.0; /** * @dev See https://github.com/CryptoManiacsZone/1inchProtocol/blob/master/contracts/UniversalERC20.sol */ library UniversalERC20 { using SafeMath for uint256; using SafeERC20 for IERC20; IERC20 private constant ZERO_ADDRESS = IERC20(0x0000000000000000000000000000000000000000); IERC20 private constant ETH_ADDRESS = IERC20(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE); IERC20 internal constant MATIC_ADDRESS = IERC20(0x0000000000000000000000000000000000001010); function universalTransfer( IERC20 token, address to, uint256 amount ) internal returns (bool) { if (amount == 0) { return true; } if (isETH(token)) { payable(to).transfer(amount); return true; } else { token.safeTransfer(to, amount); return true; } } function universalTransferFrom( IERC20 token, address from, address to, uint256 amount ) internal { if (amount == 0) { return; } if (isETH(token)) { require(from == msg.sender && msg.value >= amount, "Wrong useage of ETH.universalTransferFrom()"); if (to != address(this)) { address(uint160(to)).transfer(amount); } if (msg.value > amount) { // return the remainder msg.sender.transfer(msg.value.sub(amount)); } } else { token.safeTransferFrom(from, to, amount); } } function universalTransferFromSenderToThis(IERC20 token, uint256 amount) internal { if (amount == 0) { return; } if (isETH(token)) { if (msg.value > amount) { // return the remainder msg.sender.transfer(msg.value.sub(amount)); } } else { token.safeTransferFrom(msg.sender, address(this), amount); } } function universalApprove( IERC20 token, address to, uint256 amount ) internal { if (!isETH(token)) { if (amount == 0) { token.safeApprove(to, 0); return; } uint256 allowance = token.allowance(address(this), to); if (allowance < amount) { if (allowance > 0) { token.safeApprove(to, 0); } token.safeApprove(to, amount); } } } function universalBalanceOf(IERC20 token, address who) internal view returns (uint256) { if (isETH(token)) { return who.balance; } else { return token.balanceOf(who); } } function universalDecimals(IERC20 token) internal view returns (uint256) { if (isETH(token)) { return 18; } (bool success, bytes memory data) = address(token).staticcall{gas: 10000}(abi.encodeWithSignature("decimals()")); if (!success || data.length == 0) { (success, data) = address(token).staticcall{gas: 10000}(abi.encodeWithSignature("DECIMALS()")); } return (success && data.length > 0) ? abi.decode(data, (uint256)) : 18; } function isETH(IERC20 token) internal pure returns (bool) { return (address(token) == address(MATIC_ADDRESS) || address(token) == address(ZERO_ADDRESS)); } function notExist(IERC20 token) internal pure returns (bool) { return (address(token) == address(-1)); } } // File: contracts/lib/ExternalCall.sol pragma solidity ^0.6.0; library ExternalCall { // Source: https://github.com/gnosis/MultiSigWallet/blob/master/contracts/MultiSigWallet.sol // call has been separated into its own function in order to take advantage // of the Solidity's code generator to produce a loop that copies tx.data into memory. function externalCall( address target, uint256 value, bytes memory data, uint256 dataOffset, uint256 dataLength, uint256 gasLimit ) internal returns (bool result) { if (gasLimit == 0) { gasLimit = gasleft() - 40000; } assembly { let x := mload(0x40) // "Allocate" memory for output (0x40 is where "free memory" pointer is stored by convention) let d := add(data, 32) // First 32 bytes are the padded length of data, so exclude that result := call( gasLimit, target, value, add(d, dataOffset), dataLength, // Size of the input (in bytes) - this is what fixes the padding problem x, 0 // Output is ignored, therefore the output size is zero ) } } } // File: contracts/OpenOceanExchange.sol pragma solidity ^0.6.0; contract TokenSpender { using SafeERC20 for IERC20; address public owner; constructor() public { owner = msg.sender; } function claimToken( IERC20 token, address who, address dest, uint256 amount ) external { require(msg.sender == owner, "Access restricted"); token.safeTransferFrom(who, dest, amount); } } contract OpenOceanExchange is Shutdownable { using SafeMath for uint256; using SafeERC20 for IERC20; using UniversalERC20 for IERC20; using ExternalCall for address; TokenSpender public spender; event Order(address indexed sender, IERC20 indexed inToken, IERC20 indexed outToken, uint256 inAmount, uint256 outAmount); event Swapped( IERC20 indexed inToken, IERC20 indexed outToken, address indexed referrer, uint256 inAmount, uint256 outAmount, uint256 fee, uint256 referrerFee ); constructor(address _owner) public { spender = new TokenSpender(); transferOwnership(_owner); } receive() external payable notShutdown { require(msg.sender != tx.origin); } function swap( IERC20 inToken, IERC20 outToken, uint256 inAmount, uint256 minOutAmount, uint256, /*guaranteedAmount*/ address payable referrer, address[] memory addressesToCall, bytes memory dataToCall, uint256[] memory offsets, uint256[] memory gasLimitsAndValues ) public payable notShutdown returns (uint256 outAmount) { require(minOutAmount > 0, "Min out amount should be greater than zero"); require(addressesToCall.length > 0, "Call data should exists"); require((msg.value != 0) == inToken.isETH(), "OpenOcean: msg.value should be used only for ETH swap"); if (!inToken.isETH()) { spender.claimToken(inToken, msg.sender, address(this), inAmount); } for (uint256 i = 0; i < addressesToCall.length; i++) { require(addressesToCall[i] != address(spender), "Access denied"); require( addressesToCall[i].externalCall( gasLimitsAndValues[i] & ((1 << 128) - 1), dataToCall, offsets[i], offsets[i + 1] - offsets[i], gasLimitsAndValues[i] >> 128 ) ); } inToken.universalTransfer(msg.sender, inToken.universalBalanceOf(address(this))); outAmount = outToken.universalBalanceOf(address(this)); require(outAmount >= minOutAmount, "Return amount less than the minimum required amount"); outToken.universalTransfer(msg.sender, outAmount); emit Order(msg.sender, inToken, outToken, inAmount, outAmount); emit Swapped(inToken, outToken, referrer, inAmount, outAmount, 0, 0); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"inToken","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"outToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"inAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"outAmount","type":"uint256"}],"name":"Order","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"Shutdown","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC20","name":"inToken","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"outToken","type":"address"},{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":false,"internalType":"uint256","name":"inAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"outAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"referrerFee","type":"uint256"}],"name":"Swapped","type":"event"},{"inputs":[],"name":"isShutdown","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shutdown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"spender","outputs":[{"internalType":"contract TokenSpender","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"inToken","type":"address"},{"internalType":"contract IERC20","name":"outToken","type":"address"},{"internalType":"uint256","name":"inAmount","type":"uint256"},{"internalType":"uint256","name":"minOutAmount","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address payable","name":"referrer","type":"address"},{"internalType":"address[]","name":"addressesToCall","type":"address[]"},{"internalType":"bytes","name":"dataToCall","type":"bytes"},{"internalType":"uint256[]","name":"offsets","type":"uint256[]"},{"internalType":"uint256[]","name":"gasLimitsAndValues","type":"uint256[]"}],"name":"swap","outputs":[{"internalType":"uint256","name":"outAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620017b0380380620017b0833981810160405260208110156200003757600080fd5b5051600062000045620000dc565b600080546001600160a01b0319166001600160a01b03831690811782556040519293509160008051602062001790833981519152908290a3506040516200008c90620001de565b604051809103906000f080158015620000a9573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b0392909216919091179055620000d581620000e0565b50620001ec565b3390565b620000ea620000dc565b6000546001600160a01b039081169116146200014d576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620001945760405162461bcd60e51b81526004018080602001828103825260268152602001806200176a6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216916000805160206200179083398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6104b280620012b883390190565b6110bc80620001fc6000396000f3fe6080604052600436106100745760003560e01c8063e8edc8161161004e578063e8edc8161461015b578063f2fde38b14610170578063f88309d7146101a3578063fc0e74d114610413576100e7565b8063715018a6146100ec5780638da5cb5b14610101578063bf86d69014610132576100e7565b366100e757600054600160a01b900460ff16156100d8576040805162461bcd60e51b815260206004820152601c60248201527f536d61727420636f6e7472616374206973207368757420646f776e2e00000000604482015290519081900360640190fd5b333214156100e557600080fd5b005b600080fd5b3480156100f857600080fd5b506100e5610428565b34801561010d57600080fd5b506101166104dc565b604080516001600160a01b039092168252519081900360200190f35b34801561013e57600080fd5b506101476104eb565b604080519115158252519081900360200190f35b34801561016757600080fd5b506101166104fb565b34801561017c57600080fd5b506100e56004803603602081101561019357600080fd5b50356001600160a01b031661050a565b61040160048036036101408110156101ba57600080fd5b6001600160a01b038235811692602081013582169260408201359260608301359260808101359260a08201359092169181019060e0810160c0820135600160201b81111561020757600080fd5b82018360208201111561021957600080fd5b803590602001918460208302840111600160201b8311171561023a57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561028957600080fd5b82018360208201111561029b57600080fd5b803590602001918460018302840111600160201b831117156102bc57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561030e57600080fd5b82018360208201111561032057600080fd5b803590602001918460208302840111600160201b8311171561034157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561039057600080fd5b8201836020820111156103a257600080fd5b803590602001918460208302840111600160201b831117156103c357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610614945050505050565b60408051918252519081900360200190f35b34801561041f57600080fd5b506100e5610a84565b610430610b2a565b6000546001600160a01b03908116911614610492576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b600054600160a01b900460ff1681565b6001546001600160a01b031681565b610512610b2a565b6000546001600160a01b03908116911614610574576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166105b95760405162461bcd60e51b8152600401808060200182810382526026815260200180610fcf6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008054600160a01b900460ff1615610674576040805162461bcd60e51b815260206004820152601c60248201527f536d61727420636f6e7472616374206973207368757420646f776e2e00000000604482015290519081900360640190fd5b600088116106b35760405162461bcd60e51b815260040180806020018281038252602a815260200180610fa5602a913960400191505060405180910390fd5b6000855111610709576040805162461bcd60e51b815260206004820152601760248201527f43616c6c20646174612073686f756c6420657869737473000000000000000000604482015290519081900360640190fd5b61071b8b6001600160a01b0316610b2e565b15153415151461075c5760405162461bcd60e51b8152600401808060200182810382526035815260200180610ff56035913960400191505060405180910390fd5b61076e8b6001600160a01b0316610b2e565b6107ec576001546040805163f009239360e01b81526001600160a01b038e81166004830152336024830152306044830152606482018d90529151919092169163f009239391608480830192600092919082900301818387803b1580156107d357600080fd5b505af11580156107e7573d6000803e3d6000fd5b505050505b60005b855181101561092b5760015486516001600160a01b039091169087908390811061081557fe5b60200260200101516001600160a01b03161415610869576040805162461bcd60e51b815260206004820152600d60248201526c1058d8d95cdcc819195b9a5959609a1b604482015290519081900360640190fd5b61091a83828151811061087857fe5b60200260200101516fffffffffffffffffffffffffffffffff168686848151811061089f57fe5b60200260200101518785815181106108b357fe5b60200260200101518886600101815181106108ca57fe5b60200260200101510360808887815181106108e157fe5b6020026020010151901c8b87815181106108f757fe5b60200260200101516001600160a01b0316610b569095949392919063ffffffff16565b61092357600080fd5b6001016107ef565b50610954336109436001600160a01b038e1630610b84565b6001600160a01b038e169190610c25565b506109686001600160a01b038b1630610b84565b9050878110156109a95760405162461bcd60e51b815260040180806020018281038252603381526020018061102a6033913960400191505060405180910390fd5b6109bd6001600160a01b038b163383610c25565b50896001600160a01b03168b6001600160a01b0316336001600160a01b03167f4ec237690cd79c8ab7ec9b0747f20cb9e9a58b89bd4e09312f5773ab546bee4c8c85604051808381526020018281526020019250505060405180910390a4604080518a8152602081018390526000818301819052606082015290516001600160a01b03808916928d821692918f16917fe2cee3f6836059820b673943853afebd9b3026125dab0d774284e6f28a4855be9181900360800190a49a9950505050505050505050565b610a8c610b2a565b6000546001600160a01b03908116911614610aee576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460ff60a01b1916600160a01b1781556040517f4426aa1fb73e391071491fcfe21a88b5c38a0a0333a1f6e77161470439704cf89190a1565b3390565b60006001600160a01b0382166110101480610b5057506001600160a01b038216155b92915050565b600081610b6557619c405a0391505b60405160208601600082868884018b8d89f19998505050505050505050565b6000610b8f83610b2e565b15610ba557506001600160a01b03811631610b50565b826001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610bf257600080fd5b505afa158015610c06573d6000803e3d6000fd5b505050506040513d6020811015610c1c57600080fd5b50519392505050565b600081610c3457506001610c9a565b610c3d84610b2e565b15610c82576040516001600160a01b0384169083156108fc029084906000818181858888f19350505050158015610c78573d6000803e3d6000fd5b5060019050610c9a565b610c966001600160a01b0385168484610ca1565b5060015b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610cf3908490610cf8565b505050565b6060610d4d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610da99092919063ffffffff16565b805190915015610cf357808060200190516020811015610d6c57600080fd5b5051610cf35760405162461bcd60e51b815260040180806020018281038252602a81526020018061105d602a913960400191505060405180910390fd5b6060610db88484600085610dc0565b949350505050565b6060610dcb85610f6b565b610e1c576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310610e5b5780518252601f199092019160209182019101610e3c565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610ebd576040519150601f19603f3d011682016040523d82523d6000602084013e610ec2565b606091505b50915091508115610ed6579150610db89050565b805115610ee65780518082602001fd5b8360405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610f30578181015183820152602001610f18565b50505050905090810190601f168015610f5d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610db857505015159291505056fe4d696e206f757420616d6f756e742073686f756c642062652067726561746572207468616e207a65726f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f70656e4f6365616e3a206d73672e76616c75652073686f756c642062652075736564206f6e6c7920666f7220455448207377617052657475726e20616d6f756e74206c657373207468616e20746865206d696e696d756d20726571756972656420616d6f756e745361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212207d7fd8befd814fce129ab07887c77df0792cd780bc2ba953f64256fe27e5a6f464736f6c634300060c0033608060405234801561001057600080fd5b50600080546001600160a01b03191633179055610480806100326000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80638da5cb5b1461003b578063f00923931461005f575b600080fd5b61004361009d565b604080516001600160a01b039092168252519081900360200190f35b61009b6004803603608081101561007557600080fd5b506001600160a01b038135811691602081013582169160408201351690606001356100ac565b005b6000546001600160a01b031681565b6000546001600160a01b031633146100ff576040805162461bcd60e51b81526020600482015260116024820152701058d8d95cdcc81c995cdd1c9a58dd1959607a1b604482015290519081900360640190fd5b6101146001600160a01b03851684848461011a565b50505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261011490859060606101c4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166102259092919063ffffffff16565b805190915015610220578080602001905160208110156101e357600080fd5b50516102205760405162461bcd60e51b815260040180806020018281038252602a815260200180610421602a913960400191505060405180910390fd5b505050565b6060610234848460008561023c565b949350505050565b6060610247856103e7565b610298576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106102d75780518252601f1990920191602091820191016102b8565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b509150915081156103525791506102349050565b8051156103625780518082602001fd5b8360405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156103ac578181015183820152602001610394565b50505050905090810190601f1680156103d95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061023457505015159291505056fe5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220997a8075c002fbac56f5550b92457dfd27623add6fd9157610bb0d651c81ca0164736f6c634300060c00334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573738be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e000000000000000000000000089f2f964c6f1efd4cafad893ce9521096290fa94
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000089f2f964c6f1efd4cafad893ce9521096290fa94
-----Decoded View---------------
Arg [0] : _owner (address): 0x89f2f964c6f1efd4cafad893ce9521096290fa94
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000089f2f964c6f1efd4cafad893ce9521096290fa94
Deployed ByteCode Sourcemap
27427:2607:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21675:10;;-1:-1:-1;;;21675:10:0;;;;21674:11;21666:52;;;;;-1:-1:-1;;;21666:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;28208:10:::1;28222:9;28208:23;;28200:32;;;::::0;::::1;;27427:2607:::0;;;;;20910:148;;;;;;;;;;;;;:::i;20268:79::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;20268:79:0;;;;;;;;;;;;;;21578:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;27620:27;;;;;;;;;;;;;:::i;21213:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21213:244:0;-1:-1:-1;;;;;21213:244:0;;:::i;28248:1783::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28248:1783:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28248:1783:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28248:1783:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28248:1783:0;;;;;;;;-1:-1:-1;28248:1783:0;;-1:-1:-1;;;;;28248:1783:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28248:1783:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28248:1783:0;;;;;;;;-1:-1:-1;28248:1783:0;;-1:-1:-1;;;;;28248:1783:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28248:1783:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28248:1783:0;;;;;;;;-1:-1:-1;28248:1783:0;;-1:-1:-1;;;;;28248:1783:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28248:1783:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28248:1783:0;;-1:-1:-1;28248:1783:0;;-1:-1:-1;;;;;28248:1783:0:i;:::-;;;;;;;;;;;;;;;;21746:99;;;;;;;;;;;;;:::i;20910:148::-;20490:12;:10;:12::i;:::-;20480:6;;-1:-1:-1;;;;;20480:6:0;;;:22;;;20472:67;;;;;-1:-1:-1;;;20472:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21017:1:::1;21001:6:::0;;20980:40:::1;::::0;-1:-1:-1;;;;;21001:6:0;;::::1;::::0;20980:40:::1;::::0;21017:1;;20980:40:::1;21048:1;21031:19:::0;;-1:-1:-1;;;;;;21031:19:0::1;::::0;;20910:148::o;20268:79::-;20306:7;20333:6;-1:-1:-1;;;;;20333:6:0;20268:79;:::o;21578:22::-;;;-1:-1:-1;;;21578:22:0;;;;;:::o;27620:27::-;;;-1:-1:-1;;;;;27620:27:0;;:::o;21213:244::-;20490:12;:10;:12::i;:::-;20480:6;;-1:-1:-1;;;;;20480:6:0;;;:22;;;20472:67;;;;;-1:-1:-1;;;20472:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21302:22:0;::::1;21294:73;;;;-1:-1:-1::0;;;21294:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21404:6;::::0;;21383:38:::1;::::0;-1:-1:-1;;;;;21383:38:0;;::::1;::::0;21404:6;::::1;::::0;21383:38:::1;::::0;::::1;21432:6;:17:::0;;-1:-1:-1;;;;;;21432:17:0::1;-1:-1:-1::0;;;;;21432:17:0;;;::::1;::::0;;;::::1;::::0;;21213:244::o;28248:1783::-;28646:17;21675:10;;-1:-1:-1;;;21675:10:0;;;;21674:11;21666:52;;;;;-1:-1:-1;;;21666:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;28699:1:::1;28684:12;:16;28676:71;;;;-1:-1:-1::0;;;28676:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28791:1;28766:15;:22;:26;28758:62;;;::::0;;-1:-1:-1;;;28758:62:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28859:15;:7;-1:-1:-1::0;;;;;28859:13:0::1;;:15::i;:::-;28839:35;;28840:9;:14:::0;::::1;28839:35;28831:101;;;;-1:-1:-1::0;;;28831:101:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28950:15;:7;-1:-1:-1::0;;;;;28950:13:0::1;;:15::i;:::-;28945:113;;28982:7;::::0;:64:::1;::::0;;-1:-1:-1;;;28982:64:0;;-1:-1:-1;;;;;28982:64:0;;::::1;;::::0;::::1;::::0;29010:10:::1;28982:64:::0;;;;29030:4:::1;28982:64:::0;;;;;;;;;;;;:7;;;::::1;::::0;:18:::1;::::0;:64;;;;;:7:::1;::::0;:64;;;;;;;:7;;:64;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28945:113;29075:9;29070:480;29094:15;:22;29090:1;:26;29070:480;;;29176:7;::::0;29146:18;;-1:-1:-1;;;;;29176:7:0;;::::1;::::0;29146:15;;29162:1;;29146:18;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;29146:38:0::1;;;29138:64;;;::::0;;-1:-1:-1;;;29138:64:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;29138:64:0;;;;;;;;;;;;;::::1;;29243:280;29297:18;29316:1;29297:21;;;;;;;;;;;;;;29322:14;29297:40;29360:10;29393:7;29401:1;29393:10;;;;;;;;;;;;;;29443:7;29451:1;29443:10;;;;;;;;;;;;;;29426:7;29434:1;29438;29434:5;29426:14;;;;;;;;;;;;;;:27;29501:3;29476:18;29495:1;29476:21;;;;;;;;;;;;;;:28;;29243:15;29259:1;29243:18;;;;;;;;;;;;;;-1:-1:-1::0;;;;;29243:31:0::1;;;:280;;;;;;;;:::i;:::-;29217:321;;;::::0;::::1;;29118:3;;29070:480;;;-1:-1:-1::0;29562:80:0::1;29588:10;29600:41;-1:-1:-1::0;;;;;29600:26:0;::::1;29635:4;29600:26;:41::i;:::-;-1:-1:-1::0;;;;;29562:25:0;::::1;::::0;:80;:25:::1;:80::i;:::-;-1:-1:-1::0;29665:42:0::1;-1:-1:-1::0;;;;;29665:27:0;::::1;29701:4;29665:27;:42::i;:::-;29653:54;;29741:12;29728:9;:25;;29720:89;;;;-1:-1:-1::0;;;29720:89:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29820:49;-1:-1:-1::0;;;;;29820:26:0;::::1;29847:10;29859:9:::0;29820:26:::1;:49::i;:::-;;29914:8;-1:-1:-1::0;;;;;29887:57:0::1;29905:7;-1:-1:-1::0;;;;;29887:57:0::1;29893:10;-1:-1:-1::0;;;;;29887:57:0::1;;29924:8;29934:9;29887:57;;;;;;;;;;;;;;;;;;;;;;;;29960:63;::::0;;;;;::::1;::::0;::::1;::::0;;;30018:1:::1;29960:63:::0;;;;;;;;;;;;-1:-1:-1;;;;;29960:63:0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;::::1;28248:1783:::0;;;;;;;;;;;;:::o;21746:99::-;20490:12;:10;:12::i;:::-;20480:6;;-1:-1:-1;;;;;20480:6:0;;;:22;;;20472:67;;;;;-1:-1:-1;;;20472:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21794:10:::1;:17:::0;;-1:-1:-1;;;;21794:17:0::1;-1:-1:-1::0;;;21794:17:0::1;::::0;;21827:10:::1;::::0;::::1;::::0;21794;21827::::1;21746:99::o:0;18820:106::-;18908:10;18820:106;:::o;25321:169::-;25373:4;-1:-1:-1;;;;;25398:40:0;;22384:42;25398:40;;:83;;-1:-1:-1;;;;;;25442:39:0;;;25398:83;25390:92;25321:169;-1:-1:-1;;25321:169:0:o;25994:928::-;26203:11;26231:13;26227:74;;26284:5;26272:9;:17;26261:28;;26227:74;26350:4;26344:11;26482:2;26476:4;26472:13;26832:1;26812;26710:10;26680;26677:1;26673:18;26649:5;26624:6;26597:8;26574:330;26564:340;26320:595;-1:-1:-1;;;;;;;;;26320:595:0:o;24559:228::-;24637:7;24661:12;24667:5;24661;:12::i;:::-;24657:123;;;-1:-1:-1;;;;;;24697:11:0;;;24690:18;;24657:123;24748:5;-1:-1:-1;;;;;24748:15:0;;24764:3;24748:20;;;;;;;;;;;;;-1:-1:-1;;;;;24748:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24748:20:0;;24559:228;-1:-1:-1;;;24559:228:0:o;22436:400::-;22557:4;22578:11;22574:55;;-1:-1:-1;22613:4:0;22606:11;;22574:55;22645:12;22651:5;22645;:12::i;:::-;22641:188;;;22674:28;;-1:-1:-1;;;;;22674:20:0;;;:28;;;;;22695:6;;22674:28;;;;22695:6;22674:20;:28;;;;;;;;;;;;;;;;;;;;;22724:4;22717:11;;;;22641:188;22761:30;-1:-1:-1;;;;;22761:18:0;;22780:2;22784:6;22761:18;:30::i;:::-;-1:-1:-1;22813:4:0;22641:188;22436:400;;;;;:::o;15121:177::-;15231:58;;;-1:-1:-1;;;;;15231:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15231:58:0;-1:-1:-1;;;15231:58:0;;;15204:86;;15224:5;;15204:19;:86::i;:::-;15121:177;;;:::o;17426:761::-;17850:23;17876:69;17904:4;17876:69;;;;;;;;;;;;;;;;;17884:5;-1:-1:-1;;;;;17876:27:0;;;:69;;;;;:::i;:::-;17960:17;;17850:95;;-1:-1:-1;17960:21:0;17956:224;;18102:10;18091:30;;;;;;;;;;;;;;;-1:-1:-1;18091:30:0;18083:85;;;;-1:-1:-1;;;18083:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12100:196;12203:12;12235:53;12258:6;12266:4;12272:1;12275:12;12235:22;:53::i;:::-;12228:60;12100:196;-1:-1:-1;;;;12100:196:0:o;13477:979::-;13607:12;13640:18;13651:6;13640:10;:18::i;:::-;13632:60;;;;;-1:-1:-1;;;13632:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13766:12;13780:23;13807:6;-1:-1:-1;;;;;13807:11:0;13827:8;13838:4;13807:36;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13807:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13765:78;;;;13858:7;13854:595;;;13889:10;-1:-1:-1;13882:17:0;;-1:-1:-1;13882:17:0;13854:595;14003:17;;:21;13999:439;;14266:10;14260:17;14327:15;14314:10;14310:2;14306:19;14299:44;14214:148;14409:12;14402:20;;-1:-1:-1;;;14402:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8985:619;9045:4;9513:20;;9356:66;9553:23;;;;;;:42;;-1:-1:-1;;9580:15:0;;;9545:51;-1:-1:-1;;8985:619:0:o
Swarm Source
ipfs://997a8075c002fbac56f5550b92457dfd27623add6fd9157610bb0d651c81ca01
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.