Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | 1x 1x 1x 1x 1x 8x 8x 8x 8x 8x 8x 8x 8x 8x 8x 1x 3x 3x 3x 3x 3x 3x 3x 1x | import { PayoutFunctionV0 } from '@node-dlc/messaging';
import BN from 'bignumber.js';
import { toBigInt } from '../../utils/BigIntUtils';
import { HyperbolaPayoutCurve } from '../HyperbolaPayoutCurve';
const buildCurve = (
strikePrice: bigint,
contractSize: bigint,
oracleBase: number,
oracleDigits: number,
): {
maxOutcome: bigint;
totalCollateral: bigint;
payoutCurve: HyperbolaPayoutCurve;
} => {
const a = new BN(1);
const b = new BN(0);
const c = new BN(0);
const d = new BN((strikePrice * contractSize).toString());
const f_1 = new BN(0);
const _f_2 = new BN(0);
const _tempHyperbolaPayoutCurve = new HyperbolaPayoutCurve(
a,
b,
c,
d,
f_1,
_f_2,
);
const maxOutcome = BigInt(
new BN(oracleBase).pow(oracleDigits).minus(1).toString(10),
);
const maxOutcomePayout = _tempHyperbolaPayoutCurve
.getPayout(maxOutcome)
.integerValue();
return {
maxOutcome,
totalCollateral: contractSize - toBigInt(maxOutcomePayout),
payoutCurve: new HyperbolaPayoutCurve(
a,
b,
c,
d,
f_1,
maxOutcomePayout.negated(),
),
};
};
const buildPayoutFunction = (
strikePrice: bigint,
contractSize: bigint,
oracleBase: number,
oracleDigits: number,
): { payoutFunction: PayoutFunctionV0; totalCollateral: bigint } => {
const { maxOutcome, totalCollateral, payoutCurve } = buildCurve(
strikePrice,
contractSize,
oracleBase,
oracleDigits,
);
const payoutFunction = new PayoutFunctionV0();
payoutFunction.endpoint0 = BigInt(0);
payoutFunction.endpointPayout0 = totalCollateral;
payoutFunction.extraPrecision0 = 0;
payoutFunction.pieces.push({
payoutCurvePiece: payoutCurve.toPayoutCurvePiece(),
endpoint: maxOutcome,
endpointPayout: BigInt(0),
extraPrecision: 0,
});
return {
payoutFunction,
totalCollateral,
};
};
export const CoveredCall = { buildCurve, buildPayoutFunction };
|