Derivative recipes implementing the IDerivativeLogic interface can make use of the HasCommission and ExecutableByThirdParty helper contracts. The HasCommission contract exposes the view functions to query information about the derivative’s author and sets the commission for the creation of the derivative at 0.25% of the profit. The ExecutableByThirdParty implements the set of functions necessary to allow third-party execution and query whether it has already been granted.

validateInput(Derivative memory _derivative) public view returns(bool);

It should allow to implement custom validation requirements for a derivative recipe

getMargin(Derivative memory _derivative) public view returns(uint256 buyerMargin, uint256 sellerMargin)

getExecutionPayout(Derivative memory _derivative, uint256 _result) public view returns(uint256 buyerPayout, uint256 sellerPayout)

The heart of customization of a derivative recipe. It is the function called by the Core contract to retrieve the payouts of a buyer and a seller. Any kind of payout logic - from traditional call/put options to more exotic products- should be implemented here.

getAuthorAddress() public view returns(address authorAddress);

It should return the derivative author’s address

getAuthorCommission() public view returns(uint256 commission);

It should return the derivative author’s commission

allowThirdPartyExecution(bool _allow) public

It should implement the logic to enable third party execution of the derivative’s positions

thirdPartyExecutionAllowed(address _derivativeOwner) public view returns(bool)

It should allow to retrieve whether third-party positions’ execution has been enabled for a given _derivativeOwner address

isPool() public view returns(bool)



fetchData(address oracleId, uint256 timestamp) public

recursivelyFetchData(address oracleId, uint256 timestamp, uint256 period, uint256 times) public

calculateFetchPrice(address oracleId) public returns(uint256 fetchPrice)

Last updated