ETH Price: $2,604.92 (-3.36%)
 

Overview

Max Total Supply

55,114,027.166666666666666675 buOLAS

Holders

0

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
buOLAS

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
default evmVersion
File 1 of 4 : buOLAS.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.15;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/utils/introspection/IERC165.sol";
import "./interfaces/IErrors.sol";

/// @title Burnable Locked OLAS Token - OLAS burnable contract
/// @author Aleksandr Kuperman - <[email protected]>

// Interface for IOLAS burn functionality
interface IOLAS {
    /// @dev Burns OLAS tokens.
    /// @param amount OLAS token amount to burn.
    function burn(uint256 amount) external;
}

// Struct for storing balance, lock and unlock time
// The struct size is one storage slot of uint256 (96 + 96 + 32 + 32)
struct LockedBalance {
    // Token amount locked. Initial OLAS cap is 1 bn tokens, or 1e27.
    // After 10 years, the inflation rate is 2% per year. It would take 220+ years to reach 2^96 - 1
    uint96 totalAmount;
    // Token amount transferred to its owner. It is of the value of at most the total amount locked
    uint96 transferredAmount;
    // Lock time start
    uint32 startTime;
    // Lock end time
    // 2^32 - 1 is enough to count 136 years starting from the year of 1970. This counter is safe until the year of 2106
    uint32 endTime;
}

