Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multi Chain
Multichain Addresses
N/ALatest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
0x61010060 | 8376450 | 316 days 4 hrs ago | IN | Create: StakedTokenTransferStrategy | 0 ETH | 0.00007035 |
Loading...
Loading
Contract Name:
StakedTokenTransferStrategy
Compiler Version
v0.8.10+commit.fc410830
Optimization Enabled:
Yes with 25000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: AGPL-3.0 pragma solidity ^0.8.10; import {IStakedToken} from '../interfaces/IStakedToken.sol'; import {IStakedTokenTransferStrategy} from '../interfaces/IStakedTokenTransferStrategy.sol'; import {ITransferStrategyBase} from '../interfaces/ITransferStrategyBase.sol'; import {TransferStrategyBase} from './TransferStrategyBase.sol'; import {GPv2SafeERC20} from '@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol'; import {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol'; /** * @title StakedTokenTransferStrategy * @notice Transfer strategy that stakes the rewards into a staking contract and transfers the staking contract token. * The underlying token must be transferred to this contract to be able to stake it on demand. * @author Aave **/ contract StakedTokenTransferStrategy is TransferStrategyBase, IStakedTokenTransferStrategy { using GPv2SafeERC20 for IERC20; IStakedToken internal immutable STAKE_CONTRACT; address internal immutable UNDERLYING_TOKEN; constructor( address incentivesController, address rewardsAdmin, IStakedToken stakeToken ) TransferStrategyBase(incentivesController, rewardsAdmin) { STAKE_CONTRACT = stakeToken; UNDERLYING_TOKEN = STAKE_CONTRACT.STAKED_TOKEN(); IERC20(UNDERLYING_TOKEN).approve(address(STAKE_CONTRACT), 0); IERC20(UNDERLYING_TOKEN).approve(address(STAKE_CONTRACT), type(uint256).max); } /// @inheritdoc TransferStrategyBase function performTransfer( address to, address reward, uint256 amount ) external override(TransferStrategyBase, ITransferStrategyBase) onlyIncentivesController returns (bool) { require(reward == address(STAKE_CONTRACT), 'REWARD_TOKEN_NOT_STAKE_CONTRACT'); STAKE_CONTRACT.stake(to, amount); return true; } /// @inheritdoc IStakedTokenTransferStrategy function renewApproval() external onlyRewardsAdmin { IERC20(UNDERLYING_TOKEN).approve(address(STAKE_CONTRACT), 0); IERC20(UNDERLYING_TOKEN).approve(address(STAKE_CONTRACT), type(uint256).max); } /// @inheritdoc IStakedTokenTransferStrategy function dropApproval() external onlyRewardsAdmin { IERC20(UNDERLYING_TOKEN).approve(address(STAKE_CONTRACT), 0); } /// @inheritdoc IStakedTokenTransferStrategy function getStakeContract() external view returns (address) { return address(STAKE_CONTRACT); } /// @inheritdoc IStakedTokenTransferStrategy function getUnderlyingToken() external view returns (address) { return UNDERLYING_TOKEN; } }
// SPDX-License-Identifier: LGPL-3.0-or-later pragma solidity 0.8.10; import {IERC20} from '../../openzeppelin/contracts/IERC20.sol'; /// @title Gnosis Protocol v2 Safe ERC20 Transfer Library /// @author Gnosis Developers /// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract. library GPv2SafeERC20 { /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts /// also when the token returns `false`. function safeTransfer( IERC20 token, address to, uint256 value ) internal { bytes4 selector_ = token.transfer.selector; // solhint-disable-next-line no-inline-assembly assembly { let freeMemoryPointer := mload(0x40) mstore(freeMemoryPointer, selector_) mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) mstore(add(freeMemoryPointer, 36), value) if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) { returndatacopy(0, 0, returndatasize()) revert(0, returndatasize()) } } require(getLastTransferResult(token), 'GPv2: failed transfer'); } /// @dev Wrapper around a call to the ERC20 function `transferFrom` that /// reverts also when the token returns `false`. function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { bytes4 selector_ = token.transferFrom.selector; // solhint-disable-next-line no-inline-assembly assembly { let freeMemoryPointer := mload(0x40) mstore(freeMemoryPointer, selector_) mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff)) mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) mstore(add(freeMemoryPointer, 68), value) if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) { returndatacopy(0, 0, returndatasize()) revert(0, returndatasize()) } } require(getLastTransferResult(token), 'GPv2: failed transferFrom'); } /// @dev Verifies that the last return was a successful `transfer*` call. /// This is done by checking that the return data is either empty, or /// is a valid ABI encoded boolean. function getLastTransferResult(IERC20 token) private view returns (bool success) { // NOTE: Inspecting previous return data requires assembly. Note that // we write the return data to memory 0 in the case where the return // data size is 32, this is OK since the first 64 bytes of memory are // reserved by Solidy as a scratch space that can be used within // assembly blocks. // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html> // solhint-disable-next-line no-inline-assembly assembly { /// @dev Revert with an ABI encoded Solidity error with a message /// that fits into 32-bytes. /// /// An ABI encoded Solidity error has the following memory layout: /// /// ------------+---------------------------------- /// byte range | value /// ------------+---------------------------------- /// 0x00..0x04 | selector("Error(string)") /// 0x04..0x24 | string offset (always 0x20) /// 0x24..0x44 | string length /// 0x44..0x64 | string value, padded to 32-bytes function revertWithMessage(length, message) { mstore(0x00, '\x08\xc3\x79\xa0') mstore(0x04, 0x20) mstore(0x24, length) mstore(0x44, message) revert(0x00, 0x64) } switch returndatasize() // Non-standard ERC20 transfer without return. case 0 { // NOTE: When the return data size is 0, verify that there // is code at the address. This is done in order to maintain // compatibility with Solidity calling conventions. // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls> if iszero(extcodesize(token)) { revertWithMessage(20, 'GPv2: not a contract') } success := 1 } // Standard ERC20 transfer returning boolean success value. case 32 { returndatacopy(0, 0, returndatasize()) // NOTE: For ABI encoding v1, any non-zero value is accepted // as `true` for a boolean. In order to stay compatible with // OpenZeppelin's `SafeERC20` library which is known to work // with the existing ERC20 implementation we care about, // make sure we return success for any non-zero return value // from the `transfer*` call. success := iszero(iszero(mload(0))) } default { revertWithMessage(31, 'GPv2: malformed transfer result') } } } }
// SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.10; /** * @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); }
// SPDX-License-Identifier: AGPL-3.0 pragma solidity ^0.8.10; interface IStakedToken { function STAKED_TOKEN() external view returns (address); function stake(address to, uint256 amount) external; function redeem(address to, uint256 amount) external; function cooldown() external; function claimRewards(address to, uint256 amount) external; }
// SPDX-License-Identifier: AGPL-3.0 pragma solidity ^0.8.10; import {IStakedToken} from '../interfaces/IStakedToken.sol'; import {ITransferStrategyBase} from './ITransferStrategyBase.sol'; /** * @title IStakedTokenTransferStrategy * @author Aave **/ interface IStakedTokenTransferStrategy is ITransferStrategyBase { /** * @dev Perform a MAX_UINT approval of AAVE to the Staked Aave contract. */ function renewApproval() external; /** * @dev Drop approval of AAVE to the Staked Aave contract in case of emergency. */ function dropApproval() external; /** * @return Staked Token contract address */ function getStakeContract() external view returns (address); /** * @return Underlying token address from the stake contract */ function getUnderlyingToken() external view returns (address); }
// SPDX-License-Identifier: AGPL-3.0 pragma solidity ^0.8.10; interface ITransferStrategyBase { event EmergencyWithdrawal( address indexed caller, address indexed token, address indexed to, uint256 amount ); /** * @dev Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation * @param to Account to transfer rewards * @param reward Address of the reward token * @param amount Amount to transfer to the "to" address parameter * @return Returns true bool if transfer logic succeeds */ function performTransfer( address to, address reward, uint256 amount ) external returns (bool); /** * @return Returns the address of the Incentives Controller */ function getIncentivesController() external view returns (address); /** * @return Returns the address of the Rewards admin */ function getRewardsAdmin() external view returns (address); /** * @dev Perform an emergency token withdrawal only callable by the Rewards admin * @param token Address of the token to withdraw funds from this contract * @param to Address of the recipient of the withdrawal * @param amount Amount of the withdrawal */ function emergencyWithdrawal( address token, address to, uint256 amount ) external; }
// SPDX-License-Identifier: AGPL-3.0 pragma solidity ^0.8.10; import {ITransferStrategyBase} from '../interfaces/ITransferStrategyBase.sol'; import {GPv2SafeERC20} from '@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol'; import {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol'; /** * @title TransferStrategyStorage * @author Aave **/ abstract contract TransferStrategyBase is ITransferStrategyBase { using GPv2SafeERC20 for IERC20; address internal immutable INCENTIVES_CONTROLLER; address internal immutable REWARDS_ADMIN; constructor(address incentivesController, address rewardsAdmin) { INCENTIVES_CONTROLLER = incentivesController; REWARDS_ADMIN = rewardsAdmin; } /** * @dev Modifier for incentives controller only functions */ modifier onlyIncentivesController() { require(INCENTIVES_CONTROLLER == msg.sender, 'CALLER_NOT_INCENTIVES_CONTROLLER'); _; } /** * @dev Modifier for reward admin only functions */ modifier onlyRewardsAdmin() { require(msg.sender == REWARDS_ADMIN, 'ONLY_REWARDS_ADMIN'); _; } /// @inheritdoc ITransferStrategyBase function getIncentivesController() external view override returns (address) { return INCENTIVES_CONTROLLER; } /// @inheritdoc ITransferStrategyBase function getRewardsAdmin() external view override returns (address) { return REWARDS_ADMIN; } /// @inheritdoc ITransferStrategyBase function performTransfer( address to, address reward, uint256 amount ) external virtual returns (bool); /// @inheritdoc ITransferStrategyBase function emergencyWithdrawal( address token, address to, uint256 amount ) external onlyRewardsAdmin { IERC20(token).safeTransfer(to, amount); emit EmergencyWithdrawal(msg.sender, token, to, amount); } }
{ "optimizer": { "enabled": true, "runs": 25000 }, "evmVersion": "london", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
[{"inputs":[{"internalType":"address","name":"incentivesController","type":"address"},{"internalType":"address","name":"rewardsAdmin","type":"address"},{"internalType":"contract IStakedToken","name":"stakeToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdrawal","type":"event"},{"inputs":[],"name":"dropApproval","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":"emergencyWithdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getIncentivesController","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardsAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakeContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnderlyingToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"reward","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"performTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renewApproval","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6101006040523480156200001257600080fd5b5060405162000df838038062000df88339810160408190526200003591620001d1565b6001600160a01b0380841660805280831660a052811660c08190526040805163312f6b8360e01b8152905163312f6b83916004808201926020929091908290030181865afa1580156200008c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b2919062000225565b6001600160a01b0390811660e081905260c05160405163095ea7b360e01b815292166004830152600060248301529063095ea7b3906044016020604051808303816000875af11580156200010a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200013091906200024c565b5060e05160c05160405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b3906044016020604051808303816000875af115801562000188573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ae91906200024c565b5050505062000270565b6001600160a01b0381168114620001ce57600080fd5b50565b600080600060608486031215620001e757600080fd5b8351620001f481620001b8565b60208501519093506200020781620001b8565b60408501519092506200021a81620001b8565b809150509250925092565b6000602082840312156200023857600080fd5b81516200024581620001b8565b9392505050565b6000602082840312156200025f57600080fd5b815180151581146200024557600080fd5b60805160a05160c05160e051610afb620002fd6000396000818161016f015281816104ab0152818161076a01526108630152600081816101490152818161023b0152818161033a0152818161047c0152818161073b0152610815015260008181610123015281816103b801528181610534015261067701526000818160c101526101970152610afb6000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063a34062511161005b578063a340625114610119578063c625544314610121578063dfd29d9e14610147578063ee719bc81461016d57600080fd5b806316beb9821461008d5780633a342acc146100b557806375d26413146100bf5780638d8e5da714610106575b600080fd5b6100a061009b366004610a60565b610193565b60405190151581526020015b60405180910390f35b6100bd6103a0565b005b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ac565b6100bd610114366004610a60565b61051c565b6100bd61065f565b7f00000000000000000000000000000000000000000000000000000000000000006100e1565b7f00000000000000000000000000000000000000000000000000000000000000006100e1565b7f00000000000000000000000000000000000000000000000000000000000000006100e1565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f43414c4c45525f4e4f545f494e43454e54495645535f434f4e54524f4c4c455260448201526064015b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146102ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5245574152445f544f4b454e5f4e4f545f5354414b455f434f4e5452414354006044820152606401610230565b6040517fadc9772e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063adc9772e90604401600060405180830381600087803b15801561037e57600080fd5b505af1158015610392573d6000803e3d6000fd5b506001979650505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4f4e4c595f524557415244535f41444d494e00000000000000000000000000006044820152606401610230565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152600060248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044015b6020604051808303816000875af11580156104f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105199190610a9c565b50565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146105bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4f4e4c595f524557415244535f41444d494e00000000000000000000000000006044820152606401610230565b6105dc73ffffffffffffffffffffffffffffffffffffffff84168383610892565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f7dc4ea712e6400e67a5abca1a983e5c420c386c19936dc120cd860b50b8e25798460405161065291815260200190565b60405180910390a4505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4f4e4c595f524557415244535f41444d494e00000000000000000000000000006044820152606401610230565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152600060248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af11580156107b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d79190610a9c565b506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016104d6565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af16108f5573d6000803e3d6000fd5b506108ff8461096b565b610965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e7366657200000000000000000000006044820152606401610230565b50505050565b60006109ab565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d80156109ea5760208114610a24576109e57f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f610972565b610a31565b823b610a1b57610a1b7f475076323a206e6f74206120636f6e74726163740000000000000000000000006014610972565b60019150610a31565b3d6000803e600051151591505b50919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a5b57600080fd5b919050565b600080600060608486031215610a7557600080fd5b610a7e84610a37565b9250610a8c60208501610a37565b9150604084013590509250925092565b600060208284031215610aae57600080fd5b81518015158114610abe57600080fd5b939250505056fea2646970667358221220a18329ab4a7cfb326dabd5c7f5778722adec53d633d7b955ca38d38f2f4607ba64736f6c634300080a00330000000000000000000000008688fef353f4940061b4893d563de1c487aa92fd0000000000000000000000002892e37624ec31cc42502f297821109700270971000000000000000000000000b85b34c58129a9a7d54149e86934ed3922b05592
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063a34062511161005b578063a340625114610119578063c625544314610121578063dfd29d9e14610147578063ee719bc81461016d57600080fd5b806316beb9821461008d5780633a342acc146100b557806375d26413146100bf5780638d8e5da714610106575b600080fd5b6100a061009b366004610a60565b610193565b60405190151581526020015b60405180910390f35b6100bd6103a0565b005b7f0000000000000000000000008688fef353f4940061b4893d563de1c487aa92fd5b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ac565b6100bd610114366004610a60565b61051c565b6100bd61065f565b7f0000000000000000000000002892e37624ec31cc42502f2978211097002709716100e1565b7f000000000000000000000000b85b34c58129a9a7d54149e86934ed3922b055926100e1565b7f000000000000000000000000e205181eb3d7415f15377f79aa7769f846ce56dd6100e1565b60007f0000000000000000000000008688fef353f4940061b4893d563de1c487aa92fd73ffffffffffffffffffffffffffffffffffffffff163314610239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f43414c4c45525f4e4f545f494e43454e54495645535f434f4e54524f4c4c455260448201526064015b60405180910390fd5b7f000000000000000000000000b85b34c58129a9a7d54149e86934ed3922b0559273ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146102ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5245574152445f544f4b454e5f4e4f545f5354414b455f434f4e5452414354006044820152606401610230565b6040517fadc9772e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018490527f000000000000000000000000b85b34c58129a9a7d54149e86934ed3922b05592169063adc9772e90604401600060405180830381600087803b15801561037e57600080fd5b505af1158015610392573d6000803e3d6000fd5b506001979650505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000002892e37624ec31cc42502f297821109700270971161461043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4f4e4c595f524557415244535f41444d494e00000000000000000000000000006044820152606401610230565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000b85b34c58129a9a7d54149e86934ed3922b0559281166004830152600060248301527f000000000000000000000000e205181eb3d7415f15377f79aa7769f846ce56dd169063095ea7b3906044015b6020604051808303816000875af11580156104f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105199190610a9c565b50565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000002892e37624ec31cc42502f29782110970027097116146105bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4f4e4c595f524557415244535f41444d494e00000000000000000000000000006044820152606401610230565b6105dc73ffffffffffffffffffffffffffffffffffffffff84168383610892565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f7dc4ea712e6400e67a5abca1a983e5c420c386c19936dc120cd860b50b8e25798460405161065291815260200190565b60405180910390a4505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000002892e37624ec31cc42502f29782110970027097116146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4f4e4c595f524557415244535f41444d494e00000000000000000000000000006044820152606401610230565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000b85b34c58129a9a7d54149e86934ed3922b0559281166004830152600060248301527f000000000000000000000000e205181eb3d7415f15377f79aa7769f846ce56dd169063095ea7b3906044016020604051808303816000875af11580156107b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d79190610a9c565b506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000b85b34c58129a9a7d54149e86934ed3922b05592811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f000000000000000000000000e205181eb3d7415f15377f79aa7769f846ce56dd169063095ea7b3906044016104d6565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af16108f5573d6000803e3d6000fd5b506108ff8461096b565b610965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e7366657200000000000000000000006044820152606401610230565b50505050565b60006109ab565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d80156109ea5760208114610a24576109e57f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f610972565b610a31565b823b610a1b57610a1b7f475076323a206e6f74206120636f6e74726163740000000000000000000000006014610972565b60019150610a31565b3d6000803e600051151591505b50919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a5b57600080fd5b919050565b600080600060608486031215610a7557600080fd5b610a7e84610a37565b9250610a8c60208501610a37565b9150604084013590509250925092565b600060208284031215610aae57600080fd5b81518015158114610abe57600080fd5b939250505056fea2646970667358221220a18329ab4a7cfb326dabd5c7f5778722adec53d633d7b955ca38d38f2f4607ba64736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000008688fef353f4940061b4893d563de1c487aa92fd0000000000000000000000002892e37624ec31cc42502f297821109700270971000000000000000000000000b85b34c58129a9a7d54149e86934ed3922b05592
-----Decoded View---------------
Arg [0] : incentivesController (address): 0x8688FEF353f4940061b4893d563de1C487Aa92Fd
Arg [1] : rewardsAdmin (address): 0x2892e37624Ec31CC42502f297821109700270971
Arg [2] : stakeToken (address): 0xb85B34C58129a9a7d54149e86934ed3922b05592
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000008688fef353f4940061b4893d563de1c487aa92fd
Arg [1] : 0000000000000000000000002892e37624ec31cc42502f297821109700270971
Arg [2] : 000000000000000000000000b85b34c58129a9a7d54149e86934ed3922b05592
Loading...
Loading
[ Download: CSV Export ]
[ 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.