Contract 0x7ad7242A99F21aa543F9650A56D141C57e4F6081 5

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x1f0b17b86a0141c1d0a1db41d73cff9fac254c9367c410bfe8e9d0b6ac21dabbApprove132465692021-12-06 14:56:2547 secs ago0x9f704559ef16898beda2dc79f0779fa4aaec39a3 IN  0x7ad7242a99f21aa543f9650a56d141c57e4f60810 BNB0.000220555
0x60ed0f5ac99921ee29015e724bfabcd162db294dffac5da24054122cb3b0669cTransfer132465592021-12-06 14:55:551 min ago0x8ba18b415b3b6bd9b9007a502cbf10efdc329f49 IN  0x7ad7242a99f21aa543f9650a56d141c57e4f60810 BNB0.00010552
0x9fedc05c0e86c78859d95d1a5b808ad4b95d2c2ce14c4ed54e55a5eb87923bd8Approve132465572021-12-06 14:55:491 min ago0x919bfac923134b231e932c6f36ad6eef2191ec8b IN  0x7ad7242a99f21aa543f9650a56d141c57e4f60810 BNB0.000220555
0x46d0e75586ff9d5be56a63c7b81463744a534ab254de48d1a0630d980ef105d8Approve132465552021-12-06 14:55:431 min ago0xef6e42444368ac069848e4359b77b7eacba59f7a IN  0x7ad7242a99f21aa543f9650a56d141c57e4f60810 BNB0.000220555
0xf5b0155318b4c65f261a224ab3bad69164d0280050d4974eace77ef4fe2c4143Approve132465532021-12-06 14:55:371 min ago0xb26ba5fa8da61b4a101e3e1e7fe4f911367a4dad IN  0x7ad7242a99f21aa543f9650a56d141c57e4f60810 BNB0.000220555
0x3e97da10df7b1adea79baa11c7f4b6c46d63c3adeff150529bbe6f9488ead0f8Transfer132465522021-12-06 14:55:341 min ago0xf795c04f829565c6e2e64279d46c5a491ea4e39c IN  0x7ad7242a99f21aa543f9650a56d141c57e4f60810 BNB0.000281072
0x9a86ed515467fb3af2b9443c56ae4a92258f18989c49e49fa40cd11291c6ac1bApprove132465462021-12-06 14:55:131 min ago0xdeedc1c4cc13509fb52f96f85b2ed38b2290aae8 IN  0x7ad7242a99f21aa543f9650a56d141c57e4f60810 BNB0.000220555
0xf210d1d088d09ac3386f9fc051aeaebd840384e3091e146a2b0fc1b9d1784638Transfer132465462021-12-06 14:55:131 min ago0x13af4a47dd896f8eebc7f1296d9b4102bfab5984 IN  0x7ad7242a99f21aa543f9650a56d141c57e4f60810 BNB0.000152372
0xb24acc20776e12a6ff95771429af2efc68ec366fadac8716852bef0770c0d609Approve132465442021-12-06 14:55:012 mins ago0x2b77b343e62c8602be9cb95029b36b45ecd8684e IN  0x7ad7242a99f21aa543f9650a56d141c57e4f60810 BNB0.000222115
0x4b91d55e508cffd6a3f1128d083d60e12b40155bf112ede3970ecfc4be7cbfd9Approve132465382021-12-06 14:54:412 mins ago0x77649459f02ada51b98832a81d2041f01debb6fa IN  0x7ad7242a99f21aa543f9650a56d141c57e4f60810 BNB0.000124555
0xb401567822f4806e042ebc44feae53d9d432b948ced5822dc34c3cf865ab256cApprove132465332021-12-06 14:54:252 mins ago0x877b06fa23837b578d1775c90e41540e34447c55 IN  0x7ad7242a99f21aa543f9650a56d141c57e4f60810 BNB0.000124555
0x00bc411db4cf23db4d5a5a66c440a9ee494c222796fe423ba90f6ada7f68fa65Approve132465302021-12-06 14:54:162 mins ago0x596dfe561d3fdc6e13cca4fecd4203f315c01657 IN  0x7ad7242a99f21aa543f9650a56d141c57e4f60810 BNB0.000222115
0xe4843e83b1e89bc724a438146f01f029953500f0272d0274382b66cefaffcc51Approve132465272021-12-06 14:54:063 mins ago0x36ee76dc247e3ac42aa0563495da9d5ace5d5338 IN  0x7ad7242a99f21aa543f9650a56d141c57e4f60810 BNB0.000220555
0xb1ae4206c20f6f8818b2b225abda032a5413f689f9a144c2c863e10ff3bb41adApprove132465252021-12-06 14:53:583 mins ago0xbbcba6b850da9a62fda0112e42810a733740f375 IN  0x7ad7242a99f21aa543f9650a56d141c57e4f60810 BNB0.000124555
0x9d6a78957fe483580f7b296553d2f7c1360dbdbc24fb0d295974469f8806054cApprove132465212021-12-06 14:53:453 mins ago0x4b1daf9426bdbf2f639add18497e91d78e75558c IN  0x7ad7242a99f21aa543f9650a56d141c57e4f60810 BNB0.000220555
0x5d2599150e318c5bb3d03ec8c240438f9f6546dca7bfbc77bd716d05fb348c33Approve132465212021-12-06 14:53:453 mins ago0x37c61f8f3ecf5dc0644cf262e2170b117d07200d IN  0x7ad7242a99f21aa543f9650a56d141c57e4f60810 BNB0.000220555
0x8e5d1cbb844b0e241bbbe0e4d146ec6ea2ca1d2358d8fb143e7f1ff251849faaApprove132465202021-12-06 14:53:423 mins ago0xe7667e4ee21ab9de5a3da08dafb25b22d1518a6a IN  0x7ad7242a99f21aa543f9650a56d141c57e4f60810 BNB0.000124555
0x97056df94c66c391bfe91d0ed2429e048c593d77daeea109056baf1189c9eb85Approve132465202021-12-06 14:53:423 mins ago0x1bf7601eef8e4ce0c324ddbbcfed55d781b74d01 IN  0x7ad7242a99f21aa543f9650a56d141c57e4f60810 BNB0.000222115
0x1b2e88d4fa013252a5b9d7450c943ba30e478dd5c2d6275b94d3f1a7fb54a28dApprove132465202021-12-06 14:53:423 mins ago0x4fae187eda2b299e42dff378050de4a721e6c8e8 IN  0x7ad7242a99f21aa543f9650a56d141c57e4f60810 BNB0.0002426105
0xdad87039553a48808ff8878e8f7b34b6d00c2c1cb73daa92dde36c5066054a44Approve132465162021-12-06 14:53:283 mins ago0x77649459f02ada51b98832a81d2041f01debb6fa IN  0x7ad7242a99f21aa543f9650a56d141c57e4f60810 BNB0.000220555
0x3de17540e8317e90f45a2169e36b75aa452619b8fedb66ad95d65810965b74bcApprove132465162021-12-06 14:53:283 mins ago0x2bf363acf536cb70c9bf9bd8c70d80f42d572c6b IN  0x7ad7242a99f21aa543f9650a56d141c57e4f60810 BNB0.000220555
0xbbae316998616516d0b9ada42156d2c4745243aa5d9a1df93caf24e694631f0cApprove132465112021-12-06 14:53:024 mins ago0xe7667e4ee21ab9de5a3da08dafb25b22d1518a6a IN  0x7ad7242a99f21aa543f9650a56d141c57e4f60810 BNB0.000220555
0xd83b76c78f14d622780fefeb0492096bbf55668469b781671e186ee6c0a1fb59Approve132465112021-12-06 14:53:024 mins ago0x877b06fa23837b578d1775c90e41540e34447c55 IN  0x7ad7242a99f21aa543f9650a56d141c57e4f60810 BNB0.000220555
0x385054e1da260cb028373d1bb8e4613b5eb076318b5f7a5ec31fe10e0fa7aae8Approve132465082021-12-06 14:52:534 mins ago0xf85e3a82de5f6755eaeea036d3982bb78aca269d IN  0x7ad7242a99f21aa543f9650a56d141c57e4f60810 BNB0.000220555
0x850cafdc75c95017fd54cc6bb6b40309603fc4f449e9e2c31223784faad23005Approve132465072021-12-06 14:52:504 mins ago0x69ddbc4c4a62b695e443ee61290d625a184f63e1 IN  0x7ad7242a99f21aa543f9650a56d141c57e4f60810 BNB0.000220555
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x533131c4f1f2b3744bc200c27c22720c07ff3c58302ff09d931e24ddf0d2c6be128513172021-11-22 3:21:0614 days 11 hrs ago Synapse: Bridge 0x7ad7242a99f21aa543f9650a56d141c57e4f60810.002 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
OlympusERC20Token

