Contract 0x0667eed0a0aab930af74a3dfedd263a73994f216 1

 

Contract Overview

Balance:
0 BNB

BNB Value:
$0.00

Token:
 
Txn Hash
Block
From
To
Value [Txn Fee]
0xe586b71d5cba4f6ed79591f1229ab25b6d32a2fc523816b5483a49917f85fc3c95618782021-07-29 1:13:5119 mins ago0x83d1c7013969a3704e40446a6475a6a07239334f IN  0x0667eed0a0aab930af74a3dfedd263a73994f2160 BNB0.00050999
0x1a572ed6c394fe9c78b7ed742691b425f445fe2e955aa09d01d2a21c67927b9595618462021-07-29 1:12:1420 mins ago0x1d7fe1f82db53543cc816840c84e94e7a2d2fd65 IN  0x0667eed0a0aab930af74a3dfedd263a73994f2160 BNB0.000703815
0xd3e3ac1f5f5930a2fc2d0272f0230788fcd654c9b4bdd3b72cb6c8be083c1a1e95616662021-07-29 1:03:1329 mins ago0x1003a7e9b0ed1dee1bc317808d508b37e99fe8fd IN  0x0667eed0a0aab930af74a3dfedd263a73994f2160 BNB0.000402235
0x6152376fd7fc95a5f3ad52029d7b006591d287ccfc928449dd4d86a051a11fec95609312021-07-29 0:26:211 hr 6 mins ago0x83d1c7013969a3704e40446a6475a6a07239334f IN  0x0667eed0a0aab930af74a3dfedd263a73994f2160 BNB0.00062841
0x9a7a70bbd39129cafcac6c808904bcce4e0cab21290e102f5d2de5018724a21095607562021-07-29 0:17:261 hr 15 mins ago0x268f3ac7e99f5af5111beb9684d479cbc41646ff IN  0x0667eed0a0aab930af74a3dfedd263a73994f2160 BNB0.00053286
0xce6c062c303f023fa0fc014077143a0fca1c14c280cfcafc3ce36e5c877a912395606762021-07-29 0:13:151 hr 19 mins ago0xcc39486f79f21dee248b9dbd38ee29f88bb64f45 IN  0x0667eed0a0aab930af74a3dfedd263a73994f2160 BNB0.00067112
0xe7bfba99d4130d10fe98bea320028e7ab8acfb207649970162c5ce15354a07b995604112021-07-28 23:59:401 hr 33 mins ago0xc8b6142391f44a0f40c67855552a50290317758f IN  0x0667eed0a0aab930af74a3dfedd263a73994f2160 BNB0.000285235
0xd5afb35544154cd84ab2aeb6e1632fdcdb990e4a317e0a2e6e0e7baf43d94a2495602182021-07-28 23:49:471 hr 43 mins ago0xc8b6142391f44a0f40c67855552a50290317758f IN  0x0667eed0a0aab930af74a3dfedd263a73994f2160 BNB0.00065415
0xa5015bb1a9476b582723ae1e39202b64d0f88502f1ef27397c5b3e982ba33cf295602092021-07-28 23:49:201 hr 43 mins ago0x52351a3d9f60cb9ead83079945d968e6bb82aca0 IN  0x0667eed0a0aab930af74a3dfedd263a73994f2160 BNB0.000402295
0x58719f9b20952c45edb3801cffc257104d284b93a342f4fc6bce26f886d2faf595598202021-07-28 23:29:522 hrs 3 mins ago0x3ff0b0906b158826b261c871219e8859e3c71107 IN  0x0667eed0a0aab930af74a3dfedd263a73994f2160 BNB0.00028471
0x32b6b8574df08f7055e70c842154cd8ab49a4b94ef4c8a68c7260489c997155495598122021-07-28 23:29:282 hrs 3 mins ago0x3ff0b0906b158826b261c871219e8859e3c71107 IN  0x0667eed0a0aab930af74a3dfedd263a73994f2160 BNB0.000483075
0xca792684fdf3a90ddb6aeed47fac07fc1583d424da47672c41ede4cdb0cc99ca95596582021-07-28 23:21:392 hrs 11 mins ago0x0c98217c6f9e29fb8a5734dedc67aca15f14ddf4 IN  0x0667eed0a0aab930af74a3dfedd263a73994f2160 BNB0.000402355
0x5dc36d56b0bf9df0740c998497d6a8980f8800cb2c3b581dab52e4becf2d847695587302021-07-28 22:33:172 hrs 59 mins ago0xf823e4a4c88a6dbb5b6e275ac62e129cf7f7d995 IN  0x0667eed0a0aab930af74a3dfedd263a73994f2160 BNB0.00043499
0xd7470da46532aa6d9d2d5abb30db9809dec1d4dc96ad228039204e91ce38bb1295586842021-07-28 22:30:593 hrs 1 min ago0x52047ec3cb67e9f399a137116d9d2410316e5c14 IN  0x0667eed0a0aab930af74a3dfedd263a73994f2160 BNB0.00043511
0x6a38e104d07af1f685e7881d10ec64a99cea7b88036e00e8b8498e671c358d3295585322021-07-28 22:23:213 hrs 9 mins ago0x4315d1fd1f76148d0889e4992fbb3202677b8709 IN  0x0667eed0a0aab930af74a3dfedd263a73994f2160 BNB0.000595475
0x18de4fdf4ceafb12c5a13c9d1c4d680a51850e023ebabdd271035f047a68430d95583892021-07-28 22:16:113 hrs 16 mins ago0x4315d1fd1f76148d0889e4992fbb3202677b8709 IN  0x0667eed0a0aab930af74a3dfedd263a73994f2160 BNB0.00043493
0x3c93de5ecf0f74fb4cc1174ca05e7afe4bf51bffc21e9b127339c443fa72f25895582632021-07-28 22:09:153 hrs 23 mins ago0x6c8b8f1aa4860bb4225acab5b85e089b498e8c83 IN  0x0667eed0a0aab930af74a3dfedd263a73994f2160 BNB0.00043505
0x4fa14077aecdf071f95877012b041b6d5a2f9d1dfd44e75e6672140622f059e995582282021-07-28 22:07:183 hrs 25 mins ago0x4315d1fd1f76148d0889e4992fbb3202677b8709 IN  0x0667eed0a0aab930af74a3dfedd263a73994f2160 BNB0.00062823
0xf8f7538310cdf586da02dbff4e93e25a43e947522e6e49ef1fcb561b53954d0195582012021-07-28 22:05:463 hrs 27 mins ago0x635ea43c934f902d915626d203f770be2de3c060 IN  0x0667eed0a0aab930af74a3dfedd263a73994f2160 BNB0.00037532
0x3386e4069a15a5d820990d12f6fecb52e0b5e6f55843b6443601d4fe61f2d7aa95580302021-07-28 21:56:543 hrs 36 mins ago0x9e8b384772a8056afd5f0e615e3ba984b31c6583 IN  0x0667eed0a0aab930af74a3dfedd263a73994f2160 BNB0.000156505
0x6c326de7e0df12102a1df3f42455963b0dd9729048db8956b6ee0f915e8c50ec95580302021-07-28 21:56:543 hrs 36 mins ago0x9e8b384772a8056afd5f0e615e3ba984b31c6583 IN  0x0667eed0a0aab930af74a3dfedd263a73994f2160 BNB0.00028477
0xb10b873245cd99f843a26f1d2b41696e06a1e2e184caadbaffc1079d7b02059c95580192021-07-28 21:56:213 hrs 36 mins ago0x2da3a69bc85dc4681641dc67a3f17d1aca2bc19d IN  0x0667eed0a0aab930af74a3dfedd263a73994f2160 BNB0.000639288
0xbec001c616e27914ac5f09d2b93333238bb145ea81769071f48d2bf0af0855ae95577052021-07-28 21:40:383 hrs 52 mins ago0x9e8b384772a8056afd5f0e615e3ba984b31c6583 IN  0x0667eed0a0aab930af74a3dfedd263a73994f2160 BNB0.000628875
0x69c639d6d75d849f454f08611292793bff28dd99f94da40324a01a50d516ccb495576412021-07-28 21:37:253 hrs 55 mins ago0x4315d1fd1f76148d0889e4992fbb3202677b8709 IN  0x0667eed0a0aab930af74a3dfedd263a73994f2160 BNB0.00043493
0xe0fa10e45ee929725ee41039e4889d72c20d8e7fc77c5c38b850603045a6563795576222021-07-28 21:36:283 hrs 56 mins ago0x1c858069716d667642f0c86fb1ffdc198ba6e538 IN  0x0667eed0a0aab930af74a3dfedd263a73994f2160 BNB0.00057915
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xf1d2c6c1edc6e08a182a7b5b8731af4fa0a7f6ad1580fa785bbe9a6348203c0354713332021-03-07 11:59:36143 days 13 hrs ago 0x0667eed0a0aab930af74a3dfedd263a73994f216 Venus: VAI Token0 BNB
0xf1d2c6c1edc6e08a182a7b5b8731af4fa0a7f6ad1580fa785bbe9a6348203c0354713332021-03-07 11:59:36143 days 13 hrs ago 0x0667eed0a0aab930af74a3dfedd263a73994f216 Venus: XVS Token0 BNB
0xf1d2c6c1edc6e08a182a7b5b8731af4fa0a7f6ad1580fa785bbe9a6348203c0354713332021-03-07 11:59:36143 days 13 hrs ago 0x0667eed0a0aab930af74a3dfedd263a73994f216 Venus: XVS Token0 BNB
0xf1d2c6c1edc6e08a182a7b5b8731af4fa0a7f6ad1580fa785bbe9a6348203c0354713332021-03-07 11:59:36143 days 13 hrs ago 0x0667eed0a0aab930af74a3dfedd263a73994f216 Venus: XVS Token0 BNB
0xf1d2c6c1edc6e08a182a7b5b8731af4fa0a7f6ad1580fa785bbe9a6348203c0354713332021-03-07 11:59:36143 days 13 hrs ago 0x0667eed0a0aab930af74a3dfedd263a73994f216 Venus: VAI Token0 BNB
0xf1d2c6c1edc6e08a182a7b5b8731af4fa0a7f6ad1580fa785bbe9a6348203c0354713332021-03-07 11:59:36143 days 13 hrs ago 0x0667eed0a0aab930af74a3dfedd263a73994f216 0x7680c89eb3e58dec4d38093b4803be2b7f2573600 BNB
0xa00de57a4eec5c26e42a0357947b8d78407913f14bc6fd399c2d23e5244da57d54713312021-03-07 11:59:30143 days 13 hrs ago 0x0667eed0a0aab930af74a3dfedd263a73994f216 Venus: VAI Token0 BNB
0xa00de57a4eec5c26e42a0357947b8d78407913f14bc6fd399c2d23e5244da57d54713312021-03-07 11:59:30143 days 13 hrs ago 0x0667eed0a0aab930af74a3dfedd263a73994f216 Venus: VAI Token0 BNB
0xa00de57a4eec5c26e42a0357947b8d78407913f14bc6fd399c2d23e5244da57d54713312021-03-07 11:59:30143 days 13 hrs ago 0x0667eed0a0aab930af74a3dfedd263a73994f216 0x7680c89eb3e58dec4d38093b4803be2b7f2573600 BNB
0x7eb188a5cffbaa50feed59c44f22015f4ad8e4c06d5894e37d154746ab580a0954713172021-03-07 11:58:48143 days 13 hrs ago 0x0667eed0a0aab930af74a3dfedd263a73994f216 Venus: XVS Token0 BNB
0x7eb188a5cffbaa50feed59c44f22015f4ad8e4c06d5894e37d154746ab580a0954713172021-03-07 11:58:48143 days 13 hrs ago 0x0667eed0a0aab930af74a3dfedd263a73994f216 Venus: XVS Token0 BNB
0x7eb188a5cffbaa50feed59c44f22015f4ad8e4c06d5894e37d154746ab580a0954713172021-03-07 11:58:48143 days 13 hrs ago 0x0667eed0a0aab930af74a3dfedd263a73994f216 0x7680c89eb3e58dec4d38093b4803be2b7f2573600 BNB
0x7eb188a5cffbaa50feed59c44f22015f4ad8e4c06d5894e37d154746ab580a0954713172021-03-07 11:58:48143 days 13 hrs ago Venus: Distribution 0x0667eed0a0aab930af74a3dfedd263a73994f2160 BNB
0xd589d750936bf9e0a6af1b81f8fc4bf8b65789506f5946d1bb1bef241c461a5854713172021-03-07 11:58:48143 days 13 hrs ago 0x0667eed0a0aab930af74a3dfedd263a73994f216 Venus: XVS Token0 BNB
0xd589d750936bf9e0a6af1b81f8fc4bf8b65789506f5946d1bb1bef241c461a5854713172021-03-07 11:58:48143 days 13 hrs ago 0x0667eed0a0aab930af74a3dfedd263a73994f216 Venus: XVS Token0 BNB
0xd589d750936bf9e0a6af1b81f8fc4bf8b65789506f5946d1bb1bef241c461a5854713172021-03-07 11:58:48143 days 13 hrs ago 0x0667eed0a0aab930af74a3dfedd263a73994f216 0x7680c89eb3e58dec4d38093b4803be2b7f2573600 BNB
0xd589d750936bf9e0a6af1b81f8fc4bf8b65789506f5946d1bb1bef241c461a5854713172021-03-07 11:58:48143 days 13 hrs ago Venus: Distribution 0x0667eed0a0aab930af74a3dfedd263a73994f2160 BNB
0x09e796fe11529b64aec7351949a0b3db3ff0718ec3c6dd1735f7ab56f713071554713092021-03-07 11:58:24143 days 13 hrs ago 0x0667eed0a0aab930af74a3dfedd263a73994f216 Venus: XVS Token0 BNB
0x09e796fe11529b64aec7351949a0b3db3ff0718ec3c6dd1735f7ab56f713071554713092021-03-07 11:58:24143 days 13 hrs ago 0x0667eed0a0aab930af74a3dfedd263a73994f216 Venus: XVS Token0 BNB
0x09e796fe11529b64aec7351949a0b3db3ff0718ec3c6dd1735f7ab56f713071554713092021-03-07 11:58:24143 days 13 hrs ago 0x0667eed0a0aab930af74a3dfedd263a73994f216 Venus: XVS Token0 BNB
0x09e796fe11529b64aec7351949a0b3db3ff0718ec3c6dd1735f7ab56f713071554713092021-03-07 11:58:24143 days 13 hrs ago 0x0667eed0a0aab930af74a3dfedd263a73994f216 Venus: VAI Token0 BNB
0x09e796fe11529b64aec7351949a0b3db3ff0718ec3c6dd1735f7ab56f713071554713092021-03-07 11:58:24143 days 13 hrs ago 0x0667eed0a0aab930af74a3dfedd263a73994f216 0x7680c89eb3e58dec4d38093b4803be2b7f2573600 BNB
0x2603e9e6e6a723c8ce9cdd28bbd9ce5d796576200fc47d9b3809a94569bce92954712462021-03-07 11:55:15143 days 13 hrs ago 0x0667eed0a0aab930af74a3dfedd263a73994f216 Venus: VAI Token0 BNB
0x2603e9e6e6a723c8ce9cdd28bbd9ce5d796576200fc47d9b3809a94569bce92954712462021-03-07 11:55:15143 days 13 hrs ago 0x0667eed0a0aab930af74a3dfedd263a73994f216 Venus: XVS Token0 BNB
0x2603e9e6e6a723c8ce9cdd28bbd9ce5d796576200fc47d9b3809a94569bce92954712462021-03-07 11:55:15143 days 13 hrs ago 0x0667eed0a0aab930af74a3dfedd263a73994f216 Venus: XVS Token0 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
VAIVaultProxy

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 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"}]

