OptionsMarket.sol

Last Updated At 30th Oct, 2024

OptionsMarket Interface Documentation

State-Changing Functions

addOptions

function addOptions(
    address _underlyingAsset,
    uint40 _expiry,
    uint48[] memory _strikePrices
) external
  • Adds new options for a specific underlying asset

  • Creates options with multiple strike prices

  • Sets expiration time for the options

addUnderlyingAsset

function addUnderlyingAsset(
    address _underlyingAsset,
    address _optionsToken
) external
  • Registers a new underlying asset for options

  • Associates the asset with its options token

  • Assigns a new underlying asset index

removeOptions

function removeOptions(
    bytes32[] memory _ids
) external
  • Removes multiple options by their IDs

  • Deactivates the specified options

  • Updates the active options count

View Functions

activeOptionsCount

function activeOptionsCount(
) external view returns (uint256)
  • Returns the total number of active options

  • Used for system monitoring

getMainStableAsset

function getMainStableAsset(
) external view returns (address, uint8)
  • Returns the main stable asset address and decimals

  • Used for price calculations

getOptionDetail

function getOptionDetail(
    bytes32 _id
) external view returns (uint16, address, uint40, uint48)
  • Returns details of a specific option

  • Includes underlying asset index, address, expiry, and strike price

getOptionId

function getOptionId(
    uint16 _underlyingAssetIndex,
    uint40 _expiry,
    uint48 _strikePrice
) external pure returns (bytes32)
  • Generates a unique option ID from parameters

  • Pure function for consistent ID generation

getOptionTokenId

function getOptionTokenId(
    uint16 _underlyingAssetIndex,
    uint40 _expiry,
    uint8 _length,
    bool[4] memory _isBuys,
    bytes32[4] memory _optionIds,
    bool[4] memory _isCall,
    uint8 _sourceVaultIndex
) external view returns (uint256, bytes32[4] memory)
  • Generates token ID for option combinations

  • Used for complex option positions

  • Returns token ID and associated option IDs

getOptionsBatch

function getOptionsBatch(
    bytes32[] memory _ids
) external view returns (IOptionsMarket.Option[] memory)
  • Returns details for multiple options in one call

  • Efficient batch retrieval of option information

getOptionsTokenByIndex

function getOptionsTokenByIndex(
    uint16 _underlyingAssetIndex
) external view returns (address)
  • Returns the options token address for an underlying asset index

  • Used for token management

getUnderlyingAssetByIndex

function getUnderlyingAssetByIndex(
    uint16 _underlyingAssetIndex
) external view returns (address, uint8)
  • Returns the underlying asset address and decimals for a given index

  • Used for asset management and calculations

indexToUnderlyingAsset

function indexToUnderlyingAsset(
    uint16
) external view returns (address)
  • Maps an index to its underlying asset address

  • Used for asset lookup

isOptionAvailable

function isOptionAvailable(
    bytes32 _id
) external view returns (bool)
  • Checks if an option is active and available for trading

  • Used for validation

isUnderlyingAssetActive

function isUnderlyingAssetActive(
    address
) external view returns (bool)
  • Checks if an underlying asset is active in the system

  • Used for asset validation

mainStableAsset

function mainStableAsset(
) external view returns (address)
  • Returns the address of the main stable asset

  • Used for price calculations and settlements

nextUnderlyingAssetIndex

function nextUnderlyingAssetIndex(
) external view returns (uint16)
  • Returns the next available index for underlying assets

  • Used when adding new assets

options

function options(
    bytes32
) external view returns (
    uint16 underlyingAssetIndex,
    address underlyingAsset,
    uint40 expiry,
    uint48 strikePrice,
    bool isActive
)
  • Returns complete details of an option

  • Includes all option parameters and status

optionsTokenToUnderlyingAsset

function optionsTokenToUnderlyingAsset(
    address
) external view returns (address)
  • Maps an options token address to its underlying asset

  • Used for token-asset relationship lookup

registeredOptionsCount

function registeredOptionsCount(
) external view returns (uint256)
  • Returns the total number of registered options

  • Includes both active and inactive options

underlyingAssetToIndex

function underlyingAssetToIndex(
    address
) external view returns (uint16)
  • Maps an underlying asset address to its index

  • Used for asset management

underlyingAssetToOptionsToken

function underlyingAssetToOptionsToken(
    address
) external view returns (address)
  • Maps an underlying asset to its options token

  • Used for token management

validateOptionIds

function validateOptionIds(
    uint8 _length,
    bytes32[4] memory _optionIds
) external view returns (
    uint16 underlyingAssetIndex,
    uint40 expiry,
    uint8 availableLength
)
  • Validates a set of option IDs

  • Checks consistency of underlying asset and expiry

  • Returns validation details

Administrative Functions

AuthorityUtil_init

function __AuthorityUtil_init__(
    address _authority
) external
  • Initializes the authority utility module

  • Sets up permission management system