Compiler Version
v0.7.5+commit.eb77ed08

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU AGPLv3 license

Contract Source Code (Solidity Multiple files format)

File 1 of 12: OlympusERC20.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;

import './SafeMath.sol';
import './ERC20.sol';
import './ERC20Permit.sol';
import './VaultOwned.sol';



contract OlympusERC20Token is ERC20Permit, VaultOwned {

    using SafeMath for uint256;

    constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol, 9) {
    }

    function mint(address account_, uint256 amount_) external onlyVault() {
        _mint(account_, amount_);
    }

    function burn(uint256 amount) public virtual {
        _burn(msg.sender, amount);
    }
     
    function burnFrom(address account_, uint256 amount_) public virtual {
        _burnFrom(account_, amount_);
    }

    function _burnFrom(address account_, uint256 amount_) public virtual {
        uint256 decreasedAllowance_ =
            allowance(account_, msg.sender).sub(
                amount_,
                "ERC20: burn amount exceeds allowance"
            );

        _approve(account_, msg.sender, decreasedAllowance_);
        _burn(account_, amount_);
    }
}

File 2 of 12: Address.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;

library Address {

    function isContract(address account) internal view returns (bool) {

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }

    function addressToString(address _address) internal pure returns(string memory) {
        bytes32 _bytes = bytes32(uint256(_address));
        bytes memory HEX = "0123456789abcdef";
        bytes memory _addr = new bytes(42);

        _addr[0] = '0';
        _addr[1] = 'x';

        for(uint256 i = 0; i < 20; i++) {
            _addr[2+i*2] = HEX[uint8(_bytes[i + 12] >> 4)];
            _addr[3+i*2] = HEX[uint8(_bytes[i + 12] & 0x0f)];
        }

        return string(_addr);

    }
}