608060405234801561001057600080fd5b50600080546001600160a01b031916331790556105c3806100326000396000f3fe60806040526004361061007b5760003560e01c8063e992a0411161004e578063e992a0411461019e578063e9c714f2146101d1578063f661bb86146101e6578063f851a440146101fb5761007b565b8063211de6b6146100fe578063267822471461012f578063b71d1a0c14610144578063c1e8033414610189575b6002546040516000916001600160a01b031690829036908083838082843760405192019450600093509091505080830381855af49150503d80600081146100de576040519150601f19603f3d011682016040523d82523d6000602084013e6100e3565b606091505b505090506040513d6000823e8180156100fa573d82f35b3d82fd5b34801561010a57600080fd5b50610113610210565b604080516001600160a01b039092168252519081900360200190f35b34801561013b57600080fd5b5061011361021f565b34801561015057600080fd5b506101776004803603602081101561016757600080fd5b50356001600160a01b031661022e565b60408051918252519081900360200190f35b34801561019557600080fd5b506101776102bf565b3480156101aa57600080fd5b50610177600480360360208110156101c157600080fd5b50356001600160a01b03166103a4565b3480156101dd57600080fd5b50610177610428565b3480156101f257600080fd5b50610113610503565b34801561020757600080fd5b50610113610512565b6003546001600160a01b031681565b6001546001600160a01b031681565b600080546001600160a01b031633146102545761024d60016002610521565b90506102ba565b600180546001600160a01b038481166001600160a01b0319831681179093556040805191909216808252602082019390935281517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9929181900390910190a160005b9150505b919050565b6003546000906001600160a01b031633146102e6576102df600180610521565b90506103a1565b60028054600380546001600160a01b038082166001600160a01b031980861682179687905590921690925560408051938316808552949092166020840152815190927fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a92908290030190a1600354604080516001600160a01b038085168252909216602083015280517fe945ccee5d701fc83f9b8aa8ca94ea4219ec1fcbd4f4cab4f0ea57c5c3e1d8159281900390910190a160005b925050505b90565b600080546001600160a01b031633146103c35761024d60016003610521565b600380546001600160a01b038481166001600160a01b0319831617928390556040805192821680845293909116602083015280517fe945ccee5d701fc83f9b8aa8ca94ea4219ec1fcbd4f4cab4f0ea57c5c3e1d8159281900390910190a160006102b6565b6001546000906001600160a01b03163314610449576102df60016000610521565b60008054600180546001600160a01b038082166001600160a01b031980861682179687905590921690925560408051938316808552949092166020840152815190927ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc92908290030190a1600154604080516001600160a01b038085168252909216602083015280517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a99281900390910190a1600061039c565b6002546001600160a01b031681565b6000546001600160a01b031681565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa083600181111561055057fe5b83600381111561055c57fe5b604080519283526020830191909152600082820152519081900360600190a182600181111561058757fe5b939250505056fea265627a7a723158204f9eb826cb4e2e59e6913f7469288cf96aec04a96f7856fca321efc4934cbfb564736f6c63430005110032

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://4f9eb826cb4e2e59e6913f7469288cf96aec04a96f7856fca321efc4934cbfb5
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.