Contract 0xa684cd057951541187f288294a1e1c2646aa2d24 19

 

Contract Overview

Vesta Finance: VSTA Token
Balance:
0 ETH

ETH Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xfa486ed6cfbc5ececb1db95ce9df0d73012c0f1ae6f5f45f3ce23e6540dfab6cApprove2046328832024-04-25 9:40:4348 mins ago0xfdbe35686ea35d0d924408a51d7e31e2a15d1367 IN  Vesta Finance: VSTA Token0 ETH0.00000086 0.010245
0x8de6970e728097b9b43e25af6faad8234eec61c844f5327123d11da38f7de5afApprove2046231872024-04-25 8:59:001 hr 29 mins ago0x293f99dc1164a7f383054759997e2335afc2329c IN  Vesta Finance: VSTA Token0 ETH0.00000081 0.01
0xc0b684e41e63cfc948951de2854c4363312474bb2a145ea4daac669cc56a167fApprove2046178592024-04-25 8:35:581 hr 52 mins ago0x63577e7034eeec4446fdcb58a547bda878ebf33b IN  Vesta Finance: VSTA Token0 ETH0.00000089 0.01
0xbfa01391cca1cfd992043c7cf9feee15273a77ff46947fc70f1be53473a12f64Approve2046132272024-04-25 8:16:102 hrs 12 mins ago0x103b30fb440e163ce56d6152b892b6d63c932b53 IN  Vesta Finance: VSTA Token0 ETH0.000000580.010535
0x3e8fd02cf73b81cb2450f1d44494ba0524664ff89e42d797bec2e7871357322dApprove2046111572024-04-25 8:07:042 hrs 21 mins ago0x672ff444b2b597d43ed2d33a37b682ae903acf38 IN  Vesta Finance: VSTA Token0 ETH0.00000077 0.01
0x13b81634a6e4ff642c81ab725bae2fd98c19f7a59c56af89bcba0c68923bbd2dApprove2046099492024-04-25 8:01:532 hrs 26 mins ago0x30a8dbe362a03a69b899ddb8c7cd0a25fc2a33b3 IN  Vesta Finance: VSTA Token0 ETH0.00000054 0.01
0xa0a954a92271c0f4a60810f0b7ad3b4cebb5723a32edb6f716e3d278a11ce5fbApprove2045966022024-04-25 7:04:093 hrs 24 mins ago0xe5bd41153150758cd1c9085a520145dbbc8290d1 IN  Vesta Finance: VSTA Token0 ETH0.00000060.01
0xfe35ab13a8c45bdb16aecb2b1b329335a28be2d5536b3e81f7c5812c5da11455Approve2045942402024-04-25 6:54:013 hrs 34 mins ago0x569712b6d0cc535993736ad0c1e779e6c6ffcfed IN  Vesta Finance: VSTA Token0 ETH0.00000063 0.01
0x9feaf0789d1dc3d66277bab154c684d7bcbc7cd3d665459e3b3af5a964eac24bApprove2045859742024-04-25 6:18:564 hrs 9 mins ago0x98b055b87ce7fce2f71e6805f0827da1fb3d0f34 IN  Vesta Finance: VSTA Token0 ETH0.00000066 0.01
0x2bf1503ad655230872a5220d3536c6254bf3b4aea0442daa8d820ce4bfe4b3c7Approve2045816592024-04-25 6:00:254 hrs 28 mins ago0xe7bc34716313b4f18b9584a6dc0ab959ce2f4388 IN  Vesta Finance: VSTA Token0 ETH0.00000064 0.01
0x3dccacf4a5f3c0e39c17c66ad2389ac2136a5f7b94a178f87e6f3ceff083a07aApprove2045809442024-04-25 5:57:194 hrs 31 mins ago0x6ce10efa053fa3fad0cd6c355a337e8338796567 IN  Vesta Finance: VSTA Token0 ETH0.00000038 0.01
0xd2900b03e9c748528c6c4de435f186cbdb472a7b497fd1fe56919dc0cd9396d3Approve2045758702024-04-25 5:35:324 hrs 53 mins ago0xd781f65cd90ee9418c70d1d244192c349bf1176c IN  Vesta Finance: VSTA Token0 ETH0.00000063 0.01
0x0df8f8dd1efa822004dbf99bc40a6c3dde1dbda1d84497fc2e7f92032630baffPermit2045722052024-04-25 5:20:085 hrs 8 mins ago0x58461cd81e8d7703b801cc807c6a9a39e267a994 IN  Vesta Finance: VSTA Token0 ETH0.00000081 0.01
0x01bf0f392dcde7eeae898d28ad169ee43751eaf6cf557b7e0d1d7215078a5eb7Permit2045632322024-04-25 4:41:535 hrs 46 mins ago0x29d3c15e69ab9689feb7e383a0f16dca3b1b54a2 IN  Vesta Finance: VSTA Token0 ETH0.00000085 0.01
0x6722a07a7a46336e3fa44c0dab723b730c02e1952746ae69a071bc26d312b3beApprove2045461782024-04-25 3:29:026 hrs 59 mins ago0x4ffd0a59a26cb2aa76d403215e4cc2845c053994 IN  Vesta Finance: VSTA Token0 ETH0.000000620.01
0x83fe8be7d8c01d59f7d1794ae42b16255be5ef9fc75b3a3f0c0f21ec30259693Approve2045334962024-04-25 2:34:547 hrs 53 mins ago0xbb8eab8da7792cf59ad2c053d6b49b4636a507dc IN  Vesta Finance: VSTA Token0 ETH0.000000440.01
0xf77ebf38bf71c69b7c483f61cd7c99af46320cfd435944bdd162296798828ac7Approve2045305402024-04-25 2:22:278 hrs 6 mins ago0x765a16ca391a6b9249cfa65bf2d14c38722198e3 IN  Vesta Finance: VSTA Token0 ETH0.00000055 0.01
0xa78b305262de92468c9d4c945c1b9773da1bd55eb0e47cec74f8d5d4675dcb88Approve2045296882024-04-25 2:18:478 hrs 10 mins ago0x4b9cdebb8b0c55972c4cc70c4332971e6100b169 IN  Vesta Finance: VSTA Token0 ETH0.0000006 0.012614
0x39cab732ef941f67e79f6c66ab8de6755ae70908c413f68c175addc50de4c682Approve2045095692024-04-25 0:53:129 hrs 35 mins ago0x4982fd49f7e9f99ef5a6b1be7432575f09f9c554 IN  Vesta Finance: VSTA Token0 ETH0.0000007 0.01
0x9a26dbdc8b845f329f87f90170e4542f593e746277fd7d720b8432b8f2cd545fPermit2044871422024-04-24 23:17:4211 hrs 11 mins ago0x7e749a6967974fca72c3580e60d2c0695acfac09 IN  Vesta Finance: VSTA Token0 ETH0.00000098 0.01
0x54fb6d80fa5fd9154183d52eabc7f25ec18e331e3bd5d48c382e135e55d99090Approve2044736712024-04-24 22:20:2812 hrs 8 mins ago0x506685ad6e1d208d37547fd8d10a9124444251ac IN  Vesta Finance: VSTA Token0 ETH0.0000007 0.01
0xbea08d4ff9e7f78f84bfcc32e3453fd98cf60e7ca03fadfea72ed09d4980d932Transfer2044626842024-04-24 21:33:3112 hrs 55 mins ago0x5bdf85216ec1e38d6458c870992a69e38e03f7ef IN  Vesta Finance: VSTA Token0 ETH0.000000590.01
0x497c85f89d47880be6b470d21ef4ffb104a6a28d72f4c85a319e68375c756437Approve2044599202024-04-24 21:21:5313 hrs 6 mins ago0x672ff444b2b597d43ed2d33a37b682ae903acf38 IN  Vesta Finance: VSTA Token0 ETH0.00000076 0.01
0xf4a5cefacdff89b50269dabe81d29239ed64bfba3aaeb5482d88cd68aecc2157Approve2044586092024-04-24 21:16:1913 hrs 12 mins ago0x83b083bb40539afc7a470b7f5d8609b46af159c7 IN  Vesta Finance: VSTA Token0 ETH0.00000071 0.01
0x9e5f137f5d85ee97dc3d9eb2d1059f25ef7fb66231887ff26a2a046454d28c12Permit2044462062024-04-24 20:22:5114 hrs 5 mins ago0xfddc3034e0fa83b78704417430617e3a7b6cbb10 IN  Vesta Finance: VSTA Token0 ETH0.00000091 0.01
[ Download CSV Export 

OVERVIEW

Vesta Finance is a layer 2-first lending protocol that allows users to obtain maximum liquidity against their collateral without paying interest.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x73d0fcc96059e722d2daefd9df8b1aa84dabd0b2c01e35520f923f82c4910add720854622023-03-21 10:13:48401 days 15 mins ago 0x519ed9cbf2e02d7ee377120ebb3a8fa3481c3466 Vesta Finance: VSTA Token0 ETH
0x73d0fcc96059e722d2daefd9df8b1aa84dabd0b2c01e35520f923f82c4910add720854622023-03-21 10:13:48401 days 15 mins ago Balancer: Vault Vesta Finance: VSTA Token0 ETH
0xc66c580c7c711313406cca5c177cf26e2276cbd586c33963d5ab4aecd9fb431d720847142023-03-21 10:10:44401 days 18 mins ago Balancer: Vault Vesta Finance: VSTA Token0 ETH
0x49f954fa094c5c205eb3a3b24994068301c4dc9a150fc82c7e1867e07e40e2e2720842062023-03-21 10:08:35401 days 20 mins ago 0x3c711d3b25ae5c37ee38afc10b589c3bc6419edf Vesta Finance: VSTA Token0 ETH
0x49f954fa094c5c205eb3a3b24994068301c4dc9a150fc82c7e1867e07e40e2e2720842062023-03-21 10:08:35401 days 20 mins ago 0x64768a3a2453f1e8de9e43e92d65fc36e4c9872d Vesta Finance: VSTA Token0 ETH
0x49f954fa094c5c205eb3a3b24994068301c4dc9a150fc82c7e1867e07e40e2e2720842062023-03-21 10:08:35401 days 20 mins ago 0x3c711d3b25ae5c37ee38afc10b589c3bc6419edf Vesta Finance: VSTA Token0 ETH
0x49f954fa094c5c205eb3a3b24994068301c4dc9a150fc82c7e1867e07e40e2e2720842062023-03-21 10:08:35401 days 20 mins ago Balancer: Vault Vesta Finance: VSTA Token0 ETH
0x49f954fa094c5c205eb3a3b24994068301c4dc9a150fc82c7e1867e07e40e2e2720842062023-03-21 10:08:35401 days 20 mins ago 0x64768a3a2453f1e8de9e43e92d65fc36e4c9872d Vesta Finance: VSTA Token0 ETH
0x49f954fa094c5c205eb3a3b24994068301c4dc9a150fc82c7e1867e07e40e2e2720842062023-03-21 10:08:35401 days 20 mins ago 1inch v5: Aggregation Router Vesta Finance: VSTA Token0 ETH
0x32883552ca2898f2ca41a46f07d27e9b0c5fa4fd8f19d28e5299c1cf1e3ae479720834552023-03-21 10:05:25401 days 23 mins ago OpenOcean: Exchange V2 Vesta Finance: VSTA Token0 ETH
0x32883552ca2898f2ca41a46f07d27e9b0c5fa4fd8f19d28e5299c1cf1e3ae479720834552023-03-21 10:05:25401 days 23 mins ago 0xb5d99a61a5d34e3edfeea052483f49f7a922e248 Vesta Finance: VSTA Token0 ETH
0x32883552ca2898f2ca41a46f07d27e9b0c5fa4fd8f19d28e5299c1cf1e3ae479720834552023-03-21 10:05:25401 days 23 mins ago 0xb5d99a61a5d34e3edfeea052483f49f7a922e248 Vesta Finance: VSTA Token0 ETH
0x32883552ca2898f2ca41a46f07d27e9b0c5fa4fd8f19d28e5299c1cf1e3ae479720834552023-03-21 10:05:25401 days 23 mins ago 0xb5d99a61a5d34e3edfeea052483f49f7a922e248 Vesta Finance: VSTA Token0 ETH
0x32883552ca2898f2ca41a46f07d27e9b0c5fa4fd8f19d28e5299c1cf1e3ae479720834552023-03-21 10:05:25401 days 23 mins ago Balancer: Vault Vesta Finance: VSTA Token0 ETH
0x32883552ca2898f2ca41a46f07d27e9b0c5fa4fd8f19d28e5299c1cf1e3ae479720834552023-03-21 10:05:25401 days 23 mins ago OpenOcean: Exchange V2 Vesta Finance: VSTA Token0 ETH
0x4a4c50db144b142ed34e04dc166fe320591e8f02c8373e7cd12a17118b47d964720833362023-03-21 10:05:03401 days 23 mins ago 0x: Exchange Proxy Vesta Finance: VSTA Token0 ETH
0x4a4c50db144b142ed34e04dc166fe320591e8f02c8373e7cd12a17118b47d964720833362023-03-21 10:05:03401 days 23 mins ago 0x: Exchange Proxy Flash Wallet Vesta Finance: VSTA Token0 ETH
0x4a4c50db144b142ed34e04dc166fe320591e8f02c8373e7cd12a17118b47d964720833362023-03-21 10:05:03401 days 23 mins ago 0x: Exchange Proxy Vesta Finance: VSTA Token0 ETH
0x4a4c50db144b142ed34e04dc166fe320591e8f02c8373e7cd12a17118b47d964720833362023-03-21 10:05:03401 days 23 mins ago Balancer: Vault Vesta Finance: VSTA Token0 ETH
0x4a4c50db144b142ed34e04dc166fe320591e8f02c8373e7cd12a17118b47d964720833362023-03-21 10:05:03401 days 23 mins ago 0x: Exchange Proxy Vesta Finance: VSTA Token0 ETH
0xfb96704b6a6d8c27343827ea475d0f0de7943faaf9495a99272fe95466f9f53b720819662023-03-21 9:59:18401 days 29 mins ago Balancer: Vault Vesta Finance: VSTA Token0 ETH
0xfb96704b6a6d8c27343827ea475d0f0de7943faaf9495a99272fe95466f9f53b720819662023-03-21 9:59:18401 days 29 mins ago 0x64768a3a2453f1e8de9e43e92d65fc36e4c9872d Vesta Finance: VSTA Token0 ETH
0xfb96704b6a6d8c27343827ea475d0f0de7943faaf9495a99272fe95466f9f53b720819662023-03-21 9:59:18401 days 29 mins ago 0xa7b511197205c9ccc1c1d008b4c6aae3bc23d414 Vesta Finance: VSTA Token0 ETH
0xfb96704b6a6d8c27343827ea475d0f0de7943faaf9495a99272fe95466f9f53b720819662023-03-21 9:59:18401 days 29 mins ago 0x64768a3a2453f1e8de9e43e92d65fc36e4c9872d Vesta Finance: VSTA Token0 ETH
0xfb96704b6a6d8c27343827ea475d0f0de7943faaf9495a99272fe95466f9f53b720819662023-03-21 9:59:18401 days 29 mins ago 0x64768a3a2453f1e8de9e43e92d65fc36e4c9872d Vesta Finance: VSTA Token0 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
VSTAToken

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 9 : VSTAToken.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.10;
import "../Dependencies/CheckContract.sol";
import "@openzeppelin/contracts/utils/math/SafeMath.sol";
import "../Dependencies/ERC20Permit.sol";

contract VSTAToken is CheckContract, ERC20Permit {
	using SafeMath for uint256;

	// uint for use with SafeMath
	uint256 internal _1_MILLION = 1e24; // 1e6 * 1e18 = 1e24

	address public immutable treasury;

	constructor(address _treasurySig) ERC20("Vesta", "VSTA") {
		require(_treasurySig != address(0), "Invalid Treasury Sig");
		treasury = _treasurySig;

		//Lazy Mint to setup protocol.
		//After the deployment scripts, deployer addr automatically send the fund to the treasury.
		_mint(msg.sender, _1_MILLION.mul(50));
		_mint(_treasurySig, _1_MILLION.mul(50));
	}
}

File 2 of 9 : CheckContract.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.10;

contract CheckContract {
	function checkContract(address _account) internal view {
		require(_account != address(0), "Account cannot be zero address");

		uint256 size;
		assembly {
			size := extcodesize(_account)
		}
		require(size > 0, "Account code size cannot be zero");
	}
}

File 3 of 9 : SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

File 4 of 9 : ERC20Permit.sol
pragma solidity ^0.8.10;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/utils/Counters.sol";

interface IERC2612Permit {
	/**
	 * @dev Sets `amount` as the allowance of `spender` over `owner`'s tokens,
	 * given `owner`'s signed approval.
	 *
	 * IMPORTANT: The same issues {IERC20-approve} has related to transaction
	 * ordering also apply here.
	 *
	 * Emits an {Approval} event.
	 *
	 * Requirements:
	 *
	 * - `owner` cannot be the zero address.
	 * - `spender` cannot be the zero address.
	 * - `deadline` must be a timestamp in the future.
	 * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
	 * over the EIP712-formatted function arguments.
	 * - the signature must use ``owner``'s current nonce (see {nonces}).
	 *
	 * For more information on the signature format, see the
	 * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
	 * section].
	 */
	function permit(
		address owner,
		address spender,
		uint256 amount,
		uint256 deadline,
		uint8 v,
		bytes32 r,
		bytes32 s
	) external;

	/**
	 * @dev Returns the current ERC2612 nonce for `owner`. This value must be
	 * included whenever a signature is generated for {permit}.
	 *
	 * Every successful call to {permit} increases ``owner``'s nonce by one. This
	 * prevents a signature from being used multiple times.
	 */
	function nonces(address owner) external view returns (uint256);
}

abstract contract ERC20Permit is ERC20, IERC2612Permit {
	using Counters for Counters.Counter;

	mapping(address => Counters.Counter) private _nonces;

	// keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
	bytes32 public constant PERMIT_TYPEHASH =
		0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;

	bytes32 public DOMAIN_SEPARATOR;

	constructor() {
		uint256 chainID;
		assembly {
			chainID := chainid()
		}

		DOMAIN_SEPARATOR = keccak256(
			abi.encode(
				keccak256(
					"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
				),
				keccak256(bytes(name())),
				keccak256(bytes("1")), // Version
				chainID,
				address(this)
			)
		);
	}

	/**
	 * @dev See {IERC2612Permit-permit}.
	 *
	 */
	function permit(
		address owner,
		address spender,
		uint256 amount,
		uint256 deadline,
		uint8 v,
		bytes32 r,
		bytes32 s
	) public virtual override {
		require(block.timestamp <= deadline, "Permit: expired deadline");

		bytes32 hashStruct = keccak256(
			abi.encode(
				PERMIT_TYPEHASH,
				owner,
				spender,
				amount,
				_nonces[owner].current(),
				deadline
			)
		);

		bytes32 _hash = keccak256(
			abi.encodePacked(uint16(0x1901), DOMAIN_SEPARATOR, hashStruct)
		);

		address signer = ecrecover(_hash, v, r, s);
		require(
			signer != address(0) && signer == owner,
			"ERC20Permit: Invalid signature"
		);

		_nonces[owner].increment();
		_approve(owner, spender, amount);
	}

	/**
	 * @dev See {IERC2612Permit-nonces}.
	 */
	function nonces(address owner) public view override returns (uint256) {
		return _nonces[owner].current();
	}

	function chainId() public view returns (uint256 chainID) {
		assembly {
			chainID := chainid()
		}
	}
}

File 5 of 9 : ERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/Context.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

File 6 of 9 : Counters.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

File 7 of 9 : IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

File 8 of 9 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

File 9 of 9 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_treasurySig","type":"address"}],"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":"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":"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":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chainId","outputs":[{"internalType":"uint256","name":"chainID","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","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":"amount","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":[],"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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60a060405269d3c21bcecceda10000006007553480156200001f57600080fd5b50604051620011ba380380620011ba833981016040819052620000429162000447565b6040805180820182526005815264566573746160d81b6020808301918252835180850190945260048452635653544160e01b9084015281519192916200008b91600391620003a1565b508051620000a1906004906020840190620003a1565b504691507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9050620000d26200020d565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018290523060a082015260c00160408051601f198184030181529190528051602090910120600655506001600160a01b038116620001ae5760405162461bcd60e51b815260206004820152601460248201527f496e76616c69642054726561737572792053696700000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b038116608052600754620001e4903390620001de906032620002a7602090811b6200074017901c565b620002bc565b6200020681620001de6032600754620002a760201b620007401790919060201c565b5062000502565b6060600380546200021e9062000472565b80601f01602080910402602001604051908101604052809291908181526020018280546200024c9062000472565b80156200029d5780601f1062000271576101008083540402835291602001916200029d565b820191906000526020600020905b8154815290600101906020018083116200027f57829003601f168201915b5050505050905090565b6000620002b58284620004c5565b9392505050565b6001600160a01b038216620003145760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620001a5565b8060026000828254620003289190620004e7565b90915550506001600160a01b0382166000908152602081905260408120805483929062000357908490620004e7565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620003af9062000472565b90600052602060002090601f016020900481019282620003d357600085556200041e565b82601f10620003ee57805160ff19168380011785556200041e565b828001600101855582156200041e579182015b828111156200041e57825182559160200191906001019062000401565b506200042c92915062000430565b5090565b5b808211156200042c576000815560010162000431565b6000602082840312156200045a57600080fd5b81516001600160a01b0381168114620002b557600080fd5b600181811c908216806200048757607f821691505b60208210811415620004a957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620004e257620004e2620004af565b500290565b60008219821115620004fd57620004fd620004af565b500190565b608051610c9c6200051e60003960006101cd0152610c9c6000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806361d027b3116100a25780639a8a0592116100715780639a8a059214610261578063a457c2d714610267578063a9059cbb1461027a578063d505accf1461028d578063dd62ed3e146102a257600080fd5b806361d027b3146101c857806370a08231146102075780637ecebe001461023057806395d89b411461025957600080fd5b806330adf81f116100de57806330adf81f14610176578063313ce5671461019d5780633644e515146101ac57806339509351146101b557600080fd5b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015157806323b872dd14610163575b600080fd5b6101186102db565b6040516101259190610a46565b60405180910390f35b61014161013c366004610ab7565b61036d565b6040519015158152602001610125565b6002545b604051908152602001610125565b610141610171366004610ae1565b610383565b6101557f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60405160128152602001610125565b61015560065481565b6101416101c3366004610ab7565b610432565b6101ef7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610125565b610155610215366004610b1d565b6001600160a01b031660009081526020819052604090205490565b61015561023e366004610b1d565b6001600160a01b031660009081526005602052604090205490565b61011861046e565b46610155565b610141610275366004610ab7565b61047d565b610141610288366004610ab7565b610516565b6102a061029b366004610b38565b610523565b005b6101556102b0366004610bab565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546102ea90610bde565b80601f016020809104026020016040519081016040528092919081815260200182805461031690610bde565b80156103635780601f1061033857610100808354040283529160200191610363565b820191906000526020600020905b81548152906001019060200180831161034657829003601f168201915b5050505050905090565b600061037a338484610753565b50600192915050565b6000610390848484610877565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561041a5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6104278533858403610753565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161037a918590610469908690610c2f565b610753565b6060600480546102ea90610bde565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156104ff5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610411565b61050c3385858403610753565b5060019392505050565b600061037a338484610877565b834211156105735760405162461bcd60e51b815260206004820152601860248201527f5065726d69743a206578706972656420646561646c696e6500000000000000006044820152606401610411565b6001600160a01b0387811660008181526005602090815260408083205481517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98185015280830195909552948b166060850152608084018a905260a084019490945260c08084018990528451808503909101815260e08401855280519082012060065461190160f01b61010086015261010285015261012280850182905285518086039091018152610142850180875281519184019190912090849052610162850180875281905260ff89166101828601526101a285018890526101c2850187905294519094936001926101e2808301939192601f198301929081900390910190855afa158015610688573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906106be5750896001600160a01b0316816001600160a01b0316145b61070a5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20496e76616c6964207369676e617475726500006044820152606401610411565b6001600160a01b038a166000908152600560205260409020805460010190556107348a8a8a610753565b50505050505050505050565b600061074c8284610c47565b9392505050565b6001600160a01b0383166107b55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610411565b6001600160a01b0382166108165760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610411565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166108db5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610411565b6001600160a01b03821661093d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610411565b6001600160a01b038316600090815260208190526040902054818110156109b55760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610411565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906109ec908490610c2f565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a3891815260200190565b60405180910390a350505050565b600060208083528351808285015260005b81811015610a7357858101830151858201604001528201610a57565b81811115610a85576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610ab257600080fd5b919050565b60008060408385031215610aca57600080fd5b610ad383610a9b565b946020939093013593505050565b600080600060608486031215610af657600080fd5b610aff84610a9b565b9250610b0d60208501610a9b565b9150604084013590509250925092565b600060208284031215610b2f57600080fd5b61074c82610a9b565b600080600080600080600060e0888a031215610b5357600080fd5b610b5c88610a9b565b9650610b6a60208901610a9b565b95506040880135945060608801359350608088013560ff81168114610b8e57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610bbe57600080fd5b610bc783610a9b565b9150610bd560208401610a9b565b90509250929050565b600181811c90821680610bf257607f821691505b60208210811415610c1357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610c4257610c42610c19565b500190565b6000816000190483118215151615610c6157610c61610c19565b50029056fea26469706673582212204e07a2a110947d3ecc47de29ff4f5f04bd299797d9edfd91a947d547225df09f64736f6c634300080a00330000000000000000000000004a4651b31d747d1ddbddadcf1b1e24a5f6dcc7b0

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061010b5760003560e01c806361d027b3116100a25780639a8a0592116100715780639a8a059214610261578063a457c2d714610267578063a9059cbb1461027a578063d505accf1461028d578063dd62ed3e146102a257600080fd5b806361d027b3146101c857806370a08231146102075780637ecebe001461023057806395d89b411461025957600080fd5b806330adf81f116100de57806330adf81f14610176578063313ce5671461019d5780633644e515146101ac57806339509351146101b557600080fd5b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015157806323b872dd14610163575b600080fd5b6101186102db565b6040516101259190610a46565b60405180910390f35b61014161013c366004610ab7565b61036d565b6040519015158152602001610125565b6002545b604051908152602001610125565b610141610171366004610ae1565b610383565b6101557f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60405160128152602001610125565b61015560065481565b6101416101c3366004610ab7565b610432565b6101ef7f0000000000000000000000004a4651b31d747d1ddbddadcf1b1e24a5f6dcc7b081565b6040516001600160a01b039091168152602001610125565b610155610215366004610b1d565b6001600160a01b031660009081526020819052604090205490565b61015561023e366004610b1d565b6001600160a01b031660009081526005602052604090205490565b61011861046e565b46610155565b610141610275366004610ab7565b61047d565b610141610288366004610ab7565b610516565b6102a061029b366004610b38565b610523565b005b6101556102b0366004610bab565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546102ea90610bde565b80601f016020809104026020016040519081016040528092919081815260200182805461031690610bde565b80156103635780601f1061033857610100808354040283529160200191610363565b820191906000526020600020905b81548152906001019060200180831161034657829003601f168201915b5050505050905090565b600061037a338484610753565b50600192915050565b6000610390848484610877565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561041a5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6104278533858403610753565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161037a918590610469908690610c2f565b610753565b6060600480546102ea90610bde565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156104ff5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610411565b61050c3385858403610753565b5060019392505050565b600061037a338484610877565b834211156105735760405162461bcd60e51b815260206004820152601860248201527f5065726d69743a206578706972656420646561646c696e6500000000000000006044820152606401610411565b6001600160a01b0387811660008181526005602090815260408083205481517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98185015280830195909552948b166060850152608084018a905260a084019490945260c08084018990528451808503909101815260e08401855280519082012060065461190160f01b61010086015261010285015261012280850182905285518086039091018152610142850180875281519184019190912090849052610162850180875281905260ff89166101828601526101a285018890526101c2850187905294519094936001926101e2808301939192601f198301929081900390910190855afa158015610688573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906106be5750896001600160a01b0316816001600160a01b0316145b61070a5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20496e76616c6964207369676e617475726500006044820152606401610411565b6001600160a01b038a166000908152600560205260409020805460010190556107348a8a8a610753565b50505050505050505050565b600061074c8284610c47565b9392505050565b6001600160a01b0383166107b55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610411565b6001600160a01b0382166108165760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610411565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166108db5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610411565b6001600160a01b03821661093d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610411565b6001600160a01b038316600090815260208190526040902054818110156109b55760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610411565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906109ec908490610c2f565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a3891815260200190565b60405180910390a350505050565b600060208083528351808285015260005b81811015610a7357858101830151858201604001528201610a57565b81811115610a85576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610ab257600080fd5b919050565b60008060408385031215610aca57600080fd5b610ad383610a9b565b946020939093013593505050565b600080600060608486031215610af657600080fd5b610aff84610a9b565b9250610b0d60208501610a9b565b9150604084013590509250925092565b600060208284031215610b2f57600080fd5b61074c82610a9b565b600080600080600080600060e0888a031215610b5357600080fd5b610b5c88610a9b565b9650610b6a60208901610a9b565b95506040880135945060608801359350608088013560ff81168114610b8e57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610bbe57600080fd5b610bc783610a9b565b9150610bd560208401610a9b565b90509250929050565b600181811c90821680610bf257607f821691505b60208210811415610c1357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610c4257610c42610c19565b500190565b6000816000190483118215151615610c6157610c61610c19565b50029056fea26469706673582212204e07a2a110947d3ecc47de29ff4f5f04bd299797d9edfd91a947d547225df09f64736f6c634300080a0033

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

0000000000000000000000004a4651b31d747d1ddbddadcf1b1e24a5f6dcc7b0

-----Decoded View---------------
Arg [0] : _treasurySig (address): 0x4A4651B31d747D1DdbDDADCF1b1E24a5f6dcc7b0

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000004a4651b31d747d1ddbddadcf1b1e24a5f6dcc7b0


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.