Contract 0x004065d34c6b18ce4370ced1cebde94865dbfafe

 

Contract Overview

Balance:
0 BNB

BNB Value:
$0.00

Token:
Txn Hash
Block
From
To
Value [Txn Fee]
0x1aa86dee0cd1a3c8d36352739c6df7eb1038115cae4fb14a5c2d2a7b0be57f4184420682021-06-19 20:38:012 mins ago0x54b0efb2d13406a5a9f936a288d7890c3d3bb930 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.00115699
0x216f022616ee848015b5c53a5f5ea2ab34ca3459e0e6d599ba8c0a247bbe19ba84419942021-06-19 20:34:195 mins ago0x5c6698d1e80270a9bc12b16a4d8cbc6fbee0371b IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.003339015
0x6556a0c63e769639d5578f4a84be03f1abe60670f3a4f3b513ad3bdf2a9fa7a484419442021-06-19 20:31:498 mins ago0xad6b1b53a5946d48b73ac29d4153500fb2335001 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.001327885
0x3199545f9a1dbfbea6e14f841b715ebf0dd3d3d25cce440edb8de08bba44f28f84419372021-06-19 20:31:288 mins ago0xc8206a41abad6edcddfdef4395a7378941e80fae IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000647898
0x49372094c67b7c6129925c36db79273b7dafe9924636b8c30b04a0b8103a36f184417202021-06-19 20:20:3719 mins ago0x81444b10a746ae6aefd84b7914ba8edc742e8e98 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.00113624
0x4201510e5a8f0ad3b7a16d161aacb9b2f07a495fef7f5d23b90ccb9177827ff784416172021-06-19 20:15:2824 mins ago0xea2186233bcf15deccf8ad9ca52be152e21dba79 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.001508635
0xac38e40a701f118752dc82aeae4cd7f1bc629100bb66ba1df53f5e7fcc0ad64a84414702021-06-19 20:08:0731 mins ago0xea2186233bcf15deccf8ad9ca52be152e21dba79 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000539855
0x8feaa43f73ecd2e0dd539d2293b5e286f9ee2ad1ca641c1c3dc31329e07b090784414292021-06-19 20:06:0433 mins ago0xc86af0ffd644ae642b856b18ab0ae914ea14dfdd IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.001210785
0x91474436b3f51bf31b4d99b413729c9632586ff1d143650510c3a3ae1d574cc884413142021-06-19 20:00:1939 mins ago0x4c2752cd1ab87d64542602a5bcb38c1061c397cd IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000539795
0x5363037b54651e4b2046800b1bea95731d575d953ba865dc5452e2c3b7d3120c84411692021-06-19 19:53:0446 mins ago0x90e98c40d015f93497cb295b601f1e969808b3ce IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.002445745
0x44783f03be8e9ab06b9f168b4b50fd5d203f1d8770f6b42ea9a67141fb0673d084410622021-06-19 19:47:4352 mins ago0x83d50a33805bee1a63ed9785fd6980b5f949c2c3 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.001232295
0x09ac19098341d92e3372ef8341006734e595bcb6908b3607a3fb5dadba9af60f84409362021-06-19 19:41:2558 mins ago0xe90c2bc54c718bf6d563d945f9634aa40f94327c IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.00123183
0xc2519b1506ce3a05fb0fb38626adaeacbe9761ab031502bcea844f9f57e931c184408192021-06-19 19:35:341 hr 4 mins ago0xe6804165b75544af7181fd6e653d37fcabd655f9 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000539865
0x0f35972a4cd546406d0ee1e2b4845633241147c5377f0cf3078f55cd65ec55f384407792021-06-19 19:33:341 hr 6 mins ago0x242bc7b9319c2ea4f5bd8b75277e1c858bca6721 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.00362313
0xacf3a3f17ec0e62973cc9329d9f464d6360cc2026e8e408c9b66601d27ee48e484406362021-06-19 19:26:251 hr 13 mins ago0xc99dc4679d4df6b375db3b4ab94a497a7ad48b55 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000539915
0x47be8ba35d08c68dd01a2f2a680052312307ab230855b286af08ddda130143ce84404912021-06-19 19:19:101 hr 20 mins ago0xbe4753c5a30ba343a3d4c43079f8532cc48c2265 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000539915
0x7fd55d201fc6277144fccfa5ce687b8fee6882b5dfbc16bdef52799d2d48432a84404642021-06-19 19:17:491 hr 22 mins ago0xff4a23f8fdccc2195bee38c1949140167893b64d IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000539865
0xbe80e14687b1de3840b02a0e87d8da4025ddbc6969da73876314f975f31b71cd84403012021-06-19 19:09:401 hr 30 mins ago0x242bc7b9319c2ea4f5bd8b75277e1c858bca6721 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000539915
0x86365eaa83739ed86da2bc300187a24ea223818079468b58cc7f7aed01e5f9ac84402632021-06-19 19:07:461 hr 32 mins ago0x1eeaf999951c7c7d5fdacf5bd0804fbcc39c43a1 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.00188671
0x0bfffc0bf48cc8e56db8f4ef36b012682ad692b78fc61b14cd82f1c494ccd07284402582021-06-19 19:07:311 hr 32 mins ago0x6e1bbcedb481a9184bc081d8e279966d02d3e3c9 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.005467746
0x8133305d2955bd6acb72f521294695aa0e1921dbb0fc483e5ab8d18cce1aa7e384402222021-06-19 19:05:431 hr 34 mins ago0x34009658413dbccf555a19d56cf8189ccb977890 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000539915
0x451dca4bf68f303f9d13d887f7441aa6ee1f64efc90c233a7dffe02cc32c8a3c84402172021-06-19 19:05:281 hr 34 mins ago0x3736be9f874ba48defbf3b79e1e3028428745f43 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000539805
0xdfd591bb1153d6f58e95515f0d8d901c902e850671ad73e8ee91f7bb8bb212c284400532021-06-19 18:57:161 hr 42 mins ago0x5544ea05bc1446de2126f1621b97ef9d0579fe70 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000539915
0x6790cfcf6322bee393dc89f51054eab968196ad610f66892c3b1a0c085a7068f84400272021-06-19 18:55:581 hr 44 mins ago0xa5cec1c90147190c16351ec395df3af01554d04b IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.00109509
0xd46cda20d050a73a8ffa705ddfec8ad99a9adc6b74abc3110293114940fef5bd84399352021-06-19 18:51:221 hr 48 mins ago0x3736be9f874ba48defbf3b79e1e3028428745f43 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.00124989
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x719b4887befc48f81b2cf6a1b993b4fb82381b222c296bd617d0b212fab7e5c154713292021-03-07 11:59:24104 days 8 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0x719b4887befc48f81b2cf6a1b993b4fb82381b222c296bd617d0b212fab7e5c154713292021-03-07 11:59:24104 days 8 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0x719b4887befc48f81b2cf6a1b993b4fb82381b222c296bd617d0b212fab7e5c154713292021-03-07 11:59:24104 days 8 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe 0x16c8ee0aab1fdee76cc1906c831e08b97729ec6d0 BNB
0x719b4887befc48f81b2cf6a1b993b4fb82381b222c296bd617d0b212fab7e5c154713292021-03-07 11:59:24104 days 8 hrs ago Venus: Distribution 0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB
0x719b4887befc48f81b2cf6a1b993b4fb82381b222c296bd617d0b212fab7e5c154713292021-03-07 11:59:24104 days 8 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0x719b4887befc48f81b2cf6a1b993b4fb82381b222c296bd617d0b212fab7e5c154713292021-03-07 11:59:24104 days 8 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe 0x16c8ee0aab1fdee76cc1906c831e08b97729ec6d0 BNB
0x719b4887befc48f81b2cf6a1b993b4fb82381b222c296bd617d0b212fab7e5c154713292021-03-07 11:59:24104 days 8 hrs ago Venus: Distribution 0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB
0x1d5929ba3089b23ab0f89f8c4f15ad2ae8244c6577c6f574d7472face4f3357254713272021-03-07 11:59:18104 days 8 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: VAI Token0 BNB
0x1d5929ba3089b23ab0f89f8c4f15ad2ae8244c6577c6f574d7472face4f3357254713272021-03-07 11:59:18104 days 8 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0x1d5929ba3089b23ab0f89f8c4f15ad2ae8244c6577c6f574d7472face4f3357254713272021-03-07 11:59:18104 days 8 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0x1d5929ba3089b23ab0f89f8c4f15ad2ae8244c6577c6f574d7472face4f3357254713272021-03-07 11:59:18104 days 8 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0x1d5929ba3089b23ab0f89f8c4f15ad2ae8244c6577c6f574d7472face4f3357254713272021-03-07 11:59:18104 days 8 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0x1d5929ba3089b23ab0f89f8c4f15ad2ae8244c6577c6f574d7472face4f3357254713272021-03-07 11:59:18104 days 8 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe 0x16c8ee0aab1fdee76cc1906c831e08b97729ec6d0 BNB
0x1d5929ba3089b23ab0f89f8c4f15ad2ae8244c6577c6f574d7472face4f3357254713272021-03-07 11:59:18104 days 8 hrs ago Venus: Distribution 0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB
0x1d5929ba3089b23ab0f89f8c4f15ad2ae8244c6577c6f574d7472face4f3357254713272021-03-07 11:59:18104 days 8 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0x1d5929ba3089b23ab0f89f8c4f15ad2ae8244c6577c6f574d7472face4f3357254713272021-03-07 11:59:18104 days 8 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0x1d5929ba3089b23ab0f89f8c4f15ad2ae8244c6577c6f574d7472face4f3357254713272021-03-07 11:59:18104 days 8 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0x1d5929ba3089b23ab0f89f8c4f15ad2ae8244c6577c6f574d7472face4f3357254713272021-03-07 11:59:18104 days 8 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe 0x16c8ee0aab1fdee76cc1906c831e08b97729ec6d0 BNB
0x94f52b8bca93283fc16c7d89628e7053a79e5464085b04d20fd2aa0e1a134e2754713212021-03-07 11:59:00104 days 8 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0x94f52b8bca93283fc16c7d89628e7053a79e5464085b04d20fd2aa0e1a134e2754713212021-03-07 11:59:00104 days 8 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0x94f52b8bca93283fc16c7d89628e7053a79e5464085b04d20fd2aa0e1a134e2754713212021-03-07 11:59:00104 days 8 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe 0x16c8ee0aab1fdee76cc1906c831e08b97729ec6d0 BNB
0x94f52b8bca93283fc16c7d89628e7053a79e5464085b04d20fd2aa0e1a134e2754713212021-03-07 11:59:00104 days 8 hrs ago Venus: Distribution 0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB
0x94f52b8bca93283fc16c7d89628e7053a79e5464085b04d20fd2aa0e1a134e2754713212021-03-07 11:59:00104 days 8 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0x94f52b8bca93283fc16c7d89628e7053a79e5464085b04d20fd2aa0e1a134e2754713212021-03-07 11:59:00104 days 8 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe 0x16c8ee0aab1fdee76cc1906c831e08b97729ec6d0 BNB
0x94f52b8bca93283fc16c7d89628e7053a79e5464085b04d20fd2aa0e1a134e2754713212021-03-07 11:59:00104 days 8 hrs ago Venus: Distribution 0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
VAIUnitroller

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 1 of 7: VAIUnitroller.sol
pragma solidity ^0.5.16;