/// @notice This token supports the ERC20 interface specifications except for transfers.
contract buOLAS is IErrors, IERC20, IERC165 {
    event Lock(address indexed account, uint256 amount, uint256 startTime, uint256 endTime);
    event Withdraw(address indexed account, uint256 amount, uint256 ts);
    event Revoke(address indexed account, uint256 amount, uint256 ts);
    event Burn(address indexed account, uint256 amount, uint256 ts);
    event Supply(uint256 previousSupply, uint256 currentSupply);
    event OwnerUpdated(address indexed owner);

    // Locking step time
    uint32 internal constant STEP_TIME = 365 * 86400;
    // Maximum number of steps
    uint32 internal constant MAX_NUM_STEPS = 10;
    // Total token supply
    uint256 public supply;
    // Number of decimals
    uint8 public constant decimals = 18;

    // Token address
    address public immutable token;
    // Owner address
    address public owner;
    // Mapping of account address => LockedBalance
    mapping(address => LockedBalance) public mapLockedBalances;

    // Token name
    string public name;
    // Token symbol
    string public symbol;

    /// @dev Contract constructor
    /// @param _token Token address.
    /// @param _name Token name.
    /// @param _symbol Token symbol.
    constructor(address _token, string memory _name, string memory _symbol)
    {
        token = _token;
        name = _name;
        symbol = _symbol;
        owner = msg.sender;
    }

    /// @dev Changes the owner address.
    /// @param newOwner Address of a new owner.
    function changeOwner(address newOwner) external {
        if (msg.sender != owner) {
            revert OwnerOnly(msg.sender, owner);
        }

        if (newOwner == address(0)) {
            revert ZeroAddress();
        }

        owner = newOwner;
        emit OwnerUpdated(newOwner);
    }

    /// @dev Deposits `amount` tokens for the `account` and locks for the `numSteps` time periods.
    /// @notice Tokens are taken from `msg.sender`'s balance.
    /// @param account Target account address.
    /// @param amount Amount to deposit.
    /// @param numSteps Number of locking steps.
    function createLockFor(address account, uint256 amount, uint256 numSteps) external {
        // Check if the account is zero
        if (account == address(0)) {
            revert ZeroAddress();
        }
        // Check if the amount is zero
        if (amount == 0) {
            revert ZeroValue();
        }
        // The locking makes sense for one step or more only
        if (numSteps == 0) {
            revert ZeroValue();
        }
        // Check the maximum number of steps
        if (numSteps > MAX_NUM_STEPS) {
            revert Overflow(numSteps, MAX_NUM_STEPS);
        }
        // Lock time is equal to the number of fixed steps multiply on a step time
        uint256 unlockTime = block.timestamp + uint256(STEP_TIME) * numSteps;
        // Max of 2^32 - 1 value, the counter is safe until the year of 2106
        if (unlockTime > type(uint32).max) {
            revert Overflow(unlockTime, type(uint32).max);
        }
        // After 10 years, the inflation rate is 2% per year. It would take 220+ years to reach 2^96 - 1 total supply
        if (amount > type(uint96).max) {
            revert Overflow(amount, type(uint96).max);
        }

        LockedBalance memory lockedBalance = mapLockedBalances[account];
        // The locked balance must be zero in order to start the lock
        if (lockedBalance.totalAmount > 0) {
            revert LockedValueNotZero(account, lockedBalance.totalAmount);
        }

        // Store the locked information for the account
        lockedBalance.startTime = uint32(block.timestamp);
        lockedBalance.endTime = uint32(unlockTime);
        lockedBalance.totalAmount = uint96(amount);
        mapLockedBalances[account] = lockedBalance;

        // Calculate total supply
        uint256 supplyBefore = supply;
        uint256 supplyAfter;
        // Cannot overflow because we do not add more tokens than the OLAS supply
        unchecked {
            supplyAfter = supplyBefore + amount;
            supply = supplyAfter;
        }

        // OLAS is a solmate-based ERC20 token with optimized transferFrom() that either returns true or reverts
        IERC20(token).transferFrom(msg.sender, address(this), amount);

        emit Lock(account, amount, block.timestamp, unlockTime);
        emit Supply(supplyBefore, supplyAfter);
    }

    /// @dev Releases all matured tokens for `msg.sender`.
    function withdraw() external {
        LockedBalance memory lockedBalance = mapLockedBalances[msg.sender];
        // If the balances are still active and not fully withdrawn, start time must be greater than zero
        if (lockedBalance.startTime > 0) {
            // Calculate the amount to release
            uint256 amount = _releasableAmount(lockedBalance);
            // Check if at least one locking step has passed
            if (amount == 0) {
                revert LockNotExpired(msg.sender, lockedBalance.endTime, block.timestamp);
            }

            uint256 supplyBefore = supply;
            uint256 supplyAfter = supplyBefore;
            // End time is greater than zero if withdraw was not fully completed and `revoke` was not called on the account
            if (lockedBalance.endTime > 0) {
                unchecked {
                    // Update the account locked amount.
                    // Cannot practically overflow since the amount to release is smaller than the locked amount
                    lockedBalance.transferredAmount += uint96(amount);
                }
                // The balance is fully unlocked. Released amount must be equal to the locked one
                if ((lockedBalance.transferredAmount + 1) > lockedBalance.totalAmount) {
                    mapLockedBalances[msg.sender] = LockedBalance(0, 0, 0, 0);
                } else {
                    mapLockedBalances[msg.sender] = lockedBalance;
                }
            } else {
                // This means revoke has been called on this account and some tokens must be burned
                uint256 amountBurn = uint256(lockedBalance.totalAmount);
                // Burn revoked tokens
                if (amountBurn > 0) {
                    IOLAS(token).burn(amountBurn);
                    // Update total supply
                    unchecked {
                        // Amount to burn cannot be bigger than the supply before the burn
                        supplyAfter = supplyBefore - amountBurn;
                    }
                    emit Burn(msg.sender, amountBurn, block.timestamp);
                }
                // Set all the data to zero
                mapLockedBalances[msg.sender] = LockedBalance(0, 0, 0, 0);
            }

            // The amount cannot be bigger than the total supply
            unchecked {
                supplyAfter -= amount;
                supply = supplyAfter;
            }

            emit Withdraw(msg.sender, amount, block.timestamp);
            emit Supply(supplyBefore, supplyAfter);

            // OLAS is a solmate-based ERC20 token with optimized transfer() that either returns true or reverts
            IERC20(token).transfer(msg.sender, amount);
        }
    }

    /// @dev Revoke and burn all non-matured tokens from the `account`.
    /// @param accounts Account addresses.
    function revoke(address[] memory accounts) external {
        // Check for the ownership
        if (owner != msg.sender) {
            revert OwnerOnly(msg.sender, owner);
        }

        for (uint256 i = 0; i < accounts.length; ++i) {
            address account = accounts[i];
            LockedBalance memory lockedBalance = mapLockedBalances[account];

            // Get the amount to release
            uint256 amountRelease = _releasableAmount(lockedBalance);
            // Amount locked now represents the burn amount, which can not become less than zero
            unchecked {
                lockedBalance.totalAmount -= (uint96(amountRelease) + lockedBalance.transferredAmount);
            }
            // This is the release amount that will be transferred to the account when they withdraw
            lockedBalance.transferredAmount = uint96(amountRelease);
            // Termination state of the revoke procedure
            lockedBalance.endTime = 0;
            // Update the account data
            mapLockedBalances[account] = lockedBalance;

            emit Revoke(account, uint256(lockedBalance.totalAmount), block.timestamp);
        }
    }

    /// @dev Gets the account locking balance.
    /// @param account Account address.
    /// @return balance Account balance.
    function balanceOf(address account) public view override returns (uint256 balance) {
        LockedBalance memory lockedBalance = mapLockedBalances[account];
        // If the end is equal 0, this balance is either left after revoke or expired
        if (lockedBalance.endTime == 0) {
            // The maximum balance in this case is the released amount value
            balance = uint256(lockedBalance.transferredAmount);
        } else {
            // Otherwise the balance is the difference between locked and released amounts
            balance = uint256(lockedBalance.totalAmount - lockedBalance.transferredAmount);
        }
    }

    /// @dev Gets total token supply.
    /// @return Total token supply.
    function totalSupply() public view override returns (uint256) {
        return supply;
    }

    /// @dev Gets the account releasable amount.
    /// @param account Account address.
    /// @return amount Amount to release.
    function releasableAmount(address account) external view returns (uint256 amount) {
        LockedBalance memory lockedBalance = mapLockedBalances[account];
        amount = _releasableAmount(lockedBalance);
    }

    /// @dev Gets the account releasable amount.
    /// @param lockedBalance Account locked balance struct.
    /// @return amount Amount to release.
    function _releasableAmount(LockedBalance memory lockedBalance) private view returns (uint256 amount) {
        // If the end is equal 0, this balance is either left after revoke or expired
        if (lockedBalance.endTime == 0) {
            return lockedBalance.transferredAmount;
        }
        // Number of steps
        uint32 numSteps;
        // Current locked time
        uint32 releasedSteps;
        // Time in the future will be greater than the start time
        unchecked {
            numSteps = (lockedBalance.endTime - lockedBalance.startTime) / STEP_TIME;
            releasedSteps = (uint32(block.timestamp) - lockedBalance.startTime) / STEP_TIME;
        }

        // If the number of release steps is greater or equal to the number of steps, all the available tokens are unlocked
        if ((releasedSteps + 1) > numSteps) {
            // Return the remainder from the last release since it's the last one
            unchecked {
                amount = uint256(lockedBalance.totalAmount - lockedBalance.transferredAmount);
            }
        } else {
            // Calculate the amount to release
            unchecked {
                amount = uint256(lockedBalance.totalAmount * releasedSteps / numSteps);
                amount -= uint256(lockedBalance.transferredAmount);
            }
        }
    }

    /// @dev Gets the `account`'s locking end time.
    /// @param account Account address.
    /// @return unlockTime Maturity time.
    function lockedEnd(address account) external view returns (uint256 unlockTime) {
        unlockTime = uint256(mapLockedBalances[account].endTime);
    }

    /// @dev Gets information about the interface support.
    /// @param interfaceId A specified interface Id.
    /// @return True if this contract implements the interface defined by interfaceId.
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC20).interfaceId || interfaceId == type(IERC165).interfaceId;
    }

    /// @dev Reverts the transfer of this token.
    function transfer(address to, uint256 amount) external virtual override returns (bool) {
        revert NonTransferable(address(this));
    }

    /// @dev Reverts the approval of this token.
    function approve(address spender, uint256 amount) external virtual override returns (bool) {
        revert NonTransferable(address(this));
    }

    /// @dev Reverts the transferFrom of this token.
    function transferFrom(address from, address to, uint256 amount) external virtual override returns (bool) {
        revert NonTransferable(address(this));
    }

    /// @dev Reverts the allowance of this token.
    function allowance(address owner, address spender) external view virtual override returns (uint256)
    {
        revert NonTransferable(address(this));
    }
}

