Contract 0x004065D34C6b18cE4370ced1CeBDE94865DbFAFE

 
Txn Hash
Block
From
To
Value [Txn Fee]
0xe9b67d0a6eae295a0e96466d32c59520e0791a5a27f8a812a0207d4a7a1647f752411692021-02-27 10:31:2011 secs ago0x49993dbc9d3f79be3443a73bebb375d626754065 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.0057442
0x30a1c899074d177db6f6f3fc3db8b7151f9900ba77ea2413cd6f852e2578a29052411642021-02-27 10:31:0526 secs ago0x9231839f4112672494d561540c66f6ffd850b1ab IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.00097252
0x11c2f24a67940c8bc3cec5d5d78fd637b361b51127c2e12ab663ad940453484452411642021-02-27 10:31:0526 secs ago0xd8aeef2249f7a53884a5bb5b9170b8129009be3c IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.0032799673
0x491898ac267f0541e6c7eb80f1a46c96fa1a7b7c9d4f7a9791236aee905dcb3d52411542021-02-27 10:30:3556 secs ago0x59accdb2ccf9aad2a0e339db94457905deeaec2d IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.00103294
0xc64707059cc7ebb3c3bfdddc289c60a3795ba1a06df71036667dca4d02a3f5bd52410942021-02-27 10:27:353 mins ago0x50bba4554d67d9298428a9358648039f14971581 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.0056903
0x3548a192d18d819b36f3ac363212bdf54cf942bda9098e74dac9ab46d158b4f252410792021-02-27 10:26:504 mins ago0x11f95fdbfe9ff1a04ca9c0735036f455e4444537 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.00103294
0xd03ce08f18f98cf89ee4ac4be355547f29231e66ea5740d913f04eeba0a3f9f852410722021-02-27 10:26:295 mins ago0x11f95fdbfe9ff1a04ca9c0735036f455e4444537 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.00176991
0xe48de878f723c30099a1102bdf6c8c5189dd7f6ea6f8a8a74900d054b76b023e52410452021-02-27 10:25:086 mins ago0xa2e807a1a215dd2a574b170d4e0cbbd4b507b2d8 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.00103294
0x963973b9a0e5351fef8e51b21c770607dc7845295ae46181913904544cbdefc252409902021-02-27 10:22:239 mins ago0x89b51ae8f8858a3525f79ad81276184aca6d8e25 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.0008826
0x3c23b93dc969e5b7e256c0d9e22df11a7c2d6a17425a5c69e4269cc97c5996fe52409602021-02-27 10:20:5310 mins ago0xd360f3b3e101d678e67167ed359b1c03eb4f3e9e IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.00362796
0x7791028a854aca52ab2f014bff161220944ce855828e9b71117b7b0e06918adc52409472021-02-27 10:20:1411 mins ago0xc4c9aa21d3ccf7e053b87c45c51aa8dafcaae99a IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.00254196
0x97967e0d786ebeb5114ff25a1ebc281aa93b5a4d3bb1c341fb2836201be4001052409402021-02-27 10:19:5311 mins ago0x40520d514ba0fe3f986422cf41b1ba62c2a9ebb0 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.00271891
0xdd8e49dd568048ab7689e5499f1b30dcff7fa5fe3cc1d0f7d4d59883bebb981952409122021-02-27 10:18:2913 mins ago0xde966ed974ca94b22814a78a0229022ba1479950 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.00241668
0x153434bbb54d0a519cb58d5893ef1a23b601fafb552fb9d2cca9522c0415f35a52409122021-02-27 10:18:2913 mins ago0xc961df655e5c1ab2abb2053db29d2995f397d160 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.0008826
0x22bf5a3ac3a9d9eec715f4990cd2ff2f9ed5dfa62bf78634ddc37cc3987bd24352408722021-02-27 10:16:2915 mins ago0x6d7caa906cf681d1e25c60f3b4e5cacad65ac785 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.0010638046
0x63f0e5e018ca19d86bdac5316b0e6fd5c8a86cc892ae3ed111a80003c7329d1352408212021-02-27 10:13:5617 mins ago0xd161099739c555b6d3d5e565cd55c470ee430f0e IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.00556639
0xf81bf7db8cd383858d2cb9b06f7ee7aa6d98a7a417e81283f858f0803cd1e3d152408112021-02-27 10:13:2618 mins ago0xc86af0ffd644ae642b856b18ab0ae914ea14dfdd IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.00103284
0x406b64a3a7234c0b9e4d37a46a6c158deb9a6eb4f3f373d4c50d8b5376a3502552407762021-02-27 10:11:4119 mins ago0x82446b375c59cf54c48c987130996fbe5a9a3a56 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.00247674
0x1185413f075dce3edf31bedaa75af534462512cce6d28dd63be4817b26369a4552407482021-02-27 10:10:1721 mins ago0x24eebc58ed572dd30623e519022e757206f22e5d IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.0011827
0x9daf05fee2dc80b5e0cfe6f5b22bc82071854a322fddf868619cf149d10dccc752407462021-02-27 10:10:1121 mins ago0xce65694d7070a53ffc1db71064a24ebb28eb9f13 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.00103248
0x5b0d6aad026d9bd6796318d3319d8f0e387a6518c9bd98016441518fdb040a5752407432021-02-27 10:10:0221 mins ago0x9a0df6528e30d17b0449e20d307ce76f1f4f3ab1 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.00289479
0xec4154bb8e3b4e7bc6b5237226d698a9cd09704fc39b66d37d9ec0125963627652407152021-02-27 10:08:3822 mins ago0x1b561a20963f3d444688df4843db0a511c1a4024 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.0024985
0xaf2f13c4b5282270d532594367d502b98c4563deebcef2f35069a94735b3e62f52406442021-02-27 10:05:0526 mins ago0x65d4b193634c8f06fd24a40982997bd9b98942de IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.00118282
0x5dbc233bef883fae76b252f709777c2412d7e80293436272255039f455585b2e52406052021-02-27 10:03:0828 mins ago0xfb9ae9ac85510f02d6e95f959d4fa538ce5d89e1 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.0072235
0xe14e5cfe82bbb35463ae4e9174af2b546957c288f673ff8f366def1010bab8d452406042021-02-27 10:03:0528 mins ago0x01c2f6e624e5b29b5dfb83871afc2b7961510aa4 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.00282662
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xe9b67d0a6eae295a0e96466d32c59520e0791a5a27f8a812a0207d4a7a1647f752411692021-02-27 10:31:2011 secs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: VAI Token0 BNB
0xe9b67d0a6eae295a0e96466d32c59520e0791a5a27f8a812a0207d4a7a1647f752411692021-02-27 10:31:2011 secs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0xe9b67d0a6eae295a0e96466d32c59520e0791a5a27f8a812a0207d4a7a1647f752411692021-02-27 10:31:2011 secs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0xe9b67d0a6eae295a0e96466d32c59520e0791a5a27f8a812a0207d4a7a1647f752411692021-02-27 10:31:2011 secs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0xe9b67d0a6eae295a0e96466d32c59520e0791a5a27f8a812a0207d4a7a1647f752411692021-02-27 10:31:2011 secs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0xe9b67d0a6eae295a0e96466d32c59520e0791a5a27f8a812a0207d4a7a1647f752411692021-02-27 10:31:2011 secs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe 0x516c18dc440f107f12619a6d2cc320622807d0ee0 BNB
0xe9b67d0a6eae295a0e96466d32c59520e0791a5a27f8a812a0207d4a7a1647f752411692021-02-27 10:31:2011 secs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: vBTC Token0 BNB
0xe9b67d0a6eae295a0e96466d32c59520e0791a5a27f8a812a0207d4a7a1647f752411692021-02-27 10:31:2011 secs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe 0x516c18dc440f107f12619a6d2cc320622807d0ee0 BNB
0xe9b67d0a6eae295a0e96466d32c59520e0791a5a27f8a812a0207d4a7a1647f752411692021-02-27 10:31:2011 secs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: vBETH Token0 BNB
0xe9b67d0a6eae295a0e96466d32c59520e0791a5a27f8a812a0207d4a7a1647f752411692021-02-27 10:31:2011 secs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe 0x516c18dc440f107f12619a6d2cc320622807d0ee0 BNB
0xe9b67d0a6eae295a0e96466d32c59520e0791a5a27f8a812a0207d4a7a1647f752411692021-02-27 10:31:2011 secs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: vDAI Token0 BNB
0xe9b67d0a6eae295a0e96466d32c59520e0791a5a27f8a812a0207d4a7a1647f752411692021-02-27 10:31:2011 secs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe 0x516c18dc440f107f12619a6d2cc320622807d0ee0 BNB
0xe9b67d0a6eae295a0e96466d32c59520e0791a5a27f8a812a0207d4a7a1647f752411692021-02-27 10:31:2011 secs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: vXVS Token0 BNB
0xe9b67d0a6eae295a0e96466d32c59520e0791a5a27f8a812a0207d4a7a1647f752411692021-02-27 10:31:2011 secs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe 0x516c18dc440f107f12619a6d2cc320622807d0ee0 BNB
0xe9b67d0a6eae295a0e96466d32c59520e0791a5a27f8a812a0207d4a7a1647f752411692021-02-27 10:31:2011 secs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe 0x9a0af7fdb2065ce470d72664de73cae409da28ec0 BNB
0xe9b67d0a6eae295a0e96466d32c59520e0791a5a27f8a812a0207d4a7a1647f752411692021-02-27 10:31:2011 secs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe 0x516c18dc440f107f12619a6d2cc320622807d0ee0 BNB
0xe9b67d0a6eae295a0e96466d32c59520e0791a5a27f8a812a0207d4a7a1647f752411692021-02-27 10:31:2011 secs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: vUSDT Token0 BNB
0xe9b67d0a6eae295a0e96466d32c59520e0791a5a27f8a812a0207d4a7a1647f752411692021-02-27 10:31:2011 secs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe 0x516c18dc440f107f12619a6d2cc320622807d0ee0 BNB
0xe9b67d0a6eae295a0e96466d32c59520e0791a5a27f8a812a0207d4a7a1647f752411692021-02-27 10:31:2011 secs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: vLINK Token0 BNB
0xe9b67d0a6eae295a0e96466d32c59520e0791a5a27f8a812a0207d4a7a1647f752411692021-02-27 10:31:2011 secs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0xe9b67d0a6eae295a0e96466d32c59520e0791a5a27f8a812a0207d4a7a1647f752411692021-02-27 10:31:2011 secs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0xe9b67d0a6eae295a0e96466d32c59520e0791a5a27f8a812a0207d4a7a1647f752411692021-02-27 10:31:2011 secs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0xe9b67d0a6eae295a0e96466d32c59520e0791a5a27f8a812a0207d4a7a1647f752411692021-02-27 10:31:2011 secs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0xe9b67d0a6eae295a0e96466d32c59520e0791a5a27f8a812a0207d4a7a1647f752411692021-02-27 10:31:2011 secs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe 0x16c8ee0aab1fdee76cc1906c831e08b97729ec6d0 BNB
0xe9b67d0a6eae295a0e96466d32c59520e0791a5a27f8a812a0207d4a7a1647f752411692021-02-27 10:31:2011 secs 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.