Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 19865276 | 75 days ago | IN | 0 ETH | 0.00710383 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
KYT
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import {BasicMetaTransaction} from "./utility/BasicMetaTransaction.sol"; import {TransferHelper} from "./libraries/TransferHelper.sol"; import {IERC20} from "./interfaces/IERC20.sol"; contract KYT is BasicMetaTransaction, Initializable { address public feeReceiver; uint256 public collectedFeesThreshold; uint256 public feesCollected; uint256 public feesBuffer; event depositedEth(address depositer, address token, uint256 amount); event depositedToken( address depositer, address token, uint256 amount, string tokenName, string symbol ); event spotted( address depositer, address token, bool check, uint256 amount, address vault, string tokenName, string symbol ); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); mapping(address => bool) public isSpotter; mapping(address => mapping(address => uint)) public multipleToken; struct Transactions { address depositer; address vault; address token; bool check; string tokenName; string symbol; } Transactions[] public transactions; address public generalAddress; address public owner; function initialize() public initializer { owner = payable(_msgSender()); collectedFeesThreshold = 10000000000000000; //0.01 ether feesBuffer = 5000000000; } function deposit(uint256 _amount, address token) external payable { require( multipleToken[_msgSender()][token] == 0, "Wait till deposit complete" ); if (token != address(1)) { string memory tokensName = IERC20(token).name(); string memory tokensSymbol = IERC20(token).symbol(); require(msg.value > feesBuffer, "value should be zero"); TransferHelper.safeTransferFrom( token, _msgSender(), address(this), _amount ); multipleToken[_msgSender()][token] = _amount; feesCollected += msg.value; emit depositedToken( _msgSender(), token, _amount, tokensName, tokensSymbol ); } else { require(_amount < msg.value + feesBuffer, "Amount invalid"); require(msg.value >= feesBuffer, "msg.value is less than buffer"); multipleToken[_msgSender()][address(1)] = msg.value; feesCollected += msg.value; emit depositedEth(_msgSender(), token, msg.value); } if (feesCollected >= collectedFeesThreshold) { if (address(this).balance > 0) { (bool success, ) = owner.call{value: address(this).balance}(""); require(success, "fees transfer failed"); } feesCollected = 0; } } function addSpotter(address _spotter) external { require(_msgSender() == owner); isSpotter[_spotter] = true; } function removeSpotter(address _spotter) external { require(_msgSender() == owner); isSpotter[_spotter] = false; } function spottingInBatch(Transactions[] calldata txArray) external { require(isSpotter[_msgSender()], "Not a valid Spotter"); for (uint256 i = 0; i < txArray.length; i++) { Transactions memory x = txArray[i]; address receiver = x.check == true ? x.vault : generalAddress; if (x.token == address(1)) { (bool success, ) = payable(receiver).call{ value: multipleToken[x.depositer][x.token] }(""); require(success == true, "ETH fail"); } else { TransferHelper.safeTransfer( x.token, receiver, multipleToken[x.depositer][x.token] ); } multipleToken[x.depositer][x.token] = 0; emit spotted( x.depositer, x.token, x.check, multipleToken[x.depositer][x.token], receiver, x.tokenName, x.symbol ); } } function setFees(uint256 _fees) external onlyOwner { collectedFeesThreshold = _fees; } function setFeeReceiver(address _receiver) external onlyOwner { feeReceiver = _receiver; } function setGeneralAddress(address _addr) external onlyOwner { generalAddress = _addr; } modifier onlyOwner() { require(msg.sender == owner, "Ownable: caller is not the owner"); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/Initializable.sol) pragma solidity ^0.8.20; /** * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. * * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be * reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in * case an upgrade adds a module that needs to be initialized. * * For example: * * [.hljs-theme-light.nopadding] * ```solidity * contract MyToken is ERC20Upgradeable { * function initialize() initializer public { * __ERC20_init("MyToken", "MTK"); * } * } * * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable { * function initializeV2() reinitializer(2) public { * __ERC20Permit_init("MyToken"); * } * } * ``` * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. * * [CAUTION] * ==== * Avoid leaving a contract uninitialized. * * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: * * [.hljs-theme-light.nopadding] * ``` * /// @custom:oz-upgrades-unsafe-allow constructor * constructor() { * _disableInitializers(); * } * ``` * ==== */ abstract contract Initializable { /** * @dev Storage of the initializable contract. * * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions * when using with upgradeable contracts. * * @custom:storage-location erc7201:openzeppelin.storage.Initializable */ struct InitializableStorage { /** * @dev Indicates that the contract has been initialized. */ uint64 _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool _initializing; } // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Initializable")) - 1)) & ~bytes32(uint256(0xff)) bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00; /** * @dev The contract is already initialized. */ error InvalidInitialization(); /** * @dev The contract is not initializing. */ error NotInitializing(); /** * @dev Triggered when the contract has been initialized or reinitialized. */ event Initialized(uint64 version); /** * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope, * `onlyInitializing` functions can be used to initialize parent contracts. * * Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in * production. * * Emits an {Initialized} event. */ modifier initializer() { // solhint-disable-next-line var-name-mixedcase InitializableStorage storage $ = _getInitializableStorage(); // Cache values to avoid duplicated sloads bool isTopLevelCall = !$._initializing; uint64 initialized = $._initialized; // Allowed calls: // - initialSetup: the contract is not in the initializing state and no previous version was // initialized // - construction: the contract is initialized at version 1 (no reininitialization) and the // current contract is just being deployed bool initialSetup = initialized == 0 && isTopLevelCall; bool construction = initialized == 1 && address(this).code.length == 0; if (!initialSetup && !construction) { revert InvalidInitialization(); } $._initialized = 1; if (isTopLevelCall) { $._initializing = true; } _; if (isTopLevelCall) { $._initializing = false; emit Initialized(1); } } /** * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be * used to initialize parent contracts. * * A reinitializer may be used after the original initialization step. This is essential to configure modules that * are added through upgrades and that require initialization. * * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer` * cannot be nested. If one is invoked in the context of another, execution will revert. * * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in * a contract, executing them in the right order is up to the developer or operator. * * WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization. * * Emits an {Initialized} event. */ modifier reinitializer(uint64 version) { // solhint-disable-next-line var-name-mixedcase InitializableStorage storage $ = _getInitializableStorage(); if ($._initializing || $._initialized >= version) { revert InvalidInitialization(); } $._initialized = version; $._initializing = true; _; $._initializing = false; emit Initialized(version); } /** * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the * {initializer} and {reinitializer} modifiers, directly or indirectly. */ modifier onlyInitializing() { _checkInitializing(); _; } /** * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}. */ function _checkInitializing() internal view virtual { if (!_isInitializing()) { revert NotInitializing(); } } /** * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call. * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized * to any version. It is recommended to use this to lock implementation contracts that are designed to be called * through proxies. * * Emits an {Initialized} event the first time it is successfully executed. */ function _disableInitializers() internal virtual { // solhint-disable-next-line var-name-mixedcase InitializableStorage storage $ = _getInitializableStorage(); if ($._initializing) { revert InvalidInitialization(); } if ($._initialized != type(uint64).max) { $._initialized = type(uint64).max; emit Initialized(type(uint64).max); } } /** * @dev Returns the highest version that has been initialized. See {reinitializer}. */ function _getInitializedVersion() internal view returns (uint64) { return _getInitializableStorage()._initialized; } /** * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}. */ function _isInitializing() internal view returns (bool) { return _getInitializableStorage()._initializing; } /** * @dev Returns a pointer to the storage namespace. */ // solhint-disable-next-line var-name-mixedcase function _getInitializableStorage() private pure returns (InitializableStorage storage $) { assembly { $.slot := INITIALIZABLE_STORAGE } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; interface IERC20 { function decimals() external returns (uint); function name() external returns (string memory); function symbol() external returns (string memory); function balanceOf(address account) external view returns (uint); function approve(address to, uint _amount) external; function allowances(address from, address to) external view returns (uint); function transfer(address to, uint _amount) external; function transferFrom(address from, address to, uint _amount) external; function increase(address to, uint _amount) external returns (uint); function dencrease(address to, uint _amount) external returns (uint); function mint(address mintTo, uint _amount) external; function burn(uint _amount) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // 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 (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @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) { return a + b; } /** * @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 a - b; } /** * @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) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting 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 a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting 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) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * 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) { unchecked { require(b > 0, errorMessage); return a % b; } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false library TransferHelper { function safeApprove( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call( abi.encodeWithSelector(0x095ea7b3, to, value) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper::safeApprove: approve failed" ); } function safeTransfer( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call( abi.encodeWithSelector(0xa9059cbb, to, value) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper::safeTransfer: transfer failed" ); } function safeTransferFrom( address token, address from, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call( abi.encodeWithSelector(0x23b872dd, from, to, value) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper::transferFrom: transferFrom failed" ); } function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require( success, "TransferHelper::safeTransferETH: ETH transfer failed" ); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import {SafeMath} from "../libraries/SafeMath.sol"; contract BasicMetaTransaction { using SafeMath for uint256; event MetaTransactionExecuted( address userAddress, address payable relayerAddress, bytes functionSignature ); mapping(address => uint256) private nonces; function getChainID() public view returns (uint256) { uint256 id; assembly { id := chainid() } return id; } /** * Main function to be called when user wants to execute meta transaction. * The actual function to be called should be passed as param with name functionSignature * Here the basic signature recovery is being used. Signature is expected to be generated using * personal_sign method. * @param userAddress Address of user trying to do meta transaction * @param functionSignature Signature of the actual function to be called via meta transaction * @param sigR R part of the signature * @param sigS S part of the signature * @param sigV V part of the signature */ function executeMetaTransaction( address userAddress, bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV ) public payable returns (bytes memory) { require( verify( userAddress, nonces[userAddress], getChainID(), functionSignature, sigR, sigS, sigV ), "Signer and signature do not match" ); nonces[userAddress] = nonces[userAddress].add(1); // Append userAddress at the end to extract it from calling context (bool success, bytes memory returnData) = address(this).call( abi.encodePacked(functionSignature, userAddress) ); require(success, "Function call not successful"); emit MetaTransactionExecuted( userAddress, payable(msg.sender), functionSignature ); return returnData; } function getNonce(address user) external view returns (uint256 nonce) { nonce = nonces[user]; } // Builds a prefixed hash to mimic the behavior of eth_sign. function prefixed(bytes32 hash) internal pure returns (bytes32) { return keccak256( abi.encodePacked("\x19Ethereum Signed Message:\n32", hash) ); } function verify( address owner, uint256 nonce, uint256 chainID, bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV ) public view returns (bool) { bytes32 hash = prefixed( keccak256(abi.encodePacked(nonce, this, chainID, functionSignature)) ); address signer = ecrecover(hash, sigV, sigR, sigS); require(signer != address(0), "Invalid signature"); return (owner == signer); } function _msgSender() internal view virtual returns (address sender) { if (msg.sender == address(this)) { bytes memory array = msg.data; uint256 index = msg.data.length; assembly { // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those. sender := and( mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff ) } } else { return msg.sender; } } }
{ "optimizer": { "enabled": true, "runs": 200 }, "evmVersion": "paris", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[],"name":"NotInitializing","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"address payable","name":"relayerAddress","type":"address"},{"indexed":false,"internalType":"bytes","name":"functionSignature","type":"bytes"}],"name":"MetaTransactionExecuted","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":"depositer","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositedEth","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"depositer","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"tokenName","type":"string"},{"indexed":false,"internalType":"string","name":"symbol","type":"string"}],"name":"depositedToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"depositer","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"bool","name":"check","type":"bool"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"vault","type":"address"},{"indexed":false,"internalType":"string","name":"tokenName","type":"string"},{"indexed":false,"internalType":"string","name":"symbol","type":"string"}],"name":"spotted","type":"event"},{"inputs":[{"internalType":"address","name":"_spotter","type":"address"}],"name":"addSpotter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"collectedFeesThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"token","type":"address"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"bytes","name":"functionSignature","type":"bytes"},{"internalType":"bytes32","name":"sigR","type":"bytes32"},{"internalType":"bytes32","name":"sigS","type":"bytes32"},{"internalType":"uint8","name":"sigV","type":"uint8"}],"name":"executeMetaTransaction","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"feeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesBuffer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"generalAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getChainID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getNonce","outputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isSpotter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"multipleToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spotter","type":"address"}],"name":"removeSpotter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"}],"name":"setFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fees","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setGeneralAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"depositer","type":"address"},{"internalType":"address","name":"vault","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bool","name":"check","type":"bool"},{"internalType":"string","name":"tokenName","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"internalType":"struct KYT.Transactions[]","name":"txArray","type":"tuple[]"}],"name":"spottingInBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"transactions","outputs":[{"internalType":"address","name":"depositer","type":"address"},{"internalType":"address","name":"vault","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bool","name":"check","type":"bool"},{"internalType":"string","name":"tokenName","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"chainID","type":"uint256"},{"internalType":"bytes","name":"functionSignature","type":"bytes"},{"internalType":"bytes32","name":"sigR","type":"bytes32"},{"internalType":"bytes32","name":"sigS","type":"bytes32"},{"internalType":"uint8","name":"sigV","type":"uint8"}],"name":"verify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50611db3806100206000396000f3fe6080604052600436106101355760003560e01c80636281133d116100ab5780639bc7ccb41161006f5780639bc7ccb41461037e578063b3f00674146103ae578063efdcd974146103ce578063f071db5a146103ee578063f2c3846214610404578063f2fde38b1461042457600080fd5b80636281133d146102d45780636e553f65146103045780638129fc1c146103175780638da5cb5b1461032c5780639ace38c21461034c57600080fd5b80632d0335ab116100fd5780632d0335ab146101f3578063310d136b1461022957806332e66ba5146102495780633646916d146102815780633d18678e146102a1578063564b81ef146102c157600080fd5b8063059381971461013a5780630c53c51c146101635780630c742db6146101835780630da870c6146101bb5780631db90398146101d1575b600080fd5b34801561014657600080fd5b5061015060025481565b6040519081526020015b60405180910390f35b61017661017136600461170b565b610444565b60405161015a91906117cd565b34801561018f57600080fd5b5061015061019e3660046117e0565b600660209081526000928352604080842090915290825290205481565b3480156101c757600080fd5b5061015060045481565b3480156101dd57600080fd5b506101f16101ec366004611813565b610616565b005b3480156101ff57600080fd5b5061015061020e366004611813565b6001600160a01b031660009081526020819052604090205490565b34801561023557600080fd5b506101f161024436600461182e565b610662565b34801561025557600080fd5b50600854610269906001600160a01b031681565b6040516001600160a01b03909116815260200161015a565b34801561028d57600080fd5b506101f161029c366004611813565b6108ff565b3480156102ad57600080fd5b506101f16102bc3660046118a3565b61094a565b3480156102cd57600080fd5b5046610150565b3480156102e057600080fd5b506102f46102ef3660046118bc565b610979565b604051901515815260200161015a565b6101f1610312366004611941565b610ac1565b34801561032357600080fd5b506101f1610f39565b34801561033857600080fd5b50600954610269906001600160a01b031681565b34801561035857600080fd5b5061036c6103673660046118a3565b61107b565b60405161015a96959493929190611964565b34801561038a57600080fd5b506102f4610399366004611813565b60056020526000908152604090205460ff1681565b3480156103ba57600080fd5b50600154610269906001600160a01b031681565b3480156103da57600080fd5b506101f16103e9366004611813565b6111e8565b3480156103fa57600080fd5b5061015060035481565b34801561041057600080fd5b506101f161041f366004611813565b611234565b34801561043057600080fd5b506101f161043f366004611813565b61127c565b6001600160a01b0385166000908152602081905260409020546060906104709087904688888888610979565b6104cb5760405162461bcd60e51b815260206004820152602160248201527f5369676e657220616e64207369676e617475726520646f206e6f74206d6174636044820152600d60fb1b60648201526084015b60405180910390fd5b6001600160a01b0386166000908152602081905260409020546104ef906001611315565b6001600160a01b038716600090815260208181526040808320939093559151909182913091610522918a918c91016119bf565b60408051601f198184030181529082905261053c916119f6565b6000604051808303816000865af19150503d8060008114610579576040519150601f19603f3d011682016040523d82523d6000602084013e61057e565b606091505b5091509150816105d05760405162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c0000000060448201526064016104c2565b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b88338960405161060393929190611a12565b60405180910390a1979650505050505050565b6009546001600160a01b031633146106405760405162461bcd60e51b81526004016104c290611a47565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005600061066e61132a565b6001600160a01b0316815260208101919091526040016000205460ff166106cd5760405162461bcd60e51b81526020600482015260136024820152722737ba1030903b30b634b21029b837ba3a32b960691b60448201526064016104c2565b60005b818110156108fa5760008383838181106106ec576106ec611a7c565b90506020028101906106fe9190611a92565b61070790611ac4565b9050600081606001511515600115151461072c576008546001600160a01b0316610732565b81602001515b905060016001600160a01b031682604001516001600160a01b03160361080b5781516001600160a01b039081166000908152600660209081526040808320818701518516845290915280822054905191928416918381818185875af1925050503d80600081146107be576040519150601f19603f3d011682016040523d82523d6000602084013e6107c3565b606091505b50909150506001811515146108055760405162461bcd60e51b81526020600482015260086024820152671155120819985a5b60c21b60448201526064016104c2565b50610848565b6040808301805184516001600160a01b03908116600090815260066020908152858220945190921681529290529190205461084891908390611388565b81516001600160a01b0390811660009081526006602081815260408084208188018051871686529083528185208590558751815160608a015182891688529585528387209251909716865292529283902054608087015160a088015194517ff11edd3ba68fe2052347c1d933f89a8129a750748c30f8536fae37cd4ad6c790966108dd96949590949093928992909190611b75565b60405180910390a1505080806108f290611bee565b9150506106d0565b505050565b6009546001600160a01b031661091361132a565b6001600160a01b03161461092657600080fd5b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6009546001600160a01b031633146109745760405162461bcd60e51b81526004016104c290611a47565b600255565b6000806109f6883089896040516020016109969493929190611c07565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b6040805160008082526020820180845284905260ff87169282019290925260608101889052608081018790529192509060019060a0016020604051602081039080840390855afa158015610a4e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610aa55760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b60448201526064016104c2565b6001600160a01b038a8116911614915050979650505050505050565b60066000610acd61132a565b6001600160a01b039081168252602080830193909352604091820160009081209185168152925290205415610b445760405162461bcd60e51b815260206004820152601a60248201527f576169742074696c6c206465706f73697420636f6d706c65746500000000000060448201526064016104c2565b6001600160a01b038116600114610d41576000816001600160a01b03166306fdde036040518163ffffffff1660e01b81526004016000604051808303816000875af1158015610b97573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610bbf9190810190611c4d565b90506000826001600160a01b03166395d89b416040518163ffffffff1660e01b81526004016000604051808303816000875af1158015610c03573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c2b9190810190611c4d565b90506004543411610c755760405162461bcd60e51b815260206004820152601460248201527376616c75652073686f756c64206265207a65726f60601b60448201526064016104c2565b610c8883610c8161132a565b30876114b2565b8360066000610c9561132a565b6001600160a01b03166001600160a01b031681526020019081526020016000206000856001600160a01b03166001600160a01b03168152602001908152602001600020819055503460036000828254610cee9190611cbb565b909155507f9d27d4a8641e2406460a8b0ab9085b029295d27b20e43a72190b66518bdf6f469050610d1d61132a565b84868585604051610d32959493929190611cce565b60405180910390a15050610e82565b600454610d4e9034611cbb565b8210610d8d5760405162461bcd60e51b815260206004820152600e60248201526d105b5bdd5b9d081a5b9d985b1a5960921b60448201526064016104c2565b600454341015610ddf5760405162461bcd60e51b815260206004820152601d60248201527f6d73672e76616c7565206973206c657373207468616e2062756666657200000060448201526064016104c2565b3460066000610dec61132a565b6001600160a01b03168152602080820192909252604090810160009081206001825290925281209190915560038054349290610e29908490611cbb565b909155507fc0479f70e57f54388fa919109733aeadcc0e777c82032b55bdd129a7dc511ffd9050610e5861132a565b604080516001600160a01b0392831681529184166020830152349082015260600160405180910390a15b60025460035410610f35574715610f2f576009546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610ee0576040519150601f19603f3d011682016040523d82523d6000602084013e610ee5565b606091505b5050905080610f2d5760405162461bcd60e51b81526020600482015260146024820152731999595cc81d1c985b9cd9995c8819985a5b195960621b60448201526064016104c2565b505b60006003555b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610f7f5750825b905060008267ffffffffffffffff166001148015610f9c5750303b155b905081158015610faa575080155b15610fc85760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610ff257845460ff60401b1916600160401b1785555b610ffa61132a565b600980546001600160a01b0319166001600160a01b0392909216919091179055662386f26fc1000060025564012a05f200600455831561107457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b6007818154811061108b57600080fd5b600091825260209091206005909102018054600182015460028301546003840180546001600160a01b0394851696509284169493821693600160a01b90920460ff16926110d790611d1f565b80601f016020809104026020016040519081016040528092919081815260200182805461110390611d1f565b80156111505780601f1061112557610100808354040283529160200191611150565b820191906000526020600020905b81548152906001019060200180831161113357829003601f168201915b50505050509080600401805461116590611d1f565b80601f016020809104026020016040519081016040528092919081815260200182805461119190611d1f565b80156111de5780601f106111b3576101008083540402835291602001916111de565b820191906000526020600020905b8154815290600101906020018083116111c157829003601f168201915b5050505050905086565b6009546001600160a01b031633146112125760405162461bcd60e51b81526004016104c290611a47565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b031661124861132a565b6001600160a01b03161461125b57600080fd5b6001600160a01b03166000908152600560205260409020805460ff19169055565b6009546001600160a01b031633146112a65760405162461bcd60e51b81526004016104c290611a47565b6001600160a01b0381166112b957600080fd5b6009546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b60006113218284611cbb565b90505b92915050565b600030330361138057600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b031691506113859050565b503390565b90565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916113e491906119f6565b6000604051808303816000865af19150503d8060008114611421576040519150601f19603f3d011682016040523d82523d6000602084013e611426565b606091505b50915091508180156114505750805115806114505750808060200190518101906114509190611d59565b6110745760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b60648201526084016104c2565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b179052915160009283929088169161151691906119f6565b6000604051808303816000865af19150503d8060008114611553576040519150601f19603f3d011682016040523d82523d6000602084013e611558565b606091505b50915091508180156115825750805115806115825750808060200190518101906115829190611d59565b6115e85760405162461bcd60e51b815260206004820152603160248201527f5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472604482015270185b9cd9995c919c9bdb4819985a5b1959607a1b60648201526084016104c2565b505050505050565b80356001600160a01b038116811461160757600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156116455761164561160c565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156116745761167461160c565b604052919050565b600067ffffffffffffffff8211156116965761169661160c565b50601f01601f191660200190565b600082601f8301126116b557600080fd5b81356116c86116c38261167c565b61164b565b8181528460208386010111156116dd57600080fd5b816020850160208301376000918101602001919091529392505050565b803560ff8116811461160757600080fd5b600080600080600060a0868803121561172357600080fd5b61172c866115f0565b9450602086013567ffffffffffffffff81111561174857600080fd5b611754888289016116a4565b9450506040860135925060608601359150611771608087016116fa565b90509295509295909350565b60005b83811015611798578181015183820152602001611780565b50506000910152565b600081518084526117b981602086016020860161177d565b601f01601f19169290920160200192915050565b60208152600061132160208301846117a1565b600080604083850312156117f357600080fd5b6117fc836115f0565b915061180a602084016115f0565b90509250929050565b60006020828403121561182557600080fd5b611321826115f0565b6000806020838503121561184157600080fd5b823567ffffffffffffffff8082111561185957600080fd5b818501915085601f83011261186d57600080fd5b81358181111561187c57600080fd5b8660208260051b850101111561189157600080fd5b60209290920196919550909350505050565b6000602082840312156118b557600080fd5b5035919050565b600080600080600080600060e0888a0312156118d757600080fd5b6118e0886115f0565b96506020880135955060408801359450606088013567ffffffffffffffff81111561190a57600080fd5b6119168a828b016116a4565b9450506080880135925060a0880135915061193360c089016116fa565b905092959891949750929550565b6000806040838503121561195457600080fd5b8235915061180a602084016115f0565b6001600160a01b038781168252868116602083015285166040820152831515606082015260c0608082018190526000906119a0908301856117a1565b82810360a08401526119b281856117a1565b9998505050505050505050565b600083516119d181846020880161177d565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b60008251611a0881846020870161177d565b9190910192915050565b6001600160a01b03848116825283166020820152606060408201819052600090611a3e908301846117a1565b95945050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000823560be19833603018112611a0857600080fd5b8015158114611ab657600080fd5b50565b803561160781611aa8565b600060c08236031215611ad657600080fd5b611ade611622565b611ae7836115f0565b8152611af5602084016115f0565b6020820152611b06604084016115f0565b6040820152611b1760608401611ab9565b6060820152608083013567ffffffffffffffff80821115611b3757600080fd5b611b43368387016116a4565b608084015260a0850135915080821115611b5c57600080fd5b50611b69368286016116a4565b60a08301525092915050565b6001600160a01b03888116825287811660208301528615156040830152606082018690528416608082015260e060a08201819052600090611bb8908301856117a1565b82810360c0840152611bca81856117a1565b9a9950505050505050505050565b634e487b7160e01b600052601160045260246000fd5b600060018201611c0057611c00611bd8565b5060010190565b8481526bffffffffffffffffffffffff198460601b16602082015282603482015260008251611c3d81605485016020870161177d565b9190910160540195945050505050565b600060208284031215611c5f57600080fd5b815167ffffffffffffffff811115611c7657600080fd5b8201601f81018413611c8757600080fd5b8051611c956116c38261167c565b818152856020838501011115611caa57600080fd5b611a3e82602083016020860161177d565b8082018082111561132457611324611bd8565b6001600160a01b038681168252851660208201526040810184905260a060608201819052600090611d01908301856117a1565b8281036080840152611d1381856117a1565b98975050505050505050565b600181811c90821680611d3357607f821691505b602082108103611d5357634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215611d6b57600080fd5b8151611d7681611aa8565b939250505056fea26469706673582212207199a5a726d4a122ca3968dccd135e5efcd6dc1723f6b57d70b93b0e4ce139ee64736f6c63430008140033
Deployed Bytecode
0x6080604052600436106101355760003560e01c80636281133d116100ab5780639bc7ccb41161006f5780639bc7ccb41461037e578063b3f00674146103ae578063efdcd974146103ce578063f071db5a146103ee578063f2c3846214610404578063f2fde38b1461042457600080fd5b80636281133d146102d45780636e553f65146103045780638129fc1c146103175780638da5cb5b1461032c5780639ace38c21461034c57600080fd5b80632d0335ab116100fd5780632d0335ab146101f3578063310d136b1461022957806332e66ba5146102495780633646916d146102815780633d18678e146102a1578063564b81ef146102c157600080fd5b8063059381971461013a5780630c53c51c146101635780630c742db6146101835780630da870c6146101bb5780631db90398146101d1575b600080fd5b34801561014657600080fd5b5061015060025481565b6040519081526020015b60405180910390f35b61017661017136600461170b565b610444565b60405161015a91906117cd565b34801561018f57600080fd5b5061015061019e3660046117e0565b600660209081526000928352604080842090915290825290205481565b3480156101c757600080fd5b5061015060045481565b3480156101dd57600080fd5b506101f16101ec366004611813565b610616565b005b3480156101ff57600080fd5b5061015061020e366004611813565b6001600160a01b031660009081526020819052604090205490565b34801561023557600080fd5b506101f161024436600461182e565b610662565b34801561025557600080fd5b50600854610269906001600160a01b031681565b6040516001600160a01b03909116815260200161015a565b34801561028d57600080fd5b506101f161029c366004611813565b6108ff565b3480156102ad57600080fd5b506101f16102bc3660046118a3565b61094a565b3480156102cd57600080fd5b5046610150565b3480156102e057600080fd5b506102f46102ef3660046118bc565b610979565b604051901515815260200161015a565b6101f1610312366004611941565b610ac1565b34801561032357600080fd5b506101f1610f39565b34801561033857600080fd5b50600954610269906001600160a01b031681565b34801561035857600080fd5b5061036c6103673660046118a3565b61107b565b60405161015a96959493929190611964565b34801561038a57600080fd5b506102f4610399366004611813565b60056020526000908152604090205460ff1681565b3480156103ba57600080fd5b50600154610269906001600160a01b031681565b3480156103da57600080fd5b506101f16103e9366004611813565b6111e8565b3480156103fa57600080fd5b5061015060035481565b34801561041057600080fd5b506101f161041f366004611813565b611234565b34801561043057600080fd5b506101f161043f366004611813565b61127c565b6001600160a01b0385166000908152602081905260409020546060906104709087904688888888610979565b6104cb5760405162461bcd60e51b815260206004820152602160248201527f5369676e657220616e64207369676e617475726520646f206e6f74206d6174636044820152600d60fb1b60648201526084015b60405180910390fd5b6001600160a01b0386166000908152602081905260409020546104ef906001611315565b6001600160a01b038716600090815260208181526040808320939093559151909182913091610522918a918c91016119bf565b60408051601f198184030181529082905261053c916119f6565b6000604051808303816000865af19150503d8060008114610579576040519150601f19603f3d011682016040523d82523d6000602084013e61057e565b606091505b5091509150816105d05760405162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c0000000060448201526064016104c2565b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b88338960405161060393929190611a12565b60405180910390a1979650505050505050565b6009546001600160a01b031633146106405760405162461bcd60e51b81526004016104c290611a47565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005600061066e61132a565b6001600160a01b0316815260208101919091526040016000205460ff166106cd5760405162461bcd60e51b81526020600482015260136024820152722737ba1030903b30b634b21029b837ba3a32b960691b60448201526064016104c2565b60005b818110156108fa5760008383838181106106ec576106ec611a7c565b90506020028101906106fe9190611a92565b61070790611ac4565b9050600081606001511515600115151461072c576008546001600160a01b0316610732565b81602001515b905060016001600160a01b031682604001516001600160a01b03160361080b5781516001600160a01b039081166000908152600660209081526040808320818701518516845290915280822054905191928416918381818185875af1925050503d80600081146107be576040519150601f19603f3d011682016040523d82523d6000602084013e6107c3565b606091505b50909150506001811515146108055760405162461bcd60e51b81526020600482015260086024820152671155120819985a5b60c21b60448201526064016104c2565b50610848565b6040808301805184516001600160a01b03908116600090815260066020908152858220945190921681529290529190205461084891908390611388565b81516001600160a01b0390811660009081526006602081815260408084208188018051871686529083528185208590558751815160608a015182891688529585528387209251909716865292529283902054608087015160a088015194517ff11edd3ba68fe2052347c1d933f89a8129a750748c30f8536fae37cd4ad6c790966108dd96949590949093928992909190611b75565b60405180910390a1505080806108f290611bee565b9150506106d0565b505050565b6009546001600160a01b031661091361132a565b6001600160a01b03161461092657600080fd5b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6009546001600160a01b031633146109745760405162461bcd60e51b81526004016104c290611a47565b600255565b6000806109f6883089896040516020016109969493929190611c07565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b6040805160008082526020820180845284905260ff87169282019290925260608101889052608081018790529192509060019060a0016020604051602081039080840390855afa158015610a4e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610aa55760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b60448201526064016104c2565b6001600160a01b038a8116911614915050979650505050505050565b60066000610acd61132a565b6001600160a01b039081168252602080830193909352604091820160009081209185168152925290205415610b445760405162461bcd60e51b815260206004820152601a60248201527f576169742074696c6c206465706f73697420636f6d706c65746500000000000060448201526064016104c2565b6001600160a01b038116600114610d41576000816001600160a01b03166306fdde036040518163ffffffff1660e01b81526004016000604051808303816000875af1158015610b97573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610bbf9190810190611c4d565b90506000826001600160a01b03166395d89b416040518163ffffffff1660e01b81526004016000604051808303816000875af1158015610c03573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c2b9190810190611c4d565b90506004543411610c755760405162461bcd60e51b815260206004820152601460248201527376616c75652073686f756c64206265207a65726f60601b60448201526064016104c2565b610c8883610c8161132a565b30876114b2565b8360066000610c9561132a565b6001600160a01b03166001600160a01b031681526020019081526020016000206000856001600160a01b03166001600160a01b03168152602001908152602001600020819055503460036000828254610cee9190611cbb565b909155507f9d27d4a8641e2406460a8b0ab9085b029295d27b20e43a72190b66518bdf6f469050610d1d61132a565b84868585604051610d32959493929190611cce565b60405180910390a15050610e82565b600454610d4e9034611cbb565b8210610d8d5760405162461bcd60e51b815260206004820152600e60248201526d105b5bdd5b9d081a5b9d985b1a5960921b60448201526064016104c2565b600454341015610ddf5760405162461bcd60e51b815260206004820152601d60248201527f6d73672e76616c7565206973206c657373207468616e2062756666657200000060448201526064016104c2565b3460066000610dec61132a565b6001600160a01b03168152602080820192909252604090810160009081206001825290925281209190915560038054349290610e29908490611cbb565b909155507fc0479f70e57f54388fa919109733aeadcc0e777c82032b55bdd129a7dc511ffd9050610e5861132a565b604080516001600160a01b0392831681529184166020830152349082015260600160405180910390a15b60025460035410610f35574715610f2f576009546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610ee0576040519150601f19603f3d011682016040523d82523d6000602084013e610ee5565b606091505b5050905080610f2d5760405162461bcd60e51b81526020600482015260146024820152731999595cc81d1c985b9cd9995c8819985a5b195960621b60448201526064016104c2565b505b60006003555b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610f7f5750825b905060008267ffffffffffffffff166001148015610f9c5750303b155b905081158015610faa575080155b15610fc85760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610ff257845460ff60401b1916600160401b1785555b610ffa61132a565b600980546001600160a01b0319166001600160a01b0392909216919091179055662386f26fc1000060025564012a05f200600455831561107457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b6007818154811061108b57600080fd5b600091825260209091206005909102018054600182015460028301546003840180546001600160a01b0394851696509284169493821693600160a01b90920460ff16926110d790611d1f565b80601f016020809104026020016040519081016040528092919081815260200182805461110390611d1f565b80156111505780601f1061112557610100808354040283529160200191611150565b820191906000526020600020905b81548152906001019060200180831161113357829003601f168201915b50505050509080600401805461116590611d1f565b80601f016020809104026020016040519081016040528092919081815260200182805461119190611d1f565b80156111de5780601f106111b3576101008083540402835291602001916111de565b820191906000526020600020905b8154815290600101906020018083116111c157829003601f168201915b5050505050905086565b6009546001600160a01b031633146112125760405162461bcd60e51b81526004016104c290611a47565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b031661124861132a565b6001600160a01b03161461125b57600080fd5b6001600160a01b03166000908152600560205260409020805460ff19169055565b6009546001600160a01b031633146112a65760405162461bcd60e51b81526004016104c290611a47565b6001600160a01b0381166112b957600080fd5b6009546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b60006113218284611cbb565b90505b92915050565b600030330361138057600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b031691506113859050565b503390565b90565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916113e491906119f6565b6000604051808303816000865af19150503d8060008114611421576040519150601f19603f3d011682016040523d82523d6000602084013e611426565b606091505b50915091508180156114505750805115806114505750808060200190518101906114509190611d59565b6110745760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b60648201526084016104c2565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b179052915160009283929088169161151691906119f6565b6000604051808303816000865af19150503d8060008114611553576040519150601f19603f3d011682016040523d82523d6000602084013e611558565b606091505b50915091508180156115825750805115806115825750808060200190518101906115829190611d59565b6115e85760405162461bcd60e51b815260206004820152603160248201527f5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472604482015270185b9cd9995c919c9bdb4819985a5b1959607a1b60648201526084016104c2565b505050505050565b80356001600160a01b038116811461160757600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156116455761164561160c565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156116745761167461160c565b604052919050565b600067ffffffffffffffff8211156116965761169661160c565b50601f01601f191660200190565b600082601f8301126116b557600080fd5b81356116c86116c38261167c565b61164b565b8181528460208386010111156116dd57600080fd5b816020850160208301376000918101602001919091529392505050565b803560ff8116811461160757600080fd5b600080600080600060a0868803121561172357600080fd5b61172c866115f0565b9450602086013567ffffffffffffffff81111561174857600080fd5b611754888289016116a4565b9450506040860135925060608601359150611771608087016116fa565b90509295509295909350565b60005b83811015611798578181015183820152602001611780565b50506000910152565b600081518084526117b981602086016020860161177d565b601f01601f19169290920160200192915050565b60208152600061132160208301846117a1565b600080604083850312156117f357600080fd5b6117fc836115f0565b915061180a602084016115f0565b90509250929050565b60006020828403121561182557600080fd5b611321826115f0565b6000806020838503121561184157600080fd5b823567ffffffffffffffff8082111561185957600080fd5b818501915085601f83011261186d57600080fd5b81358181111561187c57600080fd5b8660208260051b850101111561189157600080fd5b60209290920196919550909350505050565b6000602082840312156118b557600080fd5b5035919050565b600080600080600080600060e0888a0312156118d757600080fd5b6118e0886115f0565b96506020880135955060408801359450606088013567ffffffffffffffff81111561190a57600080fd5b6119168a828b016116a4565b9450506080880135925060a0880135915061193360c089016116fa565b905092959891949750929550565b6000806040838503121561195457600080fd5b8235915061180a602084016115f0565b6001600160a01b038781168252868116602083015285166040820152831515606082015260c0608082018190526000906119a0908301856117a1565b82810360a08401526119b281856117a1565b9998505050505050505050565b600083516119d181846020880161177d565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b60008251611a0881846020870161177d565b9190910192915050565b6001600160a01b03848116825283166020820152606060408201819052600090611a3e908301846117a1565b95945050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000823560be19833603018112611a0857600080fd5b8015158114611ab657600080fd5b50565b803561160781611aa8565b600060c08236031215611ad657600080fd5b611ade611622565b611ae7836115f0565b8152611af5602084016115f0565b6020820152611b06604084016115f0565b6040820152611b1760608401611ab9565b6060820152608083013567ffffffffffffffff80821115611b3757600080fd5b611b43368387016116a4565b608084015260a0850135915080821115611b5c57600080fd5b50611b69368286016116a4565b60a08301525092915050565b6001600160a01b03888116825287811660208301528615156040830152606082018690528416608082015260e060a08201819052600090611bb8908301856117a1565b82810360c0840152611bca81856117a1565b9a9950505050505050505050565b634e487b7160e01b600052601160045260246000fd5b600060018201611c0057611c00611bd8565b5060010190565b8481526bffffffffffffffffffffffff198460601b16602082015282603482015260008251611c3d81605485016020870161177d565b9190910160540195945050505050565b600060208284031215611c5f57600080fd5b815167ffffffffffffffff811115611c7657600080fd5b8201601f81018413611c8757600080fd5b8051611c956116c38261167c565b818152856020838501011115611caa57600080fd5b611a3e82602083016020860161177d565b8082018082111561132457611324611bd8565b6001600160a01b038681168252851660208201526040810184905260a060608201819052600090611d01908301856117a1565b8281036080840152611d1381856117a1565b98975050505050505050565b600181811c90821680611d3357607f821691505b602082108103611d5357634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215611d6b57600080fd5b8151611d7681611aa8565b939250505056fea26469706673582212207199a5a726d4a122ca3968dccd135e5efcd6dc1723f6b57d70b93b0e4ce139ee64736f6c63430008140033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.