Option Contract

Option Contract

Interface

pragma solidity ^0.6.7;
interface OptionV2 {
	    function buyOption(
        uint256 _indexNo,
        uint8 _poolId,
        uint256 _position,
        bool _isCall,
        uint256 _price,
        uint256 _datetime,
        bytes calldata _signData
    ) external returns (uint256, uint256);

    function sellOption(
        uint256 _orderNo,
        uint256 _position,
        uint256 _price,
        uint256 _datetime,
        bytes calldata _signData
    ) external returns (uint256);

    function userExercise(
        uint256 _orderNo
    ) external returns (uint256);

    function userKnockout(
        uint256 _orderNo
    ) external returns (uint256);
	event BuyOption(uint256 orderNo, uint256[3] inData, address buyer);
	event SellOption(uint256 orderNo, uint256[3] outData, address seller);
    event UserExercise(uint256 orderNo,uint256[3] outData,bool isKnockout,address user);
    event ExercisePrice(uint256[] indexNo, uint256[] price, uint256 time);
	event MakerKnockOut(uint256[] orderNoArr);
    event MakerExercise(uint256[] orderNoArr);
}

Events

  • event BuyOption(uint256 orderNo, uint256[3] inData, address buyer)

    **Users buy options **

  • SellOption(uint256 orderNo, uint256[3] outData, address seller)

    Users sell options

  • UserExercise(uint256 orderNo,uint256[3] outData,bool isKnockout,address user)

    Users exercise or knockout liquidation

  • MakerKnockOut(uint256[] orderNoArr)

    The order of Market maker liquidation

  • MakerExercise(uint256[] orderNoArr)

    The order of market maker exercise at expiration

Methods(Read Contract)

1.KnockOut Rebake

uint256 public knockOutRebake

After knockout, users can get the percentage of rebake for the purchase price, rate=knockOutRebake/10000*100%

2.Base PoolsInfo

Get the knockout scale and exercise cycle for the specified poolId

uint256[2][16] public basePoolsInfo;

node

    //- get the exercise cycle of pool_id=1
	let exerciseDay = await contract.basePoolsInfo(pool_id,0);
	//- get the knockout scale of  pool_id=1
	let knockoutRatio = await contract.basePoolsInfo(pool_id,1);
	console.log({
		knockoutRatio:knockoutRatio/10000*100+"%",
		exerciseDay
	})

3. Pay Token

IERC20 public immutable payToken;

**Address of payment token ** node

	let payToken = await contract.payToken();
	console.log({payToken});

4. Pay Token Decimals

uint256 public immutable payTokenDecimals

the accuracy of token,e.g., usdt is 1e6

5. Sign Data Public

address public signDataPublic

The sign address when users buy and sell options

6. Sign Valid Time

uint256 public signValidTime

** The maximum validity period for a signature **

5. fee receiver

address public feeReceiver

**Developers' address to receive platform fees **

6. Sell Price Rate

uint256 public sellPriceRate

When you sell an option, multiply ratio on the basis of the quantitative price model, the initial ratio is 70%,ratio=sellPriceRate/10000*100%

7.Orders

struct Order {
		uint256 indexNo;
        uint8 poolId;
        address payToken;
        uint256 startPrice;
        uint256 exerciseTime;
        bool isCall;
        uint256 balance;
        uint256 margin;
        uint256 makerIncome;
        uint256 price;
        uint8 status;
		uint256 knockoutRebate;
    }
    //index_no => pool_id=> order[]
	Order[] public orders;

**View options details **

node

let order = await contract.orders(index_no, pool_id, order_no);
console.log({
	position: order.position.toString(),
	exerciseTime: order.exerciseTime.toString(),
	startPrice: order.startPrice.toString(),
	price: order.price.toString(),
});

8.Exercise Price

mapping(uint256 => mapping(uint256 => uint256)) public exercisePrice

9. User Rate

uint256[5] public userRate

User buy and sell options rate

node

	let rate = await contract.userRate(index);

userRate[0]:Open put position rate userRate[1]:Option call position rate userRate[2]:Close put positon rate userRate[3]:Close call position rate userRate[4]:Exercise rate

Methods(Write Contract)

1. Buy Option

function buyOption(
		address _payToken
        uint256 _indexNo,
        uint8 _poolId,
        uint256 _position,
        bool _isCall,
        uint256 _price,
        uint256 _datetime,
        bytes calldata _signData
    ) external  returns (uint256 buyAmount, uint256 _orderNo)

Buy options Please refer to Reference

2. Sell Option

function sellOption(
        uint256 _orderNo,
        uint256 _position,
        uint256 _price,
        uint256 _datetime,
        bytes calldata _signData
    ) external  returns (uint256 amount)

Sell option

Please refer to Reference

3. UserExercise

function userExercise(
        uint256 _orderNo
    ) external  returns (uint256)

User exercise

4. User Knockout

function userKnockout(
        uint256 _orderNo
    ) external returns(uint256);

User Knockout

Last updated