ETH Price: $1,967.93 (-2.57%)
 

Overview

Max Total Supply

10,000,000,000 SPK

Holders

16,033 ( 0.012%)

Market

Price

$0.02 @ 0.000011 ETH (-2.14%)

Onchain Market Cap

$207,120,158.97

Circulating Supply Market Cap

$49,727,475.22

Other Info

Token Contract (WITH 18 Decimals)

Balance
74.95679587235102658 SPK

Value
$1.55 ( ~0.000787628197763159 Eth) [0.0000%]
0x23ea05935b6ed367059cecfe357700b27f649471
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Spark helps grow other protocols and ecosystems via premier liquidity integrations.

Market

Volume (24H):$13,563,888.47
Market Capitalization:$49,727,475.22
Circulating Supply:2,400,899,819.00 SPK
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SDAO

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 200 runs

Other Settings:
london EvmVersion
// SPDX-FileCopyrightText: © 2017, 2018, 2019 dbrock, rain, mrchico
// SPDX-FileCopyrightText: © 2023 Dai Foundation <www.daifoundation.org>
// SPDX-License-Identifier: AGPL-3.0-or-later
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <https://www.gnu.org/licenses/>.
pragma solidity ^0.8.16;

/// @dev Smart Contract signature validation interface.
interface IERC1271 {
    function isValidSignature(bytes32, bytes memory) external view returns (bytes4);
}

/**
 * @title SDAO: SubDAO-level governance token.
 * @dev This is a port from X-Domain Dai implementation: https://www.diffchecker.com/XeqEiDcn/ with additional features:
 *      - Actors with owner access (`wards`) can update `name` and `symbol`.
 * @author @amusingaxl
 */