import "./ErrorReporter.sol";
import "./VAIControllerStorage.sol";

contract VAIUnitroller is VAIUnitrollerAdminStorage, VAIControllerErrorReporter {

    /**
      * @notice Emitted when pendingVAIControllerImplementation is changed
      */
    event NewPendingImplementation(address oldPendingImplementation, address newPendingImplementation);

    /**
      * @notice Emitted when pendingVAIControllerImplementation is accepted, which means comptroller implementation is updated
      */
    event NewImplementation(address oldImplementation, address newImplementation);

    /**
      * @notice Emitted when pendingAdmin is changed
      */
    event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);

    /**
      * @notice Emitted when pendingAdmin is accepted, which means admin is updated
      */
    event NewAdmin(address oldAdmin, address newAdmin);

    constructor() public {
        // Set admin to caller
        admin = msg.sender;
    }

    /*** Admin Functions ***/
    function _setPendingImplementation(address newPendingImplementation) public returns (uint) {

        if (msg.sender != admin) {
            return fail(Error.UNAUTHORIZED, FailureInfo.SET_PENDING_IMPLEMENTATION_OWNER_CHECK);
        }

        address oldPendingImplementation = pendingVAIControllerImplementation;

        pendingVAIControllerImplementation = newPendingImplementation;

        emit NewPendingImplementation(oldPendingImplementation, pendingVAIControllerImplementation);

        return uint(Error.NO_ERROR);
    }

    /**
    * @notice Accepts new implementation of comptroller. msg.sender must be pendingImplementation
    * @dev Admin function for new implementation to accept it's role as implementation
    * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
    */
    function _acceptImplementation() public returns (uint) {
        // Check caller is pendingImplementation and pendingImplementation ≠ address(0)
        if (msg.sender != pendingVAIControllerImplementation || pendingVAIControllerImplementation == address(0)) {
            return fail(Error.UNAUTHORIZED, FailureInfo.ACCEPT_PENDING_IMPLEMENTATION_ADDRESS_CHECK);
        }

        // Save current values for inclusion in log
        address oldImplementation = vaiControllerImplementation;
        address oldPendingImplementation = pendingVAIControllerImplementation;

        vaiControllerImplementation = pendingVAIControllerImplementation;

        pendingVAIControllerImplementation = address(0);

        emit NewImplementation(oldImplementation, vaiControllerImplementation);
        emit NewPendingImplementation(oldPendingImplementation, pendingVAIControllerImplementation);

        return uint(Error.NO_ERROR);
    }


    /**
      * @notice Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.
      * @dev Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.
      * @param newPendingAdmin New pending admin.
      * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
      */
    function _setPendingAdmin(address newPendingAdmin) public returns (uint) {
        // Check caller = admin
        if (msg.sender != admin) {
            return fail(Error.UNAUTHORIZED, FailureInfo.SET_PENDING_ADMIN_OWNER_CHECK);
        }

        // Save current value, if any, for inclusion in log
        address oldPendingAdmin = pendingAdmin;

        // Store pendingAdmin with value newPendingAdmin
        pendingAdmin = newPendingAdmin;

        // Emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin)
        emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin);

        return uint(Error.NO_ERROR);
    }

    /**
      * @notice Accepts transfer of admin rights. msg.sender must be pendingAdmin
      * @dev Admin function for pending admin to accept role and update admin
      * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
      */
    function _acceptAdmin() public returns (uint) {
        // Check caller is pendingAdmin and pendingAdmin ≠ address(0)
        if (msg.sender != pendingAdmin || msg.sender == address(0)) {
            return fail(Error.UNAUTHORIZED, FailureInfo.ACCEPT_ADMIN_PENDING_ADMIN_CHECK);
        }

        // Save current values for inclusion in log
        address oldAdmin = admin;
        address oldPendingAdmin = pendingAdmin;

        // Store admin with value pendingAdmin
        admin = pendingAdmin;

        // Clear the pending value
        pendingAdmin = address(0);

        emit NewAdmin(oldAdmin, admin);
        emit NewPendingAdmin(oldPendingAdmin, pendingAdmin);

        return uint(Error.NO_ERROR);
    }

    /**
     * @dev Delegates execution to an implementation contract.
     * It returns to the external caller whatever the implementation returns
     * or forwards reverts.
     */
    function () external payable {
        // delegate all other functions to current implementation
        (bool success, ) = vaiControllerImplementation.delegatecall(msg.data);

        assembly {
              let free_mem_ptr := mload(0x40)
              returndatacopy(free_mem_ptr, 0, returndatasize)

              switch success
              case 0 { revert(free_mem_ptr, returndatasize) }
              default { return(free_mem_ptr, returndatasize) }
        }
    }
}

