Cash-or-nothing binary options. The call pays 1 if spot > strike at expiry, otherwise 0; the put is symmetric. Greek functions return both call and put values in a single call.
Contract: Binary.sol
| Function | Gas | Description |
|---|---|---|
| binaryCallPrice | 2,092 | Cash-or-nothing call: e^(−r·τ) · Φ(d₂) |
| binaryPutPrice | 2,097 | Cash-or-nothing put |
| binaryDelta | 1,825 | First derivative w.r.t. spot — returns (Δcall, Δput) |
| binaryGamma | 1,967 | Second derivative w.r.t. spot — returns (Γcall, Γput) |
| binaryTheta | 3,501 | Time decay, per day — returns (Θcall, Θput) |
| binaryVega | 1,913 | Sensitivity per 1% vol — returns (νcall, νput) |
npm install defimath-lib
spot, strike — uint128, 18-decimal fixed-point (1e18 = 1.0).timeToExp — uint32, seconds to expiration.volatility — uint64, annualized vol as 18-decimal fixed-point (e.g. 50% → 5e17).rate — uint64, annualized risk-free rate as 18-decimal fixed-point.Q.internal pure.import "defimath-lib/contracts/derivatives/Binary.sol";
uint256 binCall = DeFiMathBinary.binaryCallPrice(spot, strike, timeToExp, vol, rate);
uint256 binPut = DeFiMathBinary.binaryPutPrice (spot, strike, timeToExp, vol, rate);
// All binary Greeks return (call, put) tuples.
(int128 dC, int128 dP) = DeFiMathBinary.binaryDelta(spot, strike, timeToExp, vol, rate);gamma and vega are equal for call and put under put-call parity), binary call and put have different second-order sensitivities — so all of binaryDelta, binaryGamma, binaryTheta, and binaryVega return (call, put).Q, compute the unit-payout price and multiply by Q on the call site.binaryTheta is per day. The result is the price change for a one-day decrease in time to expiration.binaryVega is per 1% vol. The result is the price change for a 1-percentage-point change in volatility.| Constant | Value |
|---|---|
| MIN_SPOT | 1e-6 (smallest allowed spot price) |
| MAX_SPOT | 1e15 (largest allowed spot price) |
| MAX_STSP_RATIO | 5× (strike must be within [spot/5, spot·5]) |
| MAX_EXPIRATION | 2 years (63,072,000 seconds) |
| MAX_RATE | 400% annual (4e18) |
| Error | Trigger |
|---|---|
| SpotLowerBoundError | spot ≤ MIN_SPOT |
| SpotUpperBoundError | spot ≥ MAX_SPOT |
| StrikeLowerBoundError | strike · 5 < spot |
| StrikeUpperBoundError | spot · 5 < strike |
| TimeToExpiryUpperBoundError | timeToExp ≥ MAX_EXPIRATION |
| RateUpperBoundError | rate ≥ MAX_RATE |