File 3 of 12: Counters.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;

import './SafeMath.sol';


library Counters {
    using SafeMath for uint256;

    struct Counter {

        uint256 _value; // default: 0
    }

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

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

    function decrement(Counter storage counter) internal {
        counter._value = counter._value.sub(1);
    }
}

File 4 of 12: ERC20.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;

import './SafeMath.sol';
import './IERC20.sol';


contract ERC20 is IERC20 {

    using SafeMath for uint256;

    // TODO comment actual hash value.
    bytes32 constant private ERC20TOKEN_ERC1820_INTERFACE_ID = keccak256( "ERC20Token" );
    
    mapping (address => uint256) internal _balances;

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

    uint256 internal _totalSupply;

    string internal _name;
    
    string internal _symbol;
    
    uint8 internal _decimals;

    constructor (string memory name_, string memory symbol_, uint8 decimals_) {
        _name = name_;
        _symbol = symbol_;
        _decimals = decimals_;
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view override returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    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);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account_, uint256 ammount_) internal virtual {
        require(account_ != address(0), "ERC20: mint to the zero address");
        _beforeTokenTransfer(address( this ), account_, ammount_);
        _totalSupply = _totalSupply.add(ammount_);
        _balances[account_] = _balances[account_].add(ammount_);
        emit Transfer(address( this ), account_, ammount_);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    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);
    }

  function _beforeTokenTransfer( address from_, address to_, uint256 amount_ ) internal virtual { }
}

File 5 of 12: ERC20Permit.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;

import './SafeMath.sol';
import './Counters.sol';
import './IERC2612Permit.sol';
import './IERC20.sol';
import './ERC20.sol';


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)
            )
        );
    }

    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, "ZeroSwapPermit: Invalid signature");

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

    function nonces(address owner) public view override returns (uint256) {
        return _nonces[owner].current();
    }
}

File 6 of 12: IERC20.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;

interface IERC20 {
    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 7 of 12: IERC2612Permit.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;



interface IERC2612Permit {

    function permit(
        address owner,
        address spender,
        uint256 amount,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    function nonces(address owner) external view returns (uint256);
}

File 8 of 12: IOwnable.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;

interface IOwnable {
  function policy() external view returns (address);

  function renounceManagement() external;
  
  function pushManagement( address newOwner_ ) external;
  
