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 | 1x 1x 1x 1x 2x 2x 2x 2x 2x 2x 2x 2x 2x 1x 1x 1x 1x 1x 1x 1x | import { PayoutFunctionV0 } from '@node-dlc/messaging';
import BN from 'bignumber.js';
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(-Number(contractSize));
const payoutCurve = new HyperbolaPayoutCurve(a, b, c, d, f_1, f_2);
const maxOutcome = BigInt(
new BN(oracleBase).pow(oracleDigits).minus(1).toString(10),
);
return {
maxOutcome,
totalCollateral: contractSize,
payoutCurve,
};
};
const buildPayoutFunction = (
strikePrice: bigint,
contractSize: bigint,
totalCollateral: bigint,
oracleBase: number,
oracleDigits: number,
): { payoutFunction: PayoutFunctionV0; totalCollateral: bigint } => {
const { maxOutcome, payoutCurve } = buildCurve(
strikePrice,
contractSize,
oracleBase,
oracleDigits,
);
const payoutFunction = new PayoutFunctionV0();
payoutFunction.payoutFunctionPieces.push({
endPoint: {
eventOutcome: maxOutcome,
outcomePayout: BigInt(0),
extraPrecision: 0,
},
payoutCurvePiece: payoutCurve.toPayoutCurvePiece(),
});
payoutFunction.lastEndpoint = {
eventOutcome: maxOutcome,
outcomePayout: BigInt(0),
extraPrecision: 0,
};
return {
payoutFunction,
totalCollateral,
};
};
export const LongPut = { buildCurve, buildPayoutFunction };
|