contract SDAO {
    /// @notice Addresses with owner access on this contract. `wards[usr]`
    mapping(address => uint256) public wards;

    // --- ERC20 Data ---

    /// @dev The name of the token.
    string public name;
    /// @dev The symbol of the token.
    string public symbol;
    /// @dev The version of the token.
    string public constant version = "1";
    /// @dev The number of decimal places for the token.
    uint8 public constant decimals = 18;
    /// @notice Returns the amount of tokens in existence.
    uint256 public totalSupply;

    /// @notice Returns the amount of tokens owned by `account`. balanceOf[account]
    mapping(address => uint256) public balanceOf;
    /// @notice The remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. allowance[owner][spender]
    mapping(address => mapping(address => uint256)) public allowance;
    /**
     * @notice Provides replay attack protection for ERC20 Permits. nonces[owner]
     * @dev This value must be included whenever a signature is generated for {permit}.
     * @dev Every successful call to {permit} increases `owner`'s nonce by one.
     */
    mapping(address => uint256) public nonces;

    /**
     * @dev `usr` was granted owner access.
     * @param usr The user address.
     */
    event Rely(address indexed usr);
    /**
     * @notice `usr` owner access was revoked.
     * @param usr The user address.
     */
    event Deny(address indexed usr);
    /**
     * @notice A contract parameter was updated.
     * @param what The parameter being changed. One of: "name", "symbol".
     * @param data The new value of the parameter.
     */
    event File(bytes32 indexed what, string data);

    /**
     * @notice Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}.
     * @param owner The account setting the allowance.
     * @param spender The account receiving the allowance.
     * @param value The new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
    /**
     * @notice Emitted when `value` tokens are moved from one account (`from`) to another (`to`).
     * @param from The source of the funds.
     * @param to The destination of the funds.
     * @param value The amount transfered. Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    // --- EIP712 niceties ---
    /// @dev The chain ID of the chain in which the token has been deployed.
    uint256 public immutable deploymentChainId;
    /// @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
    bytes32 private immutable _DOMAIN_SEPARATOR;
    /// @dev ERC-712 typehash for permits.
    bytes32 public constant PERMIT_TYPEHASH =
        keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");

    modifier auth() {
        require(wards[msg.sender] == 1, "SDAO/not-authorized");
        _;
    }

    /**
     * @param _name The name of the token.
     * @param _symbol The symbol of the token.
     */
    constructor(string memory _name, string memory _symbol) {
        name = _name;
        symbol = _symbol;

        wards[msg.sender] = 1;
        emit Rely(msg.sender);

        deploymentChainId = block.chainid;
        _DOMAIN_SEPARATOR = _calculateDomainSeparator(block.chainid);
    }

    /**
     * @dev Calculates the EIP-712 domain separator for permits.
     * @param chainId The required chain ID.
     * @return The keccak256 hash of the EIP-712 identifier.
     */
    function _calculateDomainSeparator(uint256 chainId) private view returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                    keccak256(bytes(name)),
                    keccak256(bytes(version)),
                    chainId,
                    address(this)
                )
            );
    }

    /**
     * @notice Calculates the EIP-712 domain separator for permits.
     * @dev To prevent replay attacks after potential chain splits, the cached domain separator is used only if the
     * current chain ID matches the cached chain ID. Otherwise, the domain separator is recalculated every time.
     * @return The keccak256 hash of the EIP-712 identifier.
     */
    function DOMAIN_SEPARATOR() external view returns (bytes32) {
        return block.chainid == deploymentChainId ? _DOMAIN_SEPARATOR : _calculateDomainSeparator(block.chainid);
    }

    // --- Administration ---

    /**
     * @notice Grants `usr` admin access to this contract.
     * @param usr The user address.
     */
    function rely(address usr) external auth {
        wards[usr] = 1;
        emit Rely(usr);
    }

    /**
     * @notice Revokes `usr` admin access from this contract.
     * @param usr The user address.
     */
    function deny(address usr) external auth {
        wards[usr] = 0;
        emit Deny(usr);
    }

    /**
     * @notice Updates token parameters.
     * @dev There are no mechanisms to prevent governance from changing token parameters more than once.
     *      We assume that the enforcement will be handled off-chain through governance artifacts.
     * @param what The parameter being changed. One of: "name", "symbol".
     * @param data The updated value for the parameter.
     */
    function file(bytes32 what, string calldata data) external auth {
        if (what == "name") {
            name = data;
        } else if (what == "symbol") {
            symbol = data;
        } else {
            revert("SDAO/file-unrecognized-param");
        }

        emit File(what, data);
    }

    // --- ERC20 Mutations ---

    /**
     * @notice Moves `amount` tokens from `msg.sender` to `to`.
     * @dev Emits a {Transfer} event.
     * @param to The destination for the tokens.
     * @param value The amount of tokens to transfer.
     * @return Always `true` if the transaction did not revert.
     */
    function transfer(address to, uint256 value) external returns (bool) {
        require(to != address(0) && to != address(this), "SDAO/invalid-address");
        uint256 balance = balanceOf[msg.sender];
        require(balance >= value, "SDAO/insufficient-balance");

        unchecked {
            balanceOf[msg.sender] = balance - value;
            // Note: safe as the sum of all balances is equal to `totalSupply`;
            // any overflow would have occurred already when increasing `totalSupply`
            balanceOf[to] += value;
        }

        emit Transfer(msg.sender, to, value);

        return true;
    }

    /**
     * @notice Moves `amount` tokens from `from` to `to` using the allowance mechanism.
     * @dev Emits a {Transfer} event.
     * @param from The origin of the tokens.
     * @param to The destination for the tokens.
     * @param value The amount of tokens to transfer.
     * @return Always `true` if the transaction did not revert.
     */
    function transferFrom(address from, address to, uint256 value) external returns (bool) {
        require(to != address(0) && to != address(this), "SDAO/invalid-address");
        uint256 balance = balanceOf[from];
        require(balance >= value, "SDAO/insufficient-balance");

        if (from != msg.sender) {
            uint256 allowed = allowance[from][msg.sender];
            if (allowed != type(uint256).max) {
                require(allowed >= value, "SDAO/insufficient-allowance");

                unchecked {
                    allowance[from][msg.sender] = allowed - value;
                }
            }
        }

        unchecked {
            balanceOf[from] = balance - value;
            // Note: safe as the sum of all balances is equal to `totalSupply`;
            // any overflow would have occurred already when increasing `totalSupply`
            balanceOf[to] += value;
        }

        emit Transfer(from, to, value);

        return true;
    }

    /**
     * @notice Sets `amount` as the allowance of `spender` over `msg.sender` tokens.
     * @dev Emits an {Approval} event.
     * @param spender The account receiving the allowance.
     * @param value The amount for allowance.
     * @return Always `true` if the transaction did not revert.
     *
     * @dev 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
     */
    function approve(address spender, uint256 value) external returns (bool) {
        allowance[msg.sender][spender] = value;

        emit Approval(msg.sender, spender, value);

        return true;
    }

    // --- Mint/Burn ---

    /**
     * @notice Creates `amount` tokens and assigns them to `to`, increasing the total supply.
     * @dev Only authorized parties can call this function.
     * @dev `to` must not be the zero address.
     * @dev Emits a {Transfer} event with `from` set to the zero address.
     * @param to The destination for the minted tokens.
     * @param value The amount of tokens to mint.
     */
    function mint(address to, uint256 value) external auth {
        require(to != address(0) && to != address(this), "SDAO/invalid-address");
        unchecked {
            // Note: safe as the sum of all balances is equal to `totalSupply`;
            // there is already an overvlow check below
            balanceOf[to] = balanceOf[to] + value;
        }
        totalSupply = totalSupply + value;

        emit Transfer(address(0), to, value);
    }

    /**
     * @notice Destroys `amount` tokens and assigns them to `to`, decreasing the total supply.
     * @dev If `from` != `msg.sender`, it uses the allowance mechanism.
     * @dev Emits a {Transfer} event with `to` set to the zero address.
     * @param from The origin for the burnt tokens.
     * @param value The amount of tokens to burn.
     */
    function burn(address from, uint256 value) external {
        uint256 balance = balanceOf[from];
        require(balance >= value, "SDAO/insufficient-balance");

        if (from != msg.sender) {
            uint256 allowed = allowance[from][msg.sender];
            if (allowed != type(uint256).max) {
                require(allowed >= value, "SDAO/insufficient-allowance");

                unchecked {
                    allowance[from][msg.sender] = allowed - value;
                }
            }
        }

        unchecked {
            // Note: we don't need an underflow check here b/c `balance >= value`
            balanceOf[from] = balance - value;
            // Note: we don't need an underflow check here b/c `totalSupply >= balance >= value`
            totalSupply = totalSupply - value;
        }

        emit Transfer(from, address(0), value);
    }

    // --- Approve by signature ---

    /**
     * @notice Validates a `signature` of `digest` from `signer`.
     * @dev This function supports both EOA signature validation through ecrecover and EIP-1271 style smart contract
     * signature validation.
     * @param signer The signer account or smart contract.
     * @param digest The hash of the message being signed.
     * @param signature The signature.
     * @return Whether the signature is valid or not.
     */
    function _isValidSignature(address signer, bytes32 digest, bytes memory signature) internal view returns (bool) {
        if (signature.length == 65) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
            if (signer == ecrecover(digest, v, r, s)) {
                return true;
            }
        }

        if (signer.code.length > 0) {
            (bool success, bytes memory result) = signer.staticcall(
                abi.encodeCall(IERC1271.isValidSignature, (digest, signature))
            );
            return (success &&
                result.length == 32 &&
                abi.decode(result, (bytes4)) == IERC1271.isValidSignature.selector);
        }

        return false;
    }

    /**
     * @notice Sets `value` as the allowance of `spender` over `owner`'s tokens, given `owner`'s signed approval.
     * @dev Emits an {Approval} event.
     * @param owner The account setting the allowance through permit.
     * @param spender The account receiving the allowance through permit. CANNOT be the zero address.
     * @param value The amount for allowance through permit.
     * @param deadline Until when the permit is valid. MUST be a timestamp in the future.
     * @param signature The signature for the permit. MUST use `owner`'s current nonce (see {nonces}).
     *
     * @dev IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here.
     */
    function permit(address owner, address spender, uint256 value, uint256 deadline, bytes memory signature) public {
        require(block.timestamp <= deadline, "SDAO/permit-expired");
        require(owner != address(0), "SDAO/invalid-owner");

        uint256 nonce;
        unchecked {
            nonce = nonces[owner]++;
        }

        bytes32 digest = keccak256(
            abi.encodePacked(
                "\x19\x01",
                block.chainid == deploymentChainId ? _DOMAIN_SEPARATOR : _calculateDomainSeparator(block.chainid),
                keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonce, deadline))
            )
        );

        require(_isValidSignature(owner, digest, signature), "SDAO/invalid-permit");

        allowance[owner][spender] = value;
        emit Approval(owner, spender, value);
    }

    /**
     * @notice Sets `value` as the allowance of `spender` over `owner`'s tokens, given `owner`'s signed approval.
     * @dev Emits an {Approval} event.
     * @param owner The account setting the allowance through permit.
     * @param spender The account receiving the allowance through permit. CANNOT be the zero address.
     * @param value The amount for allowance through permit.
     * @param deadline Until when the permit is valid. MUST be a timestamp in the future.
     * @param v Ethereum signature recovery ID.
     * @param r Ethereum ECDSA signature output.
     * @param s Ethereum ECDSA signature output.
     *
     * @dev IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here.
     */
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external {
        permit(owner, spender, value, deadline, abi.encodePacked(r, s, v));
    }
}