File 2 of 7: ComptrollerInterface.sol
pragma solidity ^0.5.16;

contract ComptrollerInterface {
    /// @notice Indicator that this is a Comptroller contract (for inspection)
    bool public constant isComptroller = true;

    /*** Assets You Are In ***/

    function enterMarkets(address[] calldata vTokens) external returns (uint[] memory);
    function exitMarket(address vToken) external returns (uint);

    /*** Policy Hooks ***/

    function mintAllowed(address vToken, address minter, uint mintAmount) external returns (uint);
    function mintVerify(address vToken, address minter, uint mintAmount, uint mintTokens) external;

    function redeemAllowed(address vToken, address redeemer, uint redeemTokens) external returns (uint);
    function redeemVerify(address vToken, address redeemer, uint redeemAmount, uint redeemTokens) external;

    function borrowAllowed(address vToken, address borrower, uint borrowAmount) external returns (uint);
    function borrowVerify(address vToken, address borrower, uint borrowAmount) external;

    function repayBorrowAllowed(
        address vToken,
        address payer,
        address borrower,
        uint repayAmount) external returns (uint);
    function repayBorrowVerify(
        address vToken,
        address payer,
        address borrower,
        uint repayAmount,
        uint borrowerIndex) external;

    function liquidateBorrowAllowed(
        address vTokenBorrowed,
        address vTokenCollateral,
        address liquidator,
        address borrower,
        uint repayAmount) external returns (uint);
    function liquidateBorrowVerify(
        address vTokenBorrowed,
        address vTokenCollateral,
        address liquidator,
        address borrower,
        uint repayAmount,
        uint seizeTokens) external;

    function seizeAllowed(
        address vTokenCollateral,
        address vTokenBorrowed,
        address liquidator,
        address borrower,
        uint seizeTokens) external returns (uint);
    function seizeVerify(
        address vTokenCollateral,
        address vTokenBorrowed,
        address liquidator,
        address borrower,
        uint seizeTokens) external;

    function transferAllowed(address vToken, address src, address dst, uint transferTokens) external returns (uint);
    function transferVerify(address vToken, address src, address dst, uint transferTokens) external;

    /*** Liquidity/Liquidation Calculations ***/

    function liquidateCalculateSeizeTokens(
        address vTokenBorrowed,
        address vTokenCollateral,
        uint repayAmount) external view returns (uint, uint);

    function mintedVAIOf(address owner) external view returns (uint);
    function setMintedVAIOf(address owner, uint amount) external returns (uint);
    function getVAIMintRate() external view returns (uint);
}

