ETH Price: $2,603.30 (+2.97%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Poke134235402021-10-15 15:50:371362 days ago1634313037IN
mStable: Poker of Boosted Vaults
0 ETH0.25728662130.5
Poke127276242021-06-29 7:21:431470 days ago1624951303IN
mStable: Poker of Boosted Vaults
0 ETH0.0225712311
Poke124553022021-05-18 1:03:091513 days ago1621299789IN
mStable: Poker of Boosted Vaults
0 ETH0.0376538463
Poke124525672021-05-17 14:55:451513 days ago1621263345IN
mStable: Poker of Boosted Vaults
0 ETH0.1367390269.5
Poke124525652021-05-17 14:55:221513 days ago1621263322IN
mStable: Poker of Boosted Vaults
0 ETH0.0714359566
Poke124525612021-05-17 14:53:591513 days ago1621263239IN
mStable: Poker of Boosted Vaults
0 ETH0.0341294566

View more zero value Internal Transactions in Advanced View mode

Advanced mode:

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Poker

Compiler Version
v0.8.2+commit.661d1103

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU AGPLv3 license
/**
 *Submitted for verification at Etherscan.io on 2021-05-17
*/

pragma solidity 0.8.2;


interface IERC20 {
    /**
     * @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);
}

interface IBoostedVaultWithLockup {
    /**
     * @dev Stakes a given amount of the StakingToken for the sender
     * @param _amount Units of StakingToken
     */
    function stake(uint256 _amount) external;

    /**
     * @dev Stakes a given amount of the StakingToken for a given beneficiary
     * @param _beneficiary Staked tokens are credited to this address
     * @param _amount      Units of StakingToken
     */
    function stake(address _beneficiary, uint256 _amount) external;

    /**
     * @dev Withdraws stake from pool and claims any unlocked rewards.
     * Note, this function is costly - the args for _claimRewards
     * should be determined off chain and then passed to other fn
     */
    function exit() external;

    /**
     * @dev Withdraws stake from pool and claims any unlocked rewards.
     * @param _first    Index of the first array element to claim
     * @param _last     Index of the last array element to claim
     */
    function exit(uint256 _first, uint256 _last) external;

    /**
     * @dev Withdraws given stake amount from the pool
     * @param _amount Units of the staked token to withdraw
     */
    function withdraw(uint256 _amount) external;

    /**
     * @dev Claims only the tokens that have been immediately unlocked, not including
     * those that are in the lockers.
     */
    function claimReward() external;

    /**
     * @dev Claims all unlocked rewards for sender.
     * Note, this function is costly - the args for _claimRewards
     * should be determined off chain and then passed to other fn
     */
    function claimRewards() external;

    /**
     * @dev Claims all unlocked rewards for sender. Both immediately unlocked
     * rewards and also locked rewards past their time lock.
     * @param _first    Index of the first array element to claim
     * @param _last     Index of the last array element to claim
     */
    function claimRewards(uint256 _first, uint256 _last) external;

    /**
     * @dev Pokes a given account to reset the boost
     */
    function pokeBoost(address _account) external;

    /**
     * @dev Gets the last applicable timestamp for this reward period
     */
    function lastTimeRewardApplicable() external view returns (uint256);

    /**
     * @dev Calculates the amount of unclaimed rewards per token since last update,
     * and sums with stored to give the new cumulative reward per token
     * @return 'Reward' per staked token
     */
    function rewardPerToken() external view returns (uint256);

    /**
     * @dev Returned the units of IMMEDIATELY claimable rewards a user has to receive. Note - this
     * does NOT include the majority of rewards which will be locked up.
     * @param _account User address
     * @return Total reward amount earned
     */
    function earned(address _account) external view returns (uint256);

    /**
     * @dev Calculates all unclaimed reward data, finding both immediately unlocked rewards
     * and those that have passed their time lock.
     * @param _account User address
     * @return amount Total units of unclaimed rewards
     * @return first Index of the first userReward that has unlocked
     * @return last Index of the last userReward that has unlocked
     */
    function unclaimedRewards(address _account)
        external
        view
        returns (
            uint256 amount,
            uint256 first,
            uint256 last
        );
}

// SPDX-License-Identifier: AGPL-3.0-or-later
struct PokeVaultAccounts {
    // Address of the Boosted Vault
    address boostVault;
    // List of accounts to be poked
    address[] accounts;
}

/**
 * @title   Poker
 * @author  mStable
 * @notice  Pokes accounts on boosted vaults so their vault balances can be recalculated.
 * @dev     VERSION: 1.0
 *          DATE:    2021-04-17
 */
contract Poker {

    /**
     * @dev For each boosted vault, poke all the over boosted accounts.
     * @param _vaultAccounts     An array of PokeVaultAccounts structs
     */
    function poke(PokeVaultAccounts[] memory _vaultAccounts) external {
        uint vaultCount = _vaultAccounts.length;
        for(uint i = 0; i < vaultCount; i++) {
            PokeVaultAccounts memory vaultAccounts = _vaultAccounts[i];
            address boostVaultAddress = vaultAccounts.boostVault;
            require(boostVaultAddress != address(0), "blank vault address");
            IBoostedVaultWithLockup boostVault = IBoostedVaultWithLockup(boostVaultAddress);

            uint accountsLength = vaultAccounts.accounts.length;
            for(uint j = 0; j < accountsLength; j++) {
                address accountAddress = vaultAccounts.accounts[j];
                require(accountAddress != address(0), "blank address");
                boostVault.pokeBoost(accountAddress);
            }
        }
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"components":[{"internalType":"address","name":"boostVault","type":"address"},{"internalType":"address[]","name":"accounts","type":"address[]"}],"internalType":"struct PokeVaultAccounts[]","name":"_vaultAccounts","type":"tuple[]"}],"name":"poke","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50610411806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063e05c2cee14610030575b600080fd5b61004361003e366004610213565b610045565b005b805160005b818110156101f257600083828151811061007457634e487b7160e01b600052603260045260246000fd5b602090810291909101015180519091506001600160a01b0381166100d55760405162461bcd60e51b8152602060048201526013602482015272626c616e6b207661756c74206164647265737360681b60448201526064015b60405180910390fd5b602082015151819060005b818110156101da5760008560200151828151811061010e57634e487b7160e01b600052603260045260246000fd5b6020026020010151905060006001600160a01b0316816001600160a01b0316141561016b5760405162461bcd60e51b815260206004820152600d60248201526c626c616e6b206164647265737360981b60448201526064016100cc565b60405163cf7bf6b760e01b81526001600160a01b03828116600483015285169063cf7bf6b790602401600060405180830381600087803b1580156101ae57600080fd5b505af11580156101c2573d6000803e3d6000fd5b505050505080806101d29061039e565b9150506100e0565b505050505080806101ea9061039e565b91505061004a565b505050565b80356001600160a01b038116811461020e57600080fd5b919050565b60006020808385031215610225578182fd5b67ffffffffffffffff808435111561023b578283fd5b8335840185601f82011261024d578384fd5b61025f61025a823561037a565b610349565b8135815283810190848301865b843581101561033b57813585016040818c03601f1901121561028c578889fd5b6102966040610349565b6102a18983016101f7565b81526040820135888111156102b4578a8bfd5b8083019250508b603f8301126102c857898afd5b888201356102d861025a8261037a565b808282528b82019150604085018f60408e860288010111156102f8578d8efd5b8d95505b838610156103215761030d816101f7565b835260019590950194918c01918c016102fc565b50838c01525050855250928601929086019060010161026c565b509098975050505050505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715610372576103726103c5565b604052919050565b600067ffffffffffffffff821115610394576103946103c5565b5060209081020190565b60006000198214156103be57634e487b7160e01b81526011600452602481fd5b5060010190565b634e487b7160e01b600052604160045260246000fdfea26469706673582212201429e1fcfcf05c33c73f22341e7312447162274e94d9fa3c0869a71d0605d23564736f6c63430008020033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063e05c2cee14610030575b600080fd5b61004361003e366004610213565b610045565b005b805160005b818110156101f257600083828151811061007457634e487b7160e01b600052603260045260246000fd5b602090810291909101015180519091506001600160a01b0381166100d55760405162461bcd60e51b8152602060048201526013602482015272626c616e6b207661756c74206164647265737360681b60448201526064015b60405180910390fd5b602082015151819060005b818110156101da5760008560200151828151811061010e57634e487b7160e01b600052603260045260246000fd5b6020026020010151905060006001600160a01b0316816001600160a01b0316141561016b5760405162461bcd60e51b815260206004820152600d60248201526c626c616e6b206164647265737360981b60448201526064016100cc565b60405163cf7bf6b760e01b81526001600160a01b03828116600483015285169063cf7bf6b790602401600060405180830381600087803b1580156101ae57600080fd5b505af11580156101c2573d6000803e3d6000fd5b505050505080806101d29061039e565b9150506100e0565b505050505080806101ea9061039e565b91505061004a565b505050565b80356001600160a01b038116811461020e57600080fd5b919050565b60006020808385031215610225578182fd5b67ffffffffffffffff808435111561023b578283fd5b8335840185601f82011261024d578384fd5b61025f61025a823561037a565b610349565b8135815283810190848301865b843581101561033b57813585016040818c03601f1901121561028c578889fd5b6102966040610349565b6102a18983016101f7565b81526040820135888111156102b4578a8bfd5b8083019250508b603f8301126102c857898afd5b888201356102d861025a8261037a565b808282528b82019150604085018f60408e860288010111156102f8578d8efd5b8d95505b838610156103215761030d816101f7565b835260019590950194918c01918c016102fc565b50838c01525050855250928601929086019060010161026c565b509098975050505050505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715610372576103726103c5565b604052919050565b600067ffffffffffffffff821115610394576103946103c5565b5060209081020190565b60006000198214156103be57634e487b7160e01b81526011600452602481fd5b5060010190565b634e487b7160e01b600052604160045260246000fdfea26469706673582212201429e1fcfcf05c33c73f22341e7312447162274e94d9fa3c0869a71d0605d23564736f6c63430008020033

Deployed Bytecode Sourcemap

6615:1021:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6802:831;;;;;;:::i;:::-;;:::i;:::-;;;6897:21;;6879:15;6929:697;6949:10;6945:1;:14;6929:697;;;6981:38;7022:14;7037:1;7022:17;;;;;;-1:-1:-1;;;7022:17:0;;;;;;;;;;;;;;;;;;;7082:24;;7022:17;;-1:-1:-1;;;;;;7129:31:0;;7121:63;;;;-1:-1:-1;;;7121:63:0;;2625:2:1;7121:63:0;;;2607:21:1;2664:2;2644:18;;;2637:30;-1:-1:-1;;;2683:18:1;;;2676:49;2742:18;;7121:63:0;;;;;;;;;7317:22;;;;:29;7260:17;;7199:34;7361:254;7381:14;7377:1;:18;7361:254;;;7421:22;7446:13;:22;;;7469:1;7446:25;;;;;;-1:-1:-1;;;7446:25:0;;;;;;;;;;;;;;;7421:50;;7524:1;-1:-1:-1;;;;;7498:28:0;:14;-1:-1:-1;;;;;7498:28:0;;;7490:54;;;;-1:-1:-1;;;7490:54:0;;2973:2:1;7490:54:0;;;2955:21:1;3012:2;2992:18;;;2985:30;-1:-1:-1;;;3031:18:1;;;3024:43;3084:18;;7490:54:0;2945:163:1;7490:54:0;7563:36;;-1:-1:-1;;;7563:36:0;;-1:-1:-1;;;;;2379:32:1;;;7563:36:0;;;2361:51:1;7563:20:0;;;;;2334:18:1;;7563:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7361:254;7397:3;;;;;:::i;:::-;;;;7361:254;;;;6929:697;;;;6961:3;;;;;:::i;:::-;;;;6929:697;;;;6802:831;;:::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;111:2;63:124;;;:::o;192:2018::-;;341:2;384;372:9;363:7;359:23;355:32;352:2;;;405:6;397;390:22;352:2;433:18;491:2;479:9;466:23;463:31;460:2;;;512:6;504;497:22;460:2;568:9;555:23;544:9;540:39;617:7;610:4;606:2;602:13;598:27;588:2;;644:6;636;629:22;588:2;673:74;689:57;742:2;729:16;689:57;:::i;:::-;673:74;:::i;:::-;793:16;;781:29;;826:12;;;;858:11;;;887:6;902:1278;929:2;916:16;913:1;910:23;902:1278;;;993:17;;985:26;;1063:4;1035:16;;;-1:-1:-1;;1031:30:1;1027:41;1024:2;;;1086:6;1078;1071:22;1024:2;1121:21;1137:4;1121:21;:::i;:::-;1169:31;1196:2;1192;1188:11;1169:31;:::i;:::-;1162:5;1155:46;1249:4;1245:2;1241:13;1228:27;1282:2;1274:6;1271:14;1268:2;;;1303:6;1295;1288:22;1268:2;1343:6;1339:2;1335:15;1325:25;;;1390:7;1385:2;1381;1377:11;1373:25;1363:2;;1417:6;1409;1402:22;1363:2;1470;1466;1462:11;1449:25;1500:60;1516:43;1556:2;1516:43;:::i;1500:60::-;1586:5;1618:2;1611:5;1604:17;1654:2;1647:5;1643:14;1634:23;;1691:4;1687:2;1683:13;1748:7;1741:4;1735:2;1731;1727:11;1723:2;1719:20;1715:31;1712:44;1709:2;;;1774:6;1766;1759:22;1709:2;1807:6;1796:17;;1826:207;1842:2;1837:3;1834:11;1826:207;;;1913:25;1932:5;1913:25;:::i;:::-;1899:40;;1864:1;1855:11;;;;;1965:14;;;;2005;;1826:207;;;-1:-1:-1;2053:14:1;;;2046:29;-1:-1:-1;;2088:18:1;;-1:-1:-1;2126:12:1;;;;2158;;;;948:1;941:9;902:1278;;;-1:-1:-1;2199:5:1;;321:1889;-1:-1:-1;;;;;;;;321:1889:1:o;3113:275::-;3184:2;3178:9;3249:2;3230:13;;-1:-1:-1;;3226:27:1;3214:40;;3284:18;3269:34;;3305:22;;;3266:62;3263:2;;;3331:18;;:::i;:::-;3367:2;3360:22;3158:230;;-1:-1:-1;3158:230:1:o;3393:186::-;;3486:18;3478:6;3475:30;3472:2;;;3508:18;;:::i;:::-;-1:-1:-1;3568:4:1;3549:17;;;3545:28;;3462:117::o;3584:236::-;;-1:-1:-1;;3644:17:1;;3641:2;;;-1:-1:-1;;;3684:33:1;;3740:4;3737:1;3730:15;3770:4;3691:3;3758:17;3641:2;-1:-1:-1;3812:1:1;3801:13;;3631:189::o;3825:127::-;3886:10;3881:3;3877:20;3874:1;3867:31;3917:4;3914:1;3907:15;3941:4;3938:1;3931:15

Swarm Source

ipfs://1429e1fcfcf05c33c73f22341e7312447162274e94d9fa3c0869a71d0605d235

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

Pokes boosted saving vault accounts to recalculate their balance based on the account's current vMTA balance. For example, the feeder pool vaults or the imBTC savings vault.

Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.