Contract 0x7db4f5cc3bba3e12ff1f528d2e3417afb0a57118

Contract Overview

Balance:
0 BNB

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x1c9f830507f40ff1ef462ecae41fd885cc94bcb68a4754405112486d1de415edClaim125563992021-09-21 10:44:411 day 15 hrs ago0xce2be8b93e2d832b51c7a5dd296fac6c39a67872 IN  0x7db4f5cc3bba3e12ff1f528d2e3417afb0a571180 BNB0.00106992
0x107f06803a67ded005d8f4294d6e7aa7cb4a9bc8efde4590225fd8578c8902e0Claim125554582021-09-21 9:57:381 day 16 hrs ago0xce2be8b93e2d832b51c7a5dd296fac6c39a67872 IN  0x7db4f5cc3bba3e12ff1f528d2e3417afb0a571180 BNB0.00106992
0x7ff1b25bce6d22630014c36a1466d19bd98a1b4524b6b87074326d7297dc8048Claim125255772021-09-20 9:02:012 days 17 hrs ago0xce2be8b93e2d832b51c7a5dd296fac6c39a67872 IN  0x7db4f5cc3bba3e12ff1f528d2e3417afb0a571180 BNB0.00106992
0x2c20a7815dbc93c75c228eec2eb6ea66bf2861905a2d2f6c8031441c7a49214bDeposit125163722021-09-20 1:21:463 days 1 hr ago0xce2be8b93e2d832b51c7a5dd296fac6c39a67872 IN  0x7db4f5cc3bba3e12ff1f528d2e3417afb0a571180 BNB0.00071975
0x02e28a10cf170f47f4bf6aaa752e0d83b96a4cf740c83cdeb05d82dd91c75bbfWithdraw125163402021-09-20 1:20:103 days 1 hr ago0xce2be8b93e2d832b51c7a5dd296fac6c39a67872 IN  0x7db4f5cc3bba3e12ff1f528d2e3417afb0a571180 BNB0.00086931
0x6d9ab51bbfc9a77f4c87f51ba5161378a4ce21a82dc6f731372d6454d4c96749Claim125163012021-09-20 1:18:133 days 1 hr ago0xce2be8b93e2d832b51c7a5dd296fac6c39a67872 IN  0x7db4f5cc3bba3e12ff1f528d2e3417afb0a571180 BNB0.00042914
0x6168e82dd8e7d7ddabc67488ff57654466753940750c776af1ef97f5cfa99064Claim125162842021-09-20 1:17:223 days 1 hr ago0xce2be8b93e2d832b51c7a5dd296fac6c39a67872 IN  0x7db4f5cc3bba3e12ff1f528d2e3417afb0a571180 BNB0.00042914
0x13b0da3322f89d6ed8d1a21dcbe49c58c8aafb13d3e9ee3ade82cb3f22f5c2fbClaim125162662021-09-20 1:16:283 days 1 hr ago0xce2be8b93e2d832b51c7a5dd296fac6c39a67872 IN  0x7db4f5cc3bba3e12ff1f528d2e3417afb0a571180 BNB0.00106992
0xe80d71a41f9daf1c4c05a8ef625db3db02c5ea5387dab168707f6ca410d80820Claim125160462021-09-20 1:05:283 days 1 hr ago0xce2be8b93e2d832b51c7a5dd296fac6c39a67872 IN  0x7db4f5cc3bba3e12ff1f528d2e3417afb0a571180 BNB0.00121992
0x67cafd90fdc59b5d1edad20c98985c05d49572169182876ef1a58b2885ad5f86Claim124207562021-09-16 16:12:446 days 10 hrs ago0xb0ab0e2c169040e9fdce8d5d0457d1385ffbab95 IN  0x7db4f5cc3bba3e12ff1f528d2e3417afb0a571180 BNB0.00121992
0xd2902a69ea146be35dc77df3e152db4fb05f99ca9de42da02ad62d73911c30a4Claim124193812021-09-16 15:03:596 days 11 hrs ago0xafde8807be3f699f942a66a96cae7dcb72cc4240 IN  0x7db4f5cc3bba3e12ff1f528d2e3417afb0a571180 BNB0.00106992
0x799f8d00c147301cfdd9ff34c32fd07666c61818765e53a2597145444441f620Claim124122662021-09-16 9:07:426 days 17 hrs ago0xce2be8b93e2d832b51c7a5dd296fac6c39a67872 IN  0x7db4f5cc3bba3e12ff1f528d2e3417afb0a571180 BNB0.00106992
0x776076dd34e61d6d82708c98b346825623d3352141ed8941956d55cff806804eClaim124122502021-09-16 9:06:546 days 17 hrs ago0xce2be8b93e2d832b51c7a5dd296fac6c39a67872 IN  0x7db4f5cc3bba3e12ff1f528d2e3417afb0a571180 BNB0.00042914
0x1c9248eea6e34ba9b16050e999d39f7267851a6c7bc55482d2d98469701d7e5cClaim124122422021-09-16 9:06:306 days 17 hrs ago0xce2be8b93e2d832b51c7a5dd296fac6c39a67872 IN  0x7db4f5cc3bba3e12ff1f528d2e3417afb0a571180 BNB0.00042914
0x0ecc3975457f856a674190278adb35a136f8798c7491a288ba37b0b0cb848f23Claim124122252021-09-16 9:05:396 days 17 hrs ago0xce2be8b93e2d832b51c7a5dd296fac6c39a67872 IN  0x7db4f5cc3bba3e12ff1f528d2e3417afb0a571180 BNB0.00106992
0xc5aa64bcca04ab3cc239393139fefab9839f1646747a98bae849f7940a8be8fbClaim124057692021-09-16 3:42:516 days 23 hrs ago0xce2be8b93e2d832b51c7a5dd296fac6c39a67872 IN  0x7db4f5cc3bba3e12ff1f528d2e3417afb0a571180 BNB0.00106992
0xcd3eeac1361ab81afbcb14917f4310e32ae6bf616634174e95e430abbaa96a3aDeposit123863862021-09-15 11:33:377 days 15 hrs ago0xce2be8b93e2d832b51c7a5dd296fac6c39a67872 IN  0x7db4f5cc3bba3e12ff1f528d2e3417afb0a571180 BNB0.00057035
0xad77ee07957e64dc4885c04a712fe6c94e7e984d868d4b7b119b6cbd62f90fdbWithdraw123863722021-09-15 11:32:557 days 15 hrs ago0xce2be8b93e2d832b51c7a5dd296fac6c39a67872 IN  0x7db4f5cc3bba3e12ff1f528d2e3417afb0a571180 BNB0.00071979
0x17c296213afcc8422e04227a2a97dab734c722fe644ea2ec7b29c773f54869afWithdraw123863612021-09-15 11:32:227 days 15 hrs ago0xce2be8b93e2d832b51c7a5dd296fac6c39a67872 IN  0x7db4f5cc3bba3e12ff1f528d2e3417afb0a571180 BNB0.00174858
0x7b0b3b1a7783833a21e20331e9118704712dc935c210eeb472e12bcfa96b94c5Deposit123509002021-09-14 5:33:398 days 21 hrs ago0x57a3e7088651b237cd363d7025554a63d47fc21f IN  0x7db4f5cc3bba3e12ff1f528d2e3417afb0a571180 BNB0.00095447
0x77a3dc54bb3e66247daac02f92d5ccb2c2770c03b9ce4c04db06b062bcc56e4bClaim122949282021-09-12 6:23:0210 days 20 hrs ago0x4f765b7efb3e83b25536bdb9760ef4229edc35b7 IN  0x7db4f5cc3bba3e12ff1f528d2e3417afb0a571180 BNB0.00121992
0x4b2965c66dcc2f2cdb756e1cd09572f512de107a57770819e3fd18ebfea4aa4fDeposit121956152021-09-08 19:22:4814 days 7 hrs ago0xce2be8b93e2d832b51c7a5dd296fac6c39a67872 IN  0x7db4f5cc3bba3e12ff1f528d2e3417afb0a571180 BNB0.00080471
0xfc60ccfa051816e1b71d2ff1639ecf33a85d7b39918b026e00d02bff3d290b61Deposit121878322021-09-08 12:53:3914 days 13 hrs ago0x4f765b7efb3e83b25536bdb9760ef4229edc35b7 IN  0x7db4f5cc3bba3e12ff1f528d2e3417afb0a571180 BNB0.00146913
0x1a4ca9423d428894c57ffa22819f67da4472b8b679f8696f2229209093a9f90aWithdraw121685172021-09-07 20:46:2915 days 5 hrs ago0x66834c61def3508fc153024a5e79827803c5b2fa IN  0x7db4f5cc3bba3e12ff1f528d2e3417afb0a571180 BNB0.00101832
0x373453e470fb1bd1f85dc79e0f9ed101aea002b17d21235807981d61df278d0fClaim121398492021-09-06 20:51:5316 days 5 hrs ago0x66834c61def3508fc153024a5e79827803c5b2fa IN  0x7db4f5cc3bba3e12ff1f528d2e3417afb0a571180 BNB0.00106992
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xa074bf6e46f05cfba30f0450eca2f4a9ec99c0579d1aa6ddd8ea8bde93caf3bb126043382021-09-23 2:41:501 min ago 0x7db4f5cc3bba3e12ff1f528d2e3417afb0a57118 0xb9e0e753630434d7863528cc73cb7ac638a7c8ff0 BNB
0xa074bf6e46f05cfba30f0450eca2f4a9ec99c0579d1aa6ddd8ea8bde93caf3bb126043382021-09-23 2:41:501 min ago 0x7db4f5cc3bba3e12ff1f528d2e3417afb0a57118 0xb9e0e753630434d7863528cc73cb7ac638a7c8ff0 BNB
0xa074bf6e46f05cfba30f0450eca2f4a9ec99c0579d1aa6ddd8ea8bde93caf3bb126043382021-09-23 2:41:501 min ago 0x7db4f5cc3bba3e12ff1f528d2e3417afb0a57118 0x3f047c3022b35ed59484a4ee12b28849903a8c3b0 BNB
0xa074bf6e46f05cfba30f0450eca2f4a9ec99c0579d1aa6ddd8ea8bde93caf3bb126043382021-09-23 2:41:501 min ago 0x94d1820b2d1c7c7452a163983dc888cec546b77d 0x7db4f5cc3bba3e12ff1f528d2e3417afb0a571180 BNB
0xfc45769dbb96e7c232db1d9351a502ebaf3e019e29ea45e47f4d0877227caff8126042942021-09-23 2:39:383 mins ago 0x7db4f5cc3bba3e12ff1f528d2e3417afb0a57118 0xb9e0e753630434d7863528cc73cb7ac638a7c8ff0 BNB
0xfc45769dbb96e7c232db1d9351a502ebaf3e019e29ea45e47f4d0877227caff8126042942021-09-23 2:39:383 mins ago 0x7db4f5cc3bba3e12ff1f528d2e3417afb0a57118 0xb9e0e753630434d7863528cc73cb7ac638a7c8ff0 BNB
0xfc45769dbb96e7c232db1d9351a502ebaf3e019e29ea45e47f4d0877227caff8126042942021-09-23 2:39:383 mins ago 0x7db4f5cc3bba3e12ff1f528d2e3417afb0a57118 0x3f047c3022b35ed59484a4ee12b28849903a8c3b0 BNB
0xfc45769dbb96e7c232db1d9351a502ebaf3e019e29ea45e47f4d0877227caff8126042942021-09-23 2:39:383 mins ago 0x94d1820b2d1c7c7452a163983dc888cec546b77d 0x7db4f5cc3bba3e12ff1f528d2e3417afb0a571180 BNB
0x0884ac2ec7f8ff833b4d4a450a93c51bdf2357ec1a49c99ec1fdee739d55f89d126042712021-09-23 2:38:294 mins ago 0x7db4f5cc3bba3e12ff1f528d2e3417afb0a57118 0xb9e0e753630434d7863528cc73cb7ac638a7c8ff0 BNB
0x0884ac2ec7f8ff833b4d4a450a93c51bdf2357ec1a49c99ec1fdee739d55f89d126042712021-09-23 2:38:294 mins ago 0x7db4f5cc3bba3e12ff1f528d2e3417afb0a57118 0xb9e0e753630434d7863528cc73cb7ac638a7c8ff0 BNB
0x0884ac2ec7f8ff833b4d4a450a93c51bdf2357ec1a49c99ec1fdee739d55f89d126042712021-09-23 2:38:294 mins ago 0x7db4f5cc3bba3e12ff1f528d2e3417afb0a57118 0x3f047c3022b35ed59484a4ee12b28849903a8c3b0 BNB
0x0884ac2ec7f8ff833b4d4a450a93c51bdf2357ec1a49c99ec1fdee739d55f89d126042712021-09-23 2:38:294 mins ago 0x94d1820b2d1c7c7452a163983dc888cec546b77d 0x7db4f5cc3bba3e12ff1f528d2e3417afb0a571180 BNB
0x279a93b2d6509ecd8372ab8720a036d56ba7acc8577a11cc8e4fd5e1b2fdfc6e126042262021-09-23 2:36:146 mins ago 0x7db4f5cc3bba3e12ff1f528d2e3417afb0a57118 0xb9e0e753630434d7863528cc73cb7ac638a7c8ff0 BNB
0x279a93b2d6509ecd8372ab8720a036d56ba7acc8577a11cc8e4fd5e1b2fdfc6e126042262021-09-23 2:36:146 mins ago 0x7db4f5cc3bba3e12ff1f528d2e3417afb0a57118 0xb9e0e753630434d7863528cc73cb7ac638a7c8ff0 BNB
0x279a93b2d6509ecd8372ab8720a036d56ba7acc8577a11cc8e4fd5e1b2fdfc6e126042262021-09-23 2:36:146 mins ago 0x7db4f5cc3bba3e12ff1f528d2e3417afb0a57118 0x3f047c3022b35ed59484a4ee12b28849903a8c3b0 BNB
0x279a93b2d6509ecd8372ab8720a036d56ba7acc8577a11cc8e4fd5e1b2fdfc6e126042262021-09-23 2:36:146 mins ago 0x94d1820b2d1c7c7452a163983dc888cec546b77d 0x7db4f5cc3bba3e12ff1f528d2e3417afb0a571180 BNB
0x8ff89c3a18b073f4ec30026ff53eccc5e590dfa8d0200c4a76e73a0bb7ef9e22126041832021-09-23 2:34:059 mins ago 0x7db4f5cc3bba3e12ff1f528d2e3417afb0a57118 0xb9e0e753630434d7863528cc73cb7ac638a7c8ff0 BNB
0x8ff89c3a18b073f4ec30026ff53eccc5e590dfa8d0200c4a76e73a0bb7ef9e22126041832021-09-23 2:34:059 mins ago 0x7db4f5cc3bba3e12ff1f528d2e3417afb0a57118 0xb9e0e753630434d7863528cc73cb7ac638a7c8ff0 BNB
0x8ff89c3a18b073f4ec30026ff53eccc5e590dfa8d0200c4a76e73a0bb7ef9e22126041832021-09-23 2:34:059 mins ago 0x7db4f5cc3bba3e12ff1f528d2e3417afb0a57118 0x3f047c3022b35ed59484a4ee12b28849903a8c3b0 BNB
0x8ff89c3a18b073f4ec30026ff53eccc5e590dfa8d0200c4a76e73a0bb7ef9e22126041832021-09-23 2:34:059 mins ago 0x94d1820b2d1c7c7452a163983dc888cec546b77d 0x7db4f5cc3bba3e12ff1f528d2e3417afb0a571180 BNB
0x986594a8dfc05d63ccd18fab0ca4caacaa9080269696e593fa9af6e11fb50ce4126041462021-09-23 2:32:1410 mins ago 0x7db4f5cc3bba3e12ff1f528d2e3417afb0a57118 0xb9e0e753630434d7863528cc73cb7ac638a7c8ff0 BNB
0x986594a8dfc05d63ccd18fab0ca4caacaa9080269696e593fa9af6e11fb50ce4126041462021-09-23 2:32:1410 mins ago 0x7db4f5cc3bba3e12ff1f528d2e3417afb0a57118 0xb9e0e753630434d7863528cc73cb7ac638a7c8ff0 BNB
0x986594a8dfc05d63ccd18fab0ca4caacaa9080269696e593fa9af6e11fb50ce4126041462021-09-23 2:32:1410 mins ago 0x7db4f5cc3bba3e12ff1f528d2e3417afb0a57118 0x3f047c3022b35ed59484a4ee12b28849903a8c3b0 BNB
0x986594a8dfc05d63ccd18fab0ca4caacaa9080269696e593fa9af6e11fb50ce4126041462021-09-23 2:32:1410 mins ago 0x94d1820b2d1c7c7452a163983dc888cec546b77d 0x7db4f5cc3bba3e12ff1f528d2e3417afb0a571180 BNB
0xd75ecdcf0a32641318dbdbd404d2e2c38224b924ec65d9ea07554ee00ef8c716126040932021-09-23 2:29:3513 mins ago 0x7db4f5cc3bba3e12ff1f528d2e3417afb0a57118 0xb9e0e753630434d7863528cc73cb7ac638a7c8ff0 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
VAIVaultProxy

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 1 of 5: VAIVaultProxy.sol
pragma solidity ^0.5.16;

