Contract 0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d66610 2

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x8907773201daa04d26c778ec7eaac07f7194bafc4695367ec01c451152a71a37Transfer396301162022-06-02 17:39:16361 days 11 hrs ago0xdb583b636f995ef1ef28ac96b9ba235916bd1583 IN  0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d6661029,490 FTM0.000607446845
0x02677f1139a2b8f2631e0a86fa089bcc14b4215a520a87440cfffc36a82abe7dTransfer373409142022-05-01 17:04:53393 days 11 hrs ago0xdb583b636f995ef1ef28ac96b9ba235916bd1583 IN  0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d6661014,475 FTM0.011300331287
0x1df989ca3be0448dc295ab36a94a9575b30b8fb1277f6e02aa1828edce85038aTransfer351603322022-04-03 22:19:43421 days 6 hrs ago0xdb583b636f995ef1ef28ac96b9ba235916bd1583 IN  0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666105,500 FTM0.005618728384
0xf48f9b85411330c7003a8813803f5fbc1056ec5682ea22469472545fe9f06e7bTransfer349831842022-04-01 18:57:44423 days 9 hrs ago0xdb583b636f995ef1ef28ac96b9ba235916bd1583 IN  0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d66610315 FTM0.004686933809
0x97d80154c6a07f7986fc086d896744995d0fae6317062edec6e28e8a70fb86c4Transfer324250352022-03-03 8:44:09452 days 20 hrs ago0xdb583b636f995ef1ef28ac96b9ba235916bd1583 IN  0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d66610425 FTM0.02948366376
0xcb58ba27c55961d2e02d41a02f94b2109c1a24f1a87b601d2988ff24108fabbaTransfer323092282022-03-01 22:30:06454 days 6 hrs ago0xe97a5292248c2647466222dc58563046b3e34b18 IN  0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666107,176.569063004057021 FTM0.016355153432
0x41a57bd0ef90dc822206f9fae4543797b3fc4d02148f1593bce6ebf6a818be16Transfer323037702022-03-01 20:56:24454 days 7 hrs ago0xdb583b636f995ef1ef28ac96b9ba235916bd1583 IN  0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d66610240 FTM0.010309997376
0x92dbf0547a4ecce519cae7ad02e3cffafb22fcf0067af1cd453c500284b860c0Transfer302393112022-02-07 5:27:24476 days 23 hrs agoFantom: Foundation Wallet 1 IN  0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d66610500,000 FTM0.0132642
0x396a82cc0189bcec501975e68fdf64e4f86d7f65c0d23b9fb0a2bed62390b763Transfer299104742022-02-03 20:05:34480 days 8 hrs ago0x6fce222540015290fb572c82622dc73a431cdf3f IN  0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666101 FTM0.005321420184
0xc2b8a2e134dadb4e8cadfca280a3d93a8201be5a168ec1725b8cf55b1c56f1ebTransfer270784172022-01-05 15:58:43509 days 12 hrs agoFantom: Foundation Wallet 16 IN  0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d66610500,000 FTM0.016205244537
0x50c7555c57dbe80be55055c173b5c672b225f5c72bf51f8275b1a09b22b27312Transfer267866432022-01-02 17:09:56512 days 11 hrs ago0xdb583b636f995ef1ef28ac96b9ba235916bd1583 IN  0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d66610115 FTM0.004409877831
0xf3eee0d8330315854b1e727caeb0f9938127e6c6c7e2f5b4b75f589a7eaacc9aTransfer267166142022-01-01 23:49:51513 days 4 hrs ago0xdb583b636f995ef1ef28ac96b9ba235916bd1583 IN  0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d66610905 FTM0.005409262348
0xbc0b5f57fc5cca5806f3754aa73dfb0928f8f16b097a2a35edbf8dbf76a02fa4Transfer214665772021-11-08 18:37:18567 days 10 hrs ago0xdb583b636f995ef1ef28ac96b9ba235916bd1583 IN  0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d6661088 FTM0.003715576546
0xa37e2f40c78e8eb2510cf53751bfba81a586f84b1e5906034133e0d414063e22Transfer212487962021-11-06 13:35:01569 days 15 hrs ago0xdb583b636f995ef1ef28ac96b9ba235916bd1583 IN  0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d66610122 FTM0.004470488593
0x02e375ed21673c7b9e8a887e1e6184418c26ad318b326fd39b071817ec1a8d54Transfer211747292021-11-05 19:43:33570 days 9 hrs ago0xdb583b636f995ef1ef28ac96b9ba235916bd1583 IN  0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d6661069 FTM0.005163330816
0xed4edf6bfe9ce5f13d5639888f12403c736f69223849ca889bf00c36bf0f5e99Transfer186105012021-10-08 17:14:32598 days 11 hrs agoFantom: Foundation Wallet 4 IN  0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d66610233,333 FTM0.008402402031
0xcbfd651d71d022cbda357d2de8f049425f972a846d2e21010dbb1bbc2fab8f4dTransfer177889322021-09-27 10:27:57609 days 18 hrs agoFantom: Foundation Wallet 4 IN  0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d66610233,333 FTM0.003909638424
0x717e829f88c75069677d574f1b6c3660090143d85ba5ce2c1a354239ed480152Transfer171037552021-09-15 19:54:09621 days 8 hrs ago0xd529b1894491a0a26b18939274ae8ede93e81dba IN  0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666100.01 FTM0.00763989623
0x5a3c06a17e4604f33cac7b78f08df512a933d74f6a8c3be3e76165c04bb12e56Transfer Ownersh...170134062021-09-13 20:14:44623 days 8 hrs ago0x565eb5e5b21f97ae9200d121e77d2760fff106cb IN  0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666100 FTM0.004645675462
0xc7f65fa663633f4fcc10fccd67a77cc3d28c3a0de79c49af4f8237e17821b401Withdraw Tokens86309592021-06-02 13:08:38726 days 15 hrs ago0x565eb5e5b21f97ae9200d121e77d2760fff106cb IN  0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666100 FTM0.00350732266
0x0e50e3ff8b24b57de5f8ec3a593942f3bc6d4a9b93f482254162def32a76b463Transfer Ownersh...84155042021-05-31 19:25:47728 days 9 hrs ago0xd529b1894491a0a26b18939274ae8ede93e81dba IN  0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666100 FTM0.0016572416
0x593af71533fda2a685d00a005614508df8330c1d82db66fe8df9b52d1eaec6b3Transfer Ownersh...54642562021-05-06 20:03:14753 days 8 hrs agoBeefy Finance: Deployer 2 IN  0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666100 FTM0.00003238095
0xf9beb2e28109060439f051d934ad3ce3508eaa0c385cc6f10271ea0d81c3b97f0x6080604054642052021-05-06 20:02:41753 days 8 hrs agoBeefy Finance: Deployer 2 IN  Create: BeefyTreasury0 FTM0.00051111585
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x9506db4451beb50d636a992f773518c5a2986be683773badc6a998d09c9fb224416779292022-06-30 8:46:32333 days 20 hrs ago 0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666100xdb583b636f995ef1ef28ac96b9ba235916bd158327,266 FTM
0x424faef55e11e2997dde84a5ba7cf3942045ddc733bdf422f40b7482a0ba3241396817852022-06-03 9:43:24360 days 19 hrs ago 0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666100x5ccfe839c0199e892f08c266230cfbff33a427f681,000 FTM
0xb0c6a6ec97d28b8eef03e4521366a6af1a497d8cf17e1e8b2787dcd1f5110366396137072022-06-02 12:09:02361 days 16 hrs ago 0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666100xdb583b636f995ef1ef28ac96b9ba235916bd1583315,000 FTM
0x3f8da8352ce3478f818d3ca6e041b789b02654ebebdd1d5401b1f360d9338a05396135842022-06-02 12:06:48361 days 16 hrs ago 0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666100xe7dec76d183c83b63ef72781cd40d99c130e9d7080 FTM
0x5b4fbce6d1e898e705978f2fd54e11a401d45ad7989fb8dd5f779e7d6a98cc38394863722022-05-31 19:00:06363 days 9 hrs ago 0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666100xa75209dc118df7b6541db5b7be0de9485ebaa907250 FTM
0x8108fc05ccf1bd412e58ba3fffbb5989cbbd23de44c41c05569848e1842b21cd394123252022-05-30 18:36:35364 days 10 hrs ago 0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666100xa75209dc118df7b6541db5b7be0de9485ebaa907275 FTM
0xe7668f8bb0549c24e4dfd372863e1912f921ec734b342417d3b07e873e79e7ae388838582022-05-23 14:00:17371 days 14 hrs ago 0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666100xa75209dc118df7b6541db5b7be0de9485ebaa9074,700 FTM
0x2cf46f19967965ef8cfb07fadf41fe7efe1d775e6ed957bec7dce5f925c1ba0a386007372022-05-19 17:47:31375 days 11 hrs ago 0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666100xa75209dc118df7b6541db5b7be0de9485ebaa9076,300 FTM
0x7fa43b6089e8965fdf7008d87561d4cc627443b88990dc72e064b4ce408ce923379998832022-05-10 20:40:18384 days 8 hrs ago 0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666100xa75209dc118df7b6541db5b7be0de9485ebaa9073,950 FTM
0x6f85cbb909eabd3b5c88e7cf3561eff9a5e41dee378e97858aee13390ac502f1376272182022-05-05 18:35:48389 days 10 hrs ago 0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666100xa75209dc118df7b6541db5b7be0de9485ebaa9072,900 FTM
0xc94ac4b9148abc2ea7678bc571d04fa375cdfad050eec27df06abd2596e633e0374135832022-05-02 21:42:36392 days 7 hrs ago 0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666100xa75209dc118df7b6541db5b7be0de9485ebaa90720,000 FTM
0xa21332e5fa2ed3527f3933fa5873ec7a522980beb1f19ce8975468b7420627ed373918552022-05-02 12:32:18392 days 16 hrs ago 0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666100xa75209dc118df7b6541db5b7be0de9485ebaa907250 FTM
0x7a330e2e43c714aced9a48d388a31f1fdf5b67c91a8fc729b9edd71f96684a2d373405262022-05-01 16:52:52393 days 11 hrs ago 0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666100xdb583b636f995ef1ef28ac96b9ba235916bd1583120,000 FTM
0x35b26f9f078901706b4b7bb01c52c076887d6ea03f086e0d33b399c7788f6161373347672022-05-01 14:09:43393 days 14 hrs ago 0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666100xdb583b636f995ef1ef28ac96b9ba235916bd158329,500 FTM
0x84185517ea779e5f42c0e1ceebb496b4511c4baa041e37d11030cfa59144f853356324142022-04-09 12:58:11415 days 15 hrs ago 0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666100xa75209dc118df7b6541db5b7be0de9485ebaa90737,700 FTM
0xa15a2bdb4bd6af55866fc86dafb35a4e816e6b16e9c899e5da050da4d18a7a63351588782022-04-03 21:53:34421 days 6 hrs ago 0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666100xdb583b636f995ef1ef28ac96b9ba235916bd1583130,000 FTM
0x6342e68640a207e3b7d28a93e5cc0cd24fb4b7c963b6e7f75c077b75884ba8b2351588382022-04-03 21:52:56421 days 6 hrs ago 0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666100xa75209dc118df7b6541db5b7be0de9485ebaa9079,500 FTM
0x08a2c32984076444ddeb0c719a3efe4f2737f94d7e3f119d3e3de93753bfe775349817992022-04-01 18:32:40423 days 10 hrs ago 0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666100xdb583b636f995ef1ef28ac96b9ba235916bd158370,000 FTM
0x7614ffe3297bcf3a94900bcf126bf4072b87648f79f43276ed7b5f8a94803027348968212022-03-31 18:10:57424 days 10 hrs ago 0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666100x00b5ecec31720a8d94d8127a386048fbd69c13e017,000 FTM
0x72a2d75b10de84646575b88a38a0be9be678d536109e3648821bad85e322c187347195102022-03-29 16:10:58426 days 12 hrs ago 0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666100xdb583b636f995ef1ef28ac96b9ba235916bd158362,000 FTM
0x813eb2c18da52b3cea2e4df1c92795f7b1a573eebca8824e342286afdd53fdc0343756952022-03-25 16:35:16430 days 12 hrs ago 0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666100xa75209dc118df7b6541db5b7be0de9485ebaa9077,700 FTM
0x360c3665af36e9fe1dbac94648828ce196853a5e730818ca2798b65d4543094e341118112022-03-22 13:48:34433 days 14 hrs ago 0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666100xa75209dc118df7b6541db5b7be0de9485ebaa90783,333 FTM
0x7cbca299b6d15c7d09c1aba42dc23f22beacbffb63852007d40598b5d09eb109329912562022-03-09 20:20:10446 days 8 hrs ago 0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d66610Beefy Finance: Deployer 24,000 FTM
0xf951a991fc3c4b471277a02a86a92fbb91d7a3e4f76c55c570ab185784747377325163352022-03-04 9:01:53451 days 19 hrs ago 0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666100xa75209dc118df7b6541db5b7be0de9485ebaa90725,600 FTM
0x3a21b28b1429113ee584ed5f351a2f18663cd5140fda8e8977bd4db2460af996324244652022-03-03 8:31:49452 days 20 hrs ago 0xe6cce165aa3e52b2cc55f17b1dbc6a8fe5d666100xdb583b636f995ef1ef28ac96b9ba235916bd15834,000 FTM
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BeefyTreasury

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at FtmScan.com on 2021-05-06
*/