  function pullManagement() external;
}

File 9 of 12: Ownable.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;

import "./IOwnable.sol";

contract Ownable is IOwnable {

    address internal _owner;
    address internal _newOwner;

    event OwnershipPushed(address indexed previousOwner, address indexed newOwner);
    event OwnershipPulled(address indexed previousOwner, address indexed newOwner);

    constructor () {
        _owner = msg.sender;
        emit OwnershipPushed( address(0), _owner );
    }

    function policy() public view override returns (address) {
        return _owner;
    }

    modifier onlyPolicy() {
        require( _owner == msg.sender, "Ownable: caller is not the owner" );
        _;
    }

    modifier onlyOwner() {
        require( _owner == msg.sender, "Ownable: caller is not the owner" );
        _;
    }

    modifier onlyManager() {
        require( _owner == msg.sender, "Ownable: caller is not the owner" );
        _;
    }

    function renounceManagement() public virtual override onlyPolicy() {
        emit OwnershipPushed( _owner, address(0) );
        _owner = address(0);
    }

    function pushManagement( address newOwner_ ) public virtual override onlyPolicy() {
        require( newOwner_ != address(0), "Ownable: new owner is the zero address");
        emit OwnershipPushed( _owner, newOwner_ );
        _newOwner = newOwner_;
    }
    
    function pullManagement() public virtual override {
        require( msg.sender == _newOwner, "Ownable: must be new owner to pull");
        emit OwnershipPulled( _owner, _newOwner );
        _owner = _newOwner;
    }
}

File 10 of 12: SafeERC20.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;
import './SafeMath.sol';
import './Address.sol';
import './IERC20.sol';

library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {

        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

File 11 of 12: SafeMath.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;


library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {

        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }

    function sqrrt(uint256 a) internal pure returns (uint c) {
        if (a > 3) {
            c = a;
            uint b = add( div( a, 2), 1 );
            while (b < c) {
                c = b;
                b = div( add( div( a, b ), b), 2 );
            }
        } else if (a != 0) {
            c = 1;
        }
    }

    function percentageAmount( uint256 total_, uint8 percentage_ ) internal pure returns ( uint256 percentAmount_ ) {
        return div( mul( total_, percentage_ ), 1000 );
    }

    function substractPercentage( uint256 total_, uint8 percentageToSub_ ) internal pure returns ( uint256 result_ ) {
        return sub( total_, div( mul( total_, percentageToSub_ ), 1000 ) );
    }

    function percentageOfTotal( uint256 part_, uint256 total_ ) internal pure returns ( uint256 percent_ ) {
        return div( mul(part_, 100) , total_ );
    }

    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow, so we distribute
        return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);
    }

    function quadraticPricing( uint256 payment_, uint256 multiplier_ ) internal pure returns (uint256) {
        return sqrrt( mul( multiplier_, payment_ ) );
    }

  function bondingCurve( uint256 supply_, uint256 multiplier_ ) internal pure returns (uint256) {
      return mul( multiplier_, supply_ );
  }
}

File 12 of 12: VaultOwned.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;

import './Ownable.sol';




contract VaultOwned is Ownable {
    
  address internal _vault;

  function setVault( address vault_ ) external onlyOwner() returns ( bool ) {
    _vault = vault_;

    return true;
  }

  function vault() public view returns (address) {
    return _vault;
  }

  modifier onlyVault() {
    require( _vault == msg.sender, "VaultOwned: caller is not the Vault" );
    _;
  }

}

Contract Security Audit

Contract ABI