initialize

function initialize(
    address _authority
) external
  • Initializes the options market contract

  • Sets up initial parameters and authority

renounceOwnership

function renounceOwnership(
) external
  • Allows owner to renounce their ownership

  • Security feature for decentralization

setAuthority

function setAuthority(
    address _newAuthority
) external
  • Updates the contract authority address

  • Used for permission management updates

setIsUnderlyingAsset

function setIsUnderlyingAsset(
    uint16 _underlyingAssetIndex,
    bool _isUnderlyingAssetActive
) external
  • Sets the active status of an underlying asset

  • Controls which assets can be used for options

setMainStableAsset

function setMainStableAsset(
    address _mainStableAsset
) external
  • Sets the main stable asset address

  • Used for price calculations and settlements

transferOwnership

function transferOwnership(
    address newOwner
) external
  • Transfers contract ownership to a new address

  • Used for administrative control changes

Events

AddUnderlyingAsset

event AddUnderlyingAsset(
    uint16 indexed underlyingAssetIndex,
    address indexed underlyingAsset,
    address optionsToken
)
  • Emitted when a new underlying asset is added

  • Records the asset index, address, and associated options token

AuthorityUpdated

event AuthorityUpdated(
    address indexed authority
)
  • Emitted when the contract authority is updated

  • Records the new authority address

OptionStatusChanged

event OptionStatusChanged(
    bytes32 indexed id,
    address indexed underlyingAsset,
    uint40 indexed expiry,
    uint48 strikePrice,
    bool isActive
)
  • Emitted when an option's status changes

  • Records all relevant option details and new status

OwnershipTransferred

event OwnershipTransferred(
    address indexed previousOwner,
    address indexed newOwner
)
  • Emitted when contract ownership is transferred

  • Records both previous and new owner addresses

SetIsUnderlyingAsset

event SetIsUnderlyingAsset(
    address indexed underlyingAsset,
    bool isUnderlyingAssetActive
)
  • Emitted when an underlying asset's status is changed

  • Records the asset address and new active status

SetMainStableAsset

event SetMainStableAsset(
    address indexed mainStableAsset
)
  • Emitted when the main stable asset is updated

  • Records the new stable asset address

UpdateOptionsToken

event UpdateOptionsToken(
    address indexed underlyingAsset,
    address optionsToken
)
  • Emitted when an options token is updated for an asset

  • Records the underlying asset and new options token address

ABI

