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
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60c06040 | 15645149 | 669 days ago | IN | 0 ETH | 0.00562752 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
PercentStrikeSelection
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity =0.8.4; import {SafeMath} from "@openzeppelin/contracts/utils/math/SafeMath.sol"; import { IPriceOracle } from "@ribbon-finance/rvol/contracts/interfaces/IPriceOracle.sol"; import {IOptionsPremiumPricer} from "../interfaces/IRibbon.sol"; import { IManualVolatilityOracle } from "@ribbon-finance/rvol/contracts/interfaces/IManualVolatilityOracle.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import {Vault} from "../libraries/Vault.sol"; contract PercentStrikeSelection is Ownable { using SafeMath for uint256; /** * Immutables */ IOptionsPremiumPricer public immutable optionsPremiumPricer; // step in absolute terms at which we will increment // (ex: 100 * 10 ** assetOracleDecimals means we will move at increments of 100 points) uint256 public step; // multiplier for strike selection uint256 public strikeMultiplier; // multiplier to shift asset prices uint256 private immutable assetOracleMultiplier; // Delta are in 4 decimal places. 1 * 10**4 = 1 delta. uint256 private constant DELTA_MULTIPLIER = 10**4; // ChainLink's USD Price oracles return results in 8 decimal places uint256 private constant ORACLE_PRICE_MULTIPLIER = 10**8; // Strike multiplier has 2 decimal places. For example: 150 = 1.5x spot price uint256 private constant STRIKE_MULTIPLIER = 10**2; event StepSet(uint256 oldStep, uint256 newStep, address indexed owner); constructor( address _optionsPremiumPricer, uint256 _strikeMultiplier, uint256 _step ) { require(_optionsPremiumPricer != address(0), "!_optionsPremiumPricer"); require( _strikeMultiplier > STRIKE_MULTIPLIER, "Multiplier must be bigger than 1!" ); require(_step > 0, "!_step"); optionsPremiumPricer = IOptionsPremiumPricer(_optionsPremiumPricer); // ex: delta = 7500 (.75) uint256 _assetOracleMultiplier = 10 ** IPriceOracle( IOptionsPremiumPricer(_optionsPremiumPricer).priceOracle() ) .decimals(); step = _step; strikeMultiplier = _strikeMultiplier; assetOracleMultiplier = _assetOracleMultiplier; } /** * @notice Gets the strike price by multiplying the current underlying price * with a multiplier * @param expiryTimestamp is the unix timestamp of expiration * @param isPut is whether option is put or call * @return newStrikePrice is the strike price of the option (ex: for BTC might be 45000 * 10 ** 8) * @return newDelta will be set to zero for percent strike selection */ function getStrikePrice(uint256 expiryTimestamp, bool isPut) external view returns (uint256 newStrikePrice, uint256 newDelta) { require( expiryTimestamp > block.timestamp, "Expiry must be in the future!" ); // asset price uint256 strikePrice = optionsPremiumPricer.getUnderlyingPrice().mul(strikeMultiplier).div( STRIKE_MULTIPLIER ); newStrikePrice = isPut ? strikePrice.sub(strikePrice % step) : strikePrice.add(step.sub(strikePrice % step)); newDelta = 0; } /** * @notice Set the multiplier for setting the strike price * @param newStrikeMultiplier is the strike multiplier (decimals = 2) */ function setStrikeMultiplier(uint256 newStrikeMultiplier) external onlyOwner { require( newStrikeMultiplier > STRIKE_MULTIPLIER, "Multiplier must be bigger than 1!" ); strikeMultiplier = newStrikeMultiplier; } /** * @notice Sets new step value * @param newStep is the new step value */ function setStep(uint256 newStep) external onlyOwner { require(newStep > 0, "!newStep"); uint256 oldStep = step; step = newStep; emit StepSet(oldStep, newStep, msg.sender); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ 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) { unchecked { 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) { unchecked { 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) { unchecked { // 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) { unchecked { 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) { unchecked { 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) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return 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) { return a * b; } /** * @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. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { 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) { 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) { unchecked { 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. * * 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) { unchecked { 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) { unchecked { require(b > 0, errorMessage); return a % b; } } }
//SPDX-License-Identifier: GPL-3.0 pragma solidity >0.6.0 <0.8.7; interface IPriceOracle { function decimals() external view returns (uint256 _decimals); function latestAnswer() external view returns (uint256 price); }
// SPDX-License-Identifier: MIT pragma solidity =0.8.4; import {Vault} from "../libraries/Vault.sol"; interface IRibbonVault { function deposit(uint256 amount) external; function depositETH() external payable; function cap() external view returns (uint256); function depositFor(uint256 amount, address creditor) external; function vaultParams() external view returns (Vault.VaultParams memory); } interface IStrikeSelection { function getStrikePrice(uint256 expiryTimestamp, bool isPut) external view returns (uint256, uint256); function delta() external view returns (uint256); } interface IOptionsPremiumPricer { function getPremium( uint256 strikePrice, uint256 timeToExpiry, bool isPut ) external view returns (uint256); function getPremiumInStables( uint256 strikePrice, uint256 timeToExpiry, bool isPut ) external view returns (uint256); function getOptionDelta( uint256 spotPrice, uint256 strikePrice, uint256 volatility, uint256 expiryTimestamp ) external view returns (uint256 delta); function getUnderlyingPrice() external view returns (uint256); function priceOracle() external view returns (address); function volatilityOracle() external view returns (address); function optionId() external view returns (bytes32); }
//SPDX-License-Identifier: GPL-3.0 pragma solidity >0.6.0 <0.8.7; interface IManualVolatilityOracle { function vol(bytes32 optionId) external view returns (uint256 standardDeviation); function annualizedVol(bytes32 optionId) external view returns (uint256 annualStdev); function setAnnualizedVol( bytes32[] calldata optionIds, uint256[] calldata newAnnualizedVols ) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../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. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity =0.8.4; library Vault { /************************************************ * IMMUTABLES & CONSTANTS ***********************************************/ // Fees are 6-decimal places. For example: 20 * 10**6 = 20% uint256 internal constant FEE_MULTIPLIER = 10**6; // Premium discount has 1-decimal place. For example: 80 * 10**1 = 80%. Which represents a 20% discount. uint256 internal constant PREMIUM_DISCOUNT_MULTIPLIER = 10; // Otokens have 8 decimal places. uint256 internal constant OTOKEN_DECIMALS = 8; // Percentage of funds allocated to options is 2 decimal places. 10 * 10**2 = 10% uint256 internal constant OPTION_ALLOCATION_MULTIPLIER = 10**2; // Placeholder uint value to prevent cold writes uint256 internal constant PLACEHOLDER_UINT = 1; struct VaultParams { // Option type the vault is selling bool isPut; // Token decimals for vault shares uint8 decimals; // Asset used in Theta / Delta Vault address asset; // Underlying asset of the options sold by vault address underlying; // Minimum supply of the vault shares issued, for ETH it's 10**10 uint56 minimumSupply; // Vault cap uint104 cap; } struct OptionState { // Option that the vault is shorting / longing in the next cycle address nextOption; // Option that the vault is currently shorting / longing address currentOption; // The timestamp when the `nextOption` can be used by the vault uint32 nextOptionReadyAt; } struct VaultState { // 32 byte slot 1 // Current round number. `round` represents the number of `period`s elapsed. uint16 round; // Amount that is currently locked for selling options uint104 lockedAmount; // Amount that was locked for selling options in the previous round // used for calculating performance fee deduction uint104 lastLockedAmount; // 32 byte slot 2 // Stores the total tally of how much of `asset` there is // to be used to mint rTHETA tokens uint128 totalPending; // Total amount of queued withdrawal shares from previous rounds (doesn't include the current round) uint128 queuedWithdrawShares; } struct DepositReceipt { // Maximum of 65535 rounds. Assuming 1 round is 7 days, maximum is 1256 years. uint16 round; // Deposit amount, max 20,282,409,603,651 or 20 trillion ETH deposit uint104 amount; // Unredeemed shares balance uint128 unredeemedShares; } struct Withdrawal { // Maximum of 65535 rounds. Assuming 1 round is 7 days, maximum is 1256 years. uint16 round; // Number of shares withdrawn uint128 shares; } struct AuctionSellOrder { // Amount of `asset` token offered in auction uint96 sellAmount; // Amount of oToken requested in auction uint96 buyAmount; // User Id of delta vault in latest gnosis auction uint64 userId; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with 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; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_optionsPremiumPricer","type":"address"},{"internalType":"uint256","name":"_strikeMultiplier","type":"uint256"},{"internalType":"uint256","name":"_step","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"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":false,"internalType":"uint256","name":"oldStep","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newStep","type":"uint256"},{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"StepSet","type":"event"},{"inputs":[{"internalType":"uint256","name":"expiryTimestamp","type":"uint256"},{"internalType":"bool","name":"isPut","type":"bool"}],"name":"getStrikePrice","outputs":[{"internalType":"uint256","name":"newStrikePrice","type":"uint256"},{"internalType":"uint256","name":"newDelta","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"optionsPremiumPricer","outputs":[{"internalType":"contract IOptionsPremiumPricer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newStep","type":"uint256"}],"name":"setStep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newStrikeMultiplier","type":"uint256"}],"name":"setStrikeMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"step","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"strikeMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c06040523480156200001157600080fd5b5060405162000b7938038062000b798339810160408190526200003491620002ef565b6200003f336200025e565b6001600160a01b0383166200009b5760405162461bcd60e51b815260206004820152601660248201527f215f6f7074696f6e735072656d69756d5072696365720000000000000000000060448201526064015b60405180910390fd5b60648211620000f75760405162461bcd60e51b815260206004820152602160248201527f4d756c7469706c696572206d75737420626520626967676572207468616e20316044820152602160f81b606482015260840162000092565b60008111620001325760405162461bcd60e51b81526020600482015260066024820152650215f737465760d41b604482015260640162000092565b826001600160a01b03166080816001600160a01b031660601b815250506000836001600160a01b0316632630c12f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200018b57600080fd5b505afa158015620001a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c69190620002cb565b6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015620001ff57600080fd5b505afa15801562000214573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023a919062000326565b6200024790600a62000388565b6001929092555060029190915560a052506200045c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620002c657600080fd5b919050565b600060208284031215620002dd578081fd5b620002e882620002ae565b9392505050565b60008060006060848603121562000304578182fd5b6200030f84620002ae565b925060208401519150604084015190509250925092565b60006020828403121562000338578081fd5b5051919050565b600181815b808511156200038057816000190482111562000364576200036462000446565b808516156200037257918102915b93841c939080029062000344565b509250929050565b6000620002e88383600082620003a15750600162000440565b81620003b05750600062000440565b8160018114620003c95760028114620003d457620003f4565b600191505062000440565b60ff841115620003e857620003e862000446565b50506001821b62000440565b5060208310610133831016604e8410600b841016171562000419575081810a62000440565b6200042583836200033f565b80600019048211156200043c576200043c62000446565b0290505b92915050565b634e487b7160e01b600052601160045260246000fd5b60805160601c60a0516106f162000488600039600050506000818160fb015261029d01526106f16000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063afa6626411610066578063afa66264146100f6578063e25fe1751461011d578063e436b89114610126578063f2fde38b1461014e578063f8dcbddb1461016157600080fd5b80630c07440c14610098578063276bd36d146100ad578063715018a6146100c95780638da5cb5b146100d1575b600080fd5b6100ab6100a6366004610581565b610174565b005b6100b660025481565b6040519081526020015b60405180910390f35b6100ab610206565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100c0565b6100de7f000000000000000000000000000000000000000000000000000000000000000081565b6100b660015481565b6101396101343660046105b1565b61023c565b604080519283526020830191909152016100c0565b6100ab61015c36600461055a565b61038c565b6100ab61016f366004610581565b610427565b6000546001600160a01b031633146101a75760405162461bcd60e51b815260040161019e906105e4565b60405180910390fd5b606481116102015760405162461bcd60e51b815260206004820152602160248201527f4d756c7469706c696572206d75737420626520626967676572207468616e20316044820152602160f81b606482015260840161019e565b600255565b6000546001600160a01b031633146102305760405162461bcd60e51b815260040161019e906105e4565b61023a60006104d3565b565b60008042841161028e5760405162461bcd60e51b815260206004820152601d60248201527f457870697279206d75737420626520696e207468652066757475726521000000604482015260640161019e565b600061033860646103326002547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663468f02d26040518163ffffffff1660e01b815260040160206040518083038186803b1580156102f457600080fd5b505afa158015610308573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032c9190610599565b90610523565b90610536565b9050836103685761036361035c60015483610353919061067b565b60015490610542565b829061054e565b610380565b61038060015482610379919061067b565b8290610542565b95600095509350505050565b6000546001600160a01b031633146103b65760405162461bcd60e51b815260040161019e906105e4565b6001600160a01b03811661041b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161019e565b610424816104d3565b50565b6000546001600160a01b031633146104515760405162461bcd60e51b815260040161019e906105e4565b6000811161048c5760405162461bcd60e51b81526020600482015260086024820152670216e6577537465760c41b604482015260640161019e565b6001805490829055604080518281526020810184905233917f08e332c6ae0c42d16506516b7ec987c8101ae8c5e930012ecd0c23142930518c910160405180910390a25050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600061052f8284610645565b9392505050565b600061052f8284610631565b600061052f8284610664565b600061052f8284610619565b60006020828403121561056b578081fd5b81356001600160a01b038116811461052f578182fd5b600060208284031215610592578081fd5b5035919050565b6000602082840312156105aa578081fd5b5051919050565b600080604083850312156105c3578081fd5b82359150602083013580151581146105d9578182fd5b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000821982111561062c5761062c61068f565b500190565b600082610640576106406106a5565b500490565b600081600019048311821515161561065f5761065f61068f565b500290565b6000828210156106765761067661068f565b500390565b60008261068a5761068a6106a5565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fdfea2646970667358221220d399419e777df5cb8269083846054e5b35f415898e526299f42e0f1c3557f92564736f6c634300080400330000000000000000000000008bbe98240a2e4aae3c9b4aa9639740eb17125b68000000000000000000000000000000000000000000000000000000000000007d00000000000000000000000000000000000000000000000000000000001e8480
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100935760003560e01c8063afa6626411610066578063afa66264146100f6578063e25fe1751461011d578063e436b89114610126578063f2fde38b1461014e578063f8dcbddb1461016157600080fd5b80630c07440c14610098578063276bd36d146100ad578063715018a6146100c95780638da5cb5b146100d1575b600080fd5b6100ab6100a6366004610581565b610174565b005b6100b660025481565b6040519081526020015b60405180910390f35b6100ab610206565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100c0565b6100de7f0000000000000000000000008bbe98240a2e4aae3c9b4aa9639740eb17125b6881565b6100b660015481565b6101396101343660046105b1565b61023c565b604080519283526020830191909152016100c0565b6100ab61015c36600461055a565b61038c565b6100ab61016f366004610581565b610427565b6000546001600160a01b031633146101a75760405162461bcd60e51b815260040161019e906105e4565b60405180910390fd5b606481116102015760405162461bcd60e51b815260206004820152602160248201527f4d756c7469706c696572206d75737420626520626967676572207468616e20316044820152602160f81b606482015260840161019e565b600255565b6000546001600160a01b031633146102305760405162461bcd60e51b815260040161019e906105e4565b61023a60006104d3565b565b60008042841161028e5760405162461bcd60e51b815260206004820152601d60248201527f457870697279206d75737420626520696e207468652066757475726521000000604482015260640161019e565b600061033860646103326002547f0000000000000000000000008bbe98240a2e4aae3c9b4aa9639740eb17125b686001600160a01b031663468f02d26040518163ffffffff1660e01b815260040160206040518083038186803b1580156102f457600080fd5b505afa158015610308573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032c9190610599565b90610523565b90610536565b9050836103685761036361035c60015483610353919061067b565b60015490610542565b829061054e565b610380565b61038060015482610379919061067b565b8290610542565b95600095509350505050565b6000546001600160a01b031633146103b65760405162461bcd60e51b815260040161019e906105e4565b6001600160a01b03811661041b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161019e565b610424816104d3565b50565b6000546001600160a01b031633146104515760405162461bcd60e51b815260040161019e906105e4565b6000811161048c5760405162461bcd60e51b81526020600482015260086024820152670216e6577537465760c41b604482015260640161019e565b6001805490829055604080518281526020810184905233917f08e332c6ae0c42d16506516b7ec987c8101ae8c5e930012ecd0c23142930518c910160405180910390a25050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600061052f8284610645565b9392505050565b600061052f8284610631565b600061052f8284610664565b600061052f8284610619565b60006020828403121561056b578081fd5b81356001600160a01b038116811461052f578182fd5b600060208284031215610592578081fd5b5035919050565b6000602082840312156105aa578081fd5b5051919050565b600080604083850312156105c3578081fd5b82359150602083013580151581146105d9578182fd5b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000821982111561062c5761062c61068f565b500190565b600082610640576106406106a5565b500490565b600081600019048311821515161561065f5761065f61068f565b500290565b6000828210156106765761067661068f565b500390565b60008261068a5761068a6106a5565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fdfea2646970667358221220d399419e777df5cb8269083846054e5b35f415898e526299f42e0f1c3557f92564736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000008bbe98240a2e4aae3c9b4aa9639740eb17125b68000000000000000000000000000000000000000000000000000000000000007d00000000000000000000000000000000000000000000000000000000001e8480
-----Decoded View---------------
Arg [0] : _optionsPremiumPricer (address): 0x8BBE98240A2e4Aae3c9b4Aa9639740eB17125b68
Arg [1] : _strikeMultiplier (uint256): 125
Arg [2] : _step (uint256): 2000000
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000008bbe98240a2e4aae3c9b4aa9639740eb17125b68
Arg [1] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [2] : 00000000000000000000000000000000000000000000000000000000001e8480
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 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.