[{"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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPulled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPushed","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":"account_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"_burnFrom","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"account_","type":"address"},{"internalType":"uint256","name":"amount_","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":"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":"policy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pullManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"pushManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vault_","type":"address"}],"name":"setVault","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b50604051620019a2380380620019a2833981810160405260408110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b50604052505050818160098260039080519060200190620001bb9291906200037e565b508151620001d19060049060208501906200037e565b506005805460ff191660ff92909216919091179055504690507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f62000215620002e4565b805160209182012060408051808201825260018152603160f81b90840152805180840194909452838101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606084015260808301939093523060a0808401919091528351808403909101815260c0909201928390528151910120600755600880546001600160a01b0319163317908190556001600160a01b0316906000907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908290a350506200042a565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015620003745780601f10620003485761010080835404028352916020019162000374565b820191906000526020600020905b8154815290600101906020018083116200035657829003601f168201915b5050505050905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620003b6576000855562000401565b82601f10620003d157805160ff191683800117855562000401565b8280016001018555821562000401579182015b8281111562000401578251825591602001919060010190620003e4565b506200040f92915062000413565b5090565b5b808211156200040f576000815560010162000414565b611568806200043a6000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806346f68ee9116100de57806395d89b4111610097578063a9059cbb11610071578063a9059cbb14610482578063d505accf146104ae578063dd62ed3e146104ff578063fbfa77cf1461052d57610173565b806395d89b4114610422578063a22b35ce1461042a578063a457c2d71461045657610173565b806346f68ee9146103565780635a96ac0a1461037c5780636817031b1461038457806370a08231146103aa57806379cc6790146103d05780637ecebe00146103fc57610173565b806330adf81f1161013057806330adf81f146102b3578063313ce567146102bb5780633644e515146102d957806339509351146102e157806340c10f191461030d57806342966c681461033957610173565b80630505c8c91461017857806306fdde031461019c578063089208d814610219578063095ea7b31461022357806318160ddd1461026357806323b872dd1461027d575b600080fd5b610180610535565b604080516001600160a01b039092168252519081900360200190f35b6101a4610544565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101de5781810151838201526020016101c6565b50505050905090810190601f16801561020b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102216105da565b005b61024f6004803603604081101561023957600080fd5b506001600160a01b038135169060200135610683565b604080519115158252519081900360200190f35b61026b610699565b60408051918252519081900360200190f35b61024f6004803603606081101561029357600080fd5b506001600160a01b0381358116916020810135909116906040013561069f565b61026b610708565b6102c361072c565b6040805160ff9092168252519081900360200190f35b61026b610735565b61024f600480360360408110156102f757600080fd5b506001600160a01b03813516906020013561073b565b6102216004803603604081101561032357600080fd5b506001600160a01b038135169060200135610771565b6102216004803603602081101561034f57600080fd5b50356107c8565b6102216004803603602081101561036c57600080fd5b50356001600160a01b03166107d5565b6102216108d5565b61024f6004803603602081101561039a57600080fd5b50356001600160a01b0316610981565b61026b600480360360208110156103c057600080fd5b50356001600160a01b0316610a08565b610221600480360360408110156103e657600080fd5b506001600160a01b038135169060200135610a23565b61026b6004803603602081101561041257600080fd5b50356001600160a01b0316610a2d565b6101a4610a54565b6102216004803603604081101561044057600080fd5b506001600160a01b038135169060200135610ab5565b61024f6004803603604081101561046c57600080fd5b506001600160a01b038135169060200135610b01565b61024f6004803603604081101561049857600080fd5b506001600160a01b038135169060200135610b50565b610221600480360360e08110156104c457600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610b5d565b61026b6004803603604081101561051557600080fd5b506001600160a01b0381358116916020013516610d8a565b610180610db5565b6008546001600160a01b031690565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105d05780601f106105a5576101008083540402835291602001916105d0565b820191906000526020600020905b8154815290600101906020018083116105b357829003601f168201915b5050505050905090565b6008546001600160a01b03163314610639576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6008546040516000916001600160a01b0316907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908390a3600880546001600160a01b0319169055565b6000610690338484610dc4565b50600192915050565b60025490565b60006106ac848484610eb0565b6106fe84336106f985604051806060016040528060288152602001611435602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061100b565b610dc4565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055460ff1690565b60075481565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916106909185906106f990866110a2565b600a546001600160a01b031633146107ba5760405162461bcd60e51b815260040180806020018281038252602381526020018061145d6023913960400191505060405180910390fd5b6107c48282611103565b5050565b6107d233826111f3565b50565b6008546001600160a01b03163314610834576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166108795760405162461bcd60e51b81526004018080602001828103825260268152602001806113846026913960400191505060405180910390fd5b6008546040516001600160a01b038084169216907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba90600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b0316331461091e5760405162461bcd60e51b81526004018080602001828103825260228152602001806113f26022913960400191505060405180910390fd5b6009546008546040516001600160a01b0392831692909116907faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d90600090a3600954600880546001600160a01b0319166001600160a01b03909216919091179055565b6008546000906001600160a01b031633146109e3576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b50600a80546001600160a01b0383166001600160a01b03199091161790556001919050565b6001600160a01b031660009081526020819052604090205490565b6107c48282610ab5565b6001600160a01b0381166000908152600660205260408120610a4e906112ef565b92915050565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105d05780601f106105a5576101008083540402835291602001916105d0565b6000610ae58260405180606001604052806024815260200161148060249139610ade8633610d8a565b919061100b565b9050610af2833383610dc4565b610afc83836111f3565b505050565b600061069033846106f98560405180606001604052806025815260200161150e602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061100b565b6000610690338484610eb0565b83421115610bb2576040805162461bcd60e51b815260206004820152601860248201527f5065726d69743a206578706972656420646561646c696e650000000000000000604482015290519081900360640190fd5b6001600160a01b03871660009081526006602052604081207f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c990899089908990610bfb906112ef565b604080516020808201979097526001600160a01b0395861681830152939094166060840152608083019190915260a082015260c08082018990528251808303909101815260e08201835280519084012060075461190160f01b610100840152610102830152610122808301829052835180840390910181526101428301808552815191860191909120600091829052610162840180865281905260ff8a166101828501526101a284018990526101c28401889052935191955092936001926101e280820193601f1981019281900390910190855afa158015610ce1573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590610d175750896001600160a01b0316816001600160a01b0316145b610d525760405162461bcd60e51b81526004018080602001828103825260218152602001806114146021913960400191505060405180910390fd5b6001600160a01b038a166000908152600660205260409020610d73906112f3565b610d7e8a8a8a610dc4565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600a546001600160a01b031690565b6001600160a01b038316610e095760405162461bcd60e51b81526004018080602001828103825260248152602001806114ea6024913960400191505060405180910390fd5b6001600160a01b038216610e4e5760405162461bcd60e51b81526004018080602001828103825260228152602001806113aa6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610ef55760405162461bcd60e51b81526004018080602001828103825260258152602001806114c56025913960400191505060405180910390fd5b6001600160a01b038216610f3a5760405162461bcd60e51b815260040180806020018281038252602381526020018061133f6023913960400191505060405180910390fd5b610f45838383610afc565b610f82816040518060600160405280602681526020016113cc602691396001600160a01b038616600090815260208190526040902054919061100b565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610fb190826110a2565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561109a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561105f578181015183820152602001611047565b50505050905090810190601f16801561108c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156110fc576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b03821661115e576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611169308383610afc565b60025461117690826110a2565b6002556001600160a01b03821660009081526020819052604090205461119c90826110a2565b6001600160a01b038316600081815260208181526040918290209390935580518481529051919230927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b0382166112385760405162461bcd60e51b81526004018080602001828103825260218152602001806114a46021913960400191505060405180910390fd5b61124482600083610afc565b61128181604051806060016040528060228152602001611362602291396001600160a01b038516600090815260208190526040902054919061100b565b6001600160a01b0383166000908152602081905260409020556002546112a790826112fc565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b5490565b80546001019055565b60006110fc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061100b56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c5a65726f537761705065726d69743a20496e76616c6964207369676e617475726545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655661756c744f776e65643a2063616c6c6572206973206e6f7420746865205661756c7445524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205bf119cdbb4015a98ba7818b681b1141674398a822cc122add2cb0f7f0110ea264736f6c634300070500330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000044a4144450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044a41444500000000000000000000000000000000000000000000000000000000

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

0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000044a4144450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044a41444500000000000000000000000000000000000000000000000000000000

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

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [3] : 4a41444500000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [5] : 4a41444500000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

175:878:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;472:87:8;;;:::i;:::-;;;;-1:-1:-1;;;;;472:87:8;;;;;;;;;;;;;;751:81:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;934:155:8;;;:::i;:::-;;1591:164:2;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1591:164:2;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1025:98;;;:::i;:::-;;;;;;;;;;;;;;;;1761:313;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1761:313:2;;;;;;;;;;;;;;;;;:::i;464:108:3:-;;;:::i;929:90:2:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;579:31:3;;;:::i;2080:211:2:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2080:211:2;;;;;;;;:::i;363:111:7:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;363:111:7;;;;;;;;:::i;480:87::-;;;;;;;;;;;;;;;;-1:-1:-1;480:87:7;;:::i;1095:256:8:-;;;;;;;;;;;;;;;;-1:-1:-1;1095:256:8;-1:-1:-1;;;;;1095:256:8;;:::i;1361:217::-;;;:::i;166:118:11:-;;;;;;;;;;;;;;;;-1:-1:-1;166:118:11;-1:-1:-1;;;;;166:118:11;;:::i;1129:125:2:-;;;;;;;;;;;;;;;;-1:-1:-1;1129:125:2;-1:-1:-1;;;;;1129:125:2;;:::i;578:113:7:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;578:113:7;;;;;;;;:::i;1834:118:3:-;;;;;;;;;;;;;;;;-1:-1:-1;1834:118:3;-1:-1:-1;;;;;1834:118:3;;:::i;838:85:2:-;;;:::i;697:354:7:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;697:354:7;;;;;;;;:::i;2297:262:2:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2297:262:2;;;;;;;;:::i;1260:170::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1260:170:2;;;;;;;;:::i;1079:749:3:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1079:749:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1436:149:2:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1436:149:2;;;;;;;;;;:::i;288:71:11:-;;;:::i;472:87:8:-;546:6;;-1:-1:-1;;;;;546:6:8;472:87;:::o;751:81:2:-;820:5;813:12;;;;;;;;-1:-1:-1;;813:12:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;788:13;;813:12;;820:5;;813:12;;820:5;813:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;751:81;:::o;934:155:8:-;606:6;;-1:-1:-1;;;;;606:6:8;616:10;606:20;597:67;;;;;-1:-1:-1;;;597:67:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1033:6:::1;::::0;1016:37:::1;::::0;1049:1:::1;::::0;-1:-1:-1;;;;;1033:6:8::1;::::0;1016:37:::1;::::0;1049:1;;1016:37:::1;1063:6;:19:::0;;-1:-1:-1;;;;;;1063:19:8::1;::::0;;934:155::o;1591:164:2:-;1674:4;1690:37;1699:10;1711:7;1720:6;1690:8;:37::i;:::-;-1:-1:-1;1744:4:2;1591:164;;;;:::o;1025:98::-;1104:12;;1025:98;:::o;1761:313::-;1867:4;1883:36;1893:6;1901:9;1912:6;1883:9;:36::i;:::-;1929:117;1938:6;1946:10;1958:87;1994:6;1958:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1958:19:2;;;;;;:11;:19;;;;;;;;1978:10;1958:31;;;;;;;;;:87;:35;:87::i;:::-;1929:8;:117::i;:::-;-1:-1:-1;2063:4:2;1761:313;;;;;:::o;464:108:3:-;506:66;464:108;:::o;929:90:2:-;1003:9;;;;929:90;:::o;579:31:3:-;;;;:::o;2080:211:2:-;2193:10;2168:4;2214:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;2214:32:2;;;;;;;;;;2168:4;;2184:79;;2205:7;;2214:48;;2251:10;2214:36;:48::i;363:111:7:-;399:6:11;;-1:-1:-1;;;;;399:6:11;409:10;399:20;390:70;;;;-1:-1:-1;;;390:70:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;443:24:7::1;449:8;459:7;443:5;:24::i;:::-;363:111:::0;;:::o;480:87::-;535:25;541:10;553:6;535:5;:25::i;:::-;480:87;:::o;1095:256:8:-;606:6;;-1:-1:-1;;;;;606:6:8;616:10;606:20;597:67;;;;;-1:-1:-1;;;597:67:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1196:23:8;::::1;1187:75;;;;-1:-1:-1::0;;;1187:75:8::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1294:6;::::0;1277:36:::1;::::0;-1:-1:-1;;;;;1277:36:8;;::::1;::::0;1294:6:::1;::::0;1277:36:::1;::::0;1294:6:::1;::::0;1277:36:::1;1323:9;:21:::0;;-1:-1:-1;;;;;;1323:21:8::1;-1:-1:-1::0;;;;;1323:21:8;;;::::1;::::0;;;::::1;::::0;;1095:256::o;1361:217::-;1444:9;;-1:-1:-1;;;;;1444:9:8;1430:10;:23;1421:71;;;;-1:-1:-1;;;1421:71:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1532:9;;1524:6;;1507:36;;-1:-1:-1;;;;;1532:9:8;;;;1524:6;;;;1507:36;;1532:9;;1507:36;1562:9;;1553:6;:18;;-1:-1:-1;;;;;;1553:18:8;-1:-1:-1;;;;;1562:9:8;;;1553:18;;;;;;1361:217::o;166:118:11:-;728:6:8;;233:4:11;;-1:-1:-1;;;;;728:6:8;738:10;728:20;719:67;;;;;-1:-1:-1;;;719:67:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;246:6:11::1;:15:::0;;-1:-1:-1;;;;;246:15:11;::::1;-1:-1:-1::0;;;;;;246:15:11;;::::1;;::::0;;;166:118;;;:::o;1129:125:2:-;-1:-1:-1;;;;;1229:18:2;1203:7;1229:18;;;;;;;;;;;;1129:125::o;578:113:7:-;656:28;666:8;676:7;656:9;:28::i;1834:118:3:-;-1:-1:-1;;;;;1921:14:3;;1895:7;1921:14;;;:7;:14;;;;;:24;;:22;:24::i;:::-;1914:31;1834:118;-1:-1:-1;;1834:118:3:o;838:85:2:-;909:7;902:14;;;;;;;;-1:-1:-1;;902:14:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;877:13;;902:14;;909:7;;902:14;;909:7;902:14;;;;;;;;;;;;;;;;;;;;;;;;697:354:7;776:27;818:130;871:7;818:130;;;;;;;;;;;;;;;;;:31;828:8;838:10;818:9;:31::i;:::-;:35;:130;:35;:130::i;:::-;776:172;;959:51;968:8;978:10;990:19;959:8;:51::i;:::-;1020:24;1026:8;1036:7;1020:5;:24::i;:::-;697:354;;;:::o;2297:262:2:-;2390:4;2406:125;2415:10;2427:7;2436:94;2473:15;2436:94;;;;;;;;;;;;;;;;;2448:10;2436:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;2436:32:2;;;;;;;;;;;:94;:36;:94::i;1260:170::-;1346:4;1362:40;1372:10;1384:9;1395:6;1362:9;:40::i;1079:749:3:-;1315:8;1296:15;:27;;1288:64;;;;;-1:-1:-1;;;1288:64:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1458:14:3;;1363:18;1458:14;;;:7;:14;;;;;506:66;;1434:5;;1441:7;;1450:6;;1458:24;;:22;:24::i;:::-;1406:87;;;;;;;;;;;-1:-1:-1;;;;;1406:87:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1396:98;;;;;;1564:16;;-1:-1:-1;;;1531:62:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1521:73;;;;;;;;;-1:-1:-1;1622:25:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1396:98;;-1:-1:-1;1521:73:3;;1622:25;;;;;;;-1:-1:-1;;1622:25:3;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1622:25:3;;-1:-1:-1;;1622:25:3;;;-1:-1:-1;;;;;;;1665:20:3;;;;;;:39;;;1699:5;-1:-1:-1;;;;;1689:15:3;:6;-1:-1:-1;;;;;1689:15:3;;1665:39;1657:85;;;;-1:-1:-1;;;1657:85:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1753:14:3;;;;;;:7;:14;;;;;:26;;:24;:26::i;:::-;1789:32;1798:5;1805:7;1814:6;1789:8;:32::i;:::-;1079:749;;;;;;;;;;:::o;1436:149:2:-;-1:-1:-1;;;;;1551:18:2;;;1525:7;1551:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;1436:149::o;288:71:11:-;348:6;;-1:-1:-1;;;;;348:6:11;288:71;:::o;3917:340:2:-;-1:-1:-1;;;;;4018:19:2;;4010:68;;;;-1:-1:-1;;;4010:68:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4096:21:2;;4088:68;;;;-1:-1:-1;;;4088:68:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4167:18:2;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;4218:32;;;;;;;;;;;;;;;;;3917:340;;;:::o;2565:530::-;-1:-1:-1;;;;;2670:20:2;;2662:70;;;;-1:-1:-1;;;2662:70:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2750:23:2;;2742:71;;;;-1:-1:-1;;;2742:71:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2824:47;2845:6;2853:9;2864:6;2824:20;:47::i;:::-;2902:71;2924:6;2902:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2902:17:2;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;2882:17:2;;;:9;:17;;;;;;;;;;;:91;;;;3006:20;;;;;;;:32;;3031:6;3006:24;:32::i;:::-;-1:-1:-1;;;;;2983:20:2;;;:9;:20;;;;;;;;;;;;:55;;;;3053:35;;;;;;;2983:20;;3053:35;;;;;;;;;;;;;2565:530;;;:::o;417:187:10:-;503:7;538:12;530:6;;;;522:29;;;;-1:-1:-1;;;522:29:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;573:5:10;;;417:187::o;95:176::-;153:7;184:5;;;207:6;;;;199:46;;;;;-1:-1:-1;;;199:46:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;263:1;95:176;-1:-1:-1;;;95:176:10:o;3101:394:2:-;-1:-1:-1;;;;;3187:22:2;;3179:66;;;;;-1:-1:-1;;;3179:66:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;3255:57;3285:4;3293:8;3303;3255:20;:57::i;:::-;3337:12;;:26;;3354:8;3337:16;:26::i;:::-;3322:12;:41;-1:-1:-1;;;;;3395:19:2;;:9;:19;;;;;;;;;;;:33;;3419:8;3395:23;:33::i;:::-;-1:-1:-1;;;;;3373:19:2;;:9;:19;;;;;;;;;;;;:55;;;;3443:45;;;;;;;3373:19;;3461:4;;3443:45;;;;;;;;;;3101:394;;:::o;3501:410::-;-1:-1:-1;;;;;3584:21:2;;3576:67;;;;-1:-1:-1;;;3576:67:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3654:49;3675:7;3692:1;3696:6;3654:20;:49::i;:::-;3735:68;3758:6;3735:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3735:18:2;;:9;:18;;;;;;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;3714:18:2;;:9;:18;;;;;;;;;;:89;3828:12;;:24;;3845:6;3828:16;:24::i;:::-;3813:12;:39;3867:37;;;;;;;;3893:1;;-1:-1:-1;;;;;3867:37:2;;;;;;;;;;;;3501:410;;:::o;220:112:1:-;311:14;;220:112::o;338:89::-;401:19;;419:1;401:19;;;338:89::o;277:134:10:-;335:7;361:43;365:1;368;361:43;;;;;;;;;;;;;;;;;:3;:43::i

Swarm Source

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