File 3 of 7: ErrorReporter.sol
pragma solidity ^0.5.16;

contract ComptrollerErrorReporter {
    enum Error {
        NO_ERROR,
        UNAUTHORIZED,
        COMPTROLLER_MISMATCH,
        INSUFFICIENT_SHORTFALL,
        INSUFFICIENT_LIQUIDITY,
        INVALID_CLOSE_FACTOR,
        INVALID_COLLATERAL_FACTOR,
        INVALID_LIQUIDATION_INCENTIVE,
        MARKET_NOT_ENTERED, // no longer possible
        MARKET_NOT_LISTED,
        MARKET_ALREADY_LISTED,
        MATH_ERROR,
        NONZERO_BORROW_BALANCE,
        PRICE_ERROR,
        REJECTION,
        SNAPSHOT_ERROR,
        TOO_MANY_ASSETS,
        TOO_MUCH_REPAY,
        NONZERO_MINTEDVAI_BALANCE,
        /// @dev VAI Integration^
        INSUFFICIENT_BALANCE_FOR_VAI
        /// @dev VAI Integration$
    }

    enum FailureInfo {
        ACCEPT_ADMIN_PENDING_ADMIN_CHECK,
        ACCEPT_PENDING_IMPLEMENTATION_ADDRESS_CHECK,
        EXIT_MARKET_BALANCE_OWED,
        EXIT_MARKET_REJECTION,
        SET_CLOSE_FACTOR_OWNER_CHECK,
        SET_CLOSE_FACTOR_VALIDATION,
        SET_COLLATERAL_FACTOR_OWNER_CHECK,
        SET_COLLATERAL_FACTOR_NO_EXISTS,
        SET_COLLATERAL_FACTOR_VALIDATION,
        SET_COLLATERAL_FACTOR_WITHOUT_PRICE,
        SET_IMPLEMENTATION_OWNER_CHECK,
        SET_LIQUIDATION_INCENTIVE_OWNER_CHECK,
        SET_LIQUIDATION_INCENTIVE_VALIDATION,
        SET_MAX_ASSETS_OWNER_CHECK,
        SET_PENDING_ADMIN_OWNER_CHECK,
        SET_PENDING_IMPLEMENTATION_OWNER_CHECK,
        SET_PRICE_ORACLE_OWNER_CHECK,
        SUPPORT_MARKET_EXISTS,
        SUPPORT_MARKET_OWNER_CHECK,
        SET_PAUSE_GUARDIAN_OWNER_CHECK,
        SET_VAI_MINT_RATE_CHECK,
        SET_VAICONTROLLER_OWNER_CHECK,
        SET_MINTED_VAI_REJECTION
    }

    /**
      * @dev `error` corresponds to enum Error; `info` corresponds to enum FailureInfo, and `detail` is an arbitrary
      * contract-specific code that enables us to report opaque error codes from upgradeable contracts.
      **/
    event Failure(uint error, uint info, uint detail);

    /**
      * @dev use this when reporting a known error from the money market or a non-upgradeable collaborator
      */
    function fail(Error err, FailureInfo info) internal returns (uint) {
        emit Failure(uint(err), uint(info), 0);

        return uint(err);
    }

    /**
      * @dev use this when reporting an opaque error from an upgradeable collaborator contract
      */
    function failOpaque(Error err, FailureInfo info, uint opaqueError) internal returns (uint) {
        emit Failure(uint(err), uint(info), opaqueError);

        return uint(err);
    }
}