import "./VAIVaultStorage.sol";
import "./VAIVaultErrorReporter.sol";

contract VAIVaultProxy is VAIVaultAdminStorage, VAIVaultErrorReporter {

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

    /**
      * @notice Emitted when pendingVAIVaultImplementation is accepted, which means VAI Vault 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 = pendingVAIVaultImplementation;

        pendingVAIVaultImplementation = newPendingImplementation;

        emit NewPendingImplementation(oldPendingImplementation, pendingVAIVaultImplementation);

        return uint(Error.NO_ERROR);
    }

    /**
    * @notice Accepts new implementation of VAI Vault. 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
        if (msg.sender != pendingVAIVaultImplementation) {
            return fail(Error.UNAUTHORIZED, FailureInfo.ACCEPT_PENDING_IMPLEMENTATION_ADDRESS_CHECK);
        }

        // Save current values for inclusion in log
        address oldImplementation = vaiVaultImplementation;
        address oldPendingImplementation = pendingVAIVaultImplementation;

        vaiVaultImplementation = pendingVAIVaultImplementation;

        pendingVAIVaultImplementation = address(0);

        emit NewImplementation(oldImplementation, vaiVaultImplementation);
        emit NewPendingImplementation(oldPendingImplementation, pendingVAIVaultImplementation);

        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
        if (msg.sender != pendingAdmin) {
            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, ) = vaiVaultImplementation.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 5: IBEP20.sol
pragma solidity ^0.5.0;

/**
 * @dev Interface of the BEP20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see {BEP20Detailed}.
 */
interface IBEP20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

File 3 of 5: SafeMath.sol
pragma solidity ^0.5.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     *
     * _Available since v2.4.0._
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

File 4 of 5: VAIVaultErrorReporter.sol
pragma solidity ^0.5.16;

contract VAIVaultErrorReporter {
    enum Error {
        NO_ERROR,
        UNAUTHORIZED
    }

    enum FailureInfo {
        ACCEPT_ADMIN_PENDING_ADMIN_CHECK,
        ACCEPT_PENDING_IMPLEMENTATION_ADDRESS_CHECK,
        SET_PENDING_ADMIN_OWNER_CHECK,
        SET_PENDING_IMPLEMENTATION_OWNER_CHECK
    }

    /**
      * @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 5 of 5: VAIVaultStorage.sol
pragma solidity ^0.5.16;
import "./SafeMath.sol";
import "./IBEP20.sol";

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

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

    /**
    * @notice Active brains of VAI Vault
    */
    address public vaiVaultImplementation;

    /**
    * @notice Pending brains of VAI Vault
    */
    address public pendingVAIVaultImplementation;
}

contract VAIVaultStorage is VAIVaultAdminStorage {
    /// @notice The XVS TOKEN!
    IBEP20 public xvs;

    /// @notice The VAI TOKEN!
    IBEP20 public vai;

    /// @notice Guard variable for re-entrancy checks
    bool internal _notEntered;

    /// @notice XVS balance of vault
    uint256 public xvsBalance;

    /// @notice Accumulated XVS per share
    uint256 public accXVSPerShare;

    //// pending rewards awaiting anyone to update
    uint256 public pendingRewards;

    /// @notice Info of each user.
    struct UserInfo {
        uint256 amount;
        uint256 rewardDebt;
    }

    // Info of each user that stakes tokens.
    mapping(address => UserInfo) public userInfo;
}

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":"pendingVAIVaultImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"vaiVaultImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b50600080546001600160a01b031916331790556105c3806100326000396000f3fe60806040526004361061007b5760003560e01c8063e992a0411161004e578063e992a0411461019e578063e9c714f2146101d1578063f661bb86146101e6578063f851a440146101fb5761007b565b8063211de6b6146100fe578063267822471461012f578063b71d1a0c14610144578063c1e8033414610189575b6002546040516000916001600160a01b031690829036908083838082843760405192019450600093509091505080830381855af49150503d80600081146100de576040519150601f19603f3d011682016040523d82523d6000602084013e6100e3565b606091505b505090506040513d6000823e8180156100fa573d82f35b3d82fd5b34801561010a57600080fd5b50610113610210565b604080516001600160a01b039092168252519081900360200190f35b34801561013b57600080fd5b5061011361021f565b34801561015057600080fd5b506101776004803603602081101561016757600080fd5b50356001600160a01b031661022e565b60408051918252519081900360200190f35b34801561019557600080fd5b506101776102bf565b3480156101aa57600080fd5b50610177600480360360208110156101c157600080fd5b50356001600160a01b03166103a4565b3480156101dd57600080fd5b50610177610428565b3480156101f257600080fd5b50610113610503565b34801561020757600080fd5b50610113610512565b6003546001600160a01b031681565b6001546001600160a01b031681565b600080546001600160a01b031633146102545761024d60016002610521565b90506102ba565b600180546001600160a01b038481166001600160a01b0319831681179093556040805191909216808252602082019390935281517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9929181900390910190a160005b9150505b919050565b6003546000906001600160a01b031633146102e6576102df600180610521565b90506103a1565b60028054600380546001600160a01b038082166001600160a01b031980861682179687905590921690925560408051938316808552949092166020840152815190927fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a92908290030190a1600354604080516001600160a01b038085168252909216602083015280517fe945ccee5d701fc83f9b8aa8ca94ea4219ec1fcbd4f4cab4f0ea57c5c3e1d8159281900390910190a160005b925050505b90565b600080546001600160a01b031633146103c35761024d60016003610521565b600380546001600160a01b038481166001600160a01b0319831617928390556040805192821680845293909116602083015280517fe945ccee5d701fc83f9b8aa8ca94ea4219ec1fcbd4f4cab4f0ea57c5c3e1d8159281900390910190a160006102b6565b6001546000906001600160a01b03163314610449576102df60016000610521565b60008054600180546001600160a01b038082166001600160a01b031980861682179687905590921690925560408051938316808552949092166020840152815190927ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc92908290030190a1600154604080516001600160a01b038085168252909216602083015280517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a99281900390910190a1600061039c565b6002546001600160a01b031681565b6000546001600160a01b031681565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa083600181111561055057fe5b83600381111561055c57fe5b604080519283526020830191909152600082820152519081900360600190a182600181111561058757fe5b939250505056fea265627a7a72315820a7b91a278459cd5234ecce24791dd4e68aea4e2a5078cf84772e455fa4bdcbdb64736f6c63430005100032

Deployed ByteCode Sourcemap

97:5144:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4894:22;;:45;;4876:12;;-1:-1:-1;;;;;4894:22:3;;4876:12;;4930:8;;4894:45;4876:12;4930:8;;4876:12;4894:45;1:33:-1;4894:45:3;;45:16:-1;;;-1:-1;4894:45:3;;-1:-1:-1;4894:45:3;;-1:-1:-1;;4894:45:3;;;;;;;;;;;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;;4875:64:3;;;5001:4;4995:11;5053:14;5050:1;5036:12;5021:47;5091:7;5113:47;;;;5206:14;5192:12;5185:36;5113:47;5143:14;5129:12;5122:36;458:44:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;458:44:4;;;:::i;:::-;;;;-1:-1:-1;;;;;458:44:4;;;;;;;;;;;;;;267:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;267:27:4;;;:::i;3028:621:3:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3028:621:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3028:621:3;-1:-1:-1;;;;;3028:621:3;;:::i;:::-;;;;;;;;;;;;;;;;1824:797;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1824:797:3;;;:::i;1016:518::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1016:518:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1016:518:3;-1:-1:-1;;;;;1016:518:3;;:::i;3920:660::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3920:660:3;;;:::i;357:37:4:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;357:37:4;;;:::i;171:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;171:20:4;;;:::i;458:44::-;;;-1:-1:-1;;;;;458:44:4;;:::o;267:27::-;;;-1:-1:-1;;;;;267:27:4;;:::o;3028:621:3:-;3095:4;3161:5;;-1:-1:-1;;;;;3161:5:3;3147:10;:19;3143:124;;3189:67;3194:18;3214:41;3189:4;:67::i;:::-;3182:74;;;;3143:124;3363:12;;;-1:-1:-1;;;;;3443:30:3;;;-1:-1:-1;;;;;;3443:30:3;;;;;;;3555:49;;;3363:12;;;;3555:49;;;;;;;;;;;;;;;;;;;;;;;3627:14;3622:20;3615:27;;;3028:621;;;;:::o;1824:797::-;1956:29;;1873:4;;-1:-1:-1;;;;;1956:29:3;1942:10;:43;1938:162;;2008:81;2013:18;2033:55;2008:4;:81::i;:::-;2001:88;;;;1938:162;2190:22;;;2257:29;;;-1:-1:-1;;;;;2257:29:3;;;-1:-1:-1;;;;;;2297:54:3;;;;;;;;;2362:42;;;;;;2420:60;;;2190:22;;;2420:60;;;2457:22;;;;2420:60;;;;;;2257:29;;2420:60;;;;;;;;;2546:29;;2495:81;;;-1:-1:-1;;;;;2495:81:3;;;;;2546:29;;;2495:81;;;;;;;;;;;;;;;;2599:14;2594:20;2587:27;;;;1824:797;;:::o;1016:518::-;1101:4;1136:5;;-1:-1:-1;;;;;1136:5:3;1122:10;:19;1118:133;;1164:76;1169:18;1189:50;1164:4;:76::i;1118:133::-;1296:29;;;-1:-1:-1;;;;;1336:56:3;;;-1:-1:-1;;;;;;1336:56:3;;;;;;;1408:81;;;1296:29;;;1408:81;;;1459:29;;;;1408:81;;;;;;;;;;;;;;;;1512:14;1507:20;;3920:660;4034:12;;3960:4;;-1:-1:-1;;;;;4034:12:3;4020:10;:26;4016:134;;4069:70;4074:18;4094:44;4069:4;:70::i;4016:134::-;4212:16;4231:5;;;4272:12;;-1:-1:-1;;;;;4272:12:3;;;-1:-1:-1;;;;;;4342:20:3;;;;;;;;;4408:25;;;;;;4449;;;4231:5;;;4449:25;;;4468:5;;;;4449:25;;;;;;4272:12;;4449:25;;;;;;;;;4522:12;;4489:46;;;-1:-1:-1;;;;;4489:46:3;;;;;4522:12;;;4489:46;;;;;;;;;;;;;;;;4558:14;4553:20;;357:37:4;;;-1:-1:-1;;;;;357:37:4;;:::o;171:20::-;;;-1:-1:-1;;;;;171:20:4;;:::o;756:149:2:-;817:4;838:33;851:3;846:9;;;;;;;;862:4;857:10;;;;;;;;838:33;;;;;;;;;;;;;869:1;838:33;;;;;;;;;;;;;894:3;889:9;;;;;;;;882:16;756:149;-1:-1:-1;;;756:149:2:o

Swarm Source

bzzr://a7b91a278459cd5234ecce24791dd4e68aea4e2a5078cf84772e455fa4bdcbdb
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading