Overview
ETH Balance
0 ETH
ETH Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 312,983 transactions
(More than 25 Pending Txns)
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
9024542 | 135 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
SPumpAirdrop
Compiler Version
v0.8.25+commit.b61c2a91
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.25; import {SPumpMainToken} from "./SPumpMainToken.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract SPumpAirdrop is Ownable(msg.sender) { mapping(address => bool) public claimed; mapping(address => uint256) public referralAmount; mapping(address => uint256) public referralBalance; uint256 public BONUS_AMOUNT = 500000000000000000000; uint256 public BONUS_AMOUNT_REFERRER = 500000000000000000000; SPumpMainToken public token; address public signerAddress; constructor(address _signer) { token = new SPumpMainToken("Scroll Pump Token", "PUMP", 18, msg.sender); signerAddress = _signer; } // OnlyOwner functions to update the BONUS_AMOUNT function setBonusAmount(uint256 newBonusAmount) external onlyOwner { BONUS_AMOUNT = newBonusAmount; } // OnlyOwner functions to update the BONUS_AMOUNT_REFERRER function setBonusAmountReferrer( uint256 newBonusAmountReferrer ) external onlyOwner { BONUS_AMOUNT_REFERRER = newBonusAmountReferrer; } // OnlyOwner function to update the signerAddress function setSignerAddress(address newSignerAddress) external onlyOwner { signerAddress = newSignerAddress; } function claim( uint256 amount, bytes calldata signature, address refUser ) public { require( !claimed[msg.sender], "Tokens have already been claimed by this address." ); claimed[msg.sender] = true; bool verifyResult = verify(msg.sender, amount, signature); require(verifyResult, "Sign not valid"); if (refUser != address(0)) { require(msg.sender != refUser, "Self Ref"); amount += BONUS_AMOUNT; referralBalance[refUser] += BONUS_AMOUNT_REFERRER; referralAmount[refUser] += 1; } token.updateLockValue(msg.sender, token.locked(msg.sender) + amount); token.mint(msg.sender, amount); } function claimReferralBonus() public { uint256 bonus = referralBalance[msg.sender]; require(bonus > 0, "No referral bonus available."); referralBalance[msg.sender] = 0; token.updateLockValue(msg.sender, token.locked(msg.sender) + bonus); token.mint(msg.sender, bonus); } function verify( address _address, uint256 amount, bytes memory signature ) private view returns (bool) { bytes32 messageHash = getMessageHash(_address, amount); bytes32 ethSignedMessageHash = getEthSignedMessageHash(messageHash); return recoverSigner(ethSignedMessageHash, signature) == signerAddress; } function getMessageHash( address _address, uint256 _amount ) private pure returns (bytes32) { return keccak256(abi.encodePacked(_address, _amount)); } function getEthSignedMessageHash( bytes32 _messageHash ) private pure returns (bytes32) { return keccak256( abi.encodePacked( "\x19Ethereum Signed Message:\n32", _messageHash ) ); } function recoverSigner( bytes32 _ethSignedMessageHash, bytes memory _signature ) private pure returns (address) { (bytes32 r, bytes32 s, uint8 v) = splitSignature(_signature); return ecrecover(_ethSignedMessageHash, v, r, s); } function splitSignature( bytes memory sig ) private pure returns (bytes32 r, bytes32 s, uint8 v) { require(sig.length == 65, "invalid signature length"); assembly { // first 32 bytes, after the length prefix r := mload(add(sig, 32)) // second 32 bytes s := mload(add(sig, 64)) // final byte (first byte of the next 32 bytes) v := byte(0, mload(add(sig, 96))) } // implicitly return (r, s, v) } function verify_split( string memory _message, uint8 _v, bytes32 _r, bytes32 _s ) private pure returns (address) { bytes memory prefix = "\x19Ethereum Signed Message:\n32"; bytes32 _data = keccak256(abi.encodePacked(_message)); bytes32 hash = keccak256(abi.encodePacked(prefix, _data)); address signer = ecrecover(hash, _v, _r, _s); return signer; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; import {Context} from "../utils/Context.sol"; /** * @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. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(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 { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @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 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) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.25; import {ERC20} from "solmate/src/tokens/ERC20.sol"; error Forbidden(); error NotOwner(); error Unauthorized(); contract SPumpMainToken is ERC20 { address[] public holders; mapping(address => bool) public isHolder; address public owner; mapping(address => bool) public isMinter; mapping(address => uint256) public locked; bool public isRestricted = true; constructor( string memory _name, string memory _symbol, uint8 _decimals, address _owner ) ERC20(_name, _symbol, _decimals) { owner = _owner; } modifier onlyOwner() { if (msg.sender != owner) revert NotOwner(); _; } modifier onlyAuthorized() { if (msg.sender != owner && !isMinter[msg.sender]) revert Unauthorized(); _; } function updateRestricted(bool value) public onlyAuthorized { isRestricted = value; } function updateLockValue( address _address, uint256 amount ) public onlyAuthorized { locked[_address] = amount; } function _addHolder(address holder) private { if (!isHolder[holder]) { holders.push(holder); isHolder[holder] = true; } } function transfer( address to, uint256 amount ) public override returns (bool) { if ( isRestricted && (balanceOf[msg.sender] - amount < locked[msg.sender]) ) revert Forbidden(); _addHolder(to); return super.transfer(to, amount); } function transferFrom( address from, address to, uint256 amount ) public override returns (bool) { if (isRestricted && balanceOf[from] - amount < locked[from]) revert Forbidden(); _addHolder(to); return super.transferFrom(from, to, amount); } function approve( address spender, uint256 amount ) public override returns (bool) { return super.approve(spender, amount); } /// @notice Mint new tokens. /// @param to Address to which tokens will be minted /// @param amount Amount of tokens to mint function mint(address to, uint256 amount) public onlyAuthorized { _mint(to, amount); _addHolder(to); } /// @notice Authorizes an address to mint new tokens. /// @param minter Address to authorize function addMinter(address minter) public onlyOwner { isMinter[minter] = true; } /// @notice Revokes minting authorization from an address. /// @param minter Address to revoke authorization from function removeMinter(address minter) public onlyOwner { isMinter[minter] = false; } /// @notice Transfers ownership of the contract to a new address. /// @param newOwner Address of the new owner function transferOwnership(address newOwner) public onlyOwner { owner = newOwner; } /// Get all addresses who have ever held the token with their balances /// @return The holders and their balances /// @notice Some holders may have a zero balance function getHoldersWithBalance( uint256 offset, uint256 limit ) public view returns (address[] memory, uint256[] memory) { uint256 length = holders.length; if (offset >= length) { return (new address[](0), new uint256[](0)); } uint256 end = offset + limit; if (end > length) { end = length; } address[] memory resultAddresses = new address[](end - offset); uint256[] memory resultBalances = new uint256[](end - offset); for (uint256 i = offset; i < end; i++) { address holder = holders[i]; resultAddresses[i - offset] = holder; resultBalances[i - offset] = balanceOf[holder]; } return (resultAddresses, resultBalances); } /// Get all addresses who have ever held the token /// @return The holders /// @notice Some holders may have a zero balance function getHolders( uint256 offset, uint256 limit ) public view returns (address[] memory) { uint256 length = holders.length; if (offset >= length) { return new address[](0); } uint256 end = offset + limit; if (end > length) { end = length; } address[] memory result = new address[](end - offset); for (uint256 i = offset; i < end; i++) { result[i - offset] = holders[i]; } return result; } /// Get the number of all addresses who have ever held the token /// @return The number of holders /// @notice Some holders may have a zero balance function getHoldersLength() public view returns (uint256) { return holders.length; } }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.8.0; /// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol) /// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) /// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. abstract contract ERC20 { /*////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Transfer(address indexed from, address indexed to, uint256 amount); event Approval(address indexed owner, address indexed spender, uint256 amount); /*////////////////////////////////////////////////////////////// METADATA STORAGE //////////////////////////////////////////////////////////////*/ string public name; string public symbol; uint8 public immutable decimals; /*////////////////////////////////////////////////////////////// ERC20 STORAGE //////////////////////////////////////////////////////////////*/ uint256 public totalSupply; mapping(address => uint256) public balanceOf; mapping(address => mapping(address => uint256)) public allowance; /*////////////////////////////////////////////////////////////// EIP-2612 STORAGE //////////////////////////////////////////////////////////////*/ uint256 internal immutable INITIAL_CHAIN_ID; bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; mapping(address => uint256) public nonces; /*////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor( string memory _name, string memory _symbol, uint8 _decimals ) { name = _name; symbol = _symbol; decimals = _decimals; INITIAL_CHAIN_ID = block.chainid; INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); } /*////////////////////////////////////////////////////////////// ERC20 LOGIC //////////////////////////////////////////////////////////////*/ function approve(address spender, uint256 amount) public virtual returns (bool) { allowance[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function transfer(address to, uint256 amount) public virtual returns (bool) { balanceOf[msg.sender] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(msg.sender, to, amount); return true; } function transferFrom( address from, address to, uint256 amount ) public virtual returns (bool) { uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; balanceOf[from] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(from, to, amount); return true; } /*////////////////////////////////////////////////////////////// EIP-2612 LOGIC //////////////////////////////////////////////////////////////*/ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public virtual { require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); // Unchecked because the only math done is incrementing // the owner's nonce which cannot realistically overflow. unchecked { address recoveredAddress = ecrecover( keccak256( abi.encodePacked( "\x19\x01", DOMAIN_SEPARATOR(), keccak256( abi.encode( keccak256( "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" ), owner, spender, value, nonces[owner]++, deadline ) ) ) ), v, r, s ); require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); allowance[recoveredAddress][spender] = value; } emit Approval(owner, spender, value); } function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); } function computeDomainSeparator() internal view virtual returns (bytes32) { return keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(bytes(name)), keccak256("1"), block.chainid, address(this) ) ); } /*////////////////////////////////////////////////////////////// INTERNAL MINT/BURN LOGIC //////////////////////////////////////////////////////////////*/ function _mint(address to, uint256 amount) internal virtual { totalSupply += amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(address(0), to, amount); } function _burn(address from, uint256 amount) internal virtual { balanceOf[from] -= amount; // Cannot underflow because a user's balance // will never be larger than the total supply. unchecked { totalSupply -= amount; } emit Transfer(from, address(0), amount); } }
{ "optimizer": { "enabled": true, "runs": 200 }, "viaIR": true, "evmVersion": "paris", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_signer","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"BONUS_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BONUS_AMOUNT_REFERRER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"address","name":"refUser","type":"address"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimReferralBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referralAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referralBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBonusAmount","type":"uint256"}],"name":"setBonusAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBonusAmountReferrer","type":"uint256"}],"name":"setBonusAmountReferrer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newSignerAddress","type":"address"}],"name":"setSignerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract SPumpMainToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60803461017e57601f6125af38819003918201601f19168301926001600160401b039290918385118386101761018357816020928492604097885283398101031261017e57516001600160a01b03808216929183900361017e57331561016657600080546001600160a01b031980821633908117845587519195919285167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a3681b1ae4d6e2ef50000080600455600555611870808301918383109083111761015257610100918391610d3f833960808152601160808201527029b1b937b63610283ab6b8102a37b5b2b760791b60a082015260c06020820152600460c082015263050554d560e41b60e082015260128982015233606082015203019082f0908115610147575016816006541617600655600754161760075551610ba5908161019a8239f35b8551903d90823e3d90fd5b634e487b7160e01b84526041600452602484fd5b8351631e4fbdf760e01b815260006004820152602490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001257600080fd5b60003560e01c8063046dc166146101075780631e375ab914610102578063563bfecc146100fd5780635b7633d0146100f857806368fc9323146100f3578063715018a6146100ee57806374863d90146100e95780638da5cb5b146100e457806395d4c7bb146100df5780639c6b9f8a146100da5780639e585512146100d5578063c884ef83146100d0578063d1c6b0ca146100cb578063f2fde38b146100c65763fc0c546a146100c157600080fd5b6105d5565b61054d565b61052c565b6104ed565b6104cf565b610463565b610429565b610400565b6103e2565b610387565b610366565b61033d565b610303565b610175565b610127565b600435906001600160a01b038216820361012257565b600080fd5b346101225760203660031901126101225761014061010c565b610148610a1e565b600780546001600160a01b0319166001600160a01b0392909216919091179055005b600091031261012257565b346101225760008060031936011261030057336000908152600360205260409020546101a28115156105fe565b3360009081526003602052604090208290556006546101d1906001600160a01b03165b6001600160a01b031690565b60405163cbf9fe5f60e01b81523360048201529190602083602481845afa80156102b0578261020991869586916102d1575b506106f6565b813b156102cc57604051637be77c7b60e11b8152336004820152602481019190915292908390604490829084905af19182156102b05783926102b9575b5060065461025c906001600160a01b03166101c5565b90813b156102b5576040516340c10f1960e01b8152336004820152602481019190915291908290604490829084905af180156102b05761029a575080f35b806102a76102ad92610660565b8061016a565b80f35b6106c6565b5050fd5b806102a76102c692610660565b38610246565b505050fd5b6102f3915060203d6020116102f9575b6102eb8183610695565b8101906106b7565b38610203565b503d6102e1565b80fd5b34610122576020366003190112610122576001600160a01b0361032461010c565b1660005260036020526020604060002054604051908152f35b34610122576000366003190112610122576007546040516001600160a01b039091168152602090f35b346101225760203660031901126101225761037f610a1e565b600435600555005b3461012257600080600319360112610300576103a1610a1e565b80546001600160a01b03198116825581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b34610122576000366003190112610122576020600454604051908152f35b34610122576000366003190112610122576000546040516001600160a01b039091168152602090f35b34610122576020366003190112610122576001600160a01b0361044a61010c565b1660005260026020526020604060002054604051908152f35b346101225760603660031901126101225760243567ffffffffffffffff808211610122573660238301121561012257816004013590811161012257366024828401011161012257604435906001600160a01b03821682036101225760246104cd9301600435610824565b005b34610122576000366003190112610122576020600554604051908152f35b34610122576020366003190112610122576001600160a01b0361050e61010c565b166000526001602052602060ff604060002054166040519015158152f35b3461012257602036600319011261012257610545610a1e565b600480359055005b346101225760203660031901126101225761056661010c565b61056e610a1e565b6001600160a01b0390811680156105bc57600080546001600160a01b03198116831782559092167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b604051631e4fbdf760e01b815260006004820152602490fd5b34610122576000366003190112610122576006546040516001600160a01b039091168152602090f35b1561060557565b60405162461bcd60e51b815260206004820152601c60248201527f4e6f20726566657272616c20626f6e757320617661696c61626c652e000000006044820152606490fd5b634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff811161067457604052565b61064a565b6060810190811067ffffffffffffffff82111761067457604052565b90601f8019910116810190811067ffffffffffffffff82111761067457604052565b90816020910312610122575190565b6040513d6000823e3d90fd5b90600182018092116106e057565b634e487b7160e01b600052601160045260246000fd5b919082018092116106e057565b1561070a57565b60405162461bcd60e51b815260206004820152603160248201527f546f6b656e73206861766520616c7265616479206265656e20636c61696d656460448201527010313c903a3434b99030b2323932b9b99760791b6064820152608490fd5b92919267ffffffffffffffff82116106745760405191610793601f8201601f191660200184610695565b829481845281830111610122578281602093846000960137010152565b156107b757565b60405162461bcd60e51b815260206004820152600e60248201526d14da59db881b9bdd081d985b1a5960921b6044820152606490fd5b156107f457565b60405162461bcd60e51b815260206004820152600860248201526729b2b633102932b360c11b6044820152606490fd5b929161088d610899926108949261086661086161085d6108563360018060a01b03166000526001602052604060002090565b5460ff1690565b1590565b610703565b33600090815260016020526040902061088690805460ff19166001179055565b3691610769565b8433610a4a565b6107b0565b6001600160a01b038116806109a7575b50506006546108c0906001600160a01b03166101c5565b60405163cbf9fe5f60e01b8152336004820152602081602481855afa9081156102b0576108f69184916000916102d157506106f6565b90803b1561012257604051637be77c7b60e11b815233600482015260248101929092526000908290604490829084905af180156102b057610994575b50600654610948906001600160a01b03166101c5565b803b15610122576040516340c10f1960e01b815233600482015260248101929092526000908290604490829084905af180156102b0576109855750565b806102a761099292610660565b565b806102a76109a192610660565b38610932565b610a0b91926109bb6109c4923314156107ed565b600454906106f6565b916005546109ef6109e78360018060a01b03166000526003602052604060002090565b9182546106f6565b90556001600160a01b0316600090815260026020526040902090565b610a1581546106d2565b905538806108a9565b6000546001600160a01b03163303610a3257565b60405163118cdaa760e01b8152336004820152602490fd5b906040519060208201926bffffffffffffffffffffffff199060601b168352603482015260348152610a7b81610679565b51902060405160208101917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008352603c820152603c8152610abb81610679565b519020906041815103610b2a576020818101516040808401516060948501518251968752600090811a8786015291860192909252928401528180529160809060015afa156102b057600051600754610b1b906001600160a01b03166101c5565b6001600160a01b039091161490565b60405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e67746800000000000000006044820152606490fdfea26469706673582212207f789f093d9dfddb9b556c9bbc1fb95ef754169841dfe7b0c7ee3255a19e12a064736f6c6343000819003360e06040908082523461043257611870803803809161001e8285610437565b83398101916080828403126104325781516001600160401b039390848111610432578161004c91850161045a565b9060209081850151908682116104325761006791860161045a565b92808501519460ff8616860361043257606001516001600160a01b03811695908690036104325783519387851161041c57600094806100a687546104c9565b92601f938481116103d0575b50869084831160011461036d578892610362575b50508160011b916000199060031b1c19161785555b85519088821161034e5781906001976100f489546104c9565b8281116102fe575b508691831160011461029f578792610294575b5050600019600383901b1c191690861b1785555b6080524660a0528051835490848161013a846104c9565b9182825286820194878a8216918260001461027957505060011461023c575b61016592500382610437565b519020928151928301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8552828401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608401524660808401523060a084015260a0835260c083019683881090881117610228575085905251902060c05260ff19600b541617600b5560018060a01b0319600854161760085561136c90816105048239608051816109b2015260a05181610f1e015260c05181610f450152f35b634e487b7160e01b81526041600452602490fd5b505085805281858088208989915b8583106102605750506101659350820101610159565b809192945054838588010152019101869089859361024a565b60ff1916875261016594151560051b84010191506101599050565b01519050388061010f565b8888528688208994509190601f198416895b898282106102e857505084116102cf575b505050811b018555610123565b015160001960f88460031b161c191690553880806102c2565b8385015186558c979095019493840193016102b1565b909192508888528688208380860160051c820192898710610345575b9186958c929594930160051c01915b8281106103375750506100fc565b8a81558695508b9101610329565b9250819261031a565b634e487b7160e01b86526041600452602486fd5b0151905038806100c6565b8880528789209250601f198416895b898282106103ba5750509084600195949392106103a1575b505050811b0185556100db565b015160001960f88460031b161c19169055388080610394565b600185968293968601518155019501930161037c565b9091508780528688208480850160051c820192898610610413575b9085949392910160051c01905b81811061040557506100b2565b8981558493506001016103f8565b925081926103eb565b634e487b7160e01b600052604160045260246000fd5b600080fd5b601f909101601f19168101906001600160401b0382119082101761041c57604052565b919080601f840112156104325782516001600160401b03811161041c576020906040519261049183601f19601f8501160185610437565b8184528282870101116104325760005b8181106104b657508260009394955001015290565b85810183015184820184015282016104a1565b90600182811c921680156104f9575b60208310146104e357565b634e487b7160e01b600052602260045260246000fd5b91607f16916104d856fe6080604081815260048036101561001557600080fd5b600092833560e01c90816306fdde0314610cab57508063095ea7b314610c3d5780630d5dc63614610bcc57806318160ddd14610bad5780631f5e8f4c14610b8957806323b872dd14610a5b5780632a11ced014610a1b5780633092afd5146109d6578063313ce567146109985780633644e5151461097457806340c10f19146108ba57806370a08231146108825780637ecebe001461084a5780638da5cb5b146108215780638e846972146107b457806395d89b41146106d5578063983b2d561461067f578063a9059cbb146105a7578063aa271e1a14610569578063b569807114610535578063cbf9fe5f146104fd578063d4d7b19a146104bf578063d505accf1461027f578063db04aef41461025c578063dd62ed3e14610214578063f2fde38b146101ba5763f7cef8f61461014c57600080fd5b346101b657816003193601126101b657610164610e25565b6008546001600160a01b0392908316331415806101a0575b6101935750168252600a6020526024359082205580f35b83516282b42960e81b8152fd5b50338552600960205260ff84862054161561017c565b8280fd5b5090346101b65760203660031901126101b6576101d5610e25565b600854926001600160a01b0392838516330361020757505016906bffffffffffffffffffffffff60a01b161760085580f35b516330cd747160e01b8152fd5b50346101b657816003193601126101b6576020928291610232610e25565b61023a610e40565b6001600160a01b03918216845291865283832091168252845220549051908152f35b50503461027b578160031936011261027b576020906006549051908152f35b5080fd5b5091903461027b5760e036600319011261027b5761029b610e25565b906102a4610e40565b91604435606435926084359260ff84168094036104bb57428510610478576102ca610f19565b9560018060a01b038092169586895260209560058752848a209889549960018b01905585519285898501957f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c987528b89870152169a8b606086015288608086015260a085015260c084015260c0835260e0830167ffffffffffffffff9484821086831117610464578188528451902061010085019261190160f01b8452610102860152610122850152604281526101608401948186109086111761045157848752519020835261018082015260a4356101a082015260c4356101c0909101528780528490889060809060015afa1561044757865116968715158061043e575b1561040c5786977f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259596975283528087208688528352818188205551908152a380f35b83606492519162461bcd60e51b8352820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b6044820152fd5b508488146103c9565b81513d88823e3d90fd5b634e487b7160e01b8c5260418d5260248cfd5b50634e487b7160e01b8c5260418d5260248cfd5b815162461bcd60e51b81526020818a0152601760248201527f5045524d49545f444541444c494e455f455850495245440000000000000000006044820152606490fd5b8680fd5b50503461027b57602036600319011261027b5760209160ff9082906001600160a01b036104ea610e25565b1681526007855220541690519015158152f35b50503461027b57602036600319011261027b5760209181906001600160a01b03610525610e25565b168152600a845220549051908152f35b50503461027b576105659061055261054c36610ea3565b9061120d565b9051918291602083526020830190610eb9565b0390f35b50503461027b57602036600319011261027b5760209160ff9082906001600160a01b03610594610e25565b1681526009855220541690519015158152f35b50913461067c578160031936011261067c576105c1610e25565b926024359060ff600b541680610654575b610646575082846105e46020966112a2565b338452600386528184206105f9848254610ef6565b90556001600160a01b0316808452600386529220805482019055825190815233907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908590a35160018152f35b8351631dd2188d60e31b8152fd5b50338352600360205261066a8285852054610ef6565b338452600a60205284842054116105d2565b80fd5b50346101b65760203660031901126101b657610699610e25565b6008546001600160a01b039290831633036106c7575016825260096020528120805460ff1916600117905580f35b83516330cd747160e01b8152fd5b82843461067c578060031936011261067c578151908060018054906106f982610d4e565b8086529260209260018116908115610787575060011461072f575b610565868861072582890383610dba565b5191829182610ddc565b9350600184527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf65b838510610774575050505081016020016107258261056586610714565b8054868601840152938201938101610757565b90506105659795508693506020925061072594915060ff191682840152151560051b820101929486610714565b82843461067c57906107ce6107c836610ea3565b9061112b565b90926107e38351948486958652850190610eb9565b60208482036020860152602080855193848152019401925b82811061080a57505050500390f35b8351855286955093810193928101926001016107fb565b50503461027b578160031936011261027b5760085490516001600160a01b039091168152602090f35b50503461027b57602036600319011261027b5760209181906001600160a01b03610872610e25565b1681526005845220549051908152f35b50503461027b57602036600319011261027b5760209181906001600160a01b036108aa610e25565b1681526003845220549051908152f35b5091903461027b578060031936011261027b576108d5610e25565b600854602435949192916001600160a01b039182163314158061095e575b6109515750927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60208661094e9661092e859960025461110a565b6002558616948585526003835280852082815401905551908152a36112a2565b80f35b82516282b42960e81b8152fd5b50338552600960205260ff8386205416156108f3565b50503461027b578160031936011261027b57602090610991610f19565b9051908152f35b50503461027b578160031936011261027b576020905160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346101b65760203660031901126101b6576109f0610e25565b6008546001600160a01b039290831633036106c7575016825260096020528120805460ff1916905580f35b50346101b65760203660031901126101b657359160065483101561067c5750610a45602092610e56565b905491519160018060a01b039160031b1c168152f35b50913461067c57606036600319011261067c57610a76610e25565b610a7e610e40565b9360443560ff600b541680610b55575b610b4657907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91610abe876112a2565b8560018060a01b0380951694858752602098848a958652838920338a52865283892054856000198203610b23575b50505086885260038552828820610b04858254610ef6565b9055169586815260038452208181540190558551908152a35160018152f35b610b2c91610ef6565b90888a528652838920338a52865283892055388085610aec565b508351631dd2188d60e31b8152fd5b506001600160a01b038316808552600360205285852054610b77908390610ef6565b908552600a6020528585205411610a8e565b50503461027b578160031936011261027b5760209060ff600b541690519015158152f35b50503461027b578160031936011261027b576020906002549051908152f35b50346101b65760203660031901126101b657803591821515809303610c39576008546001600160a01b031633141580610c23575b610c1757505060ff8019600b5416911617600b5580f35b516282b42960e81b8152fd5b50338452600960205260ff818520541615610c00565b8380fd5b50346101b657816003193601126101b657602092610c59610e25565b918360243592839233825287528181209460018060a01b0316948582528752205582519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925843392a35160018152f35b8390853461067c578060031936011261067c57805481610cca82610d4e565b808552916020916001918281169081156107875750600114610cf757610565868861072582890383610dba565b80809550527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b838510610d3b575050505081016020016107258261056586610714565b8054868601840152938201938101610d1e565b90600182811c92168015610d7e575b6020831014610d6857565b634e487b7160e01b600052602260045260246000fd5b91607f1691610d5d565b6020810190811067ffffffffffffffff821117610da457604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610da457604052565b6020808252825181830181905290939260005b828110610e1157505060409293506000838284010152601f8019910116010190565b818101860151848201604001528501610def565b600435906001600160a01b0382168203610e3b57565b600080fd5b602435906001600160a01b0382168203610e3b57565b600654811015610e8d5760066000527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0190600090565b634e487b7160e01b600052603260045260246000fd5b6040906003190112610e3b576004359060243590565b90815180825260208080930193019160005b828110610ed9575050505090565b83516001600160a01b031685529381019392810192600101610ecb565b91908203918211610f0357565b634e487b7160e01b600052601160045260246000fd5b6000467f000000000000000000000000000000000000000000000000000000000000000003610f6757507f000000000000000000000000000000000000000000000000000000000000000090565b60405181548291610f7782610d4e565b8082528160209485820194600190876001821691826000146110a2575050600114611049575b50610faa92500382610dba565b51902091604051918201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f845260408301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608301524660808301523060a083015260a0825260c082019082821067ffffffffffffffff831117611035575060405251902090565b634e487b7160e01b81526041600452602490fd5b87805286915087907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b85831061108a575050610faa935082010138610f9d565b80548388018501528694508893909201918101611073565b60ff19168852610faa95151560051b8501019250389150610f9d9050565b67ffffffffffffffff8111610da45760051b60200190565b906110e2826110c0565b6110ef6040519182610dba565b8281528092611100601f19916110c0565b0190602036910137565b91908201809211610f0357565b8051821015610e8d5760209160051b010190565b919060065490818410156111df57611143908461110a565b908082116111d7575b5061115f61115a8483610ef6565b6110d8565b9061116d61115a8583610ef6565b93805b82811061117e575050509190565b80604061118c600193610e56565b905490600391858060a01b0391831b1c1690816111b26111ac8887610ef6565b8a611117565b52600091825260205220546111d06111ca8584610ef6565b89611117565b5201611170565b90503861114c565b505060405191506111ef82610d88565b600082526040519161120083610d88565b6000835260003681379190565b90600654908183101561128757611224908361110a565b9080821161127f575b5061123b61115a8383610ef6565b91805b82811061124b5750505090565b80611257600192610e56565b838060a01b0391549060031b1c166112786112728584610ef6565b87611117565b520161123e565b90503861122d565b50505060405161129681610d88565b60008152600036813790565b9060018060a01b03809216600090808252600760205260ff604083205416156112cc575b50509050565b6006549368010000000000000000851015611322576112f48560016040969701600655610e56565b819291549060031b9184831b921b19161790558152600760205220600160ff198254161790558038806112c6565b634e487b7160e01b83526041600452602483fdfea2646970667358221220d5b88e2a500a08e0fd6a8b92121923f6ac3f8c8fa3fc18b4f0033a590489b56d64736f6c634300081900330000000000000000000000002e6fd1ad952d9b7190e18dabc803ae935367d0a3
Deployed Bytecode
0x6080604052600436101561001257600080fd5b60003560e01c8063046dc166146101075780631e375ab914610102578063563bfecc146100fd5780635b7633d0146100f857806368fc9323146100f3578063715018a6146100ee57806374863d90146100e95780638da5cb5b146100e457806395d4c7bb146100df5780639c6b9f8a146100da5780639e585512146100d5578063c884ef83146100d0578063d1c6b0ca146100cb578063f2fde38b146100c65763fc0c546a146100c157600080fd5b6105d5565b61054d565b61052c565b6104ed565b6104cf565b610463565b610429565b610400565b6103e2565b610387565b610366565b61033d565b610303565b610175565b610127565b600435906001600160a01b038216820361012257565b600080fd5b346101225760203660031901126101225761014061010c565b610148610a1e565b600780546001600160a01b0319166001600160a01b0392909216919091179055005b600091031261012257565b346101225760008060031936011261030057336000908152600360205260409020546101a28115156105fe565b3360009081526003602052604090208290556006546101d1906001600160a01b03165b6001600160a01b031690565b60405163cbf9fe5f60e01b81523360048201529190602083602481845afa80156102b0578261020991869586916102d1575b506106f6565b813b156102cc57604051637be77c7b60e11b8152336004820152602481019190915292908390604490829084905af19182156102b05783926102b9575b5060065461025c906001600160a01b03166101c5565b90813b156102b5576040516340c10f1960e01b8152336004820152602481019190915291908290604490829084905af180156102b05761029a575080f35b806102a76102ad92610660565b8061016a565b80f35b6106c6565b5050fd5b806102a76102c692610660565b38610246565b505050fd5b6102f3915060203d6020116102f9575b6102eb8183610695565b8101906106b7565b38610203565b503d6102e1565b80fd5b34610122576020366003190112610122576001600160a01b0361032461010c565b1660005260036020526020604060002054604051908152f35b34610122576000366003190112610122576007546040516001600160a01b039091168152602090f35b346101225760203660031901126101225761037f610a1e565b600435600555005b3461012257600080600319360112610300576103a1610a1e565b80546001600160a01b03198116825581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b34610122576000366003190112610122576020600454604051908152f35b34610122576000366003190112610122576000546040516001600160a01b039091168152602090f35b34610122576020366003190112610122576001600160a01b0361044a61010c565b1660005260026020526020604060002054604051908152f35b346101225760603660031901126101225760243567ffffffffffffffff808211610122573660238301121561012257816004013590811161012257366024828401011161012257604435906001600160a01b03821682036101225760246104cd9301600435610824565b005b34610122576000366003190112610122576020600554604051908152f35b34610122576020366003190112610122576001600160a01b0361050e61010c565b166000526001602052602060ff604060002054166040519015158152f35b3461012257602036600319011261012257610545610a1e565b600480359055005b346101225760203660031901126101225761056661010c565b61056e610a1e565b6001600160a01b0390811680156105bc57600080546001600160a01b03198116831782559092167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b604051631e4fbdf760e01b815260006004820152602490fd5b34610122576000366003190112610122576006546040516001600160a01b039091168152602090f35b1561060557565b60405162461bcd60e51b815260206004820152601c60248201527f4e6f20726566657272616c20626f6e757320617661696c61626c652e000000006044820152606490fd5b634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff811161067457604052565b61064a565b6060810190811067ffffffffffffffff82111761067457604052565b90601f8019910116810190811067ffffffffffffffff82111761067457604052565b90816020910312610122575190565b6040513d6000823e3d90fd5b90600182018092116106e057565b634e487b7160e01b600052601160045260246000fd5b919082018092116106e057565b1561070a57565b60405162461bcd60e51b815260206004820152603160248201527f546f6b656e73206861766520616c7265616479206265656e20636c61696d656460448201527010313c903a3434b99030b2323932b9b99760791b6064820152608490fd5b92919267ffffffffffffffff82116106745760405191610793601f8201601f191660200184610695565b829481845281830111610122578281602093846000960137010152565b156107b757565b60405162461bcd60e51b815260206004820152600e60248201526d14da59db881b9bdd081d985b1a5960921b6044820152606490fd5b156107f457565b60405162461bcd60e51b815260206004820152600860248201526729b2b633102932b360c11b6044820152606490fd5b929161088d610899926108949261086661086161085d6108563360018060a01b03166000526001602052604060002090565b5460ff1690565b1590565b610703565b33600090815260016020526040902061088690805460ff19166001179055565b3691610769565b8433610a4a565b6107b0565b6001600160a01b038116806109a7575b50506006546108c0906001600160a01b03166101c5565b60405163cbf9fe5f60e01b8152336004820152602081602481855afa9081156102b0576108f69184916000916102d157506106f6565b90803b1561012257604051637be77c7b60e11b815233600482015260248101929092526000908290604490829084905af180156102b057610994575b50600654610948906001600160a01b03166101c5565b803b15610122576040516340c10f1960e01b815233600482015260248101929092526000908290604490829084905af180156102b0576109855750565b806102a761099292610660565b565b806102a76109a192610660565b38610932565b610a0b91926109bb6109c4923314156107ed565b600454906106f6565b916005546109ef6109e78360018060a01b03166000526003602052604060002090565b9182546106f6565b90556001600160a01b0316600090815260026020526040902090565b610a1581546106d2565b905538806108a9565b6000546001600160a01b03163303610a3257565b60405163118cdaa760e01b8152336004820152602490fd5b906040519060208201926bffffffffffffffffffffffff199060601b168352603482015260348152610a7b81610679565b51902060405160208101917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008352603c820152603c8152610abb81610679565b519020906041815103610b2a576020818101516040808401516060948501518251968752600090811a8786015291860192909252928401528180529160809060015afa156102b057600051600754610b1b906001600160a01b03166101c5565b6001600160a01b039091161490565b60405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e67746800000000000000006044820152606490fdfea26469706673582212207f789f093d9dfddb9b556c9bbc1fb95ef754169841dfe7b0c7ee3255a19e12a064736f6c63430008190033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000002e6fd1ad952d9b7190e18dabc803ae935367d0a3
-----Decoded View---------------
Arg [0] : _signer (address): 0x2E6Fd1Ad952D9B7190e18dabc803Ae935367D0A3
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000002e6fd1ad952d9b7190e18dabc803ae935367d0a3
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.