contract TokenErrorReporter {
    enum Error {
        NO_ERROR,
        UNAUTHORIZED,
        BAD_INPUT,
        COMPTROLLER_REJECTION,
        COMPTROLLER_CALCULATION_ERROR,
        INTEREST_RATE_MODEL_ERROR,
        INVALID_ACCOUNT_PAIR,
        INVALID_CLOSE_AMOUNT_REQUESTED,
        INVALID_COLLATERAL_FACTOR,
        MATH_ERROR,
        MARKET_NOT_FRESH,
        MARKET_NOT_LISTED,
        TOKEN_INSUFFICIENT_ALLOWANCE,
        TOKEN_INSUFFICIENT_BALANCE,
        TOKEN_INSUFFICIENT_CASH,
        TOKEN_TRANSFER_IN_FAILED,
        TOKEN_TRANSFER_OUT_FAILED,
        TOKEN_PRICE_ERROR
    }

    /*
     * Note: FailureInfo (but not Error) is kept in alphabetical order
     *       This is because FailureInfo grows significantly faster, and
     *       the order of Error has some meaning, while the order of FailureInfo
     *       is entirely arbitrary.
     */
    enum FailureInfo {
        ACCEPT_ADMIN_PENDING_ADMIN_CHECK,
        ACCRUE_INTEREST_ACCUMULATED_INTEREST_CALCULATION_FAILED,
        ACCRUE_INTEREST_BORROW_RATE_CALCULATION_FAILED,
        ACCRUE_INTEREST_NEW_BORROW_INDEX_CALCULATION_FAILED,
        ACCRUE_INTEREST_NEW_TOTAL_BORROWS_CALCULATION_FAILED,
        ACCRUE_INTEREST_NEW_TOTAL_RESERVES_CALCULATION_FAILED,
        ACCRUE_INTEREST_SIMPLE_INTEREST_FACTOR_CALCULATION_FAILED,
        BORROW_ACCUMULATED_BALANCE_CALCULATION_FAILED,
        BORROW_ACCRUE_INTEREST_FAILED,
        BORROW_CASH_NOT_AVAILABLE,
        BORROW_FRESHNESS_CHECK,
        BORROW_NEW_TOTAL_BALANCE_CALCULATION_FAILED,
        BORROW_NEW_ACCOUNT_BORROW_BALANCE_CALCULATION_FAILED,
        BORROW_MARKET_NOT_LISTED,
        BORROW_COMPTROLLER_REJECTION,
        LIQUIDATE_ACCRUE_BORROW_INTEREST_FAILED,
        LIQUIDATE_ACCRUE_COLLATERAL_INTEREST_FAILED,
        LIQUIDATE_COLLATERAL_FRESHNESS_CHECK,
        LIQUIDATE_COMPTROLLER_REJECTION,
        LIQUIDATE_COMPTROLLER_CALCULATE_AMOUNT_SEIZE_FAILED,
        LIQUIDATE_CLOSE_AMOUNT_IS_UINT_MAX,
        LIQUIDATE_CLOSE_AMOUNT_IS_ZERO,
        LIQUIDATE_FRESHNESS_CHECK,
        LIQUIDATE_LIQUIDATOR_IS_BORROWER,
        LIQUIDATE_REPAY_BORROW_FRESH_FAILED,
        LIQUIDATE_SEIZE_BALANCE_INCREMENT_FAILED,
        LIQUIDATE_SEIZE_BALANCE_DECREMENT_FAILED,
        LIQUIDATE_SEIZE_COMPTROLLER_REJECTION,
        LIQUIDATE_SEIZE_LIQUIDATOR_IS_BORROWER,
        LIQUIDATE_SEIZE_TOO_MUCH,
        MINT_ACCRUE_INTEREST_FAILED,
        MINT_COMPTROLLER_REJECTION,
        MINT_EXCHANGE_CALCULATION_FAILED,
        MINT_EXCHANGE_RATE_READ_FAILED,
        MINT_FRESHNESS_CHECK,
        MINT_NEW_ACCOUNT_BALANCE_CALCULATION_FAILED,
        MINT_NEW_TOTAL_SUPPLY_CALCULATION_FAILED,
        MINT_TRANSFER_IN_FAILED,
        MINT_TRANSFER_IN_NOT_POSSIBLE,
        REDEEM_ACCRUE_INTEREST_FAILED,
        REDEEM_COMPTROLLER_REJECTION,
        REDEEM_EXCHANGE_TOKENS_CALCULATION_FAILED,
        REDEEM_EXCHANGE_AMOUNT_CALCULATION_FAILED,
        REDEEM_EXCHANGE_RATE_READ_FAILED,
        REDEEM_FRESHNESS_CHECK,
        REDEEM_NEW_ACCOUNT_BALANCE_CALCULATION_FAILED,
        REDEEM_NEW_TOTAL_SUPPLY_CALCULATION_FAILED,
        REDEEM_TRANSFER_OUT_NOT_POSSIBLE,
        REDUCE_RESERVES_ACCRUE_INTEREST_FAILED,
        REDUCE_RESERVES_ADMIN_CHECK,
        REDUCE_RESERVES_CASH_NOT_AVAILABLE,
        REDUCE_RESERVES_FRESH_CHECK,
        REDUCE_RESERVES_VALIDATION,
        REPAY_BEHALF_ACCRUE_INTEREST_FAILED,
        REPAY_BORROW_ACCRUE_INTEREST_FAILED,
        REPAY_BORROW_ACCUMULATED_BALANCE_CALCULATION_FAILED,
        REPAY_BORROW_COMPTROLLER_REJECTION,
        REPAY_BORROW_FRESHNESS_CHECK,
        REPAY_BORROW_NEW_ACCOUNT_BORROW_BALANCE_CALCULATION_FAILED,
        REPAY_BORROW_NEW_TOTAL_BALANCE_CALCULATION_FAILED,
        REPAY_BORROW_TRANSFER_IN_NOT_POSSIBLE,
        SET_COLLATERAL_FACTOR_OWNER_CHECK,
        SET_COLLATERAL_FACTOR_VALIDATION,
        SET_COMPTROLLER_OWNER_CHECK,
        SET_INTEREST_RATE_MODEL_ACCRUE_INTEREST_FAILED,
        SET_INTEREST_RATE_MODEL_FRESH_CHECK,
        SET_INTEREST_RATE_MODEL_OWNER_CHECK,
        SET_MAX_ASSETS_OWNER_CHECK,
        SET_ORACLE_MARKET_NOT_LISTED,
        SET_PENDING_ADMIN_OWNER_CHECK,
        SET_RESERVE_FACTOR_ACCRUE_INTEREST_FAILED,
        SET_RESERVE_FACTOR_ADMIN_CHECK,
        SET_RESERVE_FACTOR_FRESH_CHECK,
        SET_RESERVE_FACTOR_BOUNDS_CHECK,
        TRANSFER_COMPTROLLER_REJECTION,
        TRANSFER_NOT_ALLOWED,
        TRANSFER_NOT_ENOUGH,
        TRANSFER_TOO_MUCH,
        ADD_RESERVES_ACCRUE_INTEREST_FAILED,
        ADD_RESERVES_FRESH_CHECK,
        ADD_RESERVES_TRANSFER_IN_NOT_POSSIBLE,
        TOKEN_GET_UNDERLYING_PRICE_ERROR,
        REPAY_VAI_COMPTROLLER_REJECTION,
        REPAY_VAI_FRESHNESS_CHECK,
        VAI_MINT_EXCHANGE_CALCULATION_FAILED,
        VAI_MINT_NEW_ACCOUNT_BALANCE_CALCULATION_FAILED
    }

    /**
      * @dev `error` corresponds to enum Error; `info` corresponds to enum FailureInfo, and `detail` is an arbitrary
      * contract-specific code that enables us to report opaque error codes from upgradeable contracts.
      **/
    event Failure(uint error, uint info, uint detail);

    /**
      * @dev use this when reporting a known error from the money market or a non-upgradeable collaborator
      */
    function fail(Error err, FailureInfo info) internal returns (uint) {
        emit Failure(uint(err), uint(info), 0);

        return uint(err);
    }

    /**
      * @dev use this when reporting an opaque error from an upgradeable collaborator contract
      */
    function failOpaque(Error err, FailureInfo info, uint opaqueError) internal returns (uint) {
        emit Failure(uint(err), uint(info), opaqueError);

        return uint(err);
    }
}

