SIP-71: Binary Options v1.1
This SIP proposes several enhancements to binary option markets intended to further incentivise market creators and to improve certainty for participants. In addition, it addresses an edge case affecting some market creators exercising their options.
The binary option market manager and factory will be replaced, and existing markets migrated over to the new manager. This SIP seeks to accomplish the following:
- Remove the pool fee charge for market creators
- Allow market creators to cancel a market if no bids have been placed on it yet (supercedes SCCP-33)
- Allow market creators to disable bid withdrawals at market creation
- Emit bid events for the initial capital at market creation
- Fix a bug that prevents creators from exercising their options before expiry under certain circumstances
As of the Antares release, all but the first of these has been implemented. Removing the pool fee charge for creators is slated to be included in the next release.
The launch of binary options was largely successful, however it is clear that the risks remain high for market creators, which is impeding the creation of new markets. The risky nature of the bidding period additionally dissuades users from participating. This SIP aims to alleviate some of these risks and encourages binary option market volume.
Remove Pool Fee Charge For Creators
At present, market creators still pay fees to the fee pool. Removing this charge will decrease the amount of volume their market must attract before it is profitable. The creator must still determine how to allocate their funds between long and short, but other than gas, there will be no cost to open a market.
This change will allow thinner markets to be viable; the decreased risk will encourage the creation of more binary option markets for a broader range of market settings. Although fewer fees will be generated by market creators, it is hoped that increased participation will compensate for this.
Allow Market Cancellation
Markets with no bids on them will be permitted to be destroyed by their creator, recovering the initial sUSD capital.
If a creator makes a market that attracts no interest, or if they misconfigure it, the creator currently has no way of recovering their funds until the market expires. Allowing a market to be destroyed if no bids have been made reduces the creator's outlay in case they make a mistake, without impacting any other users.
Allow Disabling Withdrawals
At market creation, the creator will be allowed to disabled bid withdrawals for that market's lifespan.
Some users have pointed out that allowing bids to be withdrawn disincentivises participation during the bidding phase, since withdrawals decrease the available pay out and can significantly change the odds. This is likeliest late in the bidding phase.
It is argued that removing this uncertainty confronting bidders will encourage greater participation. This should also serve to derisk the market creator; the enhanced the market utility should attract higher volume since it itself derisks prospective bidders.
Emit Bid Events At Creation
The creator's initial bids aren't currently tracked by events like other bids are. Emitting these events improves the usability of binary option markets on synthetix.exchange and other integrations.
Fix Losing-Side Exercise Bug
If a user has bid on both sides of the market, they have not claimed their options before the maturity date, and their claimable supply of options on the losing side of the market exceeds the remaining sUSD deposited in the market, their funds will be trapped until expiry of the contract. This problem mainly affects market creators.
The problem lies inside the BinaryOption contract (
Whenever a user is owed more options than the remaining claimable supply of sUSD, the transaction reverts on the supposition that this should be impossible; there is a minimum bid size which is vastly larger than the few wei worth of error that could ever be introduced due to rounding errors.
However, this supposition only holds on the winning side of the market, since the value of deposited sUSD falls in proportion with the number of options on the winning side being exercised; but this logic breaks down on the losing side.
Most of the time this is harmless since it only results in a revert if the options being claimed are worthless. But if the following conditions are satisfied, some funds can be trapped until expiry:
- The market is in the maturity phase
- The user has bids on both sides of the market
- The user has not already claimed their options
- The user's owed balance of losing options exceeds their owed balance of winning options
- The market's total sUSD deposited is less than the user's owed losing option balance (possible only if sufficiently-many other participants in the market have exercised winning options)
When a user satisfies these conditions, then when attempting to claim or exercise their options, they will find that the transaction reverts, and their owed funds will remain in the contract.
Since this only affects both-side bidders, and it's likelier to occur with larger bid sizes, it will predominantly affect market creators. However, the funds are recoverable once the option markets are expired.
The intended fix will be as follows:
- After maturity, report the deposited exercisable value to the losing
BinaryOptioninstance as zero when claimable balances are computed.
- Replace the assert statement that caused the transaction to revert with a more-informative require statement.
In consequence of these changes, the claimable option balance of losing bids will fall to zero at maturity, so that only winning options can be claimed. This has no fiscal consequences, as these options pay out nothing when exercised in any case. Options on both sides will still be claimable before maturity.
When this problem was discovered, market creation was immediately disabled on synthetix.exchange. Once the intended functionality is restored, market creation can be reenabled.
On existing markets, although most users will be unaffected, market creators should be encouraged to exercise their positions as soon as possible after maturity to minimise the likelihood of being affected. If they exercise quickly, there is little chance of being affected. In addition to this at the protocol level, the following steps can be taken to ensure no users are impacted:
- On affected markets that are still bidding: place bids on each side from separate wallets, sufficient to cover any affected balances. These can be exercised once other users have exercised their positions.
- On affected markets no longer bidding: Once all unaffected options have been exercised, migrate any affected markets to a separate manager contract, so that the funds can be recovered in a controlled way at expiry.
Copyright and related rights waived via CC0.