๐Ÿ‹
Moby
  • Letโ€™s Get Started
    • ๐Ÿ‹ About Moby
    • โšก Our Vision
    • ๐Ÿค“ Your Guidebook
      • Get Setup
        • Connect Wallet
        • Trade Options
        • 0DTE Options
        • Provide Liquidity
      • Fees & Instruments
        • Fee Generation
        • Fee Distribution
        • Instruments
      • Testnet
  • How itโ€™s Built
    • ๐Ÿš€ Synchronized Liquidity Engine (SLE)
    • ๐Ÿงฎ Options Pricing Model
      • Mark Price
        • Futures Index
        • Implied Volatility
      • Risk Premium
        • Deriving Greeks
        • Risk Premium Calculation
        • Risk Managing Mechanism
    • ๐Ÿค– Architecture
      • Liquidity Provision Mechanism
      • Options Listing Standard
      • How to Open / Close / Settle Position
      • Synchronized Liquidity Engine (SLE)
      • Options Position Tokens
      • Tools to Maximize Capital Efficiency
    • โš™๏ธ Key Features
      • High Leverage & Limited Risk with No Liquidation
      • Narrow Spread with Dynamic Risk Premium
      • Guaranteed Settlement
      • Capital Efficiency Improvements with Combo Options
      • Even Higher Capital Efficiency with Clearing House
      • Abundant Liquidity for All Options
      • Composable Options for Structured Products
      • High Profitability for LPs
      • Real-Time Automatically Hedged OLP
      • Upcoming Features
    • โ›“ DeFi Options Vault
      • ๐Ÿป Berachain DeFi Options Vault
        • ๐Ÿ”’ Architecture
        • ๐Ÿ“ˆ Options Strategy
  • How itโ€™s Driven
    • ๐Ÿ›ก๏ธ Building the Safest DeFi Protocol
      • Safety Features
      • Smart Contract Audit & Real-Time Security Monitoring
    • ๐Ÿ› Backed by Decentralized Governance
      • Governance
    • ๐ŸŒ Led by the Best Partners & Community
      • Arbitrum X Moby
      • Engagement Programs
  • Need More Info?
    • ๐Ÿ“š Resource Library
      • Developer Resources & Educational Contents
      • Terms & Conditions
      • Glossary
      • FAQ
  • Developers
    • Moby Traders API
      • REST API
        • General
        • Account
        • Market
    • Trade Scripts
      • Prerequisites
      • Open Positions
      • Close Positions
    • Interfaces & ABI
      • PositionManager.sol
      • SettleManager.sol
      • RewardRouterV2.sol
      • OptionsMarket.sol
    • Appendix 1: Parameters for Open/Close Options
    • Appendix 2: the Diff between optionId and optionTokenId
    • Appendix 3: Sample Moby Contract Module for Developers
Powered by GitBook
On this page
  • OptionsMarket Interface Documentation
  • State-Changing Functions
  • View Functions
  • Administrative Functions
  • Events
  • ABI
  1. Developers
  2. Interfaces & ABI

OptionsMarket.sol

Last Updated At 20th Jan, 2025

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 _isCalls,
    uint8 _vaultIndex
) 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
  }
]

PreviousRewardRouterV2.solNextAppendix 1: Parameters for Open/Close Options

Last updated 4 months ago