More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 2,161 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim Rewards | 17009739 | 55 mins ago | IN | 0 S | 0.00679054 | ||||
Claim Rewards | 17009703 | 55 mins ago | IN | 0 S | 0.00763083 | ||||
Claim Rewards | 16967944 | 5 hrs ago | IN | 0 S | 0.00641107 | ||||
Claim Rewards | 16966170 | 5 hrs ago | IN | 0 S | 0.00605451 | ||||
Claim Rewards | 16966104 | 5 hrs ago | IN | 0 S | 0.00554971 | ||||
Claim Rewards | 16964417 | 5 hrs ago | IN | 0 S | 0.00643036 | ||||
Claim Rewards | 16945790 | 7 hrs ago | IN | 0 S | 0.006313 | ||||
Claim Rewards | 16909772 | 12 hrs ago | IN | 0 S | 0.00505571 | ||||
Claim Rewards | 16909759 | 12 hrs ago | IN | 0 S | 0.00551122 | ||||
Claim Rewards | 16883308 | 15 hrs ago | IN | 0 S | 0.00580283 | ||||
Claim Rewards | 16883277 | 15 hrs ago | IN | 0 S | 0.00622438 | ||||
Claim Rewards | 16881333 | 15 hrs ago | IN | 0 S | 0.00679054 | ||||
Claim Rewards | 16881121 | 15 hrs ago | IN | 0 S | 0.00721208 | ||||
Claim Rewards | 16878375 | 15 hrs ago | IN | 0 S | 0.00604433 | ||||
Claim Rewards | 16878350 | 15 hrs ago | IN | 0 S | 0.00649992 | ||||
Claim Rewards | 16854292 | 17 hrs ago | IN | 0 S | 0.00642976 | ||||
Claim Rewards | 16854228 | 17 hrs ago | IN | 0 S | 0.00605391 | ||||
Claim Rewards | 16843560 | 19 hrs ago | IN | 0 S | 0.00468421 | ||||
Claim Rewards | 16809163 | 22 hrs ago | IN | 0 S | 0.00622438 | ||||
Claim Rewards | 16805735 | 22 hrs ago | IN | 0 S | 0.00668822 | ||||
Claim Rewards | 16805678 | 22 hrs ago | IN | 0 S | 0.00710976 | ||||
Claim Rewards | 16784183 | 25 hrs ago | IN | 0 S | 0.00604433 | ||||
Claim Rewards | 16784136 | 25 hrs ago | IN | 0 S | 0.00649992 | ||||
Claim Rewards | 16782171 | 25 hrs ago | IN | 0 S | 0.00425837 | ||||
Claim Rewards | 16782131 | 25 hrs ago | IN | 0 S | 0.00612206 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
SiloIncentivesControllerGaugeLike
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
Yes with 200 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: BUSL-1.1pragma solidity 0.8.28;import {IERC20} from "openzeppelin5/token/ERC20/IERC20.sol";import {IGaugeLike as IGauge} from "../interfaces/IGaugeLike.sol";import {SiloIncentivesController} from "./SiloIncentivesController.sol";import {ISiloIncentivesController} from "./interfaces/ISiloIncentivesController.sol";/// @dev Silo incentives controller that can be used as a gauge in the Gauge hook receivercontract SiloIncentivesControllerGaugeLike is SiloIncentivesController, IGauge {/// @notice Silo share tokenaddress public immutable SHARE_TOKEN;/// @notice Whether the gauge is killed/// @dev This flag is not used in the SiloIncentivesController, but it is used in the Gauge hook receiver./// It was added for a backward compatibility with gauges.bool internal _isKilled;/// @param _owner The owner of the incentives controller/// @param _notifier The notifier (expected to be a hook receiver address)/// @param _siloShareToken The share token that is incentivizedconstructor(address _owner,address _notifier,address _siloShareToken
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)pragma solidity ^0.8.20;/*** @dev Interface of the ERC-20 standard as defined in the ERC.*/interface IERC20 {/*** @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);/*** @dev Returns the value of tokens in existence.*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.5.0;interface IGaugeLike {event GaugeKilled();event GaugeUnKilled();error EmptyShareToken();function afterTokenTransfer(address _sender,uint256 _senderBalance,address _recipient,uint256 _recipientBalance,uint256 _totalSupply,uint256 _amount) external;/// @notice Kills the gaugefunction killGauge() external;/// @notice Un kills the gaugefunction unkillGauge() external;// solhint-disable func-name-mixedcasefunction share_token() external view returns (address);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: BUSL-1.1pragma solidity 0.8.28;import {SafeERC20} from "openzeppelin5/token/ERC20/utils/SafeERC20.sol";import {IERC20} from "openzeppelin5/token/ERC20/IERC20.sol";import {EnumerableSet} from "openzeppelin5/utils/structs/EnumerableSet.sol";import {Strings} from "openzeppelin5/utils/Strings.sol";import {ISiloIncentivesController} from "./interfaces/ISiloIncentivesController.sol";import {BaseIncentivesController} from "./base/BaseIncentivesController.sol";import {DistributionTypes} from "./lib/DistributionTypes.sol";/*** @title SiloIncentivesController* @notice Distributor contract for rewards to the Aave protocol, using a staked token as rewards asset.* The contract stakes the rewards before redistributing them to the Aave protocol participants.* The reference staked token implementation is at https://github.com/aave/aave-stake-v2* @author Aave*/contract SiloIncentivesController is BaseIncentivesController {using EnumerableSet for EnumerableSet.Bytes32Set;using SafeERC20 for IERC20;/// @param _owner address of wallet that can manage the storage/// @param _notifier is contract with IERC20 interface with users balances, based based on which/// rewards distribution is calculated
1234567891011121314151617181920212223242526// SPDX-License-Identifier: agpl-3.0pragma solidity 0.8.28;import {IDistributionManager} from "./IDistributionManager.sol";import {DistributionTypes} from "../lib/DistributionTypes.sol";interface ISiloIncentivesController is IDistributionManager {event ClaimerSet(address indexed user, address indexed claimer);event IncentivesProgramCreated(string name);event IncentivesProgramUpdated(string name);event RewardsAccrued(address indexed user,address indexed rewardToken,string indexed programName,uint256 amount);event RewardsClaimed(address indexed user,address indexed to,address indexed rewardToken,bytes32 programId,address claimer,uint256 amount);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/utils/SafeERC20.sol)pragma solidity ^0.8.20;import {IERC20} from "../IERC20.sol";import {IERC1363} from "../../../interfaces/IERC1363.sol";import {Address} from "../../../utils/Address.sol";/*** @title SafeERC20* @dev Wrappers around ERC-20 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 Address for address;/*** @dev An operation with an ERC-20 token failed.*/error SafeERC20FailedOperation(address token);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (utils/structs/EnumerableSet.sol)// This file was procedurally generated from scripts/generate/templates/EnumerableSet.js.pragma solidity ^0.8.20;/*** @dev Library for managing* https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive* types.** Sets have the following properties:** - Elements are added, removed, and checked for existence in constant time* (O(1)).* - Elements are enumerated in O(n). No guarantees are made on the ordering.** ```solidity* contract Example {* // Add the library methods* using EnumerableSet for EnumerableSet.AddressSet;** // Declare a set state variable* EnumerableSet.AddressSet private mySet;* }* ```
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)pragma solidity ^0.8.20;import {Math} from "./math/Math.sol";import {SignedMath} from "./math/SignedMath.sol";/*** @dev String operations.*/library Strings {bytes16 private constant HEX_DIGITS = "0123456789abcdef";uint8 private constant ADDRESS_LENGTH = 20;/*** @dev The `value` string doesn't fit in the specified `length`.*/error StringsInsufficientHexLength(uint256 value, uint256 length);/*** @dev Converts a `uint256` to its ASCII `string` decimal representation.*/function toString(uint256 value) internal pure returns (string memory) {unchecked {uint256 length = Math.log10(value) + 1;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: agpl-3.0pragma solidity 0.8.28;import {IERC20} from "openzeppelin5/token/ERC20/IERC20.sol";import {EnumerableSet} from "openzeppelin5/utils/structs/EnumerableSet.sol";import {DistributionTypes} from "../lib/DistributionTypes.sol";import {DistributionManager} from "./DistributionManager.sol";import {ISiloIncentivesController} from "../interfaces/ISiloIncentivesController.sol";/*** @title BaseIncentivesController* @notice Abstract contract template to build Distributors contracts for ERC20 rewards to protocol participants* @author Aave*/abstract contract BaseIncentivesController is DistributionManager, ISiloIncentivesController {using EnumerableSet for EnumerableSet.Bytes32Set;mapping(address user => mapping(bytes32 programId => uint256 unclaimedRewards)) internal _usersUnclaimedRewards;// this mapping allows whitelisted addresses to claim on behalf of others// useful for contracts that hold tokens to be rewarded but don't have any native logic to claim Liquidity Mining// rewardsmapping(address user => address claimer) internal _authorizedClaimers;modifier onlyAuthorizedClaimers(address claimer, address user) {
1234567891011121314151617181920212223// SPDX-License-Identifier: agpl-3.0pragma solidity 0.8.28;library DistributionTypes {struct IncentivesProgramCreationInput {string name;address rewardToken;uint104 emissionPerSecond;uint40 distributionEnd;}struct AssetConfigInput {uint104 emissionPerSecond;uint256 totalStaked;address underlyingAsset;}struct UserStakeInput {address underlyingAsset;uint256 stakedByUser;uint256 totalStaked;}}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: agpl-3.0pragma solidity 0.8.28;import {DistributionTypes} from "../lib/DistributionTypes.sol";interface IDistributionManager {struct IncentivesProgram {uint256 index;address rewardToken; // can't be updated after creationuint104 emissionPerSecond; // configured by owneruint40 lastUpdateTimestamp;uint40 distributionEnd; // configured by ownermapping(address user => uint256 userIndex) users;}struct IncentiveProgramDetails {uint256 index;address rewardToken;uint104 emissionPerSecond;uint40 lastUpdateTimestamp;uint40 distributionEnd;}struct AccruedRewards {uint256 amount;bytes32 programId;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1363.sol)pragma solidity ^0.8.20;import {IERC20} from "./IERC20.sol";import {IERC165} from "./IERC165.sol";/*** @title IERC1363* @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].** Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract* after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.*/interface IERC1363 is IERC20, IERC165 {/** Note: the ERC-165 identifier for this interface is 0xb0202a11.* 0xb0202a11 ===* bytes4(keccak256('transferAndCall(address,uint256)')) ^* bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^* bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^* bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^* bytes4(keccak256('approveAndCall(address,uint256)')) ^* bytes4(keccak256('approveAndCall(address,uint256,bytes)'))*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)pragma solidity ^0.8.20;import {Errors} from "./Errors.sol";/*** @dev Collection of functions related to the address type*/library Address {/*** @dev There's no code at `target` (it is not a contract).*/error AddressEmptyCode(address target);/*** @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://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)pragma solidity ^0.8.20;import {Panic} from "../Panic.sol";import {SafeCast} from "./SafeCast.sol";/*** @dev Standard math utilities missing in the Solidity language.*/library Math {enum Rounding {Floor, // Toward negative infinityCeil, // Toward positive infinityTrunc, // Toward zeroExpand // Away from zero}/*** @dev Returns the addition of two unsigned integers, with an success flag (no overflow).*/function tryAdd(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {unchecked {uint256 c = a + b;if (c < a) return (false, 0);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)pragma solidity ^0.8.20;/*** @dev Standard signed math utilities missing in the Solidity language.*/library SignedMath {/*** @dev Returns the largest of two signed numbers.*/function max(int256 a, int256 b) internal pure returns (int256) {return a > b ? a : b;}/*** @dev Returns the smallest of two signed numbers.*/function min(int256 a, int256 b) internal pure returns (int256) {return a < b ? a : b;}/*** @dev Returns the average of two signed numbers without overflow.* The result is rounded towards zero.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: agpl-3.0pragma solidity 0.8.28;import {IERC20} from "openzeppelin5/token/ERC20/IERC20.sol";import {Ownable2Step, Ownable} from "openzeppelin5/access/Ownable2Step.sol";import {EnumerableSet} from "openzeppelin5/utils/structs/EnumerableSet.sol";import {ISiloIncentivesController} from "../interfaces/ISiloIncentivesController.sol";import {IDistributionManager} from "../interfaces/IDistributionManager.sol";import {DistributionTypes} from "../lib/DistributionTypes.sol";import {TokenHelper} from "../../lib/TokenHelper.sol";/*** @title DistributionManager* @notice Accounting contract to manage multiple staking distributions*/contract DistributionManager is IDistributionManager, Ownable2Step {using EnumerableSet for EnumerableSet.Bytes32Set;EnumerableSet.Bytes32Set internal _incentivesProgramIds;mapping(bytes32 => IncentivesProgram) public incentivesPrograms;/// @dev notifier is contract with IERC20 interface with users balances, based based on which/// rewards distribution is calculated
123456// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)pragma solidity ^0.8.20;import {IERC20} from "../token/ERC20/IERC20.sol";
123456// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)pragma solidity ^0.8.20;import {IERC165} from "../utils/introspection/IERC165.sol";
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;/*** @dev Collection of common custom errors used in multiple contracts** IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.* It is recommended to avoid relying on the error API for critical functionality.*/library Errors {/*** @dev The ETH balance of the account is not enough to perform the operation.*/error InsufficientBalance(uint256 balance, uint256 needed);/*** @dev A call to an address target failed. The target may have reverted.*/error FailedCall();/*** @dev The deployment failed.*/error FailedDeployment();}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;/*** @dev Helper library for emitting standardized panic codes.** ```solidity* contract Example {* using Panic for uint256;** // Use any of the declared internal constants* function foo() { Panic.GENERIC.panic(); }** // Alternatively* function foo() { Panic.panic(Panic.GENERIC); }* }* ```** Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil].*/// slither-disable-next-line unused-statelibrary Panic {/// @dev generic / unspecified erroruint256 internal constant GENERIC = 0x00;/// @dev used by the assert() builtin
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SafeCast.sol)// This file was procedurally generated from scripts/generate/templates/SafeCast.js.pragma solidity ^0.8.20;/*** @dev Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow* checks.** Downcasting from uint256/int256 in Solidity does not revert on overflow. This can* easily result in undesired exploitation or bugs, since developers usually* assume that overflows raise errors. `SafeCast` restores this intuition by* reverting the transaction when such 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 SafeCast {/*** @dev Value doesn't fit in an uint of `bits` size.*/error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);/*** @dev An int value doesn't fit in an uint of `bits` size.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable2Step.sol)pragma solidity ^0.8.20;import {Ownable} from "./Ownable.sol";/*** @dev Contract module which provides access control mechanism, where* there is an account (an owner) that can be granted exclusive access to* specific functions.** This extension of the {Ownable} contract includes a two-step mechanism to transfer* ownership, where the new owner must call {acceptOwnership} in order to replace the* old one. This can help prevent common mistakes, such as transfers of ownership to* incorrect accounts, or to contracts that are unable to interact with the* permission system.** The initial owner is specified at deployment time in the constructor for `Ownable`. This* can later be changed with {transferOwnership} and {acceptOwnership}.** This module is used through inheritance. It will make available all functions* from parent (Ownable).*/abstract contract Ownable2Step is Ownable {address private _pendingOwner;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: BUSL-1.1pragma solidity ^0.8.28;import {IERC20Metadata} from "openzeppelin5/token/ERC20/extensions/IERC20Metadata.sol";import {IsContract} from "./IsContract.sol";library TokenHelper {uint256 private constant _BYTES32_SIZE = 32;error TokenIsNotAContract();function assertAndGetDecimals(address _token) internal view returns (uint256) {(bool hasMetadata, bytes memory data) =_tokenMetadataCall(_token, abi.encodeCall(IERC20Metadata.decimals, ()));// decimals() is optional in the ERC20 standard, so if metadata is not accessible// we assume there are no decimals and use 0.if (!hasMetadata) {return 0;}return abi.decode(data, (uint8));}/// @dev Returns the symbol for the provided ERC20 token.
12345678910111213141516171819202122232425// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol)pragma solidity ^0.8.20;/*** @dev Interface of the ERC-165 standard, as defined in the* https://eips.ethereum.org/EIPS/eip-165[ERC].** Implementers can declare support of contract interfaces, which can then be* queried by others ({ERC165Checker}).** For an implementation, see {ERC165}.*/interface IERC165 {/*** @dev Returns true if this contract implements the interface defined by* `interfaceId`. See the corresponding* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]* to learn more about how these ids are created.** This function call must use less than 30 000 gas.*/function supportsInterface(bytes4 interfaceId) external view returns (bool);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)pragma solidity ^0.8.20;import {Context} from "../utils/Context.sol";/*** @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.** The initial owner is set to the address provided by the deployer. 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.*/abstract contract Ownable is Context {address private _owner;/*** @dev The caller account is not authorized to perform an operation.*/error OwnableUnauthorizedAccount(address account);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)pragma solidity ^0.8.20;import {IERC20} from "../IERC20.sol";/*** @dev Interface for the optional metadata functions from the ERC-20 standard.*/interface IERC20Metadata is IERC20 {/*** @dev Returns the name of the token.*/function name() external view returns (string memory);/*** @dev Returns the symbol of the token.*/function symbol() external view returns (string memory);/*** @dev Returns the decimals places of the token.*/function decimals() external view returns (uint8);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: BUSL-1.1pragma solidity ^0.8.24;library IsContract {/*** @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** Furthermore, `isContract` will also return true if the target contract within* the same transaction is already scheduled for destruction by `SELFDESTRUCT`,* which only has an effect at the end of a transaction.* ====** [IMPORTANT]
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)pragma solidity ^0.8.20;/*** @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 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) {return msg.sender;}function _msgData() internal view virtual returns (bytes calldata) {return msg.data;}function _contextSuffixLength() internal view virtual returns (uint256) {return 0;
1234567891011121314151617181920212223242526{"remappings": ["forge-std/=gitmodules/forge-std/src/","silo-foundry-utils/=gitmodules/silo-foundry-utils/contracts/","properties/=gitmodules/crytic/properties/contracts/","silo-core/=silo-core/","silo-oracles/=silo-oracles/","silo-vaults/=silo-vaults/","ve-silo/=ve-silo/","@openzeppelin/=gitmodules/openzeppelin-contracts-5/contracts/","morpho-blue/=gitmodules/morpho-blue/src/","openzeppelin5/=gitmodules/openzeppelin-contracts-5/contracts/","openzeppelin5-upgradeable/=gitmodules/openzeppelin-contracts-upgradeable-5/contracts/","chainlink/=gitmodules/chainlink/contracts/src/","chainlink-ccip/=gitmodules/chainlink-ccip/contracts/src/","uniswap/=gitmodules/uniswap/","@uniswap/v3-core/=gitmodules/uniswap/v3-core/","balancer-labs/v2-solidity-utils/=external/balancer-v2-monorepo/pkg/solidity-utils/contracts/","balancer-labs/v2-interfaces/=external/balancer-v2-monorepo/pkg/interfaces/contracts/","balancer-labs/v2-liquidity-mining/=external/balancer-v2-monorepo/pkg/liquidity-mining/contracts/","pyth-sdk-solidity/=gitmodules/pyth-sdk-solidity/target_chains/ethereum/sdk/solidity/","@balancer-labs/=node_modules/@balancer-labs/","@ensdomains/=node_modules/@ensdomains/","@openzeppelin/contracts-upgradeable/=gitmodules/openzeppelin-contracts-upgradeable-5/contracts/","@openzeppelin/contracts/=gitmodules/openzeppelin-contracts-5/contracts/","@solidity-parser/=node_modules/prettier-plugin-solidity/node_modules/@solidity-parser/",
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_notifier","type":"address"},{"internalType":"address","name":"_siloShareToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[],"name":"ClaimerUnauthorized","type":"error"},{"inputs":[],"name":"DifferentRewardsTokens","type":"error"},{"inputs":[],"name":"EmptyShareToken","type":"error"},{"inputs":[],"name":"FailedCall","type":"error"},{"inputs":[],"name":"IncentivesProgramAlreadyExists","type":"error"},{"inputs":[],"name":"IncentivesProgramNotFound","type":"error"},{"inputs":[],"name":"IndexOverflowAtEmissionsPerSecond","type":"error"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"InsufficientBalance","type":"error"},{"inputs":[],"name":"InvalidConfiguration","type":"error"},{"inputs":[],"name":"InvalidDistributionEnd","type":"error"},{"inputs":[],"name":"InvalidIncentivesProgramName","type":"error"},{"inputs":[],"name":"InvalidRewardToken","type":"error"},{"inputs":[],"name":"InvalidToAddress","type":"error"},{"inputs":[],"name":"InvalidUserAddress","type":"error"},{"inputs":[],"name":"OnlyNotifier","type":"error"},{"inputs":[],"name":"OnlyNotifierOrOwner","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"name":"StringsInsufficientHexLength","type":"error"},{"inputs":[],"name":"TooLongProgramName","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"emission","type":"uint256"}],"name":"AssetConfigUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"AssetIndexUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"claimer","type":"address"}],"name":"ClaimerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"incentivesProgram","type":"string"},{"indexed":false,"internalType":"uint256","name":"newDistributionEnd","type":"uint256"}],"name":"DistributionEndUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"GaugeKilled","type":"event"},{"anonymous":false,"inputs":[],"name":"GaugeUnKilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"name","type":"string"}],"name":"IncentivesProgramCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"incentivesProgram","type":"string"},{"indexed":false,"internalType":"uint256","name":"newIndex","type":"uint256"}],"name":"IncentivesProgramIndexUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"name","type":"string"}],"name":"IncentivesProgramUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"rewardToken","type":"address"},{"indexed":true,"internalType":"string","name":"programName","type":"string"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsAccrued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"address","name":"rewardToken","type":"address"},{"indexed":false,"internalType":"bytes32","name":"programId","type":"bytes32"},{"indexed":false,"internalType":"address","name":"claimer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"string","name":"incentivesProgram","type":"string"},{"indexed":false,"internalType":"uint256","name":"newIndex","type":"uint256"}],"name":"UserIndexUpdated","type":"event"},{"inputs":[],"name":"NOTIFIER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRECISION","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SHARE_TOKEN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TEN_POW_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"uint256","name":"_senderBalance","type":"uint256"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_recipientBalance","type":"uint256"},{"internalType":"uint256","name":"_totalSupply","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"afterTokenTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"string[]","name":"_programNames","type":"string[]"}],"name":"claimRewards","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32","name":"programId","type":"bytes32"},{"internalType":"address","name":"rewardToken","type":"address"}],"internalType":"struct IDistributionManager.AccruedRewards[]","name":"accruedRewards","type":"tuple[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"claimRewards","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32","name":"programId","type":"bytes32"},{"internalType":"address","name":"rewardToken","type":"address"}],"internalType":"struct IDistributionManager.AccruedRewards[]","name":"accruedRewards","type":"tuple[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"string[]","name":"_programNames","type":"string[]"}],"name":"claimRewardsOnBehalf","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32","name":"programId","type":"bytes32"},{"internalType":"address","name":"rewardToken","type":"address"}],"internalType":"struct IDistributionManager.AccruedRewards[]","name":"accruedRewards","type":"tuple[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"address","name":"rewardToken","type":"address"},{"internalType":"uint104","name":"emissionPerSecond","type":"uint104"},{"internalType":"uint40","name":"distributionEnd","type":"uint40"}],"internalType":"struct DistributionTypes.IncentivesProgramCreationInput","name":"_incentivesProgramInput","type":"tuple"}],"name":"createIncentivesProgram","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllProgramsNames","outputs":[{"internalType":"string[]","name":"programsNames","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getClaimer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_incentivesProgram","type":"string"}],"name":"getDistributionEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_programName","type":"string"}],"name":"getProgramId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_programId","type":"bytes32"}],"name":"getProgramName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"string[]","name":"_programNames","type":"string[]"}],"name":"getRewardsBalance","outputs":[{"internalType":"uint256","name":"unclaimedRewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"string","name":"_programName","type":"string"}],"name":"getRewardsBalance","outputs":[{"internalType":"uint256","name":"unclaimedRewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"string","name":"_incentivesProgram","type":"string"}],"name":"getUserData","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"string","name":"_programName","type":"string"}],"name":"getUserUnclaimedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenToDistribute","type":"address"},{"internalType":"uint104","name":"_amount","type":"uint104"}],"name":"immediateDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_incentivesProgram","type":"string"}],"name":"incentivesProgram","outputs":[{"components":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"rewardToken","type":"address"},{"internalType":"uint104","name":"emissionPerSecond","type":"uint104"},{"internalType":"uint40","name":"lastUpdateTimestamp","type":"uint40"},{"internalType":"uint40","name":"distributionEnd","type":"uint40"}],"internalType":"struct IDistributionManager.IncentiveProgramDetails","name":"details","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"incentivesPrograms","outputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"rewardToken","type":"address"},{"internalType":"uint104","name":"emissionPerSecond","type":"uint104"},{"internalType":"uint40","name":"lastUpdateTimestamp","type":"uint40"},{"internalType":"uint40","name":"distributionEnd","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"is_killed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"killGauge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardToken","type":"address"}],"name":"rescueRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"address","name":"_caller","type":"address"}],"name":"setClaimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_incentivesProgram","type":"string"},{"internalType":"uint40","name":"_distributionEnd","type":"uint40"}],"name":"setDistributionEnd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"share_token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unkillGauge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_incentivesProgram","type":"string"},{"internalType":"uint40","name":"_distributionEnd","type":"uint40"},{"internalType":"uint104","name":"_emissionPerSecond","type":"uint104"}],"name":"updateIncentivesProgram","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c060405234801561000f575f5ffd5b5060405161325338038061325383398101604081905261002e9161013a565b828281818181816001600160a01b03811661006257604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61006b816100b4565b506001600160a01b03908116608052861694506100a093505050505760405163a5c9497760e01b815260040160405180910390fd5b6001600160a01b031660a0525061017a9050565b600180546001600160a01b03191690556100cd816100d0565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114610135575f5ffd5b919050565b5f5f5f6060848603121561014c575f5ffd5b6101558461011f565b92506101636020850161011f565b91506101716040850161011f565b90509250925092565b60805160a0516130796101da5f395f8181610206015281816102470152818161065001528181610dad01528181611031015281816115f4015261168101525f81816103b5015281816105e801528181610cbe0152611ca101526130795ff3fe608060405234801561000f575f5ffd5b50600436106101fd575f3560e01c8063ab8f094511610114578063cfc26237116100a9578063ef5cfb8c11610079578063ef5cfb8c1461057c578063f2fde38b1461058f578063f5ba4750146105a2578063f5cf673b146105b5578063fb71aec5146105c8575f5ffd5b8063cfc26237146104b1578063d34fb26714610550578063e30c397814610558578063e7b8b9c414610569575f5ffd5b8063bec1e022116100e4578063bec1e02214610465578063c1616f6914610478578063cc0801641461048b578063cd72a4bf1461049e575f5ffd5b8063ab8f094514610424578063b5a890651461042c578063b90817f21461043f578063bbdc013b14610452575f5ffd5b806379ba5097116101955780639c868ac0116101655780639c868ac01461039a5780639f2e6a0c146103b0578063a5eb3f0d146103d7578063a7b800dd146103f7578063aaf5eb681461040a575f5ffd5b806379ba5097146102fc57806382794f39146103045780638ba2c3c8146103775780638da5cb5b1461038a575f5ffd5b80636f564e7d116101d05780636f564e7d146102a1578063711ec9ac146102c1578063715018a6146102c957806374d945ec146102d1575f5ffd5b80631d7e3556146102015780632ad87c6f146102455780632e953c211461026b57806358703bed14610280575b5f5ffd5b6102287f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b7f0000000000000000000000000000000000000000000000000000000000000000610228565b61027e610279366004612776565b6105dd565b005b61029361028e3660046127ee565b6107ed565b60405190815260200161023c565b6102b46102af36600461283c565b6108f7565b60405161023c9190612881565b610293610929565b61027e610938565b6102286102df366004612893565b6001600160a01b039081165f908152600660205260409020541690565b61027e61094b565b6103176103123660046128e9565b610994565b60405161023c91905f60a0820190508251825260018060a01b0360208401511660208301526001600160681b03604084015116604083015264ffffffffff606084015116606083015264ffffffffff608084015116608083015292915050565b610293610385366004612927565b610a72565b5f546001600160a01b0316610228565b60075460ff16604051901515815260200161023c565b6102287f000000000000000000000000000000000000000000000000000000000000000081565b6103ea6103e53660046127ee565b610adf565b60405161023c9190612968565b610293610405366004612a91565b610b35565b610412601281565b60405160ff909116815260200161023c565b61027e610b80565b61029361043a366004612927565b610bbf565b61027e61044d366004612893565b610c2e565b61027e610460366004612ac2565b610cb3565b61027e610473366004612b2a565b610d11565b61027e610486366004612b8a565b610ecc565b610293610499366004612927565b610f2d565b61027e6104ac366004612c27565b610f95565b61050b6104bf36600461283c565b60046020525f908152604090208054600182015460029092015490916001600160a01b0316906001600160681b0381169064ffffffffff600160681b8204811691600160901b90041685565b604080519586526001600160a01b0390941660208601526001600160681b039092169284019290925264ffffffffff918216606084015216608082015260a00161023c565b61027e61112d565b6001546001600160a01b0316610228565b6102936105773660046128e9565b611169565b6103ea61058a366004612893565b6111d1565b61027e61059d366004612893565b611216565b6103ea6105b0366004612c76565b611286565b61027e6105c3366004612cd2565b611347565b6105d06113a5565b60405161023c9190612cfa565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061062057505f546001600160a01b03163314155b1561063e5760405163d3b03ee160e01b815260040160405180910390fd5b6001600160681b038116156107e9575f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106ce9190612d5d565b90505f6106da84611462565b5f8181526004602052604090209091506106f482846114dd565b506002810180544264ffffffffff818116600160901b90810264ffffffffff60901b1985161790945592820492909216916001600160681b039091169061073d90600190612d88565b6002840180546001600160901b031916600160681b64ffffffffff93909316929092026001600160681b031916919091176001600160681b03881617905561078584866114dd565b50600292909201805469ffffffffffffffffffff60681b1916600160901b64ffffffffff9384160264ffffffffff60681b191617600160681b429390931692909202919091176001600160681b0319166001600160681b0390921691909117905550505b5050565b5f5f5f5f6107fa876115f0565b90925090505f5b858110156108ec575f61086a88888481811061081f5761081f612d9b565b90506020028101906108319190612daf565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610b3592505050565b5f818152600460205260409020600101549091506001600160a01b03908116908616610898578095506108ca565b806001600160a01b0316866001600160a01b0316146108ca576040516305ff3f2d60e41b815260040160405180910390fd5b6108d68a838787611706565b6108e09088612df1565b96505050600101610801565b505050509392505050565b60606109238260405160200161090f91815260200190565b604051602081830303815290604052611748565b92915050565b6109356012600a612ee7565b81565b6109406117c6565b6109495f6117f2565b565b60015433906001600160a01b031681146109885760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b610991816117f2565b50565b6040805160a0810182525f808252602082018190529181018290526060810182905260808101919091525f6109fd84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610b3592505050565b6040805160a0810182525f838152600460208181528483208054855260018101546001600160a01b031682860152600201546001600160681b0381169585019590955264ffffffffff600160681b860481166060860152959092529052600160901b9091049091166080820152949350505050565b5f5f610ab284848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610b3592505050565b6001600160a01b0386165f90815260056020908152604080832093835292905220549150505b9392505050565b60606001600160a01b038416610b0857604051638aa3a72f60e01b815260040160405180910390fd5b5f610b13848461180b565b9050610b1f338261189c565b9150610b2d33338785611985565b509392505050565b5f81515f03610b57576040516302d7eecb60e61b815260040160405180910390fd5b81604051602001610b689190612f0c565b60405160208183030381529060405261092390612f17565b610b886117c6565b6007805460ff191660011790556040517f1cd942681240393874c94d43d81f6d2be3e0a1f94e200f58cdb151773cbec7ba905f90a1565b5f5f610bff84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610b3592505050565b5f9081526004602090815260408083206001600160a01b03891684526003019091529020549150509392505050565b610c366117c6565b6040516370a0823160e01b81523060048201526109919033906001600160a01b038416906370a0823190602401602060405180830381865afa158015610c7e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ca29190612d5d565b6001600160a01b0384169190611c3f565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cfb5760405162f09cf360e01b815260040160405180910390fd5b610d09868686868686611c96565b505050505050565b610d196117c6565b428264ffffffffff161015610d4157604051636e03f20160e11b815260040160405180910390fd5b5f610d8085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610b3592505050565b9050610d8d600282611dc9565b610daa57604051630a96b47560e01b815260040160405180910390fd5b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e07573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e2b9190612d5d565b9050610e3782826114dd565b505f8281526004602052604090819020600201805476ffffffffff0000000000ffffffffffffffffffffffffff1916600160901b64ffffffffff8816026001600160681b031916176001600160681b038616179055517fce209946668ea0ad6199b320ade5271adc93d0c1083851b571b990f3e0260f1290610ebc9088908890612f62565b60405180910390a1505050505050565b610ed46117c6565b80515160201015610ef8576040516310b47cc360e01b815260040160405180910390fd5b42816060015164ffffffffff161015610f2457604051636e03f20160e11b815260040160405180910390fd5b61099181611de0565b5f5f610f6d84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610b3592505050565b90505f5f610f7a876115f0565b91509150610f8a87848484611706565b979650505050505050565b610f9d6117c6565b428164ffffffffff161015610fc557604051636e03f20160e11b815260040160405180910390fd5b5f61100484848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610b3592505050565b9050611011600282611dc9565b61102e57604051630a96b47560e01b815260040160405180910390fd5b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561108b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110af9190612d5d565b90506110bb82826114dd565b505f8281526004602052604090819020600201805464ffffffffff60901b1916600160901b64ffffffffff871602179055517f58e6e5fdc9bafcdde90e850e8776b427a5a0e26e6c86f28a3c9c1f18018761189061111e90879087908790612f75565b60405180910390a15050505050565b6111356117c6565b6007805460ff191690556040517f2bb961d4f48d79d94b84e7017d12533eff7562d60f9fcbdc7784646269c1ec21905f90a1565b5f5f6111a984848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610b3592505050565b5f90815260046020526040902060020154600160901b900464ffffffffff1691505092915050565b60606001600160a01b0382166111fa57604051638aa3a72f60e01b815260040160405180910390fd5b61120333611f09565b905061121133338484611985565b919050565b61121e6117c6565b600180546001600160a01b0383166001600160a01b0319909116811790915561124e5f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6001600160a01b038085165f90815260066020526040902054606091339187911682146112c557604051620bb58b60e51b815260040160405180910390fd5b86866001600160a01b0382166112ee57604051630702b3d960e41b815260040160405180910390fd5b6001600160a01b03811661131557604051638aa3a72f60e01b815260040160405180910390fd5b5f611320888861180b565b905061132c8a8261189c565b955061133a338b8b89611985565b5050505050949350505050565b61134f6117c6565b6001600160a01b038281165f8181526006602052604080822080546001600160a01b0319169486169485179055517f4925eafc82d0c4d67889898eeed64b18488ab19811e61620f387026dec126a289190a35050565b60605f6113b26002611f1e565b519050806001600160401b038111156113cd576113cd6129cc565b60405190808252806020026020018201604052801561140057816020015b60608152602001906001900390816113eb5790505b5091505f5b8181101561145d5761143861141a6002611f1e565b828151811061142b5761142b612d9b565b60200260200101516108f7565b83828151811061144a5761144a612d9b565b6020908102919091010152600101611405565b505090565b5f5f61146d83611f2a565b905061147881610b35565b5f81815260046020526040812060020154919350600160681b90910464ffffffffff1690036114d757604080516080810182525f91810182905260608101919091528181526001600160a01b03841660208201526114d581611de0565b505b50919050565b5f82815260046020526040812080546002909101546001600160681b0381169064ffffffffff600160681b8204811691600160901b900416428290036115295783945050505050610923565b5f611537858585858b611f40565b90508481146115b7575f888152600460205260409020818155600201805464ffffffffff60681b1916600160681b4264ffffffffff16021790557fbcaf32358137afa5170f844d4e02a1b3013677faba70d948cc705ce0a383058461159b896108f7565b826040516115aa929190612f9f565b60405180910390a1610f8a565b5f888152600460205260409020600201805464ffffffffff60681b1916600160681b4264ffffffffff1602179055979650505050505050565b5f807f00000000000000000000000000000000000000000000000000000000000000006040516370a0823160e01b81526001600160a01b03858116600483015291909116906370a0823190602401602060405180830381865afa158015611659573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061167d9190612d5d565b91507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116db573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116ff9190612d5d565b9050915091565b6001600160a01b0384165f90815260056020908152604080832086845290915290205461173584868585611fd6565b61173f9082612df1565b95945050505050565b80516060905f5b818110156114d55783818151811061176957611769612d9b565b01602001516001600160f81b031916156117be578284828151811061179057611790612d9b565b602001015160f81c60f81b6040516020016117ac929190612fc0565b60405160208183030381529060405292505b60010161174f565b5f546001600160a01b031633146109495760405163118cdaa760e01b815233600482015260240161097f565b600180546001600160a01b031916905561099181612047565b6060816001600160401b03811115611825576118256129cc565b60405190808252806020026020018201604052801561184e578160200160208202803683370190505b5090505f5b828110156118955761187084848381811061081f5761081f612d9b565b82828151811061188257611882612d9b565b6020908102919091010152600101611853565b5092915050565b8051606090806001600160401b038111156118b9576118b96129cc565b60405190808252806020026020018201604052801561191457816020015b61190160405180606001604052805f81526020015f81526020015f6001600160a01b031681525090565b8152602001906001900390816118d75790505b5091505f5f611922866115f0565b90925090505f5b8381101561197b576119568787838151811061194757611947612d9b565b60200260200101518486612096565b85828151811061196857611968612d9b565b6020908102919091010152600101611929565b5050505092915050565b5f5b8151811015611c38576001600160a01b0384165f908152600560205260408120835182908590859081106119bd576119bd612d9b565b60200260200101516020015181526020019081526020015f205490505f818484815181106119ed576119ed612d9b565b60200260200101515f0151611a029190612df1565b90508015611c2e57838381518110611a1c57611a1c612d9b565b60200260200101515f01515f14611aef57611a53848481518110611a4257611a42612d9b565b6020026020010151602001516108f7565b604051611a609190612f0c565b6040518091039020848481518110611a7a57611a7a612d9b565b6020026020010151604001516001600160a01b0316876001600160a01b03167f9ac9a44091881640a73610df0bdc77ce7a7c33784685a2902e0140b6b9652f0d878781518110611acc57611acc612d9b565b60200260200101515f0151604051611ae691815260200190565b60405180910390a45b6001600160a01b0386165f90815260056020526040812085518290879087908110611b1c57611b1c612d9b565b60200260200101516020015181526020019081526020015f2081905550611b61848481518110611b4e57611b4e612d9b565b602002602001015160400151868361210c565b838381518110611b7357611b73612d9b565b6020026020010151604001516001600160a01b0316856001600160a01b0316876001600160a01b03167f7c791aa670e586419eeb53ce75c06cfaf3c657e90935bd3aae64380872f849fa878781518110611bcf57611bcf612d9b565b6020026020010151602001518b86604051611c06939291909283526001600160a01b03919091166020830152604082015260600190565b60405180910390a480848481518110611c2157611c21612d9b565b6020908102919091010151525b5050600101611987565b5050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611c91908490612182565b505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611cde5760405162f09cf360e01b815260040160405180910390fd5b5f611ce960026121e3565b9050846001600160a01b0316876001600160a01b03161480611d09575080155b15611d145750610d09565b6001600160a01b038716611d2c578183039250611d3f565b6001600160a01b038516611d3f57918101915b6001600160a01b03871615611d5357948101945b6001600160a01b03851615611d685781840393505b5f5b81811015611dbf575f611d7e6002836121ec565b90506001600160a01b03891615611d9b57611d9b818a878b6121f7565b6001600160a01b03871615611db657611db6818887896121f7565b50600101611d6a565b5050505050505050565b5f8181526001830160205260408120541515610ad8565b5f611ded825f0151610b35565b60208301519091506001600160a01b0316611e1b5760405163dfde867160e01b815260040160405180910390fd5b611e266002826122db565b611e43576040516383528a7f60e01b815260040160405180910390fd5b6020828101515f83815260049092526040918290206001810180546001600160a01b0319166001600160a01b0390931692909217909155606084015160029091018054838601516001600160681b03166001600160b81b0319909116600160901b64ffffffffff948516026001600160901b0319161717600160681b429390931692909202919091179055825190517f0cf558cc2f9ccbbf831b6392a319e7892856e9324a757e9c3648ee9e5b88cb4f91611efd91612881565b60405180910390a15050565b606061092382611f196002611f1e565b61189c565b60605f610ad8836122e6565b60606109236001600160a01b038316601461233f565b5f841580611f4c575081155b80611f5657504284145b80611f615750828410155b15611f6d57508461173f565b5f834211611f7b5742611f7d565b835b90505f611f8a8683612d88565b9050611f986012600a612ee7565b611fa28289612fe4565b611fac9190612fe4565b9250838381611fbd57611fbd612ffb565b049250611fca8884612df1565b98975050505050505050565b5f8481526004602081815260408084206001600160a01b038816855260038101835290842054888552929091528054600290910154839161203a916001600160681b0381169064ffffffffff600160681b8204811691600160901b90041688611f40565b9050610f8a8582846124b8565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6120c060405180606001604052805f81526020015f81526020015f6001600160a01b031681525090565b5f6120cd858785876124e0565b6040805160608101825291825260208083018890525f9788526004905295869020600101546001600160a01b0316958101959095525092949350505050565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af1158015612158573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061217c919061300f565b50505050565b5f6121966001600160a01b038416836125a6565b905080515f141580156121ba5750808060200190518101906121b8919061300f565b155b15611c9157604051635274afe760e01b81526001600160a01b038416600482015260240161097f565b5f610923825490565b5f610ad883836125b3565b5f612204858584866124e0565b90508015611c38576001600160a01b0384165f90815260056020908152604080832088845290915281205461223a908390612df1565b6001600160a01b0386165f9081526005602090815260408083208a84529091529020819055905061226a866108f7565b6040516122779190612f0c565b604080519182900382205f898152600460209081529290206001015484845290926001600160a01b0391821692918916917f9ac9a44091881640a73610df0bdc77ce7a7c33784685a2902e0140b6b9652f0d910160405180910390a4505050505050565b5f610ad883836125d9565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561233357602002820191905f5260205f20905b81548152602001906001019080831161231f575b50505050509050919050565b6060825f61234e846002612fe4565b612359906002612df1565b6001600160401b03811115612370576123706129cc565b6040519080825280601f01601f19166020018201604052801561239a576020820181803683370190505b509050600360fc1b815f815181106123b4576123b4612d9b565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106123e2576123e2612d9b565b60200101906001600160f81b03191690815f1a9053505f612404856002612fe4565b61240f906001612df1565b90505b6001811115612486576f181899199a1a9b1b9c1cb0b131b232b360811b83600f166010811061244357612443612d9b565b1a60f81b82828151811061245957612459612d9b565b60200101906001600160f81b03191690815f1a90535060049290921c9161247f8161302e565b9050612412565b5081156124b05760405163e22e27eb60e01b8152600481018690526024810185905260440161097f565b949350505050565b5f6124c38284612d88565b6124cd9085612fe4565b670de0b6b3a76400009004949350505050565b5f8481526004602090815260408083206001600160a01b0387168452600301909152812054818061251188866114dd565b905080831461259b57851561252e5761252b8682856124b8565b91505b5f8881526004602090815260408083206001600160a01b038b1680855260039091019092529091208290557f06e13548f41cff17d181fb7a95d6935aaf6175b5a584469e25f3bf999103a5e56125838a6108f7565b83604051612592929190612f9f565b60405180910390a25b509695505050505050565b6060610ad883835f612625565b5f825f0182815481106125c8576125c8612d9b565b905f5260205f200154905092915050565b5f81815260018301602052604081205461261e57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610923565b505f610923565b6060814710156126515760405163cf47918160e01b81524760048201526024810183905260440161097f565b5f5f856001600160a01b0316848660405161266c9190612f0c565b5f6040518083038185875af1925050503d805f81146126a6576040519150601f19603f3d011682016040523d82523d5f602084013e6126ab565b606091505b50915091506126bb8683836126c5565b9695505050505050565b6060826126da576126d582612721565b610ad8565b81511580156126f157506001600160a01b0384163b155b1561271a57604051639996b31560e01b81526001600160a01b038516600482015260240161097f565b5080610ad8565b8051156127315780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b80356001600160a01b0381168114611211575f5ffd5b80356001600160681b0381168114611211575f5ffd5b5f5f60408385031215612787575f5ffd5b6127908361274a565b915061279e60208401612760565b90509250929050565b5f5f83601f8401126127b7575f5ffd5b5081356001600160401b038111156127cd575f5ffd5b6020830191508360208260051b85010111156127e7575f5ffd5b9250929050565b5f5f5f60408486031215612800575f5ffd5b6128098461274a565b925060208401356001600160401b03811115612823575f5ffd5b61282f868287016127a7565b9497909650939450505050565b5f6020828403121561284c575f5ffd5b5035919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610ad86020830184612853565b5f602082840312156128a3575f5ffd5b610ad88261274a565b5f5f83601f8401126128bc575f5ffd5b5081356001600160401b038111156128d2575f5ffd5b6020830191508360208285010111156127e7575f5ffd5b5f5f602083850312156128fa575f5ffd5b82356001600160401b0381111561290f575f5ffd5b61291b858286016128ac565b90969095509350505050565b5f5f5f60408486031215612939575f5ffd5b6129428461274a565b925060208401356001600160401b0381111561295c575f5ffd5b61282f868287016128ac565b602080825282518282018190525f918401906040840190835b818110156129c157835180518452602080820151818601526040918201516001600160a01b03169185019190915290930192606090920191600101612981565b509095945050505050565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b0381118282101715612a0257612a026129cc565b60405290565b5f82601f830112612a17575f5ffd5b81356001600160401b03811115612a3057612a306129cc565b604051601f8201601f19908116603f011681016001600160401b0381118282101715612a5e57612a5e6129cc565b604052818152838201602001851015612a75575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215612aa1575f5ffd5b81356001600160401b03811115612ab6575f5ffd5b6124b084828501612a08565b5f5f5f5f5f5f60c08789031215612ad7575f5ffd5b612ae08761274a565b955060208701359450612af56040880161274a565b959894975094956060810135955060808101359460a0909101359350915050565b803564ffffffffff81168114611211575f5ffd5b5f5f5f5f60608587031215612b3d575f5ffd5b84356001600160401b03811115612b52575f5ffd5b612b5e878288016128ac565b9095509350612b71905060208601612b16565b9150612b7f60408601612760565b905092959194509250565b5f60208284031215612b9a575f5ffd5b81356001600160401b03811115612baf575f5ffd5b820160808185031215612bc0575f5ffd5b612bc86129e0565b81356001600160401b03811115612bdd575f5ffd5b612be986828501612a08565b825250612bf86020830161274a565b6020820152612c0960408301612760565b6040820152612c1a60608301612b16565b6060820152949350505050565b5f5f5f60408486031215612c39575f5ffd5b83356001600160401b03811115612c4e575f5ffd5b612c5a868287016128ac565b9094509250612c6d905060208501612b16565b90509250925092565b5f5f5f5f60608587031215612c89575f5ffd5b612c928561274a565b9350612ca06020860161274a565b925060408501356001600160401b03811115612cba575f5ffd5b612cc6878288016127a7565b95989497509550505050565b5f5f60408385031215612ce3575f5ffd5b612cec8361274a565b915061279e6020840161274a565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015612d5157603f19878603018452612d3c858351612853565b94506020938401939190910190600101612d20565b50929695505050505050565b5f60208284031215612d6d575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561092357610923612d74565b634e487b7160e01b5f52603260045260245ffd5b5f5f8335601e19843603018112612dc4575f5ffd5b8301803591506001600160401b03821115612ddd575f5ffd5b6020019150368190038213156127e7575f5ffd5b8082018082111561092357610923612d74565b6001815b6001841115612e3f57808504811115612e2357612e23612d74565b6001841615612e3157908102905b60019390931c928002612e08565b935093915050565b5f82612e5557506001610923565b81612e6157505f610923565b8160018114612e775760028114612e8157612e9d565b6001915050610923565b60ff841115612e9257612e92612d74565b50506001821b610923565b5060208310610133831016604e8410600b8410161715612ec0575081810a610923565b612ecc5f198484612e04565b805f1904821115612edf57612edf612d74565b029392505050565b5f610ad860ff841683612e47565b5f81518060208401855e5f93019283525090919050565b5f610ad88284612ef5565b805160208083015191908110156114d7575f1960209190910360031b1b16919050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f6124b0602083018486612f3a565b604081525f612f88604083018587612f3a565b905064ffffffffff83166020830152949350505050565b604081525f612fb16040830185612853565b90508260208301529392505050565b5f612fcb8285612ef5565b6001600160f81b03199390931683525050600101919050565b808202811582820484141761092357610923612d74565b634e487b7160e01b5f52601260045260245ffd5b5f6020828403121561301f575f5ffd5b81518015158114610ad8575f5ffd5b5f8161303c5761303c612d74565b505f19019056fea2646970667358221220bd0bc3e34f7da73dc062397f9c393e7858e6feca6c0a99eaa9b05831f8e686cc64736f6c634300081c00330000000000000000000000004d62b6e166767988106cf7ee8fe23e480e76ff1d000000000000000000000000b01e62ba9bec9cfa24b2ee321392b8ce726d2a090000000000000000000000004e216c15697c1392fe59e1014b009505e05810df
Deployed Bytecode
0x608060405234801561000f575f5ffd5b50600436106101fd575f3560e01c8063ab8f094511610114578063cfc26237116100a9578063ef5cfb8c11610079578063ef5cfb8c1461057c578063f2fde38b1461058f578063f5ba4750146105a2578063f5cf673b146105b5578063fb71aec5146105c8575f5ffd5b8063cfc26237146104b1578063d34fb26714610550578063e30c397814610558578063e7b8b9c414610569575f5ffd5b8063bec1e022116100e4578063bec1e02214610465578063c1616f6914610478578063cc0801641461048b578063cd72a4bf1461049e575f5ffd5b8063ab8f094514610424578063b5a890651461042c578063b90817f21461043f578063bbdc013b14610452575f5ffd5b806379ba5097116101955780639c868ac0116101655780639c868ac01461039a5780639f2e6a0c146103b0578063a5eb3f0d146103d7578063a7b800dd146103f7578063aaf5eb681461040a575f5ffd5b806379ba5097146102fc57806382794f39146103045780638ba2c3c8146103775780638da5cb5b1461038a575f5ffd5b80636f564e7d116101d05780636f564e7d146102a1578063711ec9ac146102c1578063715018a6146102c957806374d945ec146102d1575f5ffd5b80631d7e3556146102015780632ad87c6f146102455780632e953c211461026b57806358703bed14610280575b5f5ffd5b6102287f0000000000000000000000004e216c15697c1392fe59e1014b009505e05810df81565b6040516001600160a01b0390911681526020015b60405180910390f35b7f0000000000000000000000004e216c15697c1392fe59e1014b009505e05810df610228565b61027e610279366004612776565b6105dd565b005b61029361028e3660046127ee565b6107ed565b60405190815260200161023c565b6102b46102af36600461283c565b6108f7565b60405161023c9190612881565b610293610929565b61027e610938565b6102286102df366004612893565b6001600160a01b039081165f908152600660205260409020541690565b61027e61094b565b6103176103123660046128e9565b610994565b60405161023c91905f60a0820190508251825260018060a01b0360208401511660208301526001600160681b03604084015116604083015264ffffffffff606084015116606083015264ffffffffff608084015116608083015292915050565b610293610385366004612927565b610a72565b5f546001600160a01b0316610228565b60075460ff16604051901515815260200161023c565b6102287f000000000000000000000000b01e62ba9bec9cfa24b2ee321392b8ce726d2a0981565b6103ea6103e53660046127ee565b610adf565b60405161023c9190612968565b610293610405366004612a91565b610b35565b610412601281565b60405160ff909116815260200161023c565b61027e610b80565b61029361043a366004612927565b610bbf565b61027e61044d366004612893565b610c2e565b61027e610460366004612ac2565b610cb3565b61027e610473366004612b2a565b610d11565b61027e610486366004612b8a565b610ecc565b610293610499366004612927565b610f2d565b61027e6104ac366004612c27565b610f95565b61050b6104bf36600461283c565b60046020525f908152604090208054600182015460029092015490916001600160a01b0316906001600160681b0381169064ffffffffff600160681b8204811691600160901b90041685565b604080519586526001600160a01b0390941660208601526001600160681b039092169284019290925264ffffffffff918216606084015216608082015260a00161023c565b61027e61112d565b6001546001600160a01b0316610228565b6102936105773660046128e9565b611169565b6103ea61058a366004612893565b6111d1565b61027e61059d366004612893565b611216565b6103ea6105b0366004612c76565b611286565b61027e6105c3366004612cd2565b611347565b6105d06113a5565b60405161023c9190612cfa565b336001600160a01b037f000000000000000000000000b01e62ba9bec9cfa24b2ee321392b8ce726d2a09161480159061062057505f546001600160a01b03163314155b1561063e5760405163d3b03ee160e01b815260040160405180910390fd5b6001600160681b038116156107e9575f7f0000000000000000000000004e216c15697c1392fe59e1014b009505e05810df6001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106ce9190612d5d565b90505f6106da84611462565b5f8181526004602052604090209091506106f482846114dd565b506002810180544264ffffffffff818116600160901b90810264ffffffffff60901b1985161790945592820492909216916001600160681b039091169061073d90600190612d88565b6002840180546001600160901b031916600160681b64ffffffffff93909316929092026001600160681b031916919091176001600160681b03881617905561078584866114dd565b50600292909201805469ffffffffffffffffffff60681b1916600160901b64ffffffffff9384160264ffffffffff60681b191617600160681b429390931692909202919091176001600160681b0319166001600160681b0390921691909117905550505b5050565b5f5f5f5f6107fa876115f0565b90925090505f5b858110156108ec575f61086a88888481811061081f5761081f612d9b565b90506020028101906108319190612daf565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610b3592505050565b5f818152600460205260409020600101549091506001600160a01b03908116908616610898578095506108ca565b806001600160a01b0316866001600160a01b0316146108ca576040516305ff3f2d60e41b815260040160405180910390fd5b6108d68a838787611706565b6108e09088612df1565b96505050600101610801565b505050509392505050565b60606109238260405160200161090f91815260200190565b604051602081830303815290604052611748565b92915050565b6109356012600a612ee7565b81565b6109406117c6565b6109495f6117f2565b565b60015433906001600160a01b031681146109885760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b610991816117f2565b50565b6040805160a0810182525f808252602082018190529181018290526060810182905260808101919091525f6109fd84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610b3592505050565b6040805160a0810182525f838152600460208181528483208054855260018101546001600160a01b031682860152600201546001600160681b0381169585019590955264ffffffffff600160681b860481166060860152959092529052600160901b9091049091166080820152949350505050565b5f5f610ab284848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610b3592505050565b6001600160a01b0386165f90815260056020908152604080832093835292905220549150505b9392505050565b60606001600160a01b038416610b0857604051638aa3a72f60e01b815260040160405180910390fd5b5f610b13848461180b565b9050610b1f338261189c565b9150610b2d33338785611985565b509392505050565b5f81515f03610b57576040516302d7eecb60e61b815260040160405180910390fd5b81604051602001610b689190612f0c565b60405160208183030381529060405261092390612f17565b610b886117c6565b6007805460ff191660011790556040517f1cd942681240393874c94d43d81f6d2be3e0a1f94e200f58cdb151773cbec7ba905f90a1565b5f5f610bff84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610b3592505050565b5f9081526004602090815260408083206001600160a01b03891684526003019091529020549150509392505050565b610c366117c6565b6040516370a0823160e01b81523060048201526109919033906001600160a01b038416906370a0823190602401602060405180830381865afa158015610c7e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ca29190612d5d565b6001600160a01b0384169190611c3f565b336001600160a01b037f000000000000000000000000b01e62ba9bec9cfa24b2ee321392b8ce726d2a091614610cfb5760405162f09cf360e01b815260040160405180910390fd5b610d09868686868686611c96565b505050505050565b610d196117c6565b428264ffffffffff161015610d4157604051636e03f20160e11b815260040160405180910390fd5b5f610d8085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610b3592505050565b9050610d8d600282611dc9565b610daa57604051630a96b47560e01b815260040160405180910390fd5b5f7f0000000000000000000000004e216c15697c1392fe59e1014b009505e05810df6001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e07573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e2b9190612d5d565b9050610e3782826114dd565b505f8281526004602052604090819020600201805476ffffffffff0000000000ffffffffffffffffffffffffff1916600160901b64ffffffffff8816026001600160681b031916176001600160681b038616179055517fce209946668ea0ad6199b320ade5271adc93d0c1083851b571b990f3e0260f1290610ebc9088908890612f62565b60405180910390a1505050505050565b610ed46117c6565b80515160201015610ef8576040516310b47cc360e01b815260040160405180910390fd5b42816060015164ffffffffff161015610f2457604051636e03f20160e11b815260040160405180910390fd5b61099181611de0565b5f5f610f6d84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610b3592505050565b90505f5f610f7a876115f0565b91509150610f8a87848484611706565b979650505050505050565b610f9d6117c6565b428164ffffffffff161015610fc557604051636e03f20160e11b815260040160405180910390fd5b5f61100484848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610b3592505050565b9050611011600282611dc9565b61102e57604051630a96b47560e01b815260040160405180910390fd5b5f7f0000000000000000000000004e216c15697c1392fe59e1014b009505e05810df6001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561108b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110af9190612d5d565b90506110bb82826114dd565b505f8281526004602052604090819020600201805464ffffffffff60901b1916600160901b64ffffffffff871602179055517f58e6e5fdc9bafcdde90e850e8776b427a5a0e26e6c86f28a3c9c1f18018761189061111e90879087908790612f75565b60405180910390a15050505050565b6111356117c6565b6007805460ff191690556040517f2bb961d4f48d79d94b84e7017d12533eff7562d60f9fcbdc7784646269c1ec21905f90a1565b5f5f6111a984848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610b3592505050565b5f90815260046020526040902060020154600160901b900464ffffffffff1691505092915050565b60606001600160a01b0382166111fa57604051638aa3a72f60e01b815260040160405180910390fd5b61120333611f09565b905061121133338484611985565b919050565b61121e6117c6565b600180546001600160a01b0383166001600160a01b0319909116811790915561124e5f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6001600160a01b038085165f90815260066020526040902054606091339187911682146112c557604051620bb58b60e51b815260040160405180910390fd5b86866001600160a01b0382166112ee57604051630702b3d960e41b815260040160405180910390fd5b6001600160a01b03811661131557604051638aa3a72f60e01b815260040160405180910390fd5b5f611320888861180b565b905061132c8a8261189c565b955061133a338b8b89611985565b5050505050949350505050565b61134f6117c6565b6001600160a01b038281165f8181526006602052604080822080546001600160a01b0319169486169485179055517f4925eafc82d0c4d67889898eeed64b18488ab19811e61620f387026dec126a289190a35050565b60605f6113b26002611f1e565b519050806001600160401b038111156113cd576113cd6129cc565b60405190808252806020026020018201604052801561140057816020015b60608152602001906001900390816113eb5790505b5091505f5b8181101561145d5761143861141a6002611f1e565b828151811061142b5761142b612d9b565b60200260200101516108f7565b83828151811061144a5761144a612d9b565b6020908102919091010152600101611405565b505090565b5f5f61146d83611f2a565b905061147881610b35565b5f81815260046020526040812060020154919350600160681b90910464ffffffffff1690036114d757604080516080810182525f91810182905260608101919091528181526001600160a01b03841660208201526114d581611de0565b505b50919050565b5f82815260046020526040812080546002909101546001600160681b0381169064ffffffffff600160681b8204811691600160901b900416428290036115295783945050505050610923565b5f611537858585858b611f40565b90508481146115b7575f888152600460205260409020818155600201805464ffffffffff60681b1916600160681b4264ffffffffff16021790557fbcaf32358137afa5170f844d4e02a1b3013677faba70d948cc705ce0a383058461159b896108f7565b826040516115aa929190612f9f565b60405180910390a1610f8a565b5f888152600460205260409020600201805464ffffffffff60681b1916600160681b4264ffffffffff1602179055979650505050505050565b5f807f0000000000000000000000004e216c15697c1392fe59e1014b009505e05810df6040516370a0823160e01b81526001600160a01b03858116600483015291909116906370a0823190602401602060405180830381865afa158015611659573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061167d9190612d5d565b91507f0000000000000000000000004e216c15697c1392fe59e1014b009505e05810df6001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116db573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116ff9190612d5d565b9050915091565b6001600160a01b0384165f90815260056020908152604080832086845290915290205461173584868585611fd6565b61173f9082612df1565b95945050505050565b80516060905f5b818110156114d55783818151811061176957611769612d9b565b01602001516001600160f81b031916156117be578284828151811061179057611790612d9b565b602001015160f81c60f81b6040516020016117ac929190612fc0565b60405160208183030381529060405292505b60010161174f565b5f546001600160a01b031633146109495760405163118cdaa760e01b815233600482015260240161097f565b600180546001600160a01b031916905561099181612047565b6060816001600160401b03811115611825576118256129cc565b60405190808252806020026020018201604052801561184e578160200160208202803683370190505b5090505f5b828110156118955761187084848381811061081f5761081f612d9b565b82828151811061188257611882612d9b565b6020908102919091010152600101611853565b5092915050565b8051606090806001600160401b038111156118b9576118b96129cc565b60405190808252806020026020018201604052801561191457816020015b61190160405180606001604052805f81526020015f81526020015f6001600160a01b031681525090565b8152602001906001900390816118d75790505b5091505f5f611922866115f0565b90925090505f5b8381101561197b576119568787838151811061194757611947612d9b565b60200260200101518486612096565b85828151811061196857611968612d9b565b6020908102919091010152600101611929565b5050505092915050565b5f5b8151811015611c38576001600160a01b0384165f908152600560205260408120835182908590859081106119bd576119bd612d9b565b60200260200101516020015181526020019081526020015f205490505f818484815181106119ed576119ed612d9b565b60200260200101515f0151611a029190612df1565b90508015611c2e57838381518110611a1c57611a1c612d9b565b60200260200101515f01515f14611aef57611a53848481518110611a4257611a42612d9b565b6020026020010151602001516108f7565b604051611a609190612f0c565b6040518091039020848481518110611a7a57611a7a612d9b565b6020026020010151604001516001600160a01b0316876001600160a01b03167f9ac9a44091881640a73610df0bdc77ce7a7c33784685a2902e0140b6b9652f0d878781518110611acc57611acc612d9b565b60200260200101515f0151604051611ae691815260200190565b60405180910390a45b6001600160a01b0386165f90815260056020526040812085518290879087908110611b1c57611b1c612d9b565b60200260200101516020015181526020019081526020015f2081905550611b61848481518110611b4e57611b4e612d9b565b602002602001015160400151868361210c565b838381518110611b7357611b73612d9b565b6020026020010151604001516001600160a01b0316856001600160a01b0316876001600160a01b03167f7c791aa670e586419eeb53ce75c06cfaf3c657e90935bd3aae64380872f849fa878781518110611bcf57611bcf612d9b565b6020026020010151602001518b86604051611c06939291909283526001600160a01b03919091166020830152604082015260600190565b60405180910390a480848481518110611c2157611c21612d9b565b6020908102919091010151525b5050600101611987565b5050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611c91908490612182565b505050565b336001600160a01b037f000000000000000000000000b01e62ba9bec9cfa24b2ee321392b8ce726d2a091614611cde5760405162f09cf360e01b815260040160405180910390fd5b5f611ce960026121e3565b9050846001600160a01b0316876001600160a01b03161480611d09575080155b15611d145750610d09565b6001600160a01b038716611d2c578183039250611d3f565b6001600160a01b038516611d3f57918101915b6001600160a01b03871615611d5357948101945b6001600160a01b03851615611d685781840393505b5f5b81811015611dbf575f611d7e6002836121ec565b90506001600160a01b03891615611d9b57611d9b818a878b6121f7565b6001600160a01b03871615611db657611db6818887896121f7565b50600101611d6a565b5050505050505050565b5f8181526001830160205260408120541515610ad8565b5f611ded825f0151610b35565b60208301519091506001600160a01b0316611e1b5760405163dfde867160e01b815260040160405180910390fd5b611e266002826122db565b611e43576040516383528a7f60e01b815260040160405180910390fd5b6020828101515f83815260049092526040918290206001810180546001600160a01b0319166001600160a01b0390931692909217909155606084015160029091018054838601516001600160681b03166001600160b81b0319909116600160901b64ffffffffff948516026001600160901b0319161717600160681b429390931692909202919091179055825190517f0cf558cc2f9ccbbf831b6392a319e7892856e9324a757e9c3648ee9e5b88cb4f91611efd91612881565b60405180910390a15050565b606061092382611f196002611f1e565b61189c565b60605f610ad8836122e6565b60606109236001600160a01b038316601461233f565b5f841580611f4c575081155b80611f5657504284145b80611f615750828410155b15611f6d57508461173f565b5f834211611f7b5742611f7d565b835b90505f611f8a8683612d88565b9050611f986012600a612ee7565b611fa28289612fe4565b611fac9190612fe4565b9250838381611fbd57611fbd612ffb565b049250611fca8884612df1565b98975050505050505050565b5f8481526004602081815260408084206001600160a01b038816855260038101835290842054888552929091528054600290910154839161203a916001600160681b0381169064ffffffffff600160681b8204811691600160901b90041688611f40565b9050610f8a8582846124b8565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6120c060405180606001604052805f81526020015f81526020015f6001600160a01b031681525090565b5f6120cd858785876124e0565b6040805160608101825291825260208083018890525f9788526004905295869020600101546001600160a01b0316958101959095525092949350505050565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af1158015612158573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061217c919061300f565b50505050565b5f6121966001600160a01b038416836125a6565b905080515f141580156121ba5750808060200190518101906121b8919061300f565b155b15611c9157604051635274afe760e01b81526001600160a01b038416600482015260240161097f565b5f610923825490565b5f610ad883836125b3565b5f612204858584866124e0565b90508015611c38576001600160a01b0384165f90815260056020908152604080832088845290915281205461223a908390612df1565b6001600160a01b0386165f9081526005602090815260408083208a84529091529020819055905061226a866108f7565b6040516122779190612f0c565b604080519182900382205f898152600460209081529290206001015484845290926001600160a01b0391821692918916917f9ac9a44091881640a73610df0bdc77ce7a7c33784685a2902e0140b6b9652f0d910160405180910390a4505050505050565b5f610ad883836125d9565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561233357602002820191905f5260205f20905b81548152602001906001019080831161231f575b50505050509050919050565b6060825f61234e846002612fe4565b612359906002612df1565b6001600160401b03811115612370576123706129cc565b6040519080825280601f01601f19166020018201604052801561239a576020820181803683370190505b509050600360fc1b815f815181106123b4576123b4612d9b565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106123e2576123e2612d9b565b60200101906001600160f81b03191690815f1a9053505f612404856002612fe4565b61240f906001612df1565b90505b6001811115612486576f181899199a1a9b1b9c1cb0b131b232b360811b83600f166010811061244357612443612d9b565b1a60f81b82828151811061245957612459612d9b565b60200101906001600160f81b03191690815f1a90535060049290921c9161247f8161302e565b9050612412565b5081156124b05760405163e22e27eb60e01b8152600481018690526024810185905260440161097f565b949350505050565b5f6124c38284612d88565b6124cd9085612fe4565b670de0b6b3a76400009004949350505050565b5f8481526004602090815260408083206001600160a01b0387168452600301909152812054818061251188866114dd565b905080831461259b57851561252e5761252b8682856124b8565b91505b5f8881526004602090815260408083206001600160a01b038b1680855260039091019092529091208290557f06e13548f41cff17d181fb7a95d6935aaf6175b5a584469e25f3bf999103a5e56125838a6108f7565b83604051612592929190612f9f565b60405180910390a25b509695505050505050565b6060610ad883835f612625565b5f825f0182815481106125c8576125c8612d9b565b905f5260205f200154905092915050565b5f81815260018301602052604081205461261e57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610923565b505f610923565b6060814710156126515760405163cf47918160e01b81524760048201526024810183905260440161097f565b5f5f856001600160a01b0316848660405161266c9190612f0c565b5f6040518083038185875af1925050503d805f81146126a6576040519150601f19603f3d011682016040523d82523d5f602084013e6126ab565b606091505b50915091506126bb8683836126c5565b9695505050505050565b6060826126da576126d582612721565b610ad8565b81511580156126f157506001600160a01b0384163b155b1561271a57604051639996b31560e01b81526001600160a01b038516600482015260240161097f565b5080610ad8565b8051156127315780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b80356001600160a01b0381168114611211575f5ffd5b80356001600160681b0381168114611211575f5ffd5b5f5f60408385031215612787575f5ffd5b6127908361274a565b915061279e60208401612760565b90509250929050565b5f5f83601f8401126127b7575f5ffd5b5081356001600160401b038111156127cd575f5ffd5b6020830191508360208260051b85010111156127e7575f5ffd5b9250929050565b5f5f5f60408486031215612800575f5ffd5b6128098461274a565b925060208401356001600160401b03811115612823575f5ffd5b61282f868287016127a7565b9497909650939450505050565b5f6020828403121561284c575f5ffd5b5035919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610ad86020830184612853565b5f602082840312156128a3575f5ffd5b610ad88261274a565b5f5f83601f8401126128bc575f5ffd5b5081356001600160401b038111156128d2575f5ffd5b6020830191508360208285010111156127e7575f5ffd5b5f5f602083850312156128fa575f5ffd5b82356001600160401b0381111561290f575f5ffd5b61291b858286016128ac565b90969095509350505050565b5f5f5f60408486031215612939575f5ffd5b6129428461274a565b925060208401356001600160401b0381111561295c575f5ffd5b61282f868287016128ac565b602080825282518282018190525f918401906040840190835b818110156129c157835180518452602080820151818601526040918201516001600160a01b03169185019190915290930192606090920191600101612981565b509095945050505050565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b0381118282101715612a0257612a026129cc565b60405290565b5f82601f830112612a17575f5ffd5b81356001600160401b03811115612a3057612a306129cc565b604051601f8201601f19908116603f011681016001600160401b0381118282101715612a5e57612a5e6129cc565b604052818152838201602001851015612a75575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215612aa1575f5ffd5b81356001600160401b03811115612ab6575f5ffd5b6124b084828501612a08565b5f5f5f5f5f5f60c08789031215612ad7575f5ffd5b612ae08761274a565b955060208701359450612af56040880161274a565b959894975094956060810135955060808101359460a0909101359350915050565b803564ffffffffff81168114611211575f5ffd5b5f5f5f5f60608587031215612b3d575f5ffd5b84356001600160401b03811115612b52575f5ffd5b612b5e878288016128ac565b9095509350612b71905060208601612b16565b9150612b7f60408601612760565b905092959194509250565b5f60208284031215612b9a575f5ffd5b81356001600160401b03811115612baf575f5ffd5b820160808185031215612bc0575f5ffd5b612bc86129e0565b81356001600160401b03811115612bdd575f5ffd5b612be986828501612a08565b825250612bf86020830161274a565b6020820152612c0960408301612760565b6040820152612c1a60608301612b16565b6060820152949350505050565b5f5f5f60408486031215612c39575f5ffd5b83356001600160401b03811115612c4e575f5ffd5b612c5a868287016128ac565b9094509250612c6d905060208501612b16565b90509250925092565b5f5f5f5f60608587031215612c89575f5ffd5b612c928561274a565b9350612ca06020860161274a565b925060408501356001600160401b03811115612cba575f5ffd5b612cc6878288016127a7565b95989497509550505050565b5f5f60408385031215612ce3575f5ffd5b612cec8361274a565b915061279e6020840161274a565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015612d5157603f19878603018452612d3c858351612853565b94506020938401939190910190600101612d20565b50929695505050505050565b5f60208284031215612d6d575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561092357610923612d74565b634e487b7160e01b5f52603260045260245ffd5b5f5f8335601e19843603018112612dc4575f5ffd5b8301803591506001600160401b03821115612ddd575f5ffd5b6020019150368190038213156127e7575f5ffd5b8082018082111561092357610923612d74565b6001815b6001841115612e3f57808504811115612e2357612e23612d74565b6001841615612e3157908102905b60019390931c928002612e08565b935093915050565b5f82612e5557506001610923565b81612e6157505f610923565b8160018114612e775760028114612e8157612e9d565b6001915050610923565b60ff841115612e9257612e92612d74565b50506001821b610923565b5060208310610133831016604e8410600b8410161715612ec0575081810a610923565b612ecc5f198484612e04565b805f1904821115612edf57612edf612d74565b029392505050565b5f610ad860ff841683612e47565b5f81518060208401855e5f93019283525090919050565b5f610ad88284612ef5565b805160208083015191908110156114d7575f1960209190910360031b1b16919050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f6124b0602083018486612f3a565b604081525f612f88604083018587612f3a565b905064ffffffffff83166020830152949350505050565b604081525f612fb16040830185612853565b90508260208301529392505050565b5f612fcb8285612ef5565b6001600160f81b03199390931683525050600101919050565b808202811582820484141761092357610923612d74565b634e487b7160e01b5f52601260045260245ffd5b5f6020828403121561301f575f5ffd5b81518015158114610ad8575f5ffd5b5f8161303c5761303c612d74565b505f19019056fea2646970667358221220bd0bc3e34f7da73dc062397f9c393e7858e6feca6c0a99eaa9b05831f8e686cc64736f6c634300081c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004d62b6e166767988106cf7ee8fe23e480e76ff1d000000000000000000000000b01e62ba9bec9cfa24b2ee321392b8ce726d2a090000000000000000000000004e216c15697c1392fe59e1014b009505e05810df
-----Decoded View---------------
Arg [0] : _owner (address): 0x4d62b6E166767988106cF7Ee8fE23E480E76FF1d
Arg [1] : _notifier (address): 0xB01e62Ba9BEc9Cfa24b2Ee321392b8Ce726D2A09
Arg [2] : _siloShareToken (address): 0x4E216C15697C1392fE59e1014B009505E05810Df
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000004d62b6e166767988106cf7ee8fe23e480e76ff1d
Arg [1] : 000000000000000000000000b01e62ba9bec9cfa24b2ee321392b8ce726d2a09
Arg [2] : 0000000000000000000000004e216c15697c1392fe59e1014b009505e05810df
Loading...
Loading
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.