Settings
{
  "remappings": [
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "dss-interfaces/=lib/dss-test/lib/dss-interfaces/src/",
    "dss-test/=lib/dss-test/src/",
    "forge-std/=lib/forge-std/src/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/",
    "dss-vest/=lib-0_6_x/dss-vest/src/",
    "token-tests/=lib/token-tests/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs"
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "london",
  "viaIR": false,
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"usr","type":"address"}],"name":"Deny","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"what","type":"bytes32"},{"indexed":false,"internalType":"string","name":"data","type":"string"}],"name":"File","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Rely","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"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"deny","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deploymentChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"what","type":"bytes32"},{"internalType":"string","name":"data","type":"string"}],"name":"file","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"rely","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"value","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":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60c06040523480156200001157600080fd5b5060405162001b4938038062001b49833981016040819052620000349162000221565b60016200004283826200031a565b5060026200005182826200031a565b503360008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a24660808190526200009c90620000a8565b60a05250620004649050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6001604051620000dc9190620003e6565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200018457600080fd5b81516001600160401b0380821115620001a157620001a16200015c565b604051601f8301601f19908116603f01168101908282118183101715620001cc57620001cc6200015c565b81604052838152602092508683858801011115620001e957600080fd5b600091505b838210156200020d5785820183015181830184015290820190620001ee565b600093810190920192909252949350505050565b600080604083850312156200023557600080fd5b82516001600160401b03808211156200024d57600080fd5b6200025b8683870162000172565b935060208501519150808211156200027257600080fd5b50620002818582860162000172565b9150509250929050565b600181811c90821680620002a057607f821691505b602082108103620002c157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200031557600081815260208120601f850160051c81016020861015620002f05750805b601f850160051c820191505b818110156200031157828155600101620002fc565b5050505b505050565b81516001600160401b038111156200033657620003366200015c565b6200034e816200034784546200028b565b84620002c7565b602080601f8311600181146200038657600084156200036d5750858301515b600019600386901b1c1916600185901b17855562000311565b600085815260208120601f198616915b82811015620003b75788860151825594840194600190910190840162000396565b5085821015620003d65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000808354620003f6816200028b565b60018281168015620004115760018114620004275762000458565b60ff198416875282151583028701945062000458565b8760005260208060002060005b858110156200044f5781548a82015290840190820162000434565b50505082870194505b50929695505050505050565b60805160a0516116aa6200049f600039600081816107340152610b4101526000818161030f015281816106fe0152610b0d01526116aa6000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c806370a08231116100b85780639fd5a6cf1161007c5780639fd5a6cf146102c4578063a9059cbb146102d7578063bf353dbb146102ea578063cd0d00961461030a578063d505accf14610331578063dd62ed3e1461034457600080fd5b806370a08231146102565780637ecebe001461027657806395d89b41146102965780639c52a7f11461029e5780639dc29fac146102b157600080fd5b806330adf81f1161010a57806330adf81f146101c7578063313ce567146101ee5780633644e5151461020857806340c10f191461021057806354fd4d501461022357806365fae35e1461024357600080fd5b806306fdde0314610147578063095ea7b314610165578063097ac46e1461018857806318160ddd1461019d57806323b872dd146101b4575b600080fd5b61014f61036f565b60405161015c919061107d565b60405180910390f35b6101786101733660046110ac565b6103fd565b604051901515815260200161015c565b61019b6101963660046110d6565b61046a565b005b6101a660035481565b60405190815260200161015c565b6101786101c2366004611152565b610567565b6101a67f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6101f6601281565b60405160ff909116815260200161015c565b6101a66106fa565b61019b61021e3660046110ac565b610756565b61014f604051806040016040528060018152602001603160f81b81525081565b61019b61025136600461118e565b610824565b6101a661026436600461118e565b60046020526000908152604090205481565b6101a661028436600461118e565b60066020526000908152604090205481565b61014f610898565b61019b6102ac36600461118e565b6108a5565b61019b6102bf3660046110ac565b610918565b61019b6102d23660046111bf565b610a57565b6101786102e53660046110ac565b610cc4565b6101a66102f836600461118e565b60006020819052908152604090205481565b6101a67f000000000000000000000000000000000000000000000000000000000000000081565b61019b61033f3660046112a5565b610d8b565b6101a6610352366004611318565b600560209081526000928352604080842090915290825290205481565b6001805461037c9061134b565b80601f01602080910402602001604051908101604052809291908181526020018280546103a89061134b565b80156103f55780601f106103ca576101008083540402835291602001916103f5565b820191906000526020600020905b8154815290600101906020018083116103d857829003601f168201915b505050505081565b3360008181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906104589086815260200190565b60405180910390a35060015b92915050565b336000908152602081905260409020546001146104a25760405162461bcd60e51b815260040161049990611385565b60405180910390fd5b82636e616d6560e01b036104c35760016104bd828483611401565b50610528565b82651cde5b589bdb60d21b036104e05760026104bd828483611401565b60405162461bcd60e51b815260206004820152601c60248201527f5344414f2f66696c652d756e7265636f676e697a65642d706172616d000000006044820152606401610499565b827fe42e0b9a029dc87ccb1029c632e6359090acd0eb032b2b59c811e3ec70160dc6838360405161055a9291906114c2565b60405180910390a2505050565b60006001600160a01b0383161580159061058a57506001600160a01b0383163014155b6105a65760405162461bcd60e51b8152600401610499906114f1565b6001600160a01b038416600090815260046020526040902054828110156105df5760405162461bcd60e51b81526004016104999061151f565b6001600160a01b0385163314610697576001600160a01b03851660009081526005602090815260408083203384529091529020546000198114610695578381101561066c5760405162461bcd60e51b815260206004820152601b60248201527f5344414f2f696e73756666696369656e742d616c6c6f77616e636500000000006044820152606401610499565b6001600160a01b0386166000908152600560209081526040808320338452909152902084820390555b505b6001600160a01b038086166000818152600460205260408082208786039055928716808252908390208054870190559151600080516020611655833981519152906106e59087815260200190565b60405180910390a360019150505b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146107315761072c46610de2565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b336000908152602081905260409020546001146107855760405162461bcd60e51b815260040161049990611385565b6001600160a01b038216158015906107a657506001600160a01b0382163014155b6107c25760405162461bcd60e51b8152600401610499906114f1565b6001600160a01b03821660009081526004602052604090208054820190556003546107ee908290611556565b6003556040518181526001600160a01b038316906000906000805160206116558339815191529060200160405180910390a35050565b336000908152602081905260409020546001146108535760405162461bcd60e51b815260040161049990611385565b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b6002805461037c9061134b565b336000908152602081905260409020546001146108d45760405162461bcd60e51b815260040161049990611385565b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b6001600160a01b038216600090815260046020526040902054818110156109515760405162461bcd60e51b81526004016104999061151f565b6001600160a01b0383163314610a09576001600160a01b03831660009081526005602090815260408083203384529091529020546000198114610a0757828110156109de5760405162461bcd60e51b815260206004820152601b60248201527f5344414f2f696e73756666696369656e742d616c6c6f77616e636500000000006044820152606401610499565b6001600160a01b0384166000908152600560209081526040808320338452909152902083820390555b505b6001600160a01b0383166000818152600460209081526040808320868603905560038054879003905551858152919291600080516020611655833981519152910160405180910390a3505050565b81421115610a9d5760405162461bcd60e51b815260206004820152601360248201527214d11053cbdc195c9b5a5d0b595e1c1a5c9959606a1b6044820152606401610499565b6001600160a01b038516610ae85760405162461bcd60e51b815260206004820152601260248201527129a220a797b4b73b30b634b216b7bbb732b960711b6044820152606401610499565b6001600160a01b038516600090815260066020526040812080546001810190915590467f000000000000000000000000000000000000000000000000000000000000000014610b3f57610b3a46610de2565b610b61565b7f00000000000000000000000000000000000000000000000000000000000000005b604080517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960208201526001600160a01b03808b169282019290925290881660608201526080810187905260a0810184905260c0810186905260e00160405160208183030381529060405280519060200120604051602001610bfa92919061190160f01b81526002810192909252602282015260420190565b604051602081830303815290604052805190602001209050610c1d878285610e94565b610c5f5760405162461bcd60e51b815260206004820152601360248201527214d11053cbda5b9d985b1a590b5c195c9b5a5d606a1b6044820152606401610499565b6001600160a01b038781166000818152600560209081526040808320948b168084529482529182902089905590518881527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b60006001600160a01b03831615801590610ce757506001600160a01b0383163014155b610d035760405162461bcd60e51b8152600401610499906114f1565b3360009081526004602052604090205482811015610d335760405162461bcd60e51b81526004016104999061151f565b33600081815260046020908152604080832087860390556001600160a01b0388168084529281902080548801905551868152919291600080516020611655833981519152910160405180910390a35060019392505050565b610dd987878787868689604051602001610dc593929190928352602083019190915260f81b6001600160f81b031916604082015260410190565b604051602081830303815290604052610a57565b50505050505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6001604051610e149190611577565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b60008151604103610f3157602082810151604080850151606080870151835160008082529681018086528a9052951a928501839052840183905260808401819052919260019060a0016020604051602081039080840390855afa158015610eff573d6000803e3d6000fd5b505050602060405103516001600160a01b0316876001600160a01b031603610f2d57600193505050506106f3565b5050505b6001600160a01b0384163b1561102357600080856001600160a01b03168585604051602401610f619291906115ed565b60408051601f198184030181529181526020820180516001600160e01b0316630b135d3f60e11b17905251610f96919061160e565b600060405180830381855afa9150503d8060008114610fd1576040519150601f19603f3d011682016040523d82523d6000602084013e610fd6565b606091505b5091509150818015610fe9575080516020145b801561101a57508051630b135d3f60e11b9061100e908301602090810190840161162a565b6001600160e01b031916145b925050506106f3565b5060009392505050565b60005b83811015611048578181015183820152602001611030565b50506000910152565b6000815180845261106981602086016020860161102d565b601f01601f19169290920160200192915050565b6020815260006106f36020830184611051565b80356001600160a01b03811681146110a757600080fd5b919050565b600080604083850312156110bf57600080fd5b6110c883611090565b946020939093013593505050565b6000806000604084860312156110eb57600080fd5b83359250602084013567ffffffffffffffff8082111561110a57600080fd5b818601915086601f83011261111e57600080fd5b81358181111561112d57600080fd5b87602082850101111561113f57600080fd5b6020830194508093505050509250925092565b60008060006060848603121561116757600080fd5b61117084611090565b925061117e60208501611090565b9150604084013590509250925092565b6000602082840312156111a057600080fd5b6106f382611090565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a086880312156111d757600080fd5b6111e086611090565b94506111ee60208701611090565b93506040860135925060608601359150608086013567ffffffffffffffff8082111561121957600080fd5b818801915088601f83011261122d57600080fd5b81358181111561123f5761123f6111a9565b604051601f8201601f19908116603f01168101908382118183101715611267576112676111a9565b816040528281528b602084870101111561128057600080fd5b8260208601602083013760006020848301015280955050505050509295509295909350565b600080600080600080600060e0888a0312156112c057600080fd5b6112c988611090565b96506112d760208901611090565b95506040880135945060608801359350608088013560ff811681146112fb57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561132b57600080fd5b61133483611090565b915061134260208401611090565b90509250929050565b600181811c9082168061135f57607f821691505b60208210810361137f57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526013908201527214d11053cbdb9bdd0b585d5d1a1bdc9a5e9959606a1b604082015260600190565b601f8211156113fc57600081815260208120601f850160051c810160208610156113d95750805b601f850160051c820191505b818110156113f8578281556001016113e5565b5050505b505050565b67ffffffffffffffff831115611419576114196111a9565b61142d83611427835461134b565b836113b2565b6000601f84116001811461146157600085156114495750838201355b600019600387901b1c1916600186901b1783556114bb565b600083815260209020601f19861690835b828110156114925786850135825560209485019460019092019101611472565b50868210156114af5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6020808252601490820152735344414f2f696e76616c69642d6164647265737360601b604082015260600190565b60208082526019908201527f5344414f2f696e73756666696369656e742d62616c616e636500000000000000604082015260600190565b8082018082111561046457634e487b7160e01b600052601160045260246000fd5b60008083546115858161134b565b6001828116801561159d57600181146115b2576115e1565b60ff19841687528215158302870194506115e1565b8760005260208060002060005b858110156115d85781548a8201529084019082016115bf565b50505082870194505b50929695505050505050565b8281526040602082015260006116066040830184611051565b949350505050565b6000825161162081846020870161102d565b9190910192915050565b60006020828403121561163c57600080fd5b81516001600160e01b0319811681146106f357600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122008c74f7592e980a7fa5874c3d9f547b41d80661e9080173b1e5f6f6c677714fe64736f6c63430008100033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000005537061726b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000353504b0000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101425760003560e01c806370a08231116100b85780639fd5a6cf1161007c5780639fd5a6cf146102c4578063a9059cbb146102d7578063bf353dbb146102ea578063cd0d00961461030a578063d505accf14610331578063dd62ed3e1461034457600080fd5b806370a08231146102565780637ecebe001461027657806395d89b41146102965780639c52a7f11461029e5780639dc29fac146102b157600080fd5b806330adf81f1161010a57806330adf81f146101c7578063313ce567146101ee5780633644e5151461020857806340c10f191461021057806354fd4d501461022357806365fae35e1461024357600080fd5b806306fdde0314610147578063095ea7b314610165578063097ac46e1461018857806318160ddd1461019d57806323b872dd146101b4575b600080fd5b61014f61036f565b60405161015c919061107d565b60405180910390f35b6101786101733660046110ac565b6103fd565b604051901515815260200161015c565b61019b6101963660046110d6565b61046a565b005b6101a660035481565b60405190815260200161015c565b6101786101c2366004611152565b610567565b6101a67f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6101f6601281565b60405160ff909116815260200161015c565b6101a66106fa565b61019b61021e3660046110ac565b610756565b61014f604051806040016040528060018152602001603160f81b81525081565b61019b61025136600461118e565b610824565b6101a661026436600461118e565b60046020526000908152604090205481565b6101a661028436600461118e565b60066020526000908152604090205481565b61014f610898565b61019b6102ac36600461118e565b6108a5565b61019b6102bf3660046110ac565b610918565b61019b6102d23660046111bf565b610a57565b6101786102e53660046110ac565b610cc4565b6101a66102f836600461118e565b60006020819052908152604090205481565b6101a67f000000000000000000000000000000000000000000000000000000000000000181565b61019b61033f3660046112a5565b610d8b565b6101a6610352366004611318565b600560209081526000928352604080842090915290825290205481565b6001805461037c9061134b565b80601f01602080910402602001604051908101604052809291908181526020018280546103a89061134b565b80156103f55780601f106103ca576101008083540402835291602001916103f5565b820191906000526020600020905b8154815290600101906020018083116103d857829003601f168201915b505050505081565b3360008181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906104589086815260200190565b60405180910390a35060015b92915050565b336000908152602081905260409020546001146104a25760405162461bcd60e51b815260040161049990611385565b60405180910390fd5b82636e616d6560e01b036104c35760016104bd828483611401565b50610528565b82651cde5b589bdb60d21b036104e05760026104bd828483611401565b60405162461bcd60e51b815260206004820152601c60248201527f5344414f2f66696c652d756e7265636f676e697a65642d706172616d000000006044820152606401610499565b827fe42e0b9a029dc87ccb1029c632e6359090acd0eb032b2b59c811e3ec70160dc6838360405161055a9291906114c2565b60405180910390a2505050565b60006001600160a01b0383161580159061058a57506001600160a01b0383163014155b6105a65760405162461bcd60e51b8152600401610499906114f1565b6001600160a01b038416600090815260046020526040902054828110156105df5760405162461bcd60e51b81526004016104999061151f565b6001600160a01b0385163314610697576001600160a01b03851660009081526005602090815260408083203384529091529020546000198114610695578381101561066c5760405162461bcd60e51b815260206004820152601b60248201527f5344414f2f696e73756666696369656e742d616c6c6f77616e636500000000006044820152606401610499565b6001600160a01b0386166000908152600560209081526040808320338452909152902084820390555b505b6001600160a01b038086166000818152600460205260408082208786039055928716808252908390208054870190559151600080516020611655833981519152906106e59087815260200190565b60405180910390a360019150505b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000146146107315761072c46610de2565b905090565b507f80da50c80a30fe4e45bea891edd67f58936ae5a79268d87e83b8e1570b4e476a90565b336000908152602081905260409020546001146107855760405162461bcd60e51b815260040161049990611385565b6001600160a01b038216158015906107a657506001600160a01b0382163014155b6107c25760405162461bcd60e51b8152600401610499906114f1565b6001600160a01b03821660009081526004602052604090208054820190556003546107ee908290611556565b6003556040518181526001600160a01b038316906000906000805160206116558339815191529060200160405180910390a35050565b336000908152602081905260409020546001146108535760405162461bcd60e51b815260040161049990611385565b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b6002805461037c9061134b565b336000908152602081905260409020546001146108d45760405162461bcd60e51b815260040161049990611385565b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b6001600160a01b038216600090815260046020526040902054818110156109515760405162461bcd60e51b81526004016104999061151f565b6001600160a01b0383163314610a09576001600160a01b03831660009081526005602090815260408083203384529091529020546000198114610a0757828110156109de5760405162461bcd60e51b815260206004820152601b60248201527f5344414f2f696e73756666696369656e742d616c6c6f77616e636500000000006044820152606401610499565b6001600160a01b0384166000908152600560209081526040808320338452909152902083820390555b505b6001600160a01b0383166000818152600460209081526040808320868603905560038054879003905551858152919291600080516020611655833981519152910160405180910390a3505050565b81421115610a9d5760405162461bcd60e51b815260206004820152601360248201527214d11053cbdc195c9b5a5d0b595e1c1a5c9959606a1b6044820152606401610499565b6001600160a01b038516610ae85760405162461bcd60e51b815260206004820152601260248201527129a220a797b4b73b30b634b216b7bbb732b960711b6044820152606401610499565b6001600160a01b038516600090815260066020526040812080546001810190915590467f000000000000000000000000000000000000000000000000000000000000000114610b3f57610b3a46610de2565b610b61565b7f80da50c80a30fe4e45bea891edd67f58936ae5a79268d87e83b8e1570b4e476a5b604080517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960208201526001600160a01b03808b169282019290925290881660608201526080810187905260a0810184905260c0810186905260e00160405160208183030381529060405280519060200120604051602001610bfa92919061190160f01b81526002810192909252602282015260420190565b604051602081830303815290604052805190602001209050610c1d878285610e94565b610c5f5760405162461bcd60e51b815260206004820152601360248201527214d11053cbda5b9d985b1a590b5c195c9b5a5d606a1b6044820152606401610499565b6001600160a01b038781166000818152600560209081526040808320948b168084529482529182902089905590518881527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b60006001600160a01b03831615801590610ce757506001600160a01b0383163014155b610d035760405162461bcd60e51b8152600401610499906114f1565b3360009081526004602052604090205482811015610d335760405162461bcd60e51b81526004016104999061151f565b33600081815260046020908152604080832087860390556001600160a01b0388168084529281902080548801905551868152919291600080516020611655833981519152910160405180910390a35060019392505050565b610dd987878787868689604051602001610dc593929190928352602083019190915260f81b6001600160f81b031916604082015260410190565b604051602081830303815290604052610a57565b50505050505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6001604051610e149190611577565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b60008151604103610f3157602082810151604080850151606080870151835160008082529681018086528a9052951a928501839052840183905260808401819052919260019060a0016020604051602081039080840390855afa158015610eff573d6000803e3d6000fd5b505050602060405103516001600160a01b0316876001600160a01b031603610f2d57600193505050506106f3565b5050505b6001600160a01b0384163b1561102357600080856001600160a01b03168585604051602401610f619291906115ed565b60408051601f198184030181529181526020820180516001600160e01b0316630b135d3f60e11b17905251610f96919061160e565b600060405180830381855afa9150503d8060008114610fd1576040519150601f19603f3d011682016040523d82523d6000602084013e610fd6565b606091505b5091509150818015610fe9575080516020145b801561101a57508051630b135d3f60e11b9061100e908301602090810190840161162a565b6001600160e01b031916145b925050506106f3565b5060009392505050565b60005b83811015611048578181015183820152602001611030565b50506000910152565b6000815180845261106981602086016020860161102d565b601f01601f19169290920160200192915050565b6020815260006106f36020830184611051565b80356001600160a01b03811681146110a757600080fd5b919050565b600080604083850312156110bf57600080fd5b6110c883611090565b946020939093013593505050565b6000806000604084860312156110eb57600080fd5b83359250602084013567ffffffffffffffff8082111561110a57600080fd5b818601915086601f83011261111e57600080fd5b81358181111561112d57600080fd5b87602082850101111561113f57600080fd5b6020830194508093505050509250925092565b60008060006060848603121561116757600080fd5b61117084611090565b925061117e60208501611090565b9150604084013590509250925092565b6000602082840312156111a057600080fd5b6106f382611090565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a086880312156111d757600080fd5b6111e086611090565b94506111ee60208701611090565b93506040860135925060608601359150608086013567ffffffffffffffff8082111561121957600080fd5b818801915088601f83011261122d57600080fd5b81358181111561123f5761123f6111a9565b604051601f8201601f19908116603f01168101908382118183101715611267576112676111a9565b816040528281528b602084870101111561128057600080fd5b8260208601602083013760006020848301015280955050505050509295509295909350565b600080600080600080600060e0888a0312156112c057600080fd5b6112c988611090565b96506112d760208901611090565b95506040880135945060608801359350608088013560ff811681146112fb57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561132b57600080fd5b61133483611090565b915061134260208401611090565b90509250929050565b600181811c9082168061135f57607f821691505b60208210810361137f57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526013908201527214d11053cbdb9bdd0b585d5d1a1bdc9a5e9959606a1b604082015260600190565b601f8211156113fc57600081815260208120601f850160051c810160208610156113d95750805b601f850160051c820191505b818110156113f8578281556001016113e5565b5050505b505050565b67ffffffffffffffff831115611419576114196111a9565b61142d83611427835461134b565b836113b2565b6000601f84116001811461146157600085156114495750838201355b600019600387901b1c1916600186901b1783556114bb565b600083815260209020601f19861690835b828110156114925786850135825560209485019460019092019101611472565b50868210156114af5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6020808252601490820152735344414f2f696e76616c69642d6164647265737360601b604082015260600190565b60208082526019908201527f5344414f2f696e73756666696369656e742d62616c616e636500000000000000604082015260600190565b8082018082111561046457634e487b7160e01b600052601160045260246000fd5b60008083546115858161134b565b6001828116801561159d57600181146115b2576115e1565b60ff19841687528215158302870194506115e1565b8760005260208060002060005b858110156115d85781548a8201529084019082016115bf565b50505082870194505b50929695505050505050565b8281526040602082015260006116066040830184611051565b949350505050565b6000825161162081846020870161102d565b9190910192915050565b60006020828403121561163c57600080fd5b81516001600160e01b0319811681146106f357600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122008c74f7592e980a7fa5874c3d9f547b41d80661e9080173b1e5f6f6c677714fe64736f6c63430008100033

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

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000005537061726b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000353504b0000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Spark
Arg [1] : _symbol (string): SPK

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [3] : 537061726b000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [5] : 53504b0000000000000000000000000000000000000000000000000000000000


Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ 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.