[
  {
    "type": "function",
    "name": "__AuthorityUtil_init__",
    "inputs": [
      {
        "name": "_authority",
        "type": "address",
        "internalType": "contract IOptionsAuthority"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "activeOptionsCount",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "addOptions",
    "inputs": [
      {
        "name": "_underlyingAsset",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "_expiry",
        "type": "uint40",
        "internalType": "uint40"
      },
      {
        "name": "_strikePrices",
        "type": "uint48[]",
        "internalType": "uint48[]"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "addUnderlyingAsset",
    "inputs": [
      {
        "name": "_underlyingAsset",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "_optionsToken",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "authority",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "contract IOptionsAuthority"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getMainStableAsset",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "",
        "type": "uint8",
        "internalType": "uint8"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getOptionDetail",
    "inputs": [
      {
        "name": "_id",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "uint16",
        "internalType": "uint16"
      },
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "",
        "type": "uint40",
        "internalType": "uint40"
      },
      {
        "name": "",
        "type": "uint48",
        "internalType": "uint48"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getOptionId",
    "inputs": [
      {
        "name": "_underlyingAssetIndex",
        "type": "uint16",
        "internalType": "uint16"
      },
      {
        "name": "_expiry",
        "type": "uint40",
        "internalType": "uint40"
      },
      {
        "name": "_strikePrice",
        "type": "uint48",
        "internalType": "uint48"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "getOptionTokenId",
    "inputs": [
      {
        "name": "_underlyingAssetIndex",
        "type": "uint16",
        "internalType": "uint16"
      },
      {
        "name": "_expiry",
        "type": "uint40",
        "internalType": "uint40"
      },
      {
        "name": "_length",
        "type": "uint8",
        "internalType": "uint8"
      },
      {
        "name": "_isBuys",
        "type": "bool[4]",
        "internalType": "bool[4]"
      },
      {
        "name": "_optionIds",
        "type": "bytes32[4]",
        "internalType": "bytes32[4]"
      },
      {
        "name": "_isCall",
        "type": "bool[4]",
        "internalType": "bool[4]"
      },
      {
        "name": "_sourceVaultIndex",
        "type": "uint8",
        "internalType": "uint8"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "",
        "type": "bytes32[4]",
        "internalType": "bytes32[4]"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getOptionsBatch",
    "inputs": [
      {
        "name": "_ids",
        "type": "bytes32[]",
        "internalType": "bytes32[]"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "tuple[]",
        "internalType": "struct IOptionsMarket.Option[]",
        "components": [
          {
            "name": "underlyingAssetIndex",
            "type": "uint16",
            "internalType": "uint16"
          },
          {
            "name": "underlyingAsset",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiry",
            "type": "uint40",
            "internalType": "uint40"
          },
          {
            "name": "strikePrice",
            "type": "uint48",
            "internalType": "uint48"
          },
          {
            "name": "isActive",
            "type": "bool",
            "internalType": "bool"
          }
        ]
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getOptionsTokenByIndex",
    "inputs": [
      {
        "name": "_underlyingAssetIndex",
        "type": "uint16",
        "internalType": "uint16"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getUnderlyingAssetByIndex",
    "inputs": [
      {
        "name": "_underlyingAssetIndex",
        "type": "uint16",
        "internalType": "uint16"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "",
        "type": "uint8",
        "internalType": "uint8"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "indexToUnderlyingAsset",
    "inputs": [
      {
        "name": "",
        "type": "uint16",
        "internalType": "uint16"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "initialize",
    "inputs": [
      {
        "name": "_authority",
        "type": "address",
        "internalType": "contract IOptionsAuthority"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "isOptionAvailable",
    "inputs": [
      {
        "name": "_id",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "isUnderlyingAssetActive",
    "inputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "mainStableAsset",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "nextUnderlyingAssetIndex",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint16",
        "internalType": "uint16"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "options",
    "inputs": [
      {
        "name": "",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "outputs": [
      {
        "name": "underlyingAssetIndex",
        "type": "uint16",
        "internalType": "uint16"
      },
      {
        "name": "underlyingAsset",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "expiry",
        "type": "uint40",
        "internalType": "uint40"
      },
      {
        "name": "strikePrice",
        "type": "uint48",
        "internalType": "uint48"
      },
      {
        "name": "isActive",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "optionsTokenToUnderlyingAsset",
    "inputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "owner",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "registeredOptionsCount",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "removeOptions",
    "inputs": [
      {
        "name": "_ids",
        "type": "bytes32[]",
        "internalType": "bytes32[]"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "renounceOwnership",
    "inputs": [],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "setAuthority",
    "inputs": [
      {
        "name": "_newAuthority",
        "type": "address",
        "internalType": "contract IOptionsAuthority"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "setIsUnderlyingAsset",
    "inputs": [
      {
        "name": "_underlyingAssetIndex",
        "type": "uint16",
        "internalType": "uint16"
      },
      {
        "name": "_isUnderlyingAssetActive",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "setMainStableAsset",
    "inputs": [
      {
        "name": "_mainStableAsset",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "transferOwnership",
    "inputs": [
      {
        "name": "newOwner",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "underlyingAssetToIndex",
    "inputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "uint16",
        "internalType": "uint16"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "underlyingAssetToOptionsToken",
    "inputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "validateOptionIds",
    "inputs": [
      {
        "name": "_length",
        "type": "uint8",
        "internalType": "uint8"
      },
      {
        "name": "_optionIds",
        "type": "bytes32[4]",
        "internalType": "bytes32[4]"
      }
    ],
    "outputs": [
      {
        "name": "underlyingAssetIndex",
        "type": "uint16",
        "internalType": "uint16"
      },
      {
        "name": "expiry",
        "type": "uint40",
        "internalType": "uint40"
      },
      {
        "name": "availableLength",
        "type": "uint8",
        "internalType": "uint8"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "event",
    "name": "AddUnderlyingAsset",
    "inputs": [
      {
        "name": "underlyingAssetIndex",
        "type": "uint16",
        "indexed": true,
        "internalType": "uint16"
      },
      {
        "name": "underlyingAsset",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "optionsToken",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "AuthorityUpdated",
    "inputs": [
      {
        "name": "authority",
        "type": "address",
        "indexed": true,
        "internalType": "contract IOptionsAuthority"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "OptionStatusChanged",
    "inputs": [
      {
        "name": "id",
        "type": "bytes32",
        "indexed": true,
        "internalType": "bytes32"
      },
      {
        "name": "underlyingAsset",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "expiry",
        "type": "uint40",
        "indexed": true,
        "internalType": "uint40"
      },
      {
        "name": "strikePrice",
        "type": "uint48",
        "indexed": false,
        "internalType": "uint48"
      },
      {
        "name": "isActive",
        "type": "bool",
        "indexed": false,
        "internalType": "bool"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "OwnershipTransferred",
    "inputs": [
      {
        "name": "previousOwner",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "newOwner",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "SetIsUnderlyingAsset",
    "inputs": [
      {
        "name": "underlyingAsset",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "isUnderlyingAssetActive",
        "type": "bool",
        "indexed": false,
        "internalType": "bool"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "SetMainStableAsset",
    "inputs": [
      {
        "name": "mainStableAsset",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "UpdateOptionsToken",
    "inputs": [
      {
        "name": "underlyingAsset",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "optionsToken",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      }
    ],
    "anonymous": false
  }
]

Last updated