File 2 of 4 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

File 3 of 4 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 4 of 4 : IErrors.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.15;

/// @dev Errors.
interface IErrors {
    /// @dev Only `owner` has a privilege, but the `sender` was provided.
    /// @param sender Sender address.
    /// @param owner Required sender address as an owner.
    error OwnerOnly(address sender, address owner);

    /// @dev Provided zero address.
    error ZeroAddress();

    /// @dev Zero value when it has to be different from zero.
    error ZeroValue();

    /// @dev Non-zero value when it has to be zero.
    error NonZeroValue();

    /// @dev Wrong length of two arrays.
    /// @param numValues1 Number of values in a first array.
    /// @param numValues2 Numberf of values in a second array.
    error WrongArrayLength(uint256 numValues1, uint256 numValues2);

    /// @dev Value overflow.
    /// @param provided Overflow value.
    /// @param max Maximum possible value.
    error Overflow(uint256 provided, uint256 max);

    /// @dev Token is non-transferable.
    /// @param account Token address.
    error NonTransferable(address account);

    /// @dev Token is non-delegatable.
    /// @param account Token address.
    error NonDelegatable(address account);

    /// @dev Insufficient token allowance.
    /// @param provided Provided amount.
    /// @param expected Minimum expected amount.
    error InsufficientAllowance(uint256 provided, uint256 expected);

    /// @dev No existing lock value is found.
    /// @param account Address that is checked for the locked value.
    error NoValueLocked(address account);

    /// @dev Locked value is not zero.
    /// @param account Address that is checked for the locked value.
    /// @param amount Locked amount.
    error LockedValueNotZero(address account, uint256 amount);

    /// @dev Value lock is expired.
    /// @param account Address that is checked for the locked value.
    /// @param deadline The lock expiration deadline.
    /// @param curTime Current timestamp.
    error LockExpired(address account, uint256 deadline, uint256 curTime);

    /// @dev Value lock is not expired.
    /// @param account Address that is checked for the locked value.
    /// @param deadline The lock expiration deadline.
    /// @param curTime Current timestamp.
    error LockNotExpired(address account, uint256 deadline, uint256 curTime);

    /// @dev Provided unlock time is incorrect.
    /// @param account Address that is checked for the locked value.
    /// @param minUnlockTime Minimal unlock time that can be set.
    /// @param providedUnlockTime Provided unlock time.
    error UnlockTimeIncorrect(address account, uint256 minUnlockTime, uint256 providedUnlockTime);

    /// @dev Provided unlock time is bigger than the maximum allowed.
    /// @param account Address that is checked for the locked value.
    /// @param maxUnlockTime Max unlock time that can be set.
    /// @param providedUnlockTime Provided unlock time.
    error MaxUnlockTimeReached(address account, uint256 maxUnlockTime, uint256 providedUnlockTime);