contract VAIControllerErrorReporter {
    enum Error {
        NO_ERROR,
        UNAUTHORIZED,
        REJECTION,
        SNAPSHOT_ERROR,
        PRICE_ERROR,
        MATH_ERROR,
        INSUFFICIENT_BALANCE_FOR_VAI
    }

    enum FailureInfo {
        SET_PENDING_ADMIN_OWNER_CHECK,
        SET_PENDING_IMPLEMENTATION_OWNER_CHECK,
        SET_COMPTROLLER_OWNER_CHECK,
        ACCEPT_ADMIN_PENDING_ADMIN_CHECK,
        ACCEPT_PENDING_IMPLEMENTATION_ADDRESS_CHECK,
        VAI_MINT_REJECTION,
        VAI_BURN_REJECTION
    }

    /**
      * @dev `error` corresponds to enum Error; `info` corresponds to enum FailureInfo, and `detail` is an arbitrary
      * contract-specific code that enables us to report opaque error codes from upgradeable contracts.
      **/
    event Failure(uint error, uint info, uint detail);

    /**
      * @dev use this when reporting a known error from the money market or a non-upgradeable collaborator
      */
    function fail(Error err, FailureInfo info) internal returns (uint) {
        emit Failure(uint(err), uint(info), 0);

        return uint(err);
    }

    /**
      * @dev use this when reporting an opaque error from an upgradeable collaborator contract
      */
    function failOpaque(Error err, FailureInfo info, uint opaqueError) internal returns (uint) {
        emit Failure(uint(err), uint(info), opaqueError);

        return uint(err);
    }
}

File 4 of 7: lib.sol
// SPDX-License-Identifier: AGPL-3.0-or-later

// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

pragma solidity >=0.5.16;

contract LibNote {
    event LogNote(
        bytes4   indexed  sig,
        address  indexed  usr,
        bytes32  indexed  arg1,
        bytes32  indexed  arg2,
        bytes             data
    ) anonymous;

    modifier note {
        _;
        assembly {
            // log an 'anonymous' event with a constant 6 words of calldata
            // and four indexed topics: selector, caller, arg1 and arg2
            let mark := msize()                       // end of memory ensures zero
            mstore(0x40, add(mark, 288))              // update free memory pointer
            mstore(mark, 0x20)                        // bytes type data offset
            mstore(add(mark, 0x20), 224)              // bytes size (padded)
            calldatacopy(add(mark, 0x40), 0, 224)     // bytes payload
            log4(mark, 288,                           // calldata
                 shl(224, shr(224, calldataload(0))), // msg.sig
                 caller(),                            // msg.sender
                 calldataload(4),                     // arg1
                 calldataload(36)                     // arg2
                )
        }
    }
}

File 5 of 7: VAI.sol
// SPDX-License-Identifier: AGPL-3.0-or-later

// Copyright (C) 2017, 2018, 2019 dbrock, rain, mrchico

// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <https://www.gnu.org/licenses/>.

pragma solidity >=0.5.16;

import "./lib.sol";

contract VAI is LibNote {
    // --- Auth ---
    mapping (address => uint) public wards;
    function rely(address guy) external note auth { wards[guy] = 1; }
    function deny(address guy) external note auth { wards[guy] = 0; }
    modifier auth {
        require(wards[msg.sender] == 1, "VAI/not-authorized");
        _;
    }

    // --- BEP20 Data ---
    string  public constant name     = "VAI Stablecoin";
    string  public constant symbol   = "VAI";
    string  public constant version  = "1";
    uint8   public constant decimals = 18;
    uint256 public totalSupply;

    mapping (address => uint)                      public balanceOf;
    mapping (address => mapping (address => uint)) public allowance;
    mapping (address => uint)                      public nonces;

    event Approval(address indexed src, address indexed guy, uint wad);
    event Transfer(address indexed src, address indexed dst, uint wad);

    // --- Math ---
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x, "VAI math error");
    }
    function sub(uint x, uint y) internal pure returns (uint z) {
        require((z = x - y) <= x, "VAI math error");
    }

    // --- EIP712 niceties ---
    bytes32 public DOMAIN_SEPARATOR;
    // bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address holder,address spender,uint256 nonce,uint256 expiry,bool allowed)");
    bytes32 public constant PERMIT_TYPEHASH = 0xea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb;

    constructor(uint256 chainId_) public {
        wards[msg.sender] = 1;
        DOMAIN_SEPARATOR = keccak256(abi.encode(
            keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
            keccak256(bytes(name)),
            keccak256(bytes(version)),
            chainId_,
            address(this)
        ));
    }

    // --- Token ---
    function transfer(address dst, uint wad) external returns (bool) {
        return transferFrom(msg.sender, dst, wad);
    }
    function transferFrom(address src, address dst, uint wad)
        public returns (bool)
    {
        require(balanceOf[src] >= wad, "VAI/insufficient-balance");
        if (src != msg.sender && allowance[src][msg.sender] != uint(-1)) {
            require(allowance[src][msg.sender] >= wad, "VAI/insufficient-allowance");
            allowance[src][msg.sender] = sub(allowance[src][msg.sender], wad);
        }
        balanceOf[src] = sub(balanceOf[src], wad);
        balanceOf[dst] = add(balanceOf[dst], wad);
        emit Transfer(src, dst, wad);
        return true;
    }
    function mint(address usr, uint wad) external auth {
        balanceOf[usr] = add(balanceOf[usr], wad);
        totalSupply = add(totalSupply, wad);
        emit Transfer(address(0), usr, wad);
    }
    function burn(address usr, uint wad) external {
        require(balanceOf[usr] >= wad, "VAI/insufficient-balance");
        if (usr != msg.sender && allowance[usr][msg.sender] != uint(-1)) {
            require(allowance[usr][msg.sender] >= wad, "VAI/insufficient-allowance");
            allowance[usr][msg.sender] = sub(allowance[usr][msg.sender], wad);
        }
        balanceOf[usr] = sub(balanceOf[usr], wad);
        totalSupply = sub(totalSupply, wad);
        emit Transfer(usr, address(0), wad);
    }
    function approve(address usr, uint wad) external returns (bool) {
        allowance[msg.sender][usr] = wad;
        emit Approval(msg.sender, usr, wad);
        return true;
    }

    // --- Alias ---
    function push(address usr, uint wad) external {
        transferFrom(msg.sender, usr, wad);
    }
    function pull(address usr, uint wad) external {
        transferFrom(usr, msg.sender, wad);
    }
    function move(address src, address dst, uint wad) external {
        transferFrom(src, dst, wad);
    }

    // --- Approve by signature ---
    function permit(address holder, address spender, uint256 nonce, uint256 expiry,
                    bool allowed, uint8 v, bytes32 r, bytes32 s) external
    {
        bytes32 digest = keccak256(abi.encodePacked(
                "\x19\x01",
                DOMAIN_SEPARATOR,
                keccak256(abi.encode(PERMIT_TYPEHASH,
                                     holder,
                                     spender,
                                     nonce,
                                     expiry,
                                     allowed))
        ));

        require(holder != address(0), "VAI/invalid-address-0");
        require(holder == ecrecover(digest, v, r, s), "VAI/invalid-permit");
        require(expiry == 0 || now <= expiry, "VAI/permit-expired");
        require(nonce == nonces[holder]++, "VAI/invalid-nonce");
        uint wad = allowed ? uint(-1) : 0;
        allowance[holder][spender] = wad;
        emit Approval(holder, spender, wad);
    }
}