// File: @openzeppelin/contracts/GSN/Context.sol


pragma solidity ^0.6.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


pragma solidity ^0.6.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


pragma solidity ^0.6.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
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);
}

// File: @openzeppelin/contracts/math/SafeMath.sol


pragma solidity ^0.6.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.
     */
    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.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        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.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

// File: @openzeppelin/contracts/utils/Address.sol


pragma solidity ^0.6.2;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies in extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


pragma solidity ^0.6.0;





/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20 {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with
     * a default value of 18.
     *
     * To select a different value for {decimals}, use {_setupDecimals}.
     *
     * All three of these values are immutable: they can only be set once during
     * construction.
     */
    constructor (string memory name, string memory symbol) public {
        _name = name;
        _symbol = symbol;
        _decimals = 18;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is
     * called.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view returns (uint8) {
        return _decimals;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20};
     *
     * Requirements:
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Sets {decimals} to a value other than the default one of 18.
     *
     * WARNING: This function should only be called from the constructor. Most
     * applications that interact with token contracts will not expect
     * {decimals} to ever change, and may work incorrectly if it does.
     */
    function _setupDecimals(uint8 decimals_) internal {
        _decimals = decimals_;
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}

// File: @openzeppelin/contracts/token/ERC20/SafeERC20.sol


pragma solidity ^0.6.0;




/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

// File: contracts/BIFI/BeefyTreasury.sol


pragma solidity ^0.6.12;




contract BeefyTreasury is Ownable {
    using SafeERC20 for IERC20;

    function withdrawTokens(address _token, address _to, uint256 _amount) external onlyOwner {
        IERC20(_token).safeTransfer(_to, _amount);
    }

    function withdrawFTM(address payable _to, uint256 _amount) external onlyOwner {
        _to.transfer(_amount);
    }

    receive () external payable {}
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawFTM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b6107698061007d6000396000f3fe60806040526004361061004e5760003560e01c80635e35359e1461005a578063715018a61461009f5780638da5cb5b146100b4578063d4068acd146100e5578063f2fde38b1461011e57610055565b3661005557005b600080fd5b34801561006657600080fd5b5061009d6004803603606081101561007d57600080fd5b506001600160a01b03813581169160208101359091169060400135610151565b005b3480156100ab57600080fd5b5061009d6101c2565b3480156100c057600080fd5b506100c9610264565b604080516001600160a01b039092168252519081900360200190f35b3480156100f157600080fd5b5061009d6004803603604081101561010857600080fd5b506001600160a01b038135169060200135610273565b34801561012a57600080fd5b5061009d6004803603602081101561014157600080fd5b50356001600160a01b0316610301565b6101596103f9565b6000546001600160a01b039081169116146101a9576040805162461bcd60e51b815260206004820181905260248201526000805160206106ea833981519152604482015290519081900360640190fd5b6101bd6001600160a01b03841683836103fd565b505050565b6101ca6103f9565b6000546001600160a01b0390811691161461021a576040805162461bcd60e51b815260206004820181905260248201526000805160206106ea833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b61027b6103f9565b6000546001600160a01b039081169116146102cb576040805162461bcd60e51b815260206004820181905260248201526000805160206106ea833981519152604482015290519081900360640190fd5b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156101bd573d6000803e3d6000fd5b6103096103f9565b6000546001600160a01b03908116911614610359576040805162461bcd60e51b815260206004820181905260248201526000805160206106ea833981519152604482015290519081900360640190fd5b6001600160a01b03811661039e5760405162461bcd60e51b81526004018080602001828103825260268152602001806106c46026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526101bd908490606061049f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166104fb9092919063ffffffff16565b8051909150156101bd578080602001905160208110156104be57600080fd5b50516101bd5760405162461bcd60e51b815260040180806020018281038252602a81526020018061070a602a913960400191505060405180910390fd5b606061050a8484600085610512565b949350505050565b606061051d856106bd565b61056e576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106105ad5780518252601f19909201916020918201910161058e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461060f576040519150601f19603f3d011682016040523d82523d6000602084013e610614565b606091505b5091509150811561062857915061050a9050565b8051156106385780518082602001fd5b8360405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561068257818101518382015260200161066a565b50505050905090810190601f1680156106af5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212206b858699e21f2702e6cfd59e8f649bcbcc1076a89e2e78b712d12615ba380d9264736f6c634300060c0033

Deployed ByteCode Sourcemap

32308:392:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32384:149;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32384:149:0;;;;;;;;;;;;;;;;;:::i;:::-;;2712:148;;;;;;;;;;;;;:::i;2070:79::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;2070:79:0;;;;;;;;;;;;;;32541:118;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32541:118:0;;;;;;;;:::i;3015:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3015:244:0;-1:-1:-1;;;;;3015:244:0;;:::i;32384:149::-;2292:12;:10;:12::i;:::-;2282:6;;-1:-1:-1;;;;;2282:6:0;;;:22;;;2274:67;;;;;-1:-1:-1;;;2274:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2274:67:0;;;;;;;;;;;;;;;32484:41:::1;-1:-1:-1::0;;;;;32484:27:0;::::1;32512:3:::0;32517:7;32484:27:::1;:41::i;:::-;32384:149:::0;;;:::o;2712:148::-;2292:12;:10;:12::i;:::-;2282:6;;-1:-1:-1;;;;;2282:6:0;;;:22;;;2274:67;;;;;-1:-1:-1;;;2274:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2274:67:0;;;;;;;;;;;;;;;2819:1:::1;2803:6:::0;;2782:40:::1;::::0;-1:-1:-1;;;;;2803:6:0;;::::1;::::0;2782:40:::1;::::0;2819:1;;2782:40:::1;2850:1;2833:19:::0;;-1:-1:-1;;;;;;2833:19:0::1;::::0;;2712:148::o;2070:79::-;2108:7;2135:6;-1:-1:-1;;;;;2135:6:0;2070:79;:::o;32541:118::-;2292:12;:10;:12::i;:::-;2282:6;;-1:-1:-1;;;;;2282:6:0;;;:22;;;2274:67;;;;;-1:-1:-1;;;2274:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2274:67:0;;;;;;;;;;;;;;;32630:21:::1;::::0;-1:-1:-1;;;;;32630:12:0;::::1;::::0;:21;::::1;;;::::0;32643:7;;32630:21:::1;::::0;;;32643:7;32630:12;:21;::::1;;;;;;;;;;;;;::::0;::::1;;;;3015:244:::0;2292:12;:10;:12::i;:::-;2282:6;;-1:-1:-1;;;;;2282:6:0;;;:22;;;2274:67;;;;;-1:-1:-1;;;2274:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2274:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3104:22:0;::::1;3096:73;;;;-1:-1:-1::0;;;3096:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3206:6;::::0;;3185:38:::1;::::0;-1:-1:-1;;;;;3185:38:0;;::::1;::::0;3206:6;::::1;::::0;3185:38:::1;::::0;::::1;3234:6;:17:::0;;-1:-1:-1;;;;;;3234:17:0::1;-1:-1:-1::0;;;;;3234:17:0;;;::::1;::::0;;;::::1;::::0;;3015:244::o;624:106::-;712:10;624:106;:::o;29154:177::-;29264:58;;;-1:-1:-1;;;;;29264:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29264:58:0;-1:-1:-1;;;29264:58:0;;;29237:86;;29257:5;;31883:23;31909:69;31937:4;31909:69;;;;;;;;;;;;;;;;;31917:5;-1:-1:-1;;;;;31909:27:0;;;:69;;;;;:::i;:::-;31993:17;;31883:95;;-1:-1:-1;31993:21:0;31989:224;;32135:10;32124:30;;;;;;;;;;;;;;;-1:-1:-1;32124:30:0;32116:85;;;;-1:-1:-1;;;32116:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15132:196;15235:12;15267:53;15290:6;15298:4;15304:1;15307:12;15267:22;:53::i;:::-;15260:60;15132:196;-1:-1:-1;;;;15132:196:0:o;16509:979::-;16639:12;16672:18;16683:6;16672:10;:18::i;:::-;16664:60;;;;;-1:-1:-1;;;16664:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16798:12;16812:23;16839:6;-1:-1:-1;;;;;16839:11:0;16859:8;16870:4;16839:36;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16839:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16797:78;;;;16890:7;16886:595;;;16921:10;-1:-1:-1;16914:17:0;;-1:-1:-1;16914:17:0;16886:595;17035:17;;:21;17031:439;;17298:10;17292:17;17359:15;17346:10;17342:2;17338:19;17331:44;17246:148;17441:12;17434:20;;-1:-1:-1;;;17434:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12214:422;12581:20;12620:8;;;12214:422::o

Swarm Source

ipfs://6b858699e21f2702e6cfd59e8f649bcbcc1076a89e2e78b712d12615ba380d92
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
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.