Contract 0x004065d34c6b18ce4370ced1cebde94865dbfafe 3

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xaf3e00081a9054cae3a63205d9a4d599c6f6f9803e5530b6a2c7315fdaf11241Repay VAI111412172021-09-22 16:37:5733 mins ago0xca8ed17e82a8156c32f323736aaba8ccda0aba6d IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.00064869
0xb1fd4e4d55072a9c0f3608378325f21c5a47d2248d57dabce3e7c90938ee3717Repay VAI111394312021-09-22 15:07:172 hrs 4 mins ago0xb42284d98937a2dd55803a7bfd7dc3b73e41de28 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000465645
0xcfc5f4284ce93f72a35b552677850a4dd61ac88b8ba35d6effea0c6fca660131Repay VAI111394092021-09-22 15:06:112 hrs 5 mins ago0x83c8665f65931e4ee04a7b8e3456083d787a0050 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000540585
0x8b5995232680f2985c7f2b6362d55a1cf6c27cfc2f19067ceac51092991ee743Repay VAI111393962021-09-22 15:05:322 hrs 6 mins ago0x1e17503fa48111f54b88f27ca3037255f6983043 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000540575
0x0a74f9acdd9b46ba37048ca8541e114f345ca140f797476232d9cef5d0ede767Repay VAI111393182021-09-22 15:01:382 hrs 9 mins ago0x6e523ec8bc51fa27fd8157e4255b03560e0a191b IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000615575
0x6acd327f004652797d8a7cda5f7af85ef0b5a997cdcc21bdd3ee27eeece4ea39Repay VAI111392542021-09-22 14:58:262 hrs 13 mins ago0xf494cf43fcac3a12f391bd6d8141f5943a17197b IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000540575
0xcb513dd511e033c119aac120d18db89cbe465f57978f9b259098afd599e4bfecRepay VAI111388602021-09-22 14:38:442 hrs 32 mins ago0x11e90dd937d6ebf216dd2a471d3d43bd9327b059 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000540575
0x81a5cdaaee6867bed999d4d9821d25a571cf96d56e0301c6dfe7ab28b774377bRepay VAI111388502021-09-22 14:38:142 hrs 33 mins ago0x11e90dd937d6ebf216dd2a471d3d43bd9327b059 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.00042227
0xbd5bb864a2de55dfe8166bf47f70a2866aa66fe483be4d7cf349d296429bc4bbRepay VAI111387292021-09-22 14:32:112 hrs 39 mins ago0xf36183f2d0d2265a3a2c08c85ee30d0354da15fc IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000540695
0x1d748ebf37596cbf3239bd3de4f344e86b4bb42eb848241a28be53aafe1751bbRepay VAI111387242021-09-22 14:31:562 hrs 39 mins ago0x3e5e698b162264439475d499d868ae558ae4a752 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000540695
0x600d823a9842ec601e85f6e89dc75dc61e91c13e63e7fa85fbefaf029758dd08Repay VAI111386062021-09-22 14:26:022 hrs 45 mins ago0xce694cf248fd88e95f146c478b4fd7bfb20933ac IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000540575
0x34eb4478f47063d0be7482c97bfce8f173055b536110b6a6e3b50c196fc4abfeRepay VAI111383052021-09-22 14:10:593 hrs ago0xbab4c9b410505dabd8bb4de1b1b39518b246fdce IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000540525
0x3e9cff68860cd1d3629e9f001492acfd33e6ec2d9f88adf4cc75cc1f22b93afbRepay VAI111380762021-09-22 13:59:323 hrs 12 mins ago0x7385c11f1fd0895cd43745ebdb890925c5f6e6b8 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000540635
0xa4360ae14620a96b8b4b7fca80bab2b6506087e5c4cd6d5c6f82cf176dcf383dRepay VAI111378782021-09-22 13:49:313 hrs 22 mins ago0x21d183e81463c5c374a44baa6bc45c646eae7644 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000540645
0xe1c1e292a8532817f46769f1472efd4f5997046576cae637acd30f55bfacebefRepay VAI111376592021-09-22 13:38:343 hrs 33 mins ago0xb9fefb561f5e0f1907c7de95fde5026006498f13 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000540585
0x3db474b70b3eafdc6ce91ce4fc0a4e4f58a0f8bbb75c3152ca8996311c1f7d5eRepay VAI111374292021-09-22 13:27:043 hrs 44 mins ago0xd3d952259dfc6278c3f5c44997442bd1043b48c5 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000465585
0xe168933bd2adbd334a60f447b46fcd7946b94ba65746dd2500e326ab9e49d1e1Repay VAI111369072021-09-22 13:00:534 hrs 10 mins ago0xfa83433db1cf07b8b8f4fa95afe373e288888888 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.00066373
0xf3fa4e3e05ae6d4c12361ff9320e41d1dbca8bdf147b8e289a3230ef196cc0ffRepay VAI111363822021-09-22 12:34:384 hrs 36 mins ago0xbbd5220d9f63fe007c40aee5f13641d216ee0cfd IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000540695
0x6593af28bef58351c6acb6da7cb35afd8093da0c30cd62d3da48174736da2a13Repay VAI111362962021-09-22 12:30:204 hrs 41 mins ago0x4c3e219e997575a24a0215bc71851951fc9a5aa3 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000540585
0x9721e0201f980f7ced422e08518ac795c96436f239adf69350cb7c99b209db52Repay VAI111361992021-09-22 12:25:294 hrs 46 mins ago0x4c3e219e997575a24a0215bc71851951fc9a5aa3 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000540635
0x82fc91a4f3483815c6e4b0c374acebc5dda019036bbe7b8c026168bddefd59bdRepay VAI111361632021-09-22 12:23:414 hrs 47 mins ago0x4c3e219e997575a24a0215bc71851951fc9a5aa3 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000540635
0x1081afb0d91e4bf78c5ec4de1961d346976c544d890dbe5e60962d08d4427cc2Repay VAI111361432021-09-22 12:22:414 hrs 48 mins ago0x5e0847188cc8de52309e0ff8999b19284200fa12 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000540575
0x3cdb318dd35a2f7e829180a94855d04a7ec192c2e0c248b54d60066a06a8332fRepay VAI111360952021-09-22 12:20:174 hrs 51 mins ago0x4c3e219e997575a24a0215bc71851951fc9a5aa3 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000540695
0x42e0c8b6a0c4ceaae530cdd3f7620898b38b024bdff70a49d21dd90a28dafb08Repay VAI111357472021-09-22 12:02:535 hrs 8 mins ago0x846e49c29da8808b477a0c596e15ca79fc91f5f2 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000540695
0x2e19fbd743031da7a33ca21edcd0ba70bed2423474a682433a2ab684f06e41bcRepay VAI111352342021-09-22 11:37:125 hrs 34 mins ago0x4fc2ba829b662f5c3e3a92f3b4c67fc93128ec83 IN  0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB0.000540695
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x719b4887befc48f81b2cf6a1b993b4fb82381b222c296bd617d0b212fab7e5c154713292021-03-07 11:59:24199 days 5 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0x719b4887befc48f81b2cf6a1b993b4fb82381b222c296bd617d0b212fab7e5c154713292021-03-07 11:59:24199 days 5 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0x719b4887befc48f81b2cf6a1b993b4fb82381b222c296bd617d0b212fab7e5c154713292021-03-07 11:59:24199 days 5 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe 0x16c8ee0aab1fdee76cc1906c831e08b97729ec6d0 BNB
0x719b4887befc48f81b2cf6a1b993b4fb82381b222c296bd617d0b212fab7e5c154713292021-03-07 11:59:24199 days 5 hrs ago Venus: Distribution 0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB
0x719b4887befc48f81b2cf6a1b993b4fb82381b222c296bd617d0b212fab7e5c154713292021-03-07 11:59:24199 days 5 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0x719b4887befc48f81b2cf6a1b993b4fb82381b222c296bd617d0b212fab7e5c154713292021-03-07 11:59:24199 days 5 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe 0x16c8ee0aab1fdee76cc1906c831e08b97729ec6d0 BNB
0x719b4887befc48f81b2cf6a1b993b4fb82381b222c296bd617d0b212fab7e5c154713292021-03-07 11:59:24199 days 5 hrs ago Venus: Distribution 0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB
0x1d5929ba3089b23ab0f89f8c4f15ad2ae8244c6577c6f574d7472face4f3357254713272021-03-07 11:59:18199 days 5 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: VAI Token0 BNB
0x1d5929ba3089b23ab0f89f8c4f15ad2ae8244c6577c6f574d7472face4f3357254713272021-03-07 11:59:18199 days 5 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0x1d5929ba3089b23ab0f89f8c4f15ad2ae8244c6577c6f574d7472face4f3357254713272021-03-07 11:59:18199 days 5 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0x1d5929ba3089b23ab0f89f8c4f15ad2ae8244c6577c6f574d7472face4f3357254713272021-03-07 11:59:18199 days 5 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0x1d5929ba3089b23ab0f89f8c4f15ad2ae8244c6577c6f574d7472face4f3357254713272021-03-07 11:59:18199 days 5 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0x1d5929ba3089b23ab0f89f8c4f15ad2ae8244c6577c6f574d7472face4f3357254713272021-03-07 11:59:18199 days 5 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe 0x16c8ee0aab1fdee76cc1906c831e08b97729ec6d0 BNB
0x1d5929ba3089b23ab0f89f8c4f15ad2ae8244c6577c6f574d7472face4f3357254713272021-03-07 11:59:18199 days 5 hrs ago Venus: Distribution 0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB
0x1d5929ba3089b23ab0f89f8c4f15ad2ae8244c6577c6f574d7472face4f3357254713272021-03-07 11:59:18199 days 5 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0x1d5929ba3089b23ab0f89f8c4f15ad2ae8244c6577c6f574d7472face4f3357254713272021-03-07 11:59:18199 days 5 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0x1d5929ba3089b23ab0f89f8c4f15ad2ae8244c6577c6f574d7472face4f3357254713272021-03-07 11:59:18199 days 5 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0x1d5929ba3089b23ab0f89f8c4f15ad2ae8244c6577c6f574d7472face4f3357254713272021-03-07 11:59:18199 days 5 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe 0x16c8ee0aab1fdee76cc1906c831e08b97729ec6d0 BNB
0x94f52b8bca93283fc16c7d89628e7053a79e5464085b04d20fd2aa0e1a134e2754713212021-03-07 11:59:00199 days 5 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0x94f52b8bca93283fc16c7d89628e7053a79e5464085b04d20fd2aa0e1a134e2754713212021-03-07 11:59:00199 days 5 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0x94f52b8bca93283fc16c7d89628e7053a79e5464085b04d20fd2aa0e1a134e2754713212021-03-07 11:59:00199 days 5 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe 0x16c8ee0aab1fdee76cc1906c831e08b97729ec6d0 BNB
0x94f52b8bca93283fc16c7d89628e7053a79e5464085b04d20fd2aa0e1a134e2754713212021-03-07 11:59:00199 days 5 hrs ago Venus: Distribution 0x004065d34c6b18ce4370ced1cebde94865dbfafe0 BNB
0x94f52b8bca93283fc16c7d89628e7053a79e5464085b04d20fd2aa0e1a134e2754713212021-03-07 11:59:00199 days 5 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe Venus: Distribution0 BNB
0x94f52b8bca93283fc16c7d89628e7053a79e5464085b04d20fd2aa0e1a134e2754713212021-03-07 11:59:00199 days 5 hrs ago 0x004065d34c6b18ce4370ced1cebde94865dbfafe 0x16c8ee0aab1fdee76cc1906c831e08b97729ec6d0 BNB
0x94f52b8bca93283fc16c7d89628e7053a79e5464085b04d20fd2aa0e1a134e2754713212021-03-07 11:59:00199 days 5 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 Security Audit

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.