Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Add Redemption B... | 12388328 | 1379 days ago | IN | 0 ETH | 0.00577005 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
GuaranteedRedemption
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0 /* This file is part of the Enzyme Protocol. (c) Enzyme Council <[email protected]> For the full license information, please view the LICENSE file that was distributed with this source code. */ pragma solidity 0.6.12; pragma experimental ABIEncoderV2; import "@openzeppelin/contracts/math/SafeMath.sol"; import "../../../utils/FundDeployerOwnerMixin.sol"; import "./utils/PreCallOnIntegrationValidatePolicyBase.sol"; /// @title GuaranteedRedemption Contract /// @author Enzyme Council <[email protected]> /// @notice A policy that guarantees that shares will either be continuously redeemable or /// redeemable within a predictable daily window by preventing trading during a configurable daily period contract GuaranteedRedemption is PreCallOnIntegrationValidatePolicyBase, FundDeployerOwnerMixin { using SafeMath for uint256; event AdapterAdded(address adapter); event AdapterRemoved(address adapter); event FundSettingsSet( address indexed comptrollerProxy, uint256 startTimestamp, uint256 duration ); event RedemptionWindowBufferSet(uint256 prevBuffer, uint256 nextBuffer); struct RedemptionWindow { uint256 startTimestamp; uint256 duration; } uint256 private constant ONE_DAY = 24 * 60 * 60; mapping(address => bool) private adapterToCanBlockRedemption; mapping(address => RedemptionWindow) private comptrollerProxyToRedemptionWindow; uint256 private redemptionWindowBuffer; constructor( address _policyManager, address _fundDeployer, uint256 _redemptionWindowBuffer, address[] memory _redemptionBlockingAdapters ) public PolicyBase(_policyManager) FundDeployerOwnerMixin(_fundDeployer) { redemptionWindowBuffer = _redemptionWindowBuffer; __addRedemptionBlockingAdapters(_redemptionBlockingAdapters); } // EXTERNAL FUNCTIONS /// @notice Add the initial policy settings for a fund /// @param _comptrollerProxy The fund's ComptrollerProxy address /// @param _encodedSettings Encoded settings to apply to a fund function addFundSettings(address _comptrollerProxy, bytes calldata _encodedSettings) external override onlyPolicyManager { (uint256 startTimestamp, uint256 duration) = abi.decode( _encodedSettings, (uint256, uint256) ); if (startTimestamp == 0) { require(duration == 0, "addFundSettings: duration must be 0 if startTimestamp is 0"); return; } // Use 23 hours instead of 1 day to allow up to 1 hr of redemptionWindowBuffer require( duration > 0 && duration <= 23 hours, "addFundSettings: duration must be between 1 second and 23 hours" ); comptrollerProxyToRedemptionWindow[_comptrollerProxy].startTimestamp = startTimestamp; comptrollerProxyToRedemptionWindow[_comptrollerProxy].duration = duration; emit FundSettingsSet(_comptrollerProxy, startTimestamp, duration); } /// @notice Provides a constant string identifier for a policy /// @return identifier_ The identifer string function identifier() external pure override returns (string memory identifier_) { return "GUARANTEED_REDEMPTION"; } /// @notice Checks whether a particular condition passes the rule for a particular fund /// @param _comptrollerProxy The fund's ComptrollerProxy address /// @param _adapter The adapter for which to check the rule /// @return isValid_ True if the rule passes function passesRule(address _comptrollerProxy, address _adapter) public view returns (bool isValid_) { if (!adapterCanBlockRedemption(_adapter)) { return true; } RedemptionWindow memory redemptionWindow = comptrollerProxyToRedemptionWindow[_comptrollerProxy]; // If no RedemptionWindow is set, the fund can never use redemption-blocking adapters if (redemptionWindow.startTimestamp == 0) { return false; } uint256 latestRedemptionWindowStart = calcLatestRedemptionWindowStart( redemptionWindow.startTimestamp ); // A fund can't trade during its redemption window, nor in the buffer beforehand. // The lower bound is only relevant when the startTimestamp is in the future, // so we check it last. if ( block.timestamp >= latestRedemptionWindowStart.add(redemptionWindow.duration) || block.timestamp <= latestRedemptionWindowStart.sub(redemptionWindowBuffer) ) { return true; } return false; } /// @notice Sets a new value for the redemptionWindowBuffer variable /// @param _nextRedemptionWindowBuffer The number of seconds for the redemptionWindowBuffer /// @dev The redemptionWindowBuffer is added to the beginning of the redemption window, /// and should always be >= the longest potential block on redemption amongst all adapters. /// (e.g., Synthetix blocks token transfers during a timelock after trading synths) function setRedemptionWindowBuffer(uint256 _nextRedemptionWindowBuffer) external onlyFundDeployerOwner { uint256 prevRedemptionWindowBuffer = redemptionWindowBuffer; require( _nextRedemptionWindowBuffer != prevRedemptionWindowBuffer, "setRedemptionWindowBuffer: Value already set" ); redemptionWindowBuffer = _nextRedemptionWindowBuffer; emit RedemptionWindowBufferSet(prevRedemptionWindowBuffer, _nextRedemptionWindowBuffer); } /// @notice Apply the rule with the specified parameters of a PolicyHook /// @param _comptrollerProxy The fund's ComptrollerProxy address /// @param _encodedArgs Encoded args with which to validate the rule /// @return isValid_ True if the rule passes function validateRule( address _comptrollerProxy, address, IPolicyManager.PolicyHook, bytes calldata _encodedArgs ) external override returns (bool isValid_) { (address adapter, ) = __decodeRuleArgs(_encodedArgs); return passesRule(_comptrollerProxy, adapter); } // PUBLIC FUNCTIONS /// @notice Calculates the start of the most recent redemption window /// @param _startTimestamp The initial startTimestamp for the redemption window /// @return latestRedemptionWindowStart_ The starting timestamp of the most recent redemption window function calcLatestRedemptionWindowStart(uint256 _startTimestamp) public view returns (uint256 latestRedemptionWindowStart_) { if (block.timestamp <= _startTimestamp) { return _startTimestamp; } uint256 timeSinceStartTimestamp = block.timestamp.sub(_startTimestamp); uint256 timeSincePeriodStart = timeSinceStartTimestamp.mod(ONE_DAY); return block.timestamp.sub(timeSincePeriodStart); } /////////////////////////////////////////// // REDEMPTION-BLOCKING ADAPTERS REGISTRY // /////////////////////////////////////////// /// @notice Add adapters which can block shares redemption /// @param _adapters The addresses of adapters to be added function addRedemptionBlockingAdapters(address[] calldata _adapters) external onlyFundDeployerOwner { require( _adapters.length > 0, "__addRedemptionBlockingAdapters: _adapters cannot be empty" ); __addRedemptionBlockingAdapters(_adapters); } /// @notice Remove adapters which can block shares redemption /// @param _adapters The addresses of adapters to be removed function removeRedemptionBlockingAdapters(address[] calldata _adapters) external onlyFundDeployerOwner { require( _adapters.length > 0, "removeRedemptionBlockingAdapters: _adapters cannot be empty" ); for (uint256 i; i < _adapters.length; i++) { require( adapterCanBlockRedemption(_adapters[i]), "removeRedemptionBlockingAdapters: adapter is not added" ); adapterToCanBlockRedemption[_adapters[i]] = false; emit AdapterRemoved(_adapters[i]); } } /// @dev Helper to mark adapters that can block shares redemption function __addRedemptionBlockingAdapters(address[] memory _adapters) private { for (uint256 i; i < _adapters.length; i++) { require( _adapters[i] != address(0), "__addRedemptionBlockingAdapters: adapter cannot be empty" ); require( !adapterCanBlockRedemption(_adapters[i]), "__addRedemptionBlockingAdapters: adapter already added" ); adapterToCanBlockRedemption[_adapters[i]] = true; emit AdapterAdded(_adapters[i]); } } /////////////////// // STATE GETTERS // /////////////////// /// @notice Gets the `redemptionWindowBuffer` variable /// @return redemptionWindowBuffer_ The `redemptionWindowBuffer` variable value function getRedemptionWindowBuffer() external view returns (uint256 redemptionWindowBuffer_) { return redemptionWindowBuffer; } /// @notice Gets the RedemptionWindow settings for a given fund /// @param _comptrollerProxy The ComptrollerProxy of the fund /// @return redemptionWindow_ The RedemptionWindow settings function getRedemptionWindowForFund(address _comptrollerProxy) external view returns (RedemptionWindow memory redemptionWindow_) { return comptrollerProxyToRedemptionWindow[_comptrollerProxy]; } /// @notice Checks whether an adapter can block shares redemption /// @param _adapter The address of the adapter to check /// @return canBlockRedemption_ True if the adapter can block shares redemption function adapterCanBlockRedemption(address _adapter) public view returns (bool canBlockRedemption_) { return adapterToCanBlockRedemption[_adapter]; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } }
// SPDX-License-Identifier: GPL-3.0 /* This file is part of the Enzyme Protocol. (c) Enzyme Council <[email protected]> For the full license information, please view the LICENSE file that was distributed with this source code. */ pragma solidity 0.6.12; /// @title IFundDeployer Interface /// @author Enzyme Council <[email protected]> interface IFundDeployer { enum ReleaseStatus {PreLaunch, Live, Paused} function getOwner() external view returns (address); function getReleaseStatus() external view returns (ReleaseStatus); function isRegisteredVaultCall(address, bytes4) external view returns (bool); }
// SPDX-License-Identifier: GPL-3.0 /* This file is part of the Enzyme Protocol. (c) Enzyme Council <[email protected]> For the full license information, please view the LICENSE file that was distributed with this source code. */ pragma solidity 0.6.12; import "./IPolicyManager.sol"; /// @title Policy Interface /// @author Enzyme Council <[email protected]> interface IPolicy { function activateForFund(address _comptrollerProxy, address _vaultProxy) external; function addFundSettings(address _comptrollerProxy, bytes calldata _encodedSettings) external; function identifier() external pure returns (string memory identifier_); function implementedHooks() external view returns (IPolicyManager.PolicyHook[] memory implementedHooks_); function updateFundSettings( address _comptrollerProxy, address _vaultProxy, bytes calldata _encodedSettings ) external; function validateRule( address _comptrollerProxy, address _vaultProxy, IPolicyManager.PolicyHook _hook, bytes calldata _encodedArgs ) external returns (bool isValid_); }
// SPDX-License-Identifier: GPL-3.0 /* This file is part of the Enzyme Protocol. (c) Enzyme Council <[email protected]> For the full license information, please view the LICENSE file that was distributed with this source code. */ pragma solidity 0.6.12; pragma experimental ABIEncoderV2; /// @title PolicyManager Interface /// @author Enzyme Council <[email protected]> /// @notice Interface for the PolicyManager interface IPolicyManager { enum PolicyHook { BuySharesSetup, PreBuyShares, PostBuyShares, BuySharesCompleted, PreCallOnIntegration, PostCallOnIntegration } function validatePolicies( address, PolicyHook, bytes calldata ) external; }
// SPDX-License-Identifier: GPL-3.0 /* This file is part of the Enzyme Protocol. (c) Enzyme Council <[email protected]> For the full license information, please view the LICENSE file that was distributed with this source code. */ pragma solidity 0.6.12; import "../../utils/PolicyBase.sol"; /// @title CallOnIntegrationPreValidatePolicyMixin Contract /// @author Enzyme Council <[email protected]> /// @notice A mixin contract for policies that only implement the PreCallOnIntegration policy hook abstract contract PreCallOnIntegrationValidatePolicyBase is PolicyBase { /// @notice Gets the implemented PolicyHooks for a policy /// @return implementedHooks_ The implemented PolicyHooks function implementedHooks() external view override returns (IPolicyManager.PolicyHook[] memory implementedHooks_) { implementedHooks_ = new IPolicyManager.PolicyHook[](1); implementedHooks_[0] = IPolicyManager.PolicyHook.PreCallOnIntegration; return implementedHooks_; } /// @notice Helper to decode rule arguments function __decodeRuleArgs(bytes memory _encodedRuleArgs) internal pure returns (address adapter_, bytes4 selector_) { return abi.decode(_encodedRuleArgs, (address, bytes4)); } }
// SPDX-License-Identifier: GPL-3.0 /* This file is part of the Enzyme Protocol. (c) Enzyme Council <[email protected]> For the full license information, please view the LICENSE file that was distributed with this source code. */ pragma solidity 0.6.12; import "../../IPolicy.sol"; /// @title PolicyBase Contract /// @author Enzyme Council <[email protected]> /// @notice Abstract base contract for all policies abstract contract PolicyBase is IPolicy { address internal immutable POLICY_MANAGER; modifier onlyPolicyManager { require(msg.sender == POLICY_MANAGER, "Only the PolicyManager can make this call"); _; } constructor(address _policyManager) public { POLICY_MANAGER = _policyManager; } /// @notice Validates and initializes a policy as necessary prior to fund activation /// @dev Unimplemented by default, can be overridden by the policy function activateForFund(address, address) external virtual override { return; } /// @notice Updates the policy settings for a fund /// @dev Disallowed by default, can be overridden by the policy function updateFundSettings( address, address, bytes calldata ) external virtual override { revert("updateFundSettings: Updates not allowed for this policy"); } /////////////////// // STATE GETTERS // /////////////////// /// @notice Gets the `POLICY_MANAGER` variable value /// @return policyManager_ The `POLICY_MANAGER` variable value function getPolicyManager() external view returns (address policyManager_) { return POLICY_MANAGER; } }
// SPDX-License-Identifier: GPL-3.0 /* This file is part of the Enzyme Protocol. (c) Enzyme Council <[email protected]> For the full license information, please view the LICENSE file that was distributed with this source code. */ pragma solidity 0.6.12; import "../../core/fund-deployer/IFundDeployer.sol"; /// @title FundDeployerOwnerMixin Contract /// @author Enzyme Council <[email protected]> /// @notice A mixin contract that defers ownership to the owner of FundDeployer abstract contract FundDeployerOwnerMixin { address internal immutable FUND_DEPLOYER; modifier onlyFundDeployerOwner() { require( msg.sender == getOwner(), "onlyFundDeployerOwner: Only the FundDeployer owner can call this function" ); _; } constructor(address _fundDeployer) public { FUND_DEPLOYER = _fundDeployer; } /// @notice Gets the owner of this contract /// @return owner_ The owner /// @dev Ownership is deferred to the owner of the FundDeployer contract function getOwner() public view returns (address owner_) { return IFundDeployer(FUND_DEPLOYER).getOwner(); } /////////////////// // STATE GETTERS // /////////////////// /// @notice Gets the `FUND_DEPLOYER` variable /// @return fundDeployer_ The `FUND_DEPLOYER` variable value function getFundDeployer() external view returns (address fundDeployer_) { return FUND_DEPLOYER; } }
{ "evmVersion": "istanbul", "libraries": {}, "metadata": { "bytecodeHash": "ipfs", "useLiteralContent": true }, "optimizer": { "details": { "constantOptimizer": true, "cse": true, "deduplicate": true, "jumpdestRemover": true, "orderLiterals": true, "peephole": true, "yul": false }, "runs": 200 }, "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_policyManager","type":"address"},{"internalType":"address","name":"_fundDeployer","type":"address"},{"internalType":"uint256","name":"_redemptionWindowBuffer","type":"uint256"},{"internalType":"address[]","name":"_redemptionBlockingAdapters","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"adapter","type":"address"}],"name":"AdapterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"adapter","type":"address"}],"name":"AdapterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"comptrollerProxy","type":"address"},{"indexed":false,"internalType":"uint256","name":"startTimestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"FundSettingsSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevBuffer","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nextBuffer","type":"uint256"}],"name":"RedemptionWindowBufferSet","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"activateForFund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_adapter","type":"address"}],"name":"adapterCanBlockRedemption","outputs":[{"internalType":"bool","name":"canBlockRedemption_","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_comptrollerProxy","type":"address"},{"internalType":"bytes","name":"_encodedSettings","type":"bytes"}],"name":"addFundSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_adapters","type":"address[]"}],"name":"addRedemptionBlockingAdapters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startTimestamp","type":"uint256"}],"name":"calcLatestRedemptionWindowStart","outputs":[{"internalType":"uint256","name":"latestRedemptionWindowStart_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFundDeployer","outputs":[{"internalType":"address","name":"fundDeployer_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"owner_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPolicyManager","outputs":[{"internalType":"address","name":"policyManager_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRedemptionWindowBuffer","outputs":[{"internalType":"uint256","name":"redemptionWindowBuffer_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_comptrollerProxy","type":"address"}],"name":"getRedemptionWindowForFund","outputs":[{"components":[{"internalType":"uint256","name":"startTimestamp","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"}],"internalType":"struct GuaranteedRedemption.RedemptionWindow","name":"redemptionWindow_","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"identifier","outputs":[{"internalType":"string","name":"identifier_","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"implementedHooks","outputs":[{"internalType":"enum IPolicyManager.PolicyHook[]","name":"implementedHooks_","type":"uint8[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_comptrollerProxy","type":"address"},{"internalType":"address","name":"_adapter","type":"address"}],"name":"passesRule","outputs":[{"internalType":"bool","name":"isValid_","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_adapters","type":"address[]"}],"name":"removeRedemptionBlockingAdapters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nextRedemptionWindowBuffer","type":"uint256"}],"name":"setRedemptionWindowBuffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"updateFundSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_comptrollerProxy","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"enum IPolicyManager.PolicyHook","name":"","type":"uint8"},{"internalType":"bytes","name":"_encodedArgs","type":"bytes"}],"name":"validateRule","outputs":[{"internalType":"bool","name":"isValid_","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c06040523480156200001157600080fd5b5060405162001b1b38038062001b1b83398101604081905262000034916200027f565b6001600160601b0319606085811b821660805284901b1660a05260028290556200005e8162000068565b5050505062000471565b60005b8151811015620001b45760006001600160a01b03168282815181106200008d57fe5b60200260200101516001600160a01b03161415620000c85760405162461bcd60e51b8152600401620000bf90620003c2565b60405180910390fd5b620000ed828281518110620000d957fe5b6020026020010151620001b860201b60201c565b156200010d5760405162461bcd60e51b8152600401620000bf90620003d4565b60016000808484815181106200011f57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055507fcf9c2c7f9adbb156bd76affb04df84595f8f5e69cab2e61221b05b05a902fa268282815181106200018c57fe5b6020026020010151604051620001a39190620003b2565b60405180910390a16001016200006b565b5050565b6001600160a01b031660009081526020819052604090205460ff1690565b8051620001e3816200044c565b92915050565b600082601f830112620001fb57600080fd5b8151620002126200020c826200040d565b620003e6565b915081818352602084019350602081019050838560208402820111156200023857600080fd5b60005b83811015620002685781620002518882620001d6565b84525060209283019291909101906001016200023b565b5050505092915050565b8051620001e38162000466565b600080600080608085870312156200029657600080fd5b6000620002a48787620001d6565b9450506020620002b787828801620001d6565b9350506040620002ca8782880162000272565b92505060608501516001600160401b03811115620002e757600080fd5b620002f587828801620001e9565b91505092959194509250565b6200030c8162000437565b82525050565b6000620003216038836200042e565b60008051602062001afb83398151915281527f20616461707465722063616e6e6f7420626520656d7074790000000000000000602082015260400192915050565b6000620003716036836200042e565b60008051602062001afb83398151915281527f206164617074657220616c726561647920616464656400000000000000000000602082015260400192915050565b60208101620001e3828462000301565b60208082528101620001e38162000312565b60208082528101620001e38162000362565b6040518181016001600160401b03811182821017156200040557600080fd5b604052919050565b60006001600160401b038211156200042457600080fd5b5060209081020190565b90815260200190565b60006001600160a01b038216620001e3565b90565b620004578162000437565b81146200046357600080fd5b50565b620004578162000449565b60805160601c60a05160601c611656620004a560003980610482528061057152508061027552806107f752506116566000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80638945f190116100a2578063b67cb40c11610071578063b67cb40c14610214578063cbf54bb214610227578063d44ad6cb1461023c578063e0b9ae4014610244578063ef877c0f146102575761010b565b80638945f190146101d35780638e05b36a146101e657806397c0ac87146101f95780639c2f61d6146102015761010b565b806371030453116100de578063710304531461017657806374dc6b4b146101895780637998a1c4146101a9578063893d20e8146101be5761010b565b80630f5f6b4f146101105780632057e3b6146101255780633146d058146101435780635b8f1c5a14610156575b600080fd5b61012361011e366004610d83565b61026a565b005b61012d61038e565b60405161013a919061152d565b60405180910390f35b610123610151366004610c6d565b610394565b610169610164366004610d05565b610398565b60405161013a9190611420565b610169610184366004610bf7565b6103f2565b61019c610197366004610bf7565b610414565b60405161013a919061151f565b6101b161044f565b60405161013a919061142e565b6101c661047e565b60405161013a9190611401565b6101236101e1366004610c9d565b610516565b61012d6101f4366004610e1b565b61052e565b6101c661056f565b61012361020f366004610dd9565b610593565b610169610222366004610c6d565b6106e0565b61022f61079e565b60405161013a919061140f565b6101c66107f5565b610123610252366004610e1b565b610819565b610123610265366004610dd9565b6108b7565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102bb5760405162461bcd60e51b81526004016102b2906114af565b60405180910390fd5b6000806102ca83850185610e39565b9150915081600014156102fc5780156102f55760405162461bcd60e51b81526004016102b29061147f565b5050610389565b60008111801561030f5750620143708111155b61032b5760405162461bcd60e51b81526004016102b29061150f565b6001600160a01b03851660008181526001602081905260409182902085815501839055517fed112d6c0e84b6900209ce5a4c04541bc63a517e0160888c447ee70be47ce60f9061037e908590859061153b565b60405180910390a250505b505050565b60025490565b5050565b6000806103da84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061094892505050565b5090506103e787826106e0565b979650505050505050565b6001600160a01b03811660009081526020819052604090205460ff165b919050565b61041c610b1b565b506001600160a01b0316600090815260016020818152604092839020835180850190945280548452909101549082015290565b60408051808201909152601581527423aaa0a920a72a22a2a22fa922a222a6a82a24a7a760591b602082015290565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b1580156104d957600080fd5b505afa1580156104ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105119190610c15565b905090565b60405162461bcd60e51b81526004016102b29061146f565b600081421161053e57508061040f565b600061054a4284610968565b9050600061055b8262015180610990565b90506105674282610968565b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b61059b61047e565b6001600160a01b0316336001600160a01b0316146105cb5760405162461bcd60e51b81526004016102b29061144f565b806105e85760405162461bcd60e51b81526004016102b2906114ef565b60005b818110156103895761061783838381811061060257fe5b90506020020160208101906101849190610bf7565b6106335760405162461bcd60e51b81526004016102b2906114cf565b600080600085858581811061064457fe5b90506020020160208101906106599190610bf7565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557fdf980d21d8c7bb34800e668dbe003299093bac8e693614151d3c57f73f98a93d8383838181106106ae57fe5b90506020020160208101906106c39190610bf7565b6040516106d09190611401565b60405180910390a16001016105eb565b60006106eb826103f2565b6106f757506001610798565b6106ff610b1b565b506001600160a01b038316600090815260016020818152604092839020835180850190945280548085529201549083015261073e576000915050610798565b600061074d826000015161052e565b90506107668260200151826109c290919063ffffffff16565b42101580610781575060025461077d908290610968565b4211155b1561079157600192505050610798565b6000925050505b92915050565b604080516001808252818301909252606091602080830190803683370190505090506004816000815181106107cf57fe5b602002602001019060058111156107e257fe5b908160058111156107ef57fe5b90525090565b7f000000000000000000000000000000000000000000000000000000000000000090565b61082161047e565b6001600160a01b0316336001600160a01b0316146108515760405162461bcd60e51b81526004016102b29061144f565b600254818114156108745760405162461bcd60e51b81526004016102b2906114ff565b60028290556040517f72325148df4fbe9f28de10305dd97d6bf5531327e3db352c17dd75f123a90751906108ab908390859061153b565b60405180910390a15050565b6108bf61047e565b6001600160a01b0316336001600160a01b0316146108ef5760405162461bcd60e51b81526004016102b29061144f565b8061090c5760405162461bcd60e51b81526004016102b2906114bf565b6103948282808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506109ee92505050565b6000808280602001905181019061095f9190610c33565b91509150915091565b60008282111561098a5760405162461bcd60e51b81526004016102b29061148f565b50900390565b60008082116109b15760405162461bcd60e51b81526004016102b29061149f565b8183816109ba57fe5b069392505050565b6000828201838110156109e75760405162461bcd60e51b81526004016102b29061145f565b9392505050565b60005b81518110156103945760006001600160a01b0316828281518110610a1157fe5b60200260200101516001600160a01b03161415610a405760405162461bcd60e51b81526004016102b29061143f565b610a5c828281518110610a4f57fe5b60200260200101516103f2565b15610a795760405162461bcd60e51b81526004016102b2906114df565b6001600080848481518110610a8a57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055507fcf9c2c7f9adbb156bd76affb04df84595f8f5e69cab2e61221b05b05a902fa26828281518110610af657fe5b6020026020010151604051610b0b9190611401565b60405180910390a16001016109f1565b604051806040016040528060008152602001600081525090565b8035610798816115ed565b8051610798816115ed565b60008083601f840112610b5d57600080fd5b50813567ffffffffffffffff811115610b7557600080fd5b602083019150836020820283011115610b8d57600080fd5b9250929050565b805161079881611601565b60008083601f840112610bb157600080fd5b50813567ffffffffffffffff811115610bc957600080fd5b602083019150836001820283011115610b8d57600080fd5b80356107988161160a565b803561079881611617565b600060208284031215610c0957600080fd5b60006105678484610b35565b600060208284031215610c2757600080fd5b60006105678484610b40565b60008060408385031215610c4657600080fd5b6000610c528585610b40565b9250506020610c6385828601610b94565b9150509250929050565b60008060408385031215610c8057600080fd5b6000610c8c8585610b35565b9250506020610c6385828601610b35565b60008060008060608587031215610cb357600080fd5b6000610cbf8787610b35565b9450506020610cd087828801610b35565b935050604085013567ffffffffffffffff811115610ced57600080fd5b610cf987828801610b9f565b95989497509550505050565b600080600080600060808688031215610d1d57600080fd5b6000610d298888610b35565b9550506020610d3a88828901610b35565b9450506040610d4b88828901610be1565b935050606086013567ffffffffffffffff811115610d6857600080fd5b610d7488828901610b9f565b92509250509295509295909350565b600080600060408486031215610d9857600080fd5b6000610da48686610b35565b935050602084013567ffffffffffffffff811115610dc157600080fd5b610dcd86828701610b9f565b92509250509250925092565b60008060208385031215610dec57600080fd5b823567ffffffffffffffff811115610e0357600080fd5b610e0f85828601610b4b565b92509250509250929050565b600060208284031215610e2d57600080fd5b60006105678484610bec565b60008060408385031215610e4c57600080fd5b6000610e588585610bec565b9250506020610c6385828601610bec565b6000610e758383610eee565b505060200190565b610e8681611569565b82525050565b6000610e978261155c565b610ea18185611560565b9350610eac83611556565b8060005b83811015610eda578151610ec48882610e69565b9750610ecf83611556565b925050600101610eb0565b509495945050505050565b610e8681611574565b610e868161159f565b6000610f028261155c565b610f0c8185611560565b9350610f1c8185602086016115aa565b610f25816115d6565b9093019392505050565b6000610f3c603883611560565b7f5f5f616464526564656d7074696f6e426c6f636b696e6741646170746572733a81527f20616461707465722063616e6e6f7420626520656d7074790000000000000000602082015260400192915050565b6000610f9b604983611560565b7f6f6e6c7946756e644465706c6f7965724f776e65723a204f6e6c79207468652081527f46756e644465706c6f796572206f776e65722063616e2063616c6c207468697360208201526810333ab731ba34b7b760b91b604082015260600192915050565b600061100c601b83611560565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000611045603783611560565b7f75706461746546756e6453657474696e67733a2055706461746573206e6f742081527f616c6c6f77656420666f72207468697320706f6c696379000000000000000000602082015260400192915050565b60006110a4603a83611560565b7f61646446756e6453657474696e67733a206475726174696f6e206d757374206281527f65203020696620737461727454696d657374616d702069732030000000000000602082015260400192915050565b6000611103601e83611560565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815260200192915050565b600061113c601883611560565b7f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815260200192915050565b6000611175602983611560565b7f4f6e6c792074686520506f6c6963794d616e616765722063616e206d616b65208152681d1a1a5cc818d85b1b60ba1b602082015260400192915050565b60006111c0603a83611560565b7f5f5f616464526564656d7074696f6e426c6f636b696e6741646170746572733a81527f205f61646170746572732063616e6e6f7420626520656d707479000000000000602082015260400192915050565b600061121f603683611560565b7f72656d6f7665526564656d7074696f6e426c6f636b696e6741646170746572738152750e881859185c1d195c881a5cc81b9bdd08185919195960521b602082015260400192915050565b6000611277603683611560565b7f5f5f616464526564656d7074696f6e426c6f636b696e6741646170746572733a815275081859185c1d195c88185b1c9958591e48185919195960521b602082015260400192915050565b60006112cf603b83611560565b7f72656d6f7665526564656d7074696f6e426c6f636b696e67416461707465727381527f3a205f61646170746572732063616e6e6f7420626520656d7074790000000000602082015260400192915050565b600061132e602c83611560565b7f736574526564656d7074696f6e57696e646f774275666665723a2056616c756581526b08185b1c9958591e481cd95d60a21b602082015260400192915050565b600061137c603f83611560565b7f61646446756e6453657474696e67733a206475726174696f6e206d757374206281527f65206265747765656e2031207365636f6e6420616e6420323320686f75727300602082015260400192915050565b805160408301906113df84826113f8565b5060208201516113f260208501826113f8565b50505050565b610e868161159c565b602081016107988284610e7d565b602080825281016109e78184610e8c565b602081016107988284610ee5565b602080825281016109e78184610ef7565b6020808252810161079881610f2f565b6020808252810161079881610f8e565b6020808252810161079881610fff565b6020808252810161079881611038565b6020808252810161079881611097565b60208082528101610798816110f6565b602080825281016107988161112f565b6020808252810161079881611168565b60208082528101610798816111b3565b6020808252810161079881611212565b602080825281016107988161126a565b60208082528101610798816112c2565b6020808252810161079881611321565b602080825281016107988161136f565b6040810161079882846113ce565b6020810161079882846113f8565b6040810161154982856113f8565b6109e760208301846113f8565b60200190565b5190565b90815260200190565b600061079882611590565b151590565b6001600160e01b03191690565b8061040f816115e0565b6001600160a01b031690565b90565b600061079882611586565b60005b838110156115c55781810151838201526020016115ad565b838111156113f25750506000910152565b601f01601f191690565b600681106115ea57fe5b50565b6115f681611569565b81146115ea57600080fd5b6115f681611579565b600681106115ea57600080fd5b6115f68161159c56fea264697066735822122033b3bf05b5ddfbd2dfc16bc96503766f8d6ab33981abb505194e39ad73fbd52064736f6c634300060c00335f5f616464526564656d7074696f6e426c6f636b696e6741646170746572733a0000000000000000000000000bd9f0465d21d4c300c7b8d781a013bdc87a31e80000000000000000000000007e6d3b1161df9c9c7527f68d651b297d2fdb820b000000000000000000000000000000000000000000000000000000000000012c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061010b5760003560e01c80638945f190116100a2578063b67cb40c11610071578063b67cb40c14610214578063cbf54bb214610227578063d44ad6cb1461023c578063e0b9ae4014610244578063ef877c0f146102575761010b565b80638945f190146101d35780638e05b36a146101e657806397c0ac87146101f95780639c2f61d6146102015761010b565b806371030453116100de578063710304531461017657806374dc6b4b146101895780637998a1c4146101a9578063893d20e8146101be5761010b565b80630f5f6b4f146101105780632057e3b6146101255780633146d058146101435780635b8f1c5a14610156575b600080fd5b61012361011e366004610d83565b61026a565b005b61012d61038e565b60405161013a919061152d565b60405180910390f35b610123610151366004610c6d565b610394565b610169610164366004610d05565b610398565b60405161013a9190611420565b610169610184366004610bf7565b6103f2565b61019c610197366004610bf7565b610414565b60405161013a919061151f565b6101b161044f565b60405161013a919061142e565b6101c661047e565b60405161013a9190611401565b6101236101e1366004610c9d565b610516565b61012d6101f4366004610e1b565b61052e565b6101c661056f565b61012361020f366004610dd9565b610593565b610169610222366004610c6d565b6106e0565b61022f61079e565b60405161013a919061140f565b6101c66107f5565b610123610252366004610e1b565b610819565b610123610265366004610dd9565b6108b7565b336001600160a01b037f0000000000000000000000000bd9f0465d21d4c300c7b8d781a013bdc87a31e816146102bb5760405162461bcd60e51b81526004016102b2906114af565b60405180910390fd5b6000806102ca83850185610e39565b9150915081600014156102fc5780156102f55760405162461bcd60e51b81526004016102b29061147f565b5050610389565b60008111801561030f5750620143708111155b61032b5760405162461bcd60e51b81526004016102b29061150f565b6001600160a01b03851660008181526001602081905260409182902085815501839055517fed112d6c0e84b6900209ce5a4c04541bc63a517e0160888c447ee70be47ce60f9061037e908590859061153b565b60405180910390a250505b505050565b60025490565b5050565b6000806103da84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061094892505050565b5090506103e787826106e0565b979650505050505050565b6001600160a01b03811660009081526020819052604090205460ff165b919050565b61041c610b1b565b506001600160a01b0316600090815260016020818152604092839020835180850190945280548452909101549082015290565b60408051808201909152601581527423aaa0a920a72a22a2a22fa922a222a6a82a24a7a760591b602082015290565b60007f0000000000000000000000007e6d3b1161df9c9c7527f68d651b297d2fdb820b6001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b1580156104d957600080fd5b505afa1580156104ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105119190610c15565b905090565b60405162461bcd60e51b81526004016102b29061146f565b600081421161053e57508061040f565b600061054a4284610968565b9050600061055b8262015180610990565b90506105674282610968565b949350505050565b7f0000000000000000000000007e6d3b1161df9c9c7527f68d651b297d2fdb820b90565b61059b61047e565b6001600160a01b0316336001600160a01b0316146105cb5760405162461bcd60e51b81526004016102b29061144f565b806105e85760405162461bcd60e51b81526004016102b2906114ef565b60005b818110156103895761061783838381811061060257fe5b90506020020160208101906101849190610bf7565b6106335760405162461bcd60e51b81526004016102b2906114cf565b600080600085858581811061064457fe5b90506020020160208101906106599190610bf7565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557fdf980d21d8c7bb34800e668dbe003299093bac8e693614151d3c57f73f98a93d8383838181106106ae57fe5b90506020020160208101906106c39190610bf7565b6040516106d09190611401565b60405180910390a16001016105eb565b60006106eb826103f2565b6106f757506001610798565b6106ff610b1b565b506001600160a01b038316600090815260016020818152604092839020835180850190945280548085529201549083015261073e576000915050610798565b600061074d826000015161052e565b90506107668260200151826109c290919063ffffffff16565b42101580610781575060025461077d908290610968565b4211155b1561079157600192505050610798565b6000925050505b92915050565b604080516001808252818301909252606091602080830190803683370190505090506004816000815181106107cf57fe5b602002602001019060058111156107e257fe5b908160058111156107ef57fe5b90525090565b7f0000000000000000000000000bd9f0465d21d4c300c7b8d781a013bdc87a31e890565b61082161047e565b6001600160a01b0316336001600160a01b0316146108515760405162461bcd60e51b81526004016102b29061144f565b600254818114156108745760405162461bcd60e51b81526004016102b2906114ff565b60028290556040517f72325148df4fbe9f28de10305dd97d6bf5531327e3db352c17dd75f123a90751906108ab908390859061153b565b60405180910390a15050565b6108bf61047e565b6001600160a01b0316336001600160a01b0316146108ef5760405162461bcd60e51b81526004016102b29061144f565b8061090c5760405162461bcd60e51b81526004016102b2906114bf565b6103948282808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506109ee92505050565b6000808280602001905181019061095f9190610c33565b91509150915091565b60008282111561098a5760405162461bcd60e51b81526004016102b29061148f565b50900390565b60008082116109b15760405162461bcd60e51b81526004016102b29061149f565b8183816109ba57fe5b069392505050565b6000828201838110156109e75760405162461bcd60e51b81526004016102b29061145f565b9392505050565b60005b81518110156103945760006001600160a01b0316828281518110610a1157fe5b60200260200101516001600160a01b03161415610a405760405162461bcd60e51b81526004016102b29061143f565b610a5c828281518110610a4f57fe5b60200260200101516103f2565b15610a795760405162461bcd60e51b81526004016102b2906114df565b6001600080848481518110610a8a57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055507fcf9c2c7f9adbb156bd76affb04df84595f8f5e69cab2e61221b05b05a902fa26828281518110610af657fe5b6020026020010151604051610b0b9190611401565b60405180910390a16001016109f1565b604051806040016040528060008152602001600081525090565b8035610798816115ed565b8051610798816115ed565b60008083601f840112610b5d57600080fd5b50813567ffffffffffffffff811115610b7557600080fd5b602083019150836020820283011115610b8d57600080fd5b9250929050565b805161079881611601565b60008083601f840112610bb157600080fd5b50813567ffffffffffffffff811115610bc957600080fd5b602083019150836001820283011115610b8d57600080fd5b80356107988161160a565b803561079881611617565b600060208284031215610c0957600080fd5b60006105678484610b35565b600060208284031215610c2757600080fd5b60006105678484610b40565b60008060408385031215610c4657600080fd5b6000610c528585610b40565b9250506020610c6385828601610b94565b9150509250929050565b60008060408385031215610c8057600080fd5b6000610c8c8585610b35565b9250506020610c6385828601610b35565b60008060008060608587031215610cb357600080fd5b6000610cbf8787610b35565b9450506020610cd087828801610b35565b935050604085013567ffffffffffffffff811115610ced57600080fd5b610cf987828801610b9f565b95989497509550505050565b600080600080600060808688031215610d1d57600080fd5b6000610d298888610b35565b9550506020610d3a88828901610b35565b9450506040610d4b88828901610be1565b935050606086013567ffffffffffffffff811115610d6857600080fd5b610d7488828901610b9f565b92509250509295509295909350565b600080600060408486031215610d9857600080fd5b6000610da48686610b35565b935050602084013567ffffffffffffffff811115610dc157600080fd5b610dcd86828701610b9f565b92509250509250925092565b60008060208385031215610dec57600080fd5b823567ffffffffffffffff811115610e0357600080fd5b610e0f85828601610b4b565b92509250509250929050565b600060208284031215610e2d57600080fd5b60006105678484610bec565b60008060408385031215610e4c57600080fd5b6000610e588585610bec565b9250506020610c6385828601610bec565b6000610e758383610eee565b505060200190565b610e8681611569565b82525050565b6000610e978261155c565b610ea18185611560565b9350610eac83611556565b8060005b83811015610eda578151610ec48882610e69565b9750610ecf83611556565b925050600101610eb0565b509495945050505050565b610e8681611574565b610e868161159f565b6000610f028261155c565b610f0c8185611560565b9350610f1c8185602086016115aa565b610f25816115d6565b9093019392505050565b6000610f3c603883611560565b7f5f5f616464526564656d7074696f6e426c6f636b696e6741646170746572733a81527f20616461707465722063616e6e6f7420626520656d7074790000000000000000602082015260400192915050565b6000610f9b604983611560565b7f6f6e6c7946756e644465706c6f7965724f776e65723a204f6e6c79207468652081527f46756e644465706c6f796572206f776e65722063616e2063616c6c207468697360208201526810333ab731ba34b7b760b91b604082015260600192915050565b600061100c601b83611560565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000611045603783611560565b7f75706461746546756e6453657474696e67733a2055706461746573206e6f742081527f616c6c6f77656420666f72207468697320706f6c696379000000000000000000602082015260400192915050565b60006110a4603a83611560565b7f61646446756e6453657474696e67733a206475726174696f6e206d757374206281527f65203020696620737461727454696d657374616d702069732030000000000000602082015260400192915050565b6000611103601e83611560565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815260200192915050565b600061113c601883611560565b7f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815260200192915050565b6000611175602983611560565b7f4f6e6c792074686520506f6c6963794d616e616765722063616e206d616b65208152681d1a1a5cc818d85b1b60ba1b602082015260400192915050565b60006111c0603a83611560565b7f5f5f616464526564656d7074696f6e426c6f636b696e6741646170746572733a81527f205f61646170746572732063616e6e6f7420626520656d707479000000000000602082015260400192915050565b600061121f603683611560565b7f72656d6f7665526564656d7074696f6e426c6f636b696e6741646170746572738152750e881859185c1d195c881a5cc81b9bdd08185919195960521b602082015260400192915050565b6000611277603683611560565b7f5f5f616464526564656d7074696f6e426c6f636b696e6741646170746572733a815275081859185c1d195c88185b1c9958591e48185919195960521b602082015260400192915050565b60006112cf603b83611560565b7f72656d6f7665526564656d7074696f6e426c6f636b696e67416461707465727381527f3a205f61646170746572732063616e6e6f7420626520656d7074790000000000602082015260400192915050565b600061132e602c83611560565b7f736574526564656d7074696f6e57696e646f774275666665723a2056616c756581526b08185b1c9958591e481cd95d60a21b602082015260400192915050565b600061137c603f83611560565b7f61646446756e6453657474696e67733a206475726174696f6e206d757374206281527f65206265747765656e2031207365636f6e6420616e6420323320686f75727300602082015260400192915050565b805160408301906113df84826113f8565b5060208201516113f260208501826113f8565b50505050565b610e868161159c565b602081016107988284610e7d565b602080825281016109e78184610e8c565b602081016107988284610ee5565b602080825281016109e78184610ef7565b6020808252810161079881610f2f565b6020808252810161079881610f8e565b6020808252810161079881610fff565b6020808252810161079881611038565b6020808252810161079881611097565b60208082528101610798816110f6565b602080825281016107988161112f565b6020808252810161079881611168565b60208082528101610798816111b3565b6020808252810161079881611212565b602080825281016107988161126a565b60208082528101610798816112c2565b6020808252810161079881611321565b602080825281016107988161136f565b6040810161079882846113ce565b6020810161079882846113f8565b6040810161154982856113f8565b6109e760208301846113f8565b60200190565b5190565b90815260200190565b600061079882611590565b151590565b6001600160e01b03191690565b8061040f816115e0565b6001600160a01b031690565b90565b600061079882611586565b60005b838110156115c55781810151838201526020016115ad565b838111156113f25750506000910152565b601f01601f191690565b600681106115ea57fe5b50565b6115f681611569565b81146115ea57600080fd5b6115f681611579565b600681106115ea57600080fd5b6115f68161159c56fea264697066735822122033b3bf05b5ddfbd2dfc16bc96503766f8d6ab33981abb505194e39ad73fbd52064736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000bd9f0465d21d4c300c7b8d781a013bdc87a31e80000000000000000000000007e6d3b1161df9c9c7527f68d651b297d2fdb820b000000000000000000000000000000000000000000000000000000000000012c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _policyManager (address): 0x0Bd9f0465d21d4c300c7B8d781A013bdc87A31E8
Arg [1] : _fundDeployer (address): 0x7e6d3b1161DF9c9c7527F68d651B297d2Fdb820B
Arg [2] : _redemptionWindowBuffer (uint256): 300
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000bd9f0465d21d4c300c7b8d781a013bdc87a31e8
Arg [1] : 0000000000000000000000007e6d3b1161df9c9c7527f68d651b297d2fdb820b
Arg [2] : 000000000000000000000000000000000000000000000000000000000000012c
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.