File 6 of 7: VAIControllerInterface.sol
pragma solidity ^0.5.16;

contract VAIControllerInterface {
    function getMintableVAI(address minter) public view returns (uint, uint);
    function mintVAI(address minter, uint mintVAIAmount) external returns (uint);
    function repayVAI(address repayer, uint repayVAIAmount) external returns (uint);
}

File 7 of 7: VAIControllerStorage.sol
pragma solidity ^0.5.16;

import "./ComptrollerInterface.sol";

contract VAIUnitrollerAdminStorage {
    /**
    * @notice Administrator for this contract
    */
    address public admin;

    /**
    * @notice Pending administrator for this contract
    */
    address public pendingAdmin;

    /**
    * @notice Active brains of Unitroller
    */
    address public vaiControllerImplementation;

    /**
    * @notice Pending brains of Unitroller
    */
    address public pendingVAIControllerImplementation;
}

contract VAIControllerStorage is VAIUnitrollerAdminStorage {
    struct Market {
        /// @notice Whether or not this market is listed
        bool isListed;

        /**
         * @notice Multiplier representing the most one can borrow against their collateral in this market.
         *  For instance, 0.9 to allow borrowing 90% of collateral value.
         *  Must be between 0 and 1, and stored as a mantissa.
         */
        uint collateralFactorMantissa;

        /// @notice Per-market mapping of "accounts in this asset"
        mapping(address => bool) accountMembership;

        /// @notice Whether or not this market receives XVS
        bool isVenus;
    }

    ComptrollerInterface public comptroller;
}

Contract ABI

[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"error","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"info","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"detail","type":"uint256"}],"name":"Failure","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"NewAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldImplementation","type":"address"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"NewImplementation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldPendingAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"NewPendingAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldPendingImplementation","type":"address"},{"indexed":false,"internalType":"address","name":"newPendingImplementation","type":"address"}],"name":"NewPendingImplementation","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":false,"inputs":[],"name":"_acceptAdmin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"_acceptImplementation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"_setPendingAdmin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newPendingImplementation","type":"address"}],"name":"_setPendingImplementation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingVAIControllerImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"vaiControllerImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b50600080546001600160a01b031916331790556105e3806100326000396000f3fe60806040526004361061007a5760003560e01c8063c1e803341161004e578063c1e803341461019d578063e992a041146101b2578063e9c714f2146101e5578063f851a440146101fa5761007a565b80623b5884146100fd578063267822471461012e578063b06bb42614610143578063b71d1a0c14610158575b6002546040516000916001600160a01b031690829036908083838082843760405192019450600093509091505080830381855af49150503d80600081146100dd576040519150601f19603f3d011682016040523d82523d6000602084013e6100e2565b606091505b505090506040513d6000823e8180156100f9573d82f35b3d82fd5b34801561010957600080fd5b5061011261020f565b604080516001600160a01b039092168252519081900360200190f35b34801561013a57600080fd5b5061011261021e565b34801561014f57600080fd5b5061011261022d565b34801561016457600080fd5b5061018b6004803603602081101561017b57600080fd5b50356001600160a01b031661023c565b60408051918252519081900360200190f35b3480156101a957600080fd5b5061018b6102cd565b3480156101be57600080fd5b5061018b600480360360208110156101d557600080fd5b50356001600160a01b03166103c9565b3480156101f157600080fd5b5061018b61044c565b34801561020657600080fd5b50610112610532565b6002546001600160a01b031681565b6001546001600160a01b031681565b6003546001600160a01b031681565b600080546001600160a01b031633146102625761025b60016000610541565b90506102c8565b600180546001600160a01b038481166001600160a01b0319831681179093556040805191909216808252602082019390935281517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9929181900390910190a160005b9150505b919050565b6003546000906001600160a01b0316331415806102f357506003546001600160a01b0316155b1561030b5761030460016004610541565b90506103c6565b60028054600380546001600160a01b038082166001600160a01b031980861682179687905590921690925560408051938316808552949092166020840152815190927fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a92908290030190a1600354604080516001600160a01b038085168252909216602083015280517fe945ccee5d701fc83f9b8aa8ca94ea4219ec1fcbd4f4cab4f0ea57c5c3e1d8159281900390910190a160005b925050505b90565b600080546001600160a01b031633146103e75761025b600180610541565b600380546001600160a01b038481166001600160a01b0319831617928390556040805192821680845293909116602083015280517fe945ccee5d701fc83f9b8aa8ca94ea4219ec1fcbd4f4cab4f0ea57c5c3e1d8159281900390910190a160006102c4565b6001546000906001600160a01b031633141580610467575033155b156104785761030460016003610541565b60008054600180546001600160a01b038082166001600160a01b031980861682179687905590921690925560408051938316808552949092166020840152815190927ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc92908290030190a1600154604080516001600160a01b038085168252909216602083015280517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a99281900390910190a160006103c1565b6000546001600160a01b031681565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa083600681111561057057fe5b83600681111561057c57fe5b604080519283526020830191909152600082820152519081900360600190a18260068111156105a757fe5b939250505056fea265627a7a72315820f80a26062e16402e92475a12e2c595652e33c933793fb67be676c9603eec453764736f6c63430005110032