    /// @dev Provided block number is incorrect (has not been processed yet).
    /// @param providedBlockNumber Provided block number.
    /// @param actualBlockNumber Actual block number.
    error WrongBlockNumber(uint256 providedBlockNumber, uint256 actualBlockNumber);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 1000000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"provided","type":"uint256"},{"internalType":"uint256","name":"expected","type":"uint256"}],"name":"InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256","name":"curTime","type":"uint256"}],"name":"LockExpired","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256","name":"curTime","type":"uint256"}],"name":"LockNotExpired","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LockedValueNotZero","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"maxUnlockTime","type":"uint256"},{"internalType":"uint256","name":"providedUnlockTime","type":"uint256"}],"name":"MaxUnlockTimeReached","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"NoValueLocked","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"NonDelegatable","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"NonTransferable","type":"error"},{"inputs":[],"name":"NonZeroValue","type":"error"},{"inputs":[{"internalType":"uint256","name":"provided","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"Overflow","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"OwnerOnly","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"minUnlockTime","type":"uint256"},{"internalType":"uint256","name":"providedUnlockTime","type":"uint256"}],"name":"UnlockTimeIncorrect","type":"error"},{"inputs":[{"internalType":"uint256","name":"numValues1","type":"uint256"},{"internalType":"uint256","name":"numValues2","type":"uint256"}],"name":"WrongArrayLength","type":"error"},{"inputs":[{"internalType":"uint256","name":"providedBlockNumber","type":"uint256"},{"internalType":"uint256","name":"actualBlockNumber","type":"uint256"}],"name":"WrongBlockNumber","type":"error"},{"inputs":[],"name":"ZeroAddress","type":"error"},{"inputs":[],"name":"ZeroValue","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ts","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"Lock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"OwnerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ts","type":"uint256"}],"name":"Revoke","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"previousSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"currentSupply","type":"uint256"}],"name":"Supply","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ts","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"numSteps","type":"uint256"}],"name":"createLockFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"lockedEnd","outputs":[{"internalType":"uint256","name":"unlockTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mapLockedBalances","outputs":[{"internalType":"uint96","name":"totalAmount","type":"uint96"},{"internalType":"uint96","name":"transferredAmount","type":"uint96"},{"internalType":"uint32","name":"startTime","type":"uint32"},{"internalType":"uint32","name":"endTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"releasableAmount","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"revoke","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a06040523480156200001157600080fd5b50604051620020c1380380620020c1833981016040819052620000349162000148565b6001600160a01b03831660805260036200004f838262000261565b5060046200005e828262000261565b5050600180546001600160a01b03191633179055506200032d9050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000a357600080fd5b81516001600160401b0380821115620000c057620000c06200007b565b604051601f8301601f19908116603f01168101908282118183101715620000eb57620000eb6200007b565b816040528381526020925086838588010111156200010857600080fd5b600091505b838210156200012c57858201830151818301840152908201906200010d565b838211156200013e5760008385830101525b9695505050505050565b6000806000606084860312156200015e57600080fd5b83516001600160a01b03811681146200017657600080fd5b60208501519093506001600160401b03808211156200019457600080fd5b620001a28783880162000091565b93506040860151915080821115620001b957600080fd5b50620001c88682870162000091565b9150509250925092565b600181811c90821680620001e757607f821691505b6020821081036200020857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200025c57600081815260208120601f850160051c81016020861015620002375750805b601f850160051c820191505b81811015620002585782815560010162000243565b5050505b505050565b81516001600160401b038111156200027d576200027d6200007b565b62000295816200028e8454620001d2565b846200020e565b602080601f831160018114620002cd5760008415620002b45750858301515b600019600386901b1c1916600185901b17855562000258565b600085815260208120601f198616915b82811015620002fe57888601518255948401946001909101908401620002dd565b50858210156200031d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051611d636200035e600039600081816103f301528181610d4e0152818161120201526114760152611d636000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c8063313ce567116100cd57806395d89b4111610081578063a9059cbb11610066578063a9059cbb146101da578063dd62ed3e146103e0578063fc0c546a146103ee57600080fd5b806395d89b41146103c5578063a6f9dae1146103cd57600080fd5b80634deafcae116100b25780634deafcae1461031157806370a082311461036d5780638da5cb5b1461038057600080fd5b8063313ce567146102ef5780633ccfd60b1461030957600080fd5b80631726cbc81161012457806318b213481161010957806318b213481461020857806323b872dd146102ce57806329b55ca7146102dc57600080fd5b80631726cbc8146101ed57806318160ddd1461020057600080fd5b806305f203d91161015557806305f203d9146101b057806306fdde03146101c5578063095ea7b3146101da57600080fd5b806301ffc9a714610171578063047fc9aa14610199575b600080fd5b61018461017f366004611851565b610415565b60405190151581526020015b60405180910390f35b6101a260005481565b604051908152602001610190565b6101c36101be3660046118eb565b6104ae565b005b6101cd610781565b60405161019091906119ce565b6101846101e8366004611a41565b61080f565b6101a26101fb366004611a6b565b610846565b6000546101a2565b610292610216366004611a6b565b6002602052600090815260409020546bffffffffffffffffffffffff808216916c0100000000000000000000000081049091169063ffffffff780100000000000000000000000000000000000000000000000082048116917c010000000000000000000000000000000000000000000000000000000090041684565b604080516bffffffffffffffffffffffff958616815294909316602085015263ffffffff91821692840192909252166060820152608001610190565b6101846101e8366004611a86565b6101c36102ea366004611ac2565b610903565b6102f7601281565b60405160ff9091168152602001610190565b6101c3610e56565b6101a261031f366004611a6b565b73ffffffffffffffffffffffffffffffffffffffff166000908152600260205260409020547c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690565b6101a261037b366004611a6b565b611500565b6001546103a09073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101cd6115f7565b6101c36103db366004611a6b565b611604565b6101a26101e8366004611af5565b6103a07f000000000000000000000000000000000000000000000000000000000000000081565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f36372b070000000000000000000000000000000000000000000000000000000014806104a857507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610526576001546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044015b60405180910390fd5b60005b815181101561077d57600082828151811061054657610546611b28565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff81166000908152600283526040808220815160808101835290546bffffffffffffffffffffffff80821683526c010000000000000000000000008204169582019590955263ffffffff780100000000000000000000000000000000000000000000000086048116928201929092527c010000000000000000000000000000000000000000000000000000000090940416606084015290925061060882611733565b60208381018051855190840190036bffffffffffffffffffffffff9081168652838116825260006060870181815273ffffffffffffffffffffffffffffffffffffffff891680835260028652604092839020895181549651858c015194519187167fffffffffffffffff00000000000000000000000000000000000000000000000090981688176c0100000000000000000000000091909716029590951777ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000063ffffffff948516027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16177c01000000000000000000000000000000000000000000000000000000009390951692909202939093179055805192835242938301939093529293507f437a05d5b9037b4fe16f9564c21528b3f978b6a015269140722644f407e943cd910160405180910390a25050508061077690611b86565b9050610529565b5050565b6003805461078e90611bbe565b80601f01602080910402602001604051908101604052809291908181526020018280546107ba90611bbe565b80156108075780601f106107dc57610100808354040283529160200191610807565b820191906000526020600020905b8154815290600101906020018083116107ea57829003601f168201915b505050505081565b6040517f9c21e7b200000000000000000000000000000000000000000000000000000000815230600482015260009060240161051d565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600260209081526040808320815160808101835290546bffffffffffffffffffffffff80821683526c010000000000000000000000008204169382019390935263ffffffff780100000000000000000000000000000000000000000000000084048116928201929092527c01000000000000000000000000000000000000000000000000000000009092041660608201526108fc81611733565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8316610950576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160000361098a576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000036109c4576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a811115610a09576040517f7ae5968500000000000000000000000000000000000000000000000000000000815260048101829052600a602482015260440161051d565b6000610a19826301e13380611c0b565b610a239042611c48565b905063ffffffff811115610a70576040517f7ae596850000000000000000000000000000000000000000000000000000000081526004810182905263ffffffff602482015260440161051d565b6bffffffffffffffffffffffff831115610acb576040517f7ae59685000000000000000000000000000000000000000000000000000000008152600481018490526bffffffffffffffffffffffff602482015260440161051d565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020908152604091829020825160808101845290546bffffffffffffffffffffffff8082168084526c0100000000000000000000000083049091169383019390935263ffffffff780100000000000000000000000000000000000000000000000082048116948301949094527c01000000000000000000000000000000000000000000000000000000009004909216606083015215610be35780516040517f89bf64dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff871660048201526bffffffffffffffffffffffff909116602482015260440161051d565b63ffffffff4281166040838101918252848316606085019081526bffffffffffffffffffffffff888116865273ffffffffffffffffffffffffffffffffffffffff8a811660009081526002602090815285822089518154928b0151985196518a167c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff97909a167801000000000000000000000000000000000000000000000000029690961677ffffffffffffffffffffffffffffffffffffffffffffffff9886166c01000000000000000000000000027fffffffffffffffff000000000000000000000000000000000000000000000000909316969095169590951717959095169190911794909417905581548088019283905590517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810188905290927f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064016020604051808303816000875af1158015610d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbb9190611c60565b506040805187815242602082015290810185905273ffffffffffffffffffffffffffffffffffffffff8816907f0e31f07bae79135368ff475cf6c7f6abb31e0fd731e03c18ad425bd9406cf0c09060600160405180910390a260408051838152602081018390527f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c910160405180910390a150505050505050565b33600090815260026020908152604091829020825160808101845290546bffffffffffffffffffffffff80821683526c010000000000000000000000008204169282019290925263ffffffff7801000000000000000000000000000000000000000000000000830481169382018490527c0100000000000000000000000000000000000000000000000000000000909204909116606082015290156114fd576000610f0082611733565b905080600003610f565760608201516040517fab0246b300000000000000000000000000000000000000000000000000000000815233600482015263ffffffff909116602482015242604482015260640161051d565b6000546060830151819063ffffffff16156111bd576020840180516bffffffffffffffffffffffff90850181169182905285511690610f96906001611c82565b6bffffffffffffffffffffffff1611156110c057604080516080810182526000808252602080830182815283850183815260608501848152338552600290935294909220925183549251945191516bffffffffffffffffffffffff9182167fffffffffffffffff000000000000000000000000000000000000000000000000909416939093176c0100000000000000000000000091909516029390931777ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000063ffffffff948516027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16177c010000000000000000000000000000000000000000000000000000000093909116929092029190911790556113c6565b33600090815260026020908152604091829020865181549288015193880151606089015163ffffffff9081167c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff919092167801000000000000000000000000000000000000000000000000021677ffffffffffffffffffffffffffffffffffffffffffffffff6bffffffffffffffffffffffff9687166c01000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090961696909316959095179390931716929092171790556113c6565b83516bffffffffffffffffffffffff1680156112b3576040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906342966c6890602401600060405180830381600087803b15801561125b57600080fd5b505af115801561126f573d6000803e3d6000fd5b50506040805184815242602082015284870395503393507f49995e5dd6158cf69ad3e9777c46755a1a826a446c6416992167462dad033b2a92500160405180910390a25b50604080516080810182526000808252602080830182815283850183815260608501848152338552600290935294909220925183549251945191516bffffffffffffffffffffffff9182167fffffffffffffffff000000000000000000000000000000000000000000000000909416939093176c0100000000000000000000000091909516029390931777ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000063ffffffff948516027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16177c010000000000000000000000000000000000000000000000000000000093909116929092029190911790555b82900360008190556040805184815242602082015233917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568910160405180910390a260408051838152602081018390527f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c910160405180910390a16040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a9059cbb906044016020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f89190611c60565b505050505b50565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600260209081526040808320815160808101835290546bffffffffffffffffffffffff80821683526c010000000000000000000000008204169382019390935263ffffffff780100000000000000000000000000000000000000000000000084048116928201929092527c0100000000000000000000000000000000000000000000000000000000909204166060820181905282036115cf5780602001516bffffffffffffffffffffffff1691506115f1565b602081015181516115e09190611cb2565b6bffffffffffffffffffffffff1691505b50919050565b6004805461078e90611bbe565b60015473ffffffffffffffffffffffffffffffffffffffff163314611677576001546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116602482015260440161051d565b73ffffffffffffffffffffffffffffffffffffffff81166116c4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b90600090a250565b6000816060015163ffffffff1660000361175d5750602001516bffffffffffffffffffffffff1690565b6000806301e1338063ffffffff16846040015185606001510363ffffffff168161178957611789611cdf565b0491506301e1338063ffffffff168460400151420363ffffffff16816117b1576117b1611cdf565b04905063ffffffff82166117c6826001611d0e565b63ffffffff1611156117f25783602001518460000151036bffffffffffffffffffffffff16925061184a565b8163ffffffff168163ffffffff168560000151026bffffffffffffffffffffffff168161182157611821611cdf565b046bffffffffffffffffffffffff16925083602001516bffffffffffffffffffffffff16830392505b5050919050565b60006020828403121561186357600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146108fc57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146118e657600080fd5b919050565b600060208083850312156118fe57600080fd5b823567ffffffffffffffff8082111561191657600080fd5b818501915085601f83011261192a57600080fd5b81358181111561193c5761193c611893565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f8301168101818110858211171561197f5761197f611893565b60405291825284820192508381018501918883111561199d57600080fd5b938501935b828510156119c2576119b3856118c2565b845293850193928501926119a2565b98975050505050505050565b600060208083528351808285015260005b818110156119fb578581018301518582016040015282016119df565b81811115611a0d576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008060408385031215611a5457600080fd5b611a5d836118c2565b946020939093013593505050565b600060208284031215611a7d57600080fd5b6108fc826118c2565b600080600060608486031215611a9b57600080fd5b611aa4846118c2565b9250611ab2602085016118c2565b9150604084013590509250925092565b600080600060608486031215611ad757600080fd5b611ae0846118c2565b95602085013595506040909401359392505050565b60008060408385031215611b0857600080fd5b611b11836118c2565b9150611b1f602084016118c2565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611bb757611bb7611b57565b5060010190565b600181811c90821680611bd257607f821691505b6020821081036115f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611c4357611c43611b57565b500290565b60008219821115611c5b57611c5b611b57565b500190565b600060208284031215611c7257600080fd5b815180151581146108fc57600080fd5b60006bffffffffffffffffffffffff808316818516808303821115611ca957611ca9611b57565b01949350505050565b60006bffffffffffffffffffffffff83811690831681811015611cd757611cd7611b57565b039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600063ffffffff808316818516808303821115611ca957611ca9611b5756fea2646970667358221220b49e30fdf93d061c00dd6077912ba82712d17f8f30d710e51088cd0c25b2e8bf64736f6c634300080f00330000000000000000000000000001a500a6b18995b03f44bb040a5ffc28e45cb0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000144275726e61626c65204c6f636b6564204f4c4153000000000000000000000000000000000000000000000000000000000000000000000000000000000000000662754f4c41530000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061016c5760003560e01c8063313ce567116100cd57806395d89b4111610081578063a9059cbb11610066578063a9059cbb146101da578063dd62ed3e146103e0578063fc0c546a146103ee57600080fd5b806395d89b41146103c5578063a6f9dae1146103cd57600080fd5b80634deafcae116100b25780634deafcae1461031157806370a082311461036d5780638da5cb5b1461038057600080fd5b8063313ce567146102ef5780633ccfd60b1461030957600080fd5b80631726cbc81161012457806318b213481161010957806318b213481461020857806323b872dd146102ce57806329b55ca7146102dc57600080fd5b80631726cbc8146101ed57806318160ddd1461020057600080fd5b806305f203d91161015557806305f203d9146101b057806306fdde03146101c5578063095ea7b3146101da57600080fd5b806301ffc9a714610171578063047fc9aa14610199575b600080fd5b61018461017f366004611851565b610415565b60405190151581526020015b60405180910390f35b6101a260005481565b604051908152602001610190565b6101c36101be3660046118eb565b6104ae565b005b6101cd610781565b60405161019091906119ce565b6101846101e8366004611a41565b61080f565b6101a26101fb366004611a6b565b610846565b6000546101a2565b610292610216366004611a6b565b6002602052600090815260409020546bffffffffffffffffffffffff808216916c0100000000000000000000000081049091169063ffffffff780100000000000000000000000000000000000000000000000082048116917c010000000000000000000000000000000000000000000000000000000090041684565b604080516bffffffffffffffffffffffff958616815294909316602085015263ffffffff91821692840192909252166060820152608001610190565b6101846101e8366004611a86565b6101c36102ea366004611ac2565b610903565b6102f7601281565b60405160ff9091168152602001610190565b6101c3610e56565b6101a261031f366004611a6b565b73ffffffffffffffffffffffffffffffffffffffff166000908152600260205260409020547c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690565b6101a261037b366004611a6b565b611500565b6001546103a09073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101cd6115f7565b6101c36103db366004611a6b565b611604565b6101a26101e8366004611af5565b6103a07f0000000000000000000000000001a500a6b18995b03f44bb040a5ffc28e45cb081565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f36372b070000000000000000000000000000000000000000000000000000000014806104a857507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610526576001546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044015b60405180910390fd5b60005b815181101561077d57600082828151811061054657610546611b28565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff81166000908152600283526040808220815160808101835290546bffffffffffffffffffffffff80821683526c010000000000000000000000008204169582019590955263ffffffff780100000000000000000000000000000000000000000000000086048116928201929092527c010000000000000000000000000000000000000000000000000000000090940416606084015290925061060882611733565b60208381018051855190840190036bffffffffffffffffffffffff9081168652838116825260006060870181815273ffffffffffffffffffffffffffffffffffffffff891680835260028652604092839020895181549651858c015194519187167fffffffffffffffff00000000000000000000000000000000000000000000000090981688176c0100000000000000000000000091909716029590951777ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000063ffffffff948516027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16177c01000000000000000000000000000000000000000000000000000000009390951692909202939093179055805192835242938301939093529293507f437a05d5b9037b4fe16f9564c21528b3f978b6a015269140722644f407e943cd910160405180910390a25050508061077690611b86565b9050610529565b5050565b6003805461078e90611bbe565b80601f01602080910402602001604051908101604052809291908181526020018280546107ba90611bbe565b80156108075780601f106107dc57610100808354040283529160200191610807565b820191906000526020600020905b8154815290600101906020018083116107ea57829003601f168201915b505050505081565b6040517f9c21e7b200000000000000000000000000000000000000000000000000000000815230600482015260009060240161051d565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600260209081526040808320815160808101835290546bffffffffffffffffffffffff80821683526c010000000000000000000000008204169382019390935263ffffffff780100000000000000000000000000000000000000000000000084048116928201929092527c01000000000000000000000000000000000000000000000000000000009092041660608201526108fc81611733565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8316610950576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160000361098a576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000036109c4576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a811115610a09576040517f7ae5968500000000000000000000000000000000000000000000000000000000815260048101829052600a602482015260440161051d565b6000610a19826301e13380611c0b565b610a239042611c48565b905063ffffffff811115610a70576040517f7ae596850000000000000000000000000000000000000000000000000000000081526004810182905263ffffffff602482015260440161051d565b6bffffffffffffffffffffffff831115610acb576040517f7ae59685000000000000000000000000000000000000000000000000000000008152600481018490526bffffffffffffffffffffffff602482015260440161051d565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020908152604091829020825160808101845290546bffffffffffffffffffffffff8082168084526c0100000000000000000000000083049091169383019390935263ffffffff780100000000000000000000000000000000000000000000000082048116948301949094527c01000000000000000000000000000000000000000000000000000000009004909216606083015215610be35780516040517f89bf64dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff871660048201526bffffffffffffffffffffffff909116602482015260440161051d565b63ffffffff4281166040838101918252848316606085019081526bffffffffffffffffffffffff888116865273ffffffffffffffffffffffffffffffffffffffff8a811660009081526002602090815285822089518154928b0151985196518a167c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff97909a167801000000000000000000000000000000000000000000000000029690961677ffffffffffffffffffffffffffffffffffffffffffffffff9886166c01000000000000000000000000027fffffffffffffffff000000000000000000000000000000000000000000000000909316969095169590951717959095169190911794909417905581548088019283905590517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810188905290927f0000000000000000000000000001a500a6b18995b03f44bb040a5ffc28e45cb016906323b872dd906064016020604051808303816000875af1158015610d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbb9190611c60565b506040805187815242602082015290810185905273ffffffffffffffffffffffffffffffffffffffff8816907f0e31f07bae79135368ff475cf6c7f6abb31e0fd731e03c18ad425bd9406cf0c09060600160405180910390a260408051838152602081018390527f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c910160405180910390a150505050505050565b33600090815260026020908152604091829020825160808101845290546bffffffffffffffffffffffff80821683526c010000000000000000000000008204169282019290925263ffffffff7801000000000000000000000000000000000000000000000000830481169382018490527c0100000000000000000000000000000000000000000000000000000000909204909116606082015290156114fd576000610f0082611733565b905080600003610f565760608201516040517fab0246b300000000000000000000000000000000000000000000000000000000815233600482015263ffffffff909116602482015242604482015260640161051d565b6000546060830151819063ffffffff16156111bd576020840180516bffffffffffffffffffffffff90850181169182905285511690610f96906001611c82565b6bffffffffffffffffffffffff1611156110c057604080516080810182526000808252602080830182815283850183815260608501848152338552600290935294909220925183549251945191516bffffffffffffffffffffffff9182167fffffffffffffffff000000000000000000000000000000000000000000000000909416939093176c0100000000000000000000000091909516029390931777ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000063ffffffff948516027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16177c010000000000000000000000000000000000000000000000000000000093909116929092029190911790556113c6565b33600090815260026020908152604091829020865181549288015193880151606089015163ffffffff9081167c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff919092167801000000000000000000000000000000000000000000000000021677ffffffffffffffffffffffffffffffffffffffffffffffff6bffffffffffffffffffffffff9687166c01000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090961696909316959095179390931716929092171790556113c6565b83516bffffffffffffffffffffffff1680156112b3576040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018290527f0000000000000000000000000001a500a6b18995b03f44bb040a5ffc28e45cb073ffffffffffffffffffffffffffffffffffffffff16906342966c6890602401600060405180830381600087803b15801561125b57600080fd5b505af115801561126f573d6000803e3d6000fd5b50506040805184815242602082015284870395503393507f49995e5dd6158cf69ad3e9777c46755a1a826a446c6416992167462dad033b2a92500160405180910390a25b50604080516080810182526000808252602080830182815283850183815260608501848152338552600290935294909220925183549251945191516bffffffffffffffffffffffff9182167fffffffffffffffff000000000000000000000000000000000000000000000000909416939093176c0100000000000000000000000091909516029390931777ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000063ffffffff948516027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16177c010000000000000000000000000000000000000000000000000000000093909116929092029190911790555b82900360008190556040805184815242602082015233917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568910160405180910390a260408051838152602081018390527f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c910160405180910390a16040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018490527f0000000000000000000000000001a500a6b18995b03f44bb040a5ffc28e45cb073ffffffffffffffffffffffffffffffffffffffff169063a9059cbb906044016020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f89190611c60565b505050505b50565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600260209081526040808320815160808101835290546bffffffffffffffffffffffff80821683526c010000000000000000000000008204169382019390935263ffffffff780100000000000000000000000000000000000000000000000084048116928201929092527c0100000000000000000000000000000000000000000000000000000000909204166060820181905282036115cf5780602001516bffffffffffffffffffffffff1691506115f1565b602081015181516115e09190611cb2565b6bffffffffffffffffffffffff1691505b50919050565b6004805461078e90611bbe565b60015473ffffffffffffffffffffffffffffffffffffffff163314611677576001546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116602482015260440161051d565b73ffffffffffffffffffffffffffffffffffffffff81166116c4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b90600090a250565b6000816060015163ffffffff1660000361175d5750602001516bffffffffffffffffffffffff1690565b6000806301e1338063ffffffff16846040015185606001510363ffffffff168161178957611789611cdf565b0491506301e1338063ffffffff168460400151420363ffffffff16816117b1576117b1611cdf565b04905063ffffffff82166117c6826001611d0e565b63ffffffff1611156117f25783602001518460000151036bffffffffffffffffffffffff16925061184a565b8163ffffffff168163ffffffff168560000151026bffffffffffffffffffffffff168161182157611821611cdf565b046bffffffffffffffffffffffff16925083602001516bffffffffffffffffffffffff16830392505b5050919050565b60006020828403121561186357600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146108fc57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146118e657600080fd5b919050565b600060208083850312156118fe57600080fd5b823567ffffffffffffffff8082111561191657600080fd5b818501915085601f83011261192a57600080fd5b81358181111561193c5761193c611893565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f8301168101818110858211171561197f5761197f611893565b60405291825284820192508381018501918883111561199d57600080fd5b938501935b828510156119c2576119b3856118c2565b845293850193928501926119a2565b98975050505050505050565b600060208083528351808285015260005b818110156119fb578581018301518582016040015282016119df565b81811115611a0d576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008060408385031215611a5457600080fd5b611a5d836118c2565b946020939093013593505050565b600060208284031215611a7d57600080fd5b6108fc826118c2565b600080600060608486031215611a9b57600080fd5b611aa4846118c2565b9250611ab2602085016118c2565b9150604084013590509250925092565b600080600060608486031215611ad757600080fd5b611ae0846118c2565b95602085013595506040909401359392505050565b60008060408385031215611b0857600080fd5b611b11836118c2565b9150611b1f602084016118c2565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611bb757611bb7611b57565b5060010190565b600181811c90821680611bd257607f821691505b6020821081036115f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611c4357611c43611b57565b500290565b60008219821115611c5b57611c5b611b57565b500190565b600060208284031215611c7257600080fd5b815180151581146108fc57600080fd5b60006bffffffffffffffffffffffff808316818516808303821115611ca957611ca9611b57565b01949350505050565b60006bffffffffffffffffffffffff83811690831681811015611cd757611cd7611b57565b039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600063ffffffff808316818516808303821115611ca957611ca9611b5756fea2646970667358221220b49e30fdf93d061c00dd6077912ba82712d17f8f30d710e51088cd0c25b2e8bf64736f6c634300080f0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000001a500a6b18995b03f44bb040a5ffc28e45cb0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000144275726e61626c65204c6f636b6564204f4c4153000000000000000000000000000000000000000000000000000000000000000000000000000000000000000662754f4c41530000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _token (address): 0x0001A500A6B18995B03f44bb040A5fFc28E45CB0
Arg [1] : _name (string): Burnable Locked OLAS
Arg [2] : _symbol (string): buOLAS

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000001a500a6b18995b03f44bb040a5ffc28e45cb0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [4] : 4275726e61626c65204c6f636b6564204f4c4153000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [6] : 62754f4c41530000000000000000000000000000000000000000000000000000


Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.