More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 70,942 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw Eth | 21150698 | 78 days ago | IN | 0 ETH | 0.00101387 | ||||
Owner Withdraw E... | 20267335 | 202 days ago | IN | 0 ETH | 0.00009241 | ||||
Owner Withdraw E... | 20267329 | 202 days ago | IN | 0 ETH | 0.00019872 | ||||
Owner Withdraw E... | 20267324 | 202 days ago | IN | 0 ETH | 0.00018549 | ||||
Owner Withdraw E... | 20267316 | 202 days ago | IN | 0 ETH | 0.00016844 | ||||
Owner Withdraw E... | 20267312 | 202 days ago | IN | 0 ETH | 0.00014447 | ||||
Owner Withdraw E... | 20267306 | 202 days ago | IN | 0 ETH | 0.00017421 | ||||
Owner Withdraw E... | 20267300 | 202 days ago | IN | 0 ETH | 0.00016294 | ||||
Owner Withdraw E... | 20267294 | 202 days ago | IN | 0 ETH | 0.00018816 | ||||
Owner Withdraw E... | 20267289 | 202 days ago | IN | 0 ETH | 0.00016235 | ||||
Owner Withdraw E... | 20267282 | 202 days ago | IN | 0 ETH | 0.00019312 | ||||
Owner Withdraw E... | 20267275 | 202 days ago | IN | 0 ETH | 0.00017263 | ||||
Owner Withdraw E... | 20267270 | 202 days ago | IN | 0 ETH | 0.00016 | ||||
Owner Withdraw E... | 20267256 | 202 days ago | IN | 0 ETH | 0.0001466 | ||||
Owner Withdraw E... | 20267240 | 202 days ago | IN | 0 ETH | 0.00015833 | ||||
Withdraw Erc20 | 20193828 | 212 days ago | IN | 0 ETH | 0.00011218 | ||||
Swap Erc20 | 19328302 | 333 days ago | IN | 0 ETH | 0.00607418 | ||||
Swap Erc20 | 16751876 | 695 days ago | IN | 0 ETH | 0.00359172 | ||||
Swap Erc20 | 16751876 | 695 days ago | IN | 0 ETH | 0.00356203 | ||||
Swap Erc20 | 16751876 | 695 days ago | IN | 0 ETH | 0.00366098 | ||||
Swap Erc20 | 16751876 | 695 days ago | IN | 0 ETH | 0.00348288 | ||||
Swap Erc20 | 16747581 | 695 days ago | IN | 0 ETH | 0.00514516 | ||||
Owner Withdraw E... | 16578724 | 719 days ago | IN | 0 ETH | 0.00436168 | ||||
Owner Withdraw E... | 16577556 | 719 days ago | IN | 0 ETH | 0.0051282 | ||||
Owner Withdraw E... | 16577555 | 719 days ago | IN | 0 ETH | 0.00197626 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
21150698 | 78 days ago | 0.010804 ETH | ||||
20267335 | 202 days ago | 1.25 ETH | ||||
16113903 | 784 days ago | 13,130 ETH | ||||
16113893 | 784 days ago | 1 wei | ||||
15955706 | 806 days ago | 3.580041 ETH | ||||
15955668 | 806 days ago | 16.520372 ETH | ||||
15955649 | 806 days ago | 3.493723 ETH | ||||
15955580 | 806 days ago | 3.381929 ETH | ||||
15955515 | 806 days ago | 3.236806 ETH | ||||
15955459 | 806 days ago | 3.068772 ETH | ||||
15955398 | 806 days ago | 1.668938 ETH | ||||
15955385 | 806 days ago | 1.556134 ETH | ||||
15955357 | 806 days ago | 1.371547 ETH | ||||
15955309 | 806 days ago | 24.954055 ETH | ||||
15955265 | 806 days ago | 0.989737 ETH | ||||
15955215 | 806 days ago | 0.006883 ETH | ||||
15955174 | 806 days ago | 1.202208 ETH | ||||
15955136 | 806 days ago | 0.106754 ETH | ||||
15954666 | 806 days ago | 24.665958 ETH | ||||
15954541 | 806 days ago | 5.429491 ETH | ||||
15954459 | 806 days ago | 16.692566 ETH | ||||
15954411 | 806 days ago | 15.711756 ETH | ||||
15954399 | 806 days ago | 4.509448 ETH | ||||
15954358 | 806 days ago | 0.085413 ETH | ||||
15953797 | 806 days ago | 50.606719 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
SplTokenSwap
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-09-11 */ // File: @openzeppelin/contracts/GSN/Context.sol // 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; } } // 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: @openzeppelin/contracts/token/ERC20/IERC20.sol 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/utils/Pausable.sol pragma solidity ^0.6.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor () internal { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!_paused, "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(_paused, "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/utils/ReentrancyGuard.sol pragma solidity ^0.6.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/cryptography/ECDSA.sol pragma solidity ^0.6.0; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { // Check the signature length if (signature.length != 65) { revert("ECDSA: invalid signature length"); } // Divide the signature in r, s and v variables bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. // solhint-disable-next-line no-inline-assembly assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { revert("ECDSA: invalid signature 's' value"); } if (v != 27 && v != 28) { revert("ECDSA: invalid signature 'v' value"); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); require(signer != address(0), "ECDSA: invalid signature"); return signer; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * replicates the behavior of the * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`] * JSON-RPC method. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } } // File: contracts/SplTokenSwap.sol pragma solidity ^0.6.0; contract SplTokenSwap is Ownable, Pausable, ReentrancyGuard { using SafeERC20 for IERC20; event Swap(address indexed token, string recipient, uint amount); event Withdraw(address indexed token, address indexed recipient, uint amount); event NonceUsed(uint indexed nonce, bytes signature); mapping(uint256 => bool) usedNonces; function swapErc20(IERC20 token, string calldata recipient, uint amount) external nonReentrant whenNotPaused { require(amount > 0, "Swap amount must be positive"); require(token.allowance(msg.sender, address(this)) >= amount, "Swap amount exceeds allowance"); token.safeTransferFrom(msg.sender, address(this), amount); emit Swap(address(token), recipient, amount); } function swapEth(string calldata recipient) external payable nonReentrant whenNotPaused { uint amount = msg.value; require(amount > 0, "Swap amount must be positive"); emit Swap(address(0), recipient, amount); } function withdrawErc20(IERC20 token, address recipient, uint amount, uint nonce, bytes calldata signature) external nonReentrant whenNotPaused { bytes32 message = keccak256(abi.encodePacked("withdrawErc20", this, address(token), recipient, amount, nonce)); bytes32 hash = ECDSA.toEthSignedMessageHash(message); address signer = ECDSA.recover(hash, signature); require(signer == this.owner(), "Invalid signature"); require(!usedNonces[nonce], "Duplicate nonce"); usedNonces[nonce] = true; emit NonceUsed(nonce, signature); token.safeTransfer(recipient, amount); emit Withdraw(address(token), recipient, amount); } function withdrawEth(address payable recipient, uint amount, uint nonce, bytes calldata signature) external nonReentrant whenNotPaused { bytes32 message = keccak256(abi.encodePacked("withdrawEth", this, recipient, amount, nonce)); bytes32 hash = ECDSA.toEthSignedMessageHash(message); address signer = ECDSA.recover(hash, signature); require(signer == this.owner(), "Invalid signature"); require(!usedNonces[nonce], "Duplicate nonce"); usedNonces[nonce] = true; emit NonceUsed(nonce, signature); recipient.transfer(amount); emit Withdraw(address(0), recipient, amount); } function pause() external onlyOwner { _pause(); } function unpause() external onlyOwner { _unpause(); } function ownerWithdrawErc20(IERC20 token, uint amount) external onlyOwner { token.safeTransfer(msg.sender, amount); emit Withdraw(address(token), msg.sender, amount); } function ownerWithdrawEth(uint amount) external onlyOwner { msg.sender.transfer(amount); emit Withdraw(address(0), msg.sender, amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"signature","type":"bytes"}],"name":"NonceUsed","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":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"string","name":"recipient","type":"string"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ownerWithdrawErc20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ownerWithdrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"string","name":"recipient","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"swapErc20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"recipient","type":"string"}],"name":"swapEth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"withdrawErc20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"withdrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50600061001b61007b565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000805460ff60a01b191690556001805561007f565b3390565b611a2a8061008e6000396000f3fe6080604052600436106100a75760003560e01c8063715018a611610064578063715018a61461025d578063833a4888146102725780638456cb59146103095780638da5cb5b1461031e578063f2fde38b1461034f578063f91b8a7114610382576100a7565b80631606f887146100ac57806317388f1f1461014e578063332027b714610187578063381eadcb146101f55780633f4ba83a1461021f5780635c975abb14610234575b600080fd5b3480156100b857600080fd5b5061014c600480360360a08110156100cf57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561010e57600080fd5b82018360208201111561012057600080fd5b803590602001918460018302840111600160201b8311171561014157600080fd5b50909250905061040d565b005b34801561015a57600080fd5b5061014c6004803603604081101561017157600080fd5b506001600160a01b038135169060200135610752565b61014c6004803603602081101561019d57600080fd5b810190602081018135600160201b8111156101b757600080fd5b8201836020820111156101c957600080fd5b803590602001918460018302840111600160201b831117156101ea57600080fd5b5090925090506107f0565b34801561020157600080fd5b5061014c6004803603602081101561021857600080fd5b503561095c565b34801561022b57600080fd5b5061014c610a0b565b34801561024057600080fd5b50610249610a6d565b604080519115158252519081900360200190f35b34801561026957600080fd5b5061014c610a7d565b34801561027e57600080fd5b5061014c6004803603608081101561029557600080fd5b6001600160a01b038235169160208101359160408201359190810190608081016060820135600160201b8111156102cb57600080fd5b8201836020820111156102dd57600080fd5b803590602001918460018302840111600160201b831117156102fe57600080fd5b509092509050610b1f565b34801561031557600080fd5b5061014c610e6f565b34801561032a57600080fd5b50610333610ecf565b604080516001600160a01b039092168252519081900360200190f35b34801561035b57600080fd5b5061014c6004803603602081101561037257600080fd5b50356001600160a01b0316610ede565b34801561038e57600080fd5b5061014c600480360360608110156103a557600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156103cf57600080fd5b8201836020820111156103e157600080fd5b803590602001918460018302840111600160201b8311171561040257600080fd5b919350915035610fd6565b60026001541415610453576040805162461bcd60e51b815260206004820152601f6024820152600080516020611901833981519152604482015290519081900360640190fd5b6002600155600054600160a01b900460ff16156104aa576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b604080516c07769746864726177457263323609c1b60208083019190915230606090811b602d8401526bffffffffffffffffffffffff198a821b811660418501529089901b1660558301526069820187905260898083018790528351808403909101815260a99092019092528051910120600061052682611227565b9050600061056a8286868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061127892505050565b9050306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105a557600080fd5b505afa1580156105b9573d6000803e3d6000fd5b505050506040513d60208110156105cf57600080fd5b50516001600160a01b03828116911614610624576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b60008681526002602052604090205460ff161561067a576040805162461bcd60e51b815260206004820152600f60248201526e4475706c6963617465206e6f6e636560881b604482015290519081900360640190fd5b600086815260026020908152604091829020805460ff19166001179055815181815290810186905287917ffa8fd9f87a2ab5544d5f7e0317e6142f05d4106bc6cf7ca30d6f064a2ef35c3091889188919081908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a261070a6001600160a01b038a168989611463565b876001600160a01b0316896001600160a01b03166000805160206119d5833981519152896040518082815260200191505060405180910390a350506001805550505050505050565b61075a6114ba565b6000546001600160a01b039081169116146107aa576040805162461bcd60e51b8152602060048201819052602482015260008051602061198b833981519152604482015290519081900360640190fd5b6107be6001600160a01b0383163383611463565b60408051828152905133916001600160a01b038516916000805160206119d58339815191529181900360200190a35050565b60026001541415610836576040805162461bcd60e51b815260206004820152601f6024820152600080516020611901833981519152604482015290519081900360640190fd5b6002600155600054600160a01b900460ff161561088d576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b34806108e0576040805162461bcd60e51b815260206004820152601c60248201527f5377617020616d6f756e74206d75737420626520706f73697469766500000000604482015290519081900360640190fd5b60006001600160a01b03167ff6c184dc66b66fdd652f70b2bd5fc222712bd2978e2d910ee14b62cf4d04cf3784848460405180806020018381526020018281038252858582818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a250506001805550565b6109646114ba565b6000546001600160a01b039081169116146109b4576040805162461bcd60e51b8152602060048201819052602482015260008051602061198b833981519152604482015290519081900360640190fd5b604051339082156108fc029083906000818181858888f193505050501580156109e1573d6000803e3d6000fd5b5060408051828152905133916000916000805160206119d58339815191529181900360200190a350565b610a136114ba565b6000546001600160a01b03908116911614610a63576040805162461bcd60e51b8152602060048201819052602482015260008051602061198b833981519152604482015290519081900360640190fd5b610a6b6114be565b565b600054600160a01b900460ff1690565b610a856114ba565b6000546001600160a01b03908116911614610ad5576040805162461bcd60e51b8152602060048201819052602482015260008051602061198b833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60026001541415610b65576040805162461bcd60e51b815260206004820152601f6024820152600080516020611901833981519152604482015290519081900360640190fd5b6002600155600054600160a01b900460ff1615610bbc576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b604080516a0eed2e8d0c8e4c2ee8ae8d60ab1b60208083019190915230606090811b602b84015288901b6bffffffffffffffffffffffff1916603f83015260538201879052607380830187905283518084039091018152609390920190925280519101206000610c2b82611227565b90506000610c6f8286868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061127892505050565b9050306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610caa57600080fd5b505afa158015610cbe573d6000803e3d6000fd5b505050506040513d6020811015610cd457600080fd5b50516001600160a01b03828116911614610d29576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b60008681526002602052604090205460ff1615610d7f576040805162461bcd60e51b815260206004820152600f60248201526e4475706c6963617465206e6f6e636560881b604482015290519081900360640190fd5b600086815260026020908152604091829020805460ff19166001179055815181815290810186905287917ffa8fd9f87a2ab5544d5f7e0317e6142f05d4106bc6cf7ca30d6f064a2ef35c3091889188919081908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a26040516001600160a01b0389169088156108fc029089906000818181858888f19350505050158015610e31573d6000803e3d6000fd5b506040805188815290516001600160a01b038a16916000916000805160206119d58339815191529181900360200190a3505060018055505050505050565b610e776114ba565b6000546001600160a01b03908116911614610ec7576040805162461bcd60e51b8152602060048201819052602482015260008051602061198b833981519152604482015290519081900360640190fd5b610a6b611566565b6000546001600160a01b031690565b610ee66114ba565b6000546001600160a01b03908116911614610f36576040805162461bcd60e51b8152602060048201819052602482015260008051602061198b833981519152604482015290519081900360640190fd5b6001600160a01b038116610f7b5760405162461bcd60e51b81526004018080602001828103825260268152602001806119216026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002600154141561101c576040805162461bcd60e51b815260206004820152601f6024820152600080516020611901833981519152604482015290519081900360640190fd5b6002600155600054600160a01b900460ff1615611073576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600081116110c8576040805162461bcd60e51b815260206004820152601c60248201527f5377617020616d6f756e74206d75737420626520706f73697469766500000000604482015290519081900360640190fd5b60408051636eb1769f60e11b8152336004820152306024820152905182916001600160a01b0387169163dd62ed3e91604480820192602092909190829003018186803b15801561111757600080fd5b505afa15801561112b573d6000803e3d6000fd5b505050506040513d602081101561114157600080fd5b50511015611196576040805162461bcd60e51b815260206004820152601d60248201527f5377617020616d6f756e74206578636565647320616c6c6f77616e6365000000604482015290519081900360640190fd5b6111ab6001600160a01b0385163330846115f4565b836001600160a01b03167ff6c184dc66b66fdd652f70b2bd5fc222712bd2978e2d910ee14b62cf4d04cf3784848460405180806020018381526020018281038252858582818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a25050600180555050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b600081516041146112d0576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156113415760405162461bcd60e51b81526004018080602001828103825260228152602001806119476022913960400191505060405180910390fd5b8060ff16601b1415801561135957508060ff16601c14155b156113955760405162461bcd60e51b81526004018080602001828103825260228152602001806119696022913960400191505060405180910390fd5b600060018783868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156113f1573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611459576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b9695505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526114b5908490611654565b505050565b3390565b600054600160a01b900460ff16611513576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6115496114ba565b604080516001600160a01b039092168252519081900360200190a1565b600054600160a01b900460ff16156115b8576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586115496114ba565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261164e908590611654565b50505050565b60606116a9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166117059092919063ffffffff16565b8051909150156114b5578080602001905160208110156116c857600080fd5b50516114b55760405162461bcd60e51b815260040180806020018281038252602a8152602001806119ab602a913960400191505060405180910390fd5b6060611714848460008561171c565b949350505050565b6060611727856118c7565b611778576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106117b75780518252601f199092019160209182019101611798565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611819576040519150601f19603f3d011682016040523d82523d6000602084013e61181e565b606091505b509150915081156118325791506117149050565b8051156118425780518082602001fd5b8360405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561188c578181015183820152602001611874565b50505050905090810190601f1680156118b95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061171457505015159291505056fe5265656e7472616e637947756172643a207265656e7472616e742063616c6c004f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c756545434453413a20696e76616c6964207369676e6174757265202776272076616c75654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565649b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eba26469706673582212208d2d9c74d84a4bc2fd6058196bced084de250f4aa2e58621e88d02a64c519bab64736f6c634300060c0033
Deployed Bytecode
0x6080604052600436106100a75760003560e01c8063715018a611610064578063715018a61461025d578063833a4888146102725780638456cb59146103095780638da5cb5b1461031e578063f2fde38b1461034f578063f91b8a7114610382576100a7565b80631606f887146100ac57806317388f1f1461014e578063332027b714610187578063381eadcb146101f55780633f4ba83a1461021f5780635c975abb14610234575b600080fd5b3480156100b857600080fd5b5061014c600480360360a08110156100cf57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561010e57600080fd5b82018360208201111561012057600080fd5b803590602001918460018302840111600160201b8311171561014157600080fd5b50909250905061040d565b005b34801561015a57600080fd5b5061014c6004803603604081101561017157600080fd5b506001600160a01b038135169060200135610752565b61014c6004803603602081101561019d57600080fd5b810190602081018135600160201b8111156101b757600080fd5b8201836020820111156101c957600080fd5b803590602001918460018302840111600160201b831117156101ea57600080fd5b5090925090506107f0565b34801561020157600080fd5b5061014c6004803603602081101561021857600080fd5b503561095c565b34801561022b57600080fd5b5061014c610a0b565b34801561024057600080fd5b50610249610a6d565b604080519115158252519081900360200190f35b34801561026957600080fd5b5061014c610a7d565b34801561027e57600080fd5b5061014c6004803603608081101561029557600080fd5b6001600160a01b038235169160208101359160408201359190810190608081016060820135600160201b8111156102cb57600080fd5b8201836020820111156102dd57600080fd5b803590602001918460018302840111600160201b831117156102fe57600080fd5b509092509050610b1f565b34801561031557600080fd5b5061014c610e6f565b34801561032a57600080fd5b50610333610ecf565b604080516001600160a01b039092168252519081900360200190f35b34801561035b57600080fd5b5061014c6004803603602081101561037257600080fd5b50356001600160a01b0316610ede565b34801561038e57600080fd5b5061014c600480360360608110156103a557600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156103cf57600080fd5b8201836020820111156103e157600080fd5b803590602001918460018302840111600160201b8311171561040257600080fd5b919350915035610fd6565b60026001541415610453576040805162461bcd60e51b815260206004820152601f6024820152600080516020611901833981519152604482015290519081900360640190fd5b6002600155600054600160a01b900460ff16156104aa576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b604080516c07769746864726177457263323609c1b60208083019190915230606090811b602d8401526bffffffffffffffffffffffff198a821b811660418501529089901b1660558301526069820187905260898083018790528351808403909101815260a99092019092528051910120600061052682611227565b9050600061056a8286868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061127892505050565b9050306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105a557600080fd5b505afa1580156105b9573d6000803e3d6000fd5b505050506040513d60208110156105cf57600080fd5b50516001600160a01b03828116911614610624576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b60008681526002602052604090205460ff161561067a576040805162461bcd60e51b815260206004820152600f60248201526e4475706c6963617465206e6f6e636560881b604482015290519081900360640190fd5b600086815260026020908152604091829020805460ff19166001179055815181815290810186905287917ffa8fd9f87a2ab5544d5f7e0317e6142f05d4106bc6cf7ca30d6f064a2ef35c3091889188919081908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a261070a6001600160a01b038a168989611463565b876001600160a01b0316896001600160a01b03166000805160206119d5833981519152896040518082815260200191505060405180910390a350506001805550505050505050565b61075a6114ba565b6000546001600160a01b039081169116146107aa576040805162461bcd60e51b8152602060048201819052602482015260008051602061198b833981519152604482015290519081900360640190fd5b6107be6001600160a01b0383163383611463565b60408051828152905133916001600160a01b038516916000805160206119d58339815191529181900360200190a35050565b60026001541415610836576040805162461bcd60e51b815260206004820152601f6024820152600080516020611901833981519152604482015290519081900360640190fd5b6002600155600054600160a01b900460ff161561088d576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b34806108e0576040805162461bcd60e51b815260206004820152601c60248201527f5377617020616d6f756e74206d75737420626520706f73697469766500000000604482015290519081900360640190fd5b60006001600160a01b03167ff6c184dc66b66fdd652f70b2bd5fc222712bd2978e2d910ee14b62cf4d04cf3784848460405180806020018381526020018281038252858582818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a250506001805550565b6109646114ba565b6000546001600160a01b039081169116146109b4576040805162461bcd60e51b8152602060048201819052602482015260008051602061198b833981519152604482015290519081900360640190fd5b604051339082156108fc029083906000818181858888f193505050501580156109e1573d6000803e3d6000fd5b5060408051828152905133916000916000805160206119d58339815191529181900360200190a350565b610a136114ba565b6000546001600160a01b03908116911614610a63576040805162461bcd60e51b8152602060048201819052602482015260008051602061198b833981519152604482015290519081900360640190fd5b610a6b6114be565b565b600054600160a01b900460ff1690565b610a856114ba565b6000546001600160a01b03908116911614610ad5576040805162461bcd60e51b8152602060048201819052602482015260008051602061198b833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60026001541415610b65576040805162461bcd60e51b815260206004820152601f6024820152600080516020611901833981519152604482015290519081900360640190fd5b6002600155600054600160a01b900460ff1615610bbc576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b604080516a0eed2e8d0c8e4c2ee8ae8d60ab1b60208083019190915230606090811b602b84015288901b6bffffffffffffffffffffffff1916603f83015260538201879052607380830187905283518084039091018152609390920190925280519101206000610c2b82611227565b90506000610c6f8286868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061127892505050565b9050306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610caa57600080fd5b505afa158015610cbe573d6000803e3d6000fd5b505050506040513d6020811015610cd457600080fd5b50516001600160a01b03828116911614610d29576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b60008681526002602052604090205460ff1615610d7f576040805162461bcd60e51b815260206004820152600f60248201526e4475706c6963617465206e6f6e636560881b604482015290519081900360640190fd5b600086815260026020908152604091829020805460ff19166001179055815181815290810186905287917ffa8fd9f87a2ab5544d5f7e0317e6142f05d4106bc6cf7ca30d6f064a2ef35c3091889188919081908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a26040516001600160a01b0389169088156108fc029089906000818181858888f19350505050158015610e31573d6000803e3d6000fd5b506040805188815290516001600160a01b038a16916000916000805160206119d58339815191529181900360200190a3505060018055505050505050565b610e776114ba565b6000546001600160a01b03908116911614610ec7576040805162461bcd60e51b8152602060048201819052602482015260008051602061198b833981519152604482015290519081900360640190fd5b610a6b611566565b6000546001600160a01b031690565b610ee66114ba565b6000546001600160a01b03908116911614610f36576040805162461bcd60e51b8152602060048201819052602482015260008051602061198b833981519152604482015290519081900360640190fd5b6001600160a01b038116610f7b5760405162461bcd60e51b81526004018080602001828103825260268152602001806119216026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002600154141561101c576040805162461bcd60e51b815260206004820152601f6024820152600080516020611901833981519152604482015290519081900360640190fd5b6002600155600054600160a01b900460ff1615611073576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600081116110c8576040805162461bcd60e51b815260206004820152601c60248201527f5377617020616d6f756e74206d75737420626520706f73697469766500000000604482015290519081900360640190fd5b60408051636eb1769f60e11b8152336004820152306024820152905182916001600160a01b0387169163dd62ed3e91604480820192602092909190829003018186803b15801561111757600080fd5b505afa15801561112b573d6000803e3d6000fd5b505050506040513d602081101561114157600080fd5b50511015611196576040805162461bcd60e51b815260206004820152601d60248201527f5377617020616d6f756e74206578636565647320616c6c6f77616e6365000000604482015290519081900360640190fd5b6111ab6001600160a01b0385163330846115f4565b836001600160a01b03167ff6c184dc66b66fdd652f70b2bd5fc222712bd2978e2d910ee14b62cf4d04cf3784848460405180806020018381526020018281038252858582818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a25050600180555050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b600081516041146112d0576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156113415760405162461bcd60e51b81526004018080602001828103825260228152602001806119476022913960400191505060405180910390fd5b8060ff16601b1415801561135957508060ff16601c14155b156113955760405162461bcd60e51b81526004018080602001828103825260228152602001806119696022913960400191505060405180910390fd5b600060018783868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156113f1573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611459576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b9695505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526114b5908490611654565b505050565b3390565b600054600160a01b900460ff16611513576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6115496114ba565b604080516001600160a01b039092168252519081900360200190a1565b600054600160a01b900460ff16156115b8576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586115496114ba565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261164e908590611654565b50505050565b60606116a9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166117059092919063ffffffff16565b8051909150156114b5578080602001905160208110156116c857600080fd5b50516114b55760405162461bcd60e51b815260040180806020018281038252602a8152602001806119ab602a913960400191505060405180910390fd5b6060611714848460008561171c565b949350505050565b6060611727856118c7565b611778576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106117b75780518252601f199092019160209182019101611798565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611819576040519150601f19603f3d011682016040523d82523d6000602084013e61181e565b606091505b509150915081156118325791506117149050565b8051156118425780518082602001fd5b8360405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561188c578181015183820152602001611874565b50505050905090810190601f1680156118b95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061171457505015159291505056fe5265656e7472616e637947756172643a207265656e7472616e742063616c6c004f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c756545434453413a20696e76616c6964207369676e6174757265202776272076616c75654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565649b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eba26469706673582212208d2d9c74d84a4bc2fd6058196bced084de250f4aa2e58621e88d02a64c519bab64736f6c634300060c0033
Deployed Bytecode Sourcemap
30243:2921:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31277:702;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31277:702:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31277:702:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31277:702:0;;;;;;;;;;-1:-1:-1;31277:702:0;;-1:-1:-1;31277:702:0;-1:-1:-1;31277:702:0;:::i;:::-;;32802:191;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32802:191:0;;;;;;;;:::i;31024:245::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31024:245:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31024:245:0;;;;;;;;;;-1:-1:-1;31024:245:0;;-1:-1:-1;31024:245:0;-1:-1:-1;31024:245:0;:::i;33001:160::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33001:160:0;;:::i;32727:67::-;;;;;;;;;;;;;:::i;22524:78::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;2745:148;;;;;;;;;;;;;:::i;31987:661::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31987:661:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31987:661:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31987:661:0;;;;;;;;;;-1:-1:-1;31987:661:0;;-1:-1:-1;31987:661:0;-1:-1:-1;31987:661:0;:::i;32656:63::-;;;;;;;;;;;;;:::i;2103:79::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;2103:79:0;;;;;;;;;;;;;;3048:244;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3048:244:0;-1:-1:-1;;;;;3048:244:0;;:::i;30605:411::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30605:411:0;;;;;;;;;;;;;;;-1:-1:-1;;;30605:411:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30605:411:0;;;;;;;;;;;;-1:-1:-1;30605:411:0;-1:-1:-1;30605:411:0;;:::i;31277:702::-;25433:1;26039:7;;:19;;26031:63;;;;;-1:-1:-1;;;26031:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26031:63:0;;;;;;;;;;;;;;;25433:1;26172:7;:18;22842:7:::1;::::0;-1:-1:-1;;;22842:7:0;::::1;;;22841:8;22833:37;;;::::0;;-1:-1:-1;;;22833:37:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;22833:37:0;;;;;;;;;;;;;::::1;;31459:81:::2;::::0;;-1:-1:-1;;;31459:81:0::2;::::0;;::::2;::::0;;;;31493:4:::2;31459:81;::::0;;::::2;::::0;;;;-1:-1:-1;;31459:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31449:92;;;::::2;::::0;31431:15:::2;31567:37;31449:92:::0;31567:28:::2;:37::i;:::-;31552:52;;31615:14;31632:30;31646:4;31652:9;;31632:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;31632:13:0::2;::::0;-1:-1:-1;;;31632:30:0:i:2;:::-;31615:47;;31691:4;-1:-1:-1::0;;;;;31691:10:0::2;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;31691:12:0;-1:-1:-1;;;;;31681:22:0;;::::2;::::0;::::2;;31673:52;;;::::0;;-1:-1:-1;;;31673:52:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;31673:52:0;;;;;;;;;;;;;::::2;;31747:17;::::0;;;:10:::2;:17;::::0;;;;;::::2;;31746:18;31738:46;;;::::0;;-1:-1:-1;;;31738:46:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;31738:46:0;;;;;;;;;;;;;::::2;;31795:17;::::0;;;:10:::2;:17;::::0;;;;;;;;:24;;-1:-1:-1;;31795:24:0::2;31815:4;31795:24;::::0;;31835:27;;;;;;;::::2;::::0;;;31806:5;;31835:27:::2;::::0;31852:9;;;;31835:27;;;;;31852:9;;;;31835:27;::::2;;::::0;;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;-1:-1:-1::0;;31835:27:0::2;::::0;;::::2;::::0;;::::2;::::0;-1:-1:-1;31835:27:0;;-1:-1:-1;;;;31835:27:0::2;31875:37;-1:-1:-1::0;;;;;31875:18:0;::::2;31894:9:::0;31905:6;31875:18:::2;:37::i;:::-;31953:9;-1:-1:-1::0;;;;;31928:43:0::2;31945:5;-1:-1:-1::0;;;;;31928:43:0::2;-1:-1:-1::0;;;;;;;;;;;31964:6:0::2;31928:43;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;25389:1:0;26351:22;;-1:-1:-1;;;;;;;31277:702:0:o;32802:191::-;2325:12;:10;:12::i;:::-;2315:6;;-1:-1:-1;;;;;2315:6:0;;;:22;;;2307:67;;;;;-1:-1:-1;;;2307:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2307:67:0;;;;;;;;;;;;;;;32887:38:::1;-1:-1:-1::0;;;;;32887:18:0;::::1;32906:10;32918:6:::0;32887:18:::1;:38::i;:::-;32941:44;::::0;;;;;;;32966:10:::1;::::0;-1:-1:-1;;;;;32941:44:0;::::1;::::0;-1:-1:-1;;;;;;;;;;;32941:44:0;;;;::::1;::::0;;::::1;32802:191:::0;;:::o;31024:245::-;25433:1;26039:7;;:19;;26031:63;;;;;-1:-1:-1;;;26031:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26031:63:0;;;;;;;;;;;;;;;25433:1;26172:7;:18;22842:7:::1;::::0;-1:-1:-1;;;22842:7:0;::::1;;;22841:8;22833:37;;;::::0;;-1:-1:-1;;;22833:37:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;22833:37:0;;;;;;;;;;;;;::::1;;31137:9:::2;31165:10:::0;31157:51:::2;;;::::0;;-1:-1:-1;;;31157:51:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;31239:1;-1:-1:-1::0;;;;;31226:35:0::2;;31243:9;;31254:6;31226:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;-1:-1:-1::0;;31226:35:0::2;::::0;;::::2;::::0;;::::2;::::0;-1:-1:-1;31226:35:0;;-1:-1:-1;;;;;31226:35:0::2;-1:-1:-1::0;;25389:1:0;26351:22;;-1:-1:-1;31024:245:0:o;33001:160::-;2325:12;:10;:12::i;:::-;2315:6;;-1:-1:-1;;;;;2315:6:0;;;:22;;;2307:67;;;;;-1:-1:-1;;;2307:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2307:67:0;;;;;;;;;;;;;;;33070:27:::1;::::0;:10:::1;::::0;:27;::::1;;;::::0;33090:6;;33070:27:::1;::::0;;;33090:6;33070:10;:27;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;33113:40:0::1;::::0;;;;;;;33134:10:::1;::::0;33130:1:::1;::::0;-1:-1:-1;;;;;;;;;;;33113:40:0;;;;::::1;::::0;;::::1;33001:160:::0;:::o;32727:67::-;2325:12;:10;:12::i;:::-;2315:6;;-1:-1:-1;;;;;2315:6:0;;;:22;;;2307:67;;;;;-1:-1:-1;;;2307:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2307:67:0;;;;;;;;;;;;;;;32776:10:::1;:8;:10::i;:::-;32727:67::o:0;22524:78::-;22563:4;22587:7;-1:-1:-1;;;22587:7:0;;;;;22524:78::o;2745:148::-;2325:12;:10;:12::i;:::-;2315:6;;-1:-1:-1;;;;;2315:6:0;;;:22;;;2307:67;;;;;-1:-1:-1;;;2307:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2307:67:0;;;;;;;;;;;;;;;2852:1:::1;2836:6:::0;;2815:40:::1;::::0;-1:-1:-1;;;;;2836:6:0;;::::1;::::0;2815:40:::1;::::0;2852:1;;2815:40:::1;2883:1;2866:19:::0;;-1:-1:-1;;;;;;2866:19:0::1;::::0;;2745:148::o;31987:661::-;25433:1;26039:7;;:19;;26031:63;;;;;-1:-1:-1;;;26031:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26031:63:0;;;;;;;;;;;;;;;25433:1;26172:7;:18;22842:7:::1;::::0;-1:-1:-1;;;22842:7:0;::::1;;;22841:8;22833:37;;;::::0;;-1:-1:-1;;;22833:37:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;22833:37:0;;;;;;;;;;;;;::::1;;32161:63:::2;::::0;;-1:-1:-1;;;32161:63:0::2;::::0;;::::2;::::0;;;;32193:4:::2;32161:63;::::0;;::::2;::::0;;;;;;;-1:-1:-1;;32161:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32151:74;;;::::2;::::0;-1:-1:-1;32251:37:0::2;32151:74:::0;32251:28:::2;:37::i;:::-;32236:52;;32299:14;32316:30;32330:4;32336:9;;32316:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;32316:13:0::2;::::0;-1:-1:-1;;;32316:30:0:i:2;:::-;32299:47;;32375:4;-1:-1:-1::0;;;;;32375:10:0::2;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;32375:12:0;-1:-1:-1;;;;;32365:22:0;;::::2;::::0;::::2;;32357:52;;;::::0;;-1:-1:-1;;;32357:52:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;32357:52:0;;;;;;;;;;;;;::::2;;32431:17;::::0;;;:10:::2;:17;::::0;;;;;::::2;;32430:18;32422:46;;;::::0;;-1:-1:-1;;;32422:46:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;32422:46:0;;;;;;;;;;;;;::::2;;32479:17;::::0;;;:10:::2;:17;::::0;;;;;;;;:24;;-1:-1:-1;;32479:24:0::2;32499:4;32479:24;::::0;;32519:27;;;;;;;::::2;::::0;;;32490:5;;32519:27:::2;::::0;32536:9;;;;32519:27;;;;;32536:9;;;;32519:27;::::2;;::::0;;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;-1:-1:-1::0;;32519:27:0::2;::::0;;::::2;::::0;;::::2;::::0;-1:-1:-1;32519:27:0;;-1:-1:-1;;;;32519:27:0::2;32559:26;::::0;-1:-1:-1;;;;;32559:18:0;::::2;::::0;:26;::::2;;;::::0;32578:6;;32559:26:::2;::::0;;;32578:6;32559:18;:26;::::2;;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;32601:39:0::2;::::0;;;;;;;-1:-1:-1;;;;;32601:39:0;::::2;::::0;32618:1:::2;::::0;-1:-1:-1;;;;;;;;;;;32601:39:0;;;;::::2;::::0;;::::2;-1:-1:-1::0;;25389:1:0;26351:22;;-1:-1:-1;;;;;;31987:661:0:o;32656:63::-;2325:12;:10;:12::i;:::-;2315:6;;-1:-1:-1;;;;;2315:6:0;;;:22;;;2307:67;;;;;-1:-1:-1;;;2307:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2307:67:0;;;;;;;;;;;;;;;32703:8:::1;:6;:8::i;2103:79::-:0;2141:7;2168:6;-1:-1:-1;;;;;2168:6:0;2103:79;:::o;3048:244::-;2325:12;:10;:12::i;:::-;2315:6;;-1:-1:-1;;;;;2315:6:0;;;:22;;;2307:67;;;;;-1:-1:-1;;;2307:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2307:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3137:22:0;::::1;3129:73;;;;-1:-1:-1::0;;;3129:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3239:6;::::0;;3218:38:::1;::::0;-1:-1:-1;;;;;3218:38:0;;::::1;::::0;3239:6;::::1;::::0;3218:38:::1;::::0;::::1;3267:6;:17:::0;;-1:-1:-1;;;;;;3267:17:0::1;-1:-1:-1::0;;;;;3267:17:0;;;::::1;::::0;;;::::1;::::0;;3048:244::o;30605:411::-;25433:1;26039:7;;:19;;26031:63;;;;;-1:-1:-1;;;26031:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26031:63:0;;;;;;;;;;;;;;;25433:1;26172:7;:18;22842:7:::1;::::0;-1:-1:-1;;;22842:7:0;::::1;;;22841:8;22833:37;;;::::0;;-1:-1:-1;;;22833:37:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;22833:37:0;;;;;;;;;;;;;::::1;;30742:1:::2;30733:6;:10;30725:51;;;::::0;;-1:-1:-1;;;30725:51:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;30795:42;::::0;;-1:-1:-1;;;30795:42:0;;30811:10:::2;30795:42;::::0;::::2;::::0;30831:4:::2;30795:42:::0;;;;;;30841:6;;-1:-1:-1;;;;;30795:15:0;::::2;::::0;::::2;::::0;:42;;;;;::::2;::::0;;;;;;;;;:15;:42;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;30795:42:0;:52:::2;;30787:94;;;::::0;;-1:-1:-1;;;30787:94:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;30894:57;-1:-1:-1::0;;;;;30894:22:0;::::2;30917:10;30937:4;30944:6:::0;30894:22:::2;:57::i;:::-;30982:5;-1:-1:-1::0;;;;;30969:39:0::2;;30990:9;;31001:6;30969:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;-1:-1:-1::0;;30969:39:0::2;::::0;;::::2;::::0;;::::2;::::0;-1:-1:-1;30969:39:0;;-1:-1:-1;;;;;30969:39:0::2;-1:-1:-1::0;;25389:1:0;26351:22;;-1:-1:-1;;30605:411:0:o;29887:269::-;30089:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30079:69;;;;;;29887:269::o;27503:2110::-;27581:7;27644:9;:16;27664:2;27644:22;27640:96;;27683:41;;;-1:-1:-1;;;27683:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;27640:96;28097:4;28082:20;;28076:27;28143:4;28128:20;;28122:27;28197:4;28182:20;;28176:27;27805:9;28168:36;29127:66;29114:79;;29110:156;;;29210:44;;-1:-1:-1;;;29210:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29110:156;29282:1;:7;;29287:2;29282:7;;:18;;;;;29293:1;:7;;29298:2;29293:7;;29282:18;29278:95;;;29317:44;;-1:-1:-1;;;29317:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29278:95;29470:14;29487:24;29497:4;29503:1;29506;29509;29487:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29487:24:0;;-1:-1:-1;;29487:24:0;;;-1:-1:-1;;;;;;;29530:20:0;;29522:57;;;;;-1:-1:-1;;;29522:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29599:6;27503:2110;-1:-1:-1;;;;;;27503:2110:0:o;18381:177::-;18491:58;;;-1:-1:-1;;;;;18491:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18491:58:0;-1:-1:-1;;;18491:58:0;;;18464:86;;18484:5;;18464:19;:86::i;:::-;18381:177;;;:::o;657:106::-;745:10;657:106;:::o;23573:120::-;23118:7;;-1:-1:-1;;;23118:7:0;;;;23110:40;;;;;-1:-1:-1;;;23110:40:0;;;;;;;;;;;;-1:-1:-1;;;23110:40:0;;;;;;;;;;;;;;;23642:5:::1;23632:15:::0;;-1:-1:-1;;;;23632:15:0::1;::::0;;23663:22:::1;23672:12;:10;:12::i;:::-;23663:22;::::0;;-1:-1:-1;;;;;23663:22:0;;::::1;::::0;;;;;;;::::1;::::0;;::::1;23573:120::o:0;23314:118::-;22842:7;;-1:-1:-1;;;22842:7:0;;;;22841:8;22833:37;;;;;-1:-1:-1;;;22833:37:0;;;;;;;;;;;;-1:-1:-1;;;22833:37:0;;;;;;;;;;;;;;;23374:7:::1;:14:::0;;-1:-1:-1;;;;23374:14:0::1;-1:-1:-1::0;;;23374:14:0::1;::::0;;23404:20:::1;23411:12;:10;:12::i;18566:205::-:0;18694:68;;;-1:-1:-1;;;;;18694:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18694:68:0;-1:-1:-1;;;18694:68:0;;;18667:96;;18687:5;;18667:19;:96::i;:::-;18566:205;;;;:::o;20686:761::-;21110:23;21136:69;21164:4;21136:69;;;;;;;;;;;;;;;;;21144:5;-1:-1:-1;;;;;21136:27:0;;;:69;;;;;:::i;:::-;21220:17;;21110:95;;-1:-1:-1;21220:21:0;21216:224;;21362:10;21351:30;;;;;;;;;;;;;;;-1:-1:-1;21351:30:0;21343:85;;;;-1:-1:-1;;;21343:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15362:196;15465:12;15497:53;15520:6;15528:4;15534:1;15537:12;15497:22;:53::i;:::-;15490:60;15362:196;-1:-1:-1;;;;15362:196:0:o;16739:979::-;16869:12;16902:18;16913:6;16902:10;:18::i;:::-;16894:60;;;;;-1:-1:-1;;;16894:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17028:12;17042:23;17069:6;-1:-1:-1;;;;;17069:11:0;17089:8;17100:4;17069:36;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17069:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17027:78;;;;17120:7;17116:595;;;17151:10;-1:-1:-1;17144:17:0;;-1:-1:-1;17144:17:0;17116:595;17265:17;;:21;17261:439;;17528:10;17522:17;17589:15;17576:10;17572:2;17568:19;17561:44;17476:148;17671:12;17664:20;;-1:-1:-1;;;17664:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12247:619;12307:4;12775:20;;12618:66;12815:23;;;;;;:42;;-1:-1:-1;;12842:15:0;;;12807:51;-1:-1:-1;;12247:619:0:o
Swarm Source
ipfs://8d2d9c74d84a4bc2fd6058196bced084de250f4aa2e58621e88d02a64c519bab
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 99.85% | $17.66 | 522,450.5627 | $9,226,476.94 | |
ETH | Ether (ETH) | <0.01% | $3,057.97 | 0.0228 | $69.82 |
ETH | <0.01% | $0.006476 | 3,156 | $20.44 | |
ETH | <0.01% | $0.394786 | 20 | $7.9 | |
ETH | <0.01% | $0.075461 | 92.5793 | $6.99 | |
ETH | <0.01% | $22.54 | 0.3095 | $6.98 | |
ETH | <0.01% | $0.68537 | 10 | $6.85 | |
ETH | <0.01% | $0.00008 | 80,000 | $6.4 | |
ETH | <0.01% | $2.08 | 3.0009 | $6.24 | |
ETH | <0.01% | $11.89 | 0.5 | $5.95 | |
ETH | <0.01% | $0.001585 | 3,000 | $4.75 | |
ETH | <0.01% | $0.358489 | 11 | $3.94 | |
ETH | <0.01% | $0.000249 | 10,000 | $2.49 | |
ETH | <0.01% | $0.014389 | 152 | $2.19 | |
ETH | <0.01% | $6,992.34 | 0.0003 | $2.1 | |
ETH | <0.01% | $0.000067 | 30,644 | $2.07 | |
ETH | <0.01% | $1.02 | 2.0011 | $2.04 | |
ETH | <0.01% | $0.999989 | 1.5569 | $1.56 | |
ETH | <0.01% | $0.000003 | 500,000 | $1.44 | |
ETH | <0.01% | $10.56 | 0.1056 | $1.12 | |
ETH | <0.01% | $0.106458 | 10 | $1.06 | |
ETH | <0.01% | $1.97 | 0.4272 | $0.8415 | |
ETH | <0.01% | $0.03863 | 10.01 | $0.3866 | |
ETH | <0.01% | $1.13 | 0.3245 | $0.3667 | |
ETH | <0.01% | $0.000001 | 439,141 | $0.3291 | |
ETH | <0.01% | $0.000007 | 50,600 | $0.3289 | |
ETH | <0.01% | $0.336905 | 0.8148 | $0.2745 | |
ETH | <0.01% | $0.043813 | 6 | $0.2628 | |
ETH | <0.01% | $0.002792 | 75 | $0.2093 | |
ETH | <0.01% | $0.273481 | 0.7291 | $0.1993 | |
ARB | 0.09% | $3,057.98 | 2.78 | $8,501.19 | |
BSC | 0.05% | $644.45 | 7.0056 | $4,514.79 | |
BSC | <0.01% | $3,040.5 | 0.1108 | $336.97 | |
BSC | <0.01% | $0.99956 | 1.044 | $1.04 | |
BSC | <0.01% | $2.31 | 0.111 | $0.2564 | |
POL | <0.01% | $0.999989 | 225.5285 | $225.53 | |
POL | <0.01% | $0.99956 | 89.955 | $89.92 | |
POL | <0.01% | $3,040.5 | 0.015 | $45.61 | |
POL | <0.01% | $0.396758 | 19.7516 | $7.84 | |
AVAX | <0.01% | $33.4 | 1.58 | $52.77 | |
OP | <0.01% | $3,057.96 | 0.0161 | $49.23 | |
BASE | <0.01% | $0.002599 | 4,324.6182 | $11.24 | |
BASE | <0.01% | <$0.000001 | 295,774,647 | $8.55 | |
BASE | <0.01% | <$0.000001 | 17,761,776 | $0.1065 | |
MOVR | <0.01% | $8.78 | 0.1 | $0.878401 | |
GNO | <0.01% | $0.999959 | 0.101 | $0.100996 | |
FTM | <0.01% | $0.470506 | 0.1 | $0.047051 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.