Deployed ByteCode Sourcemap

94:5381:5:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5123:27;;:50;;5105:12;;-1:-1:-1;;;;;5123:27:5;;5105:12;;5164:8;;5123:50;5105:12;5164:8;;5105:12;5123:50;1:33:-1;5123:50:5;;45:16:-1;;;-1:-1;5123:50:5;;-1:-1:-1;5123:50:5;;-1:-1:-1;;5123:50:5;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;5104:69:5;;;5235:4;5229:11;5287:14;5284:1;5270:12;5255:47;5325:7;5347:47;;;;5440:14;5426:12;5419:36;5347:47;5377:14;5363:12;5356:36;353:42:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;353:42:4;;;:::i;:::-;;;;-1:-1:-1;;;;;353:42:4;;;;;;;;;;;;;;262:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;262:27:4;;;:::i;460:49::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;460:49:4;;;:::i;3197:621:5:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3197:621:5;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3197:621:5;-1:-1:-1;;;;;3197:621:5;;:::i;:::-;;;;;;;;;;;;;;;;1860:930;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1860:930:5;;;:::i;1035:533::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1035:533:5;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1035:533:5;-1:-1:-1;;;;;1035:533:5;;:::i;4089:720::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4089:720:5;;;:::i;166:20:4:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;166:20:4;;;:::i;353:42::-;;;-1:-1:-1;;;;;353:42:4;;:::o;262:27::-;;;-1:-1:-1;;;;;262:27:4;;:::o;460:49::-;;;-1:-1:-1;;;;;460:49:4;;:::o;3197:621:5:-;3264:4;3330:5;;-1:-1:-1;;;;;3330:5:5;3316:10;:19;3312:124;;3358:67;3363:18;3383:41;3358:4;:67::i;:::-;3351:74;;;;3312:124;3532:12;;;-1:-1:-1;;;;;3612:30:5;;;-1:-1:-1;;;;;;3612:30:5;;;;;;;3724:49;;;3532:12;;;;3724:49;;;;;;;;;;;;;;;;;;;;;;;3796:14;3791:20;3784:27;;;3197:621;;;;:::o;1860:930::-;2033:34;;1909:4;;-1:-1:-1;;;;;2033:34:5;2019:10;:48;;;:100;;-1:-1:-1;2071:34:5;;-1:-1:-1;;;;;2071:34:5;:48;2019:100;2015:219;;;2142:81;2147:18;2167:55;2142:4;:81::i;:::-;2135:88;;;;2015:219;2324:27;;;2396:34;;;-1:-1:-1;;;;;2396:34:5;;;-1:-1:-1;;;;;;2441:64:5;;;;;;;;;2516:47;;;;;;2579:65;;;2324:27;;;2579:65;;;2616:27;;;;2579:65;;;;;;2396:34;;2579:65;;;;;;;;;2710:34;;2659:86;;;-1:-1:-1;;;;;2659:86:5;;;;;2710:34;;;2659:86;;;;;;;;;;;;;;;;2768:14;2763:20;2756:27;;;;1860:930;;:::o;1035:533::-;1120:4;1155:5;;-1:-1:-1;;;;;1155:5:5;1141:10;:19;1137:133;;1183:76;1188:18;1208:50;1183:4;:76::i;1137:133::-;1315:34;;;-1:-1:-1;;;;;1360:61:5;;;-1:-1:-1;;;;;;1360:61:5;;;;;;;1437:86;;;1315:34;;;1437:86;;;1488:34;;;;1437:86;;;;;;;;;;;;;;;;1546:14;1541:20;;4089:720;4235:12;;4129:4;;-1:-1:-1;;;;;4235:12:5;4221:10;:26;;;:54;;-1:-1:-1;4251:10:5;:24;4221:54;4217:162;;;4298:70;4303:18;4323:44;4298:4;:70::i;4217:162::-;4441:16;4460:5;;;4501:12;;-1:-1:-1;;;;;4501:12:5;;;-1:-1:-1;;;;;;4571:20:5;;;;;;;;;4637:25;;;;;;4678;;;4460:5;;;4678:25;;;4697:5;;;;4678:25;;;;;;4501:12;;4678:25;;;;;;;;;4751:12;;4718:46;;;-1:-1:-1;;;;;4718:46:5;;;;;4751:12;;;4718:46;;;;;;;;;;;;;;;;4787:14;4782:20;;166::4;;;-1:-1:-1;;;;;166:20:4;;:::o;9132:149:1:-;9193:4;9214:33;9227:3;9222:9;;;;;;;;9238:4;9233:10;;;;;;;;9214:33;;;;;;;;;;;;;9245:1;9214:33;;;;;;;;;;;;;9270:3;9265:9;;;;;;;;9258:16;9132:149;-1:-1:-1;;;9132:149:1:o

Swarm Source

bzzr://f80a26062e16402e92475a12e2c595652e33c933793fb67be676c9603eec4537
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.