@node-dlc/messaging
Version:
DLC Messaging Protocol
193 lines • 7.93 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.HyperbolaPayoutCurvePiece = exports.PolynomialPayoutCurvePiece = exports.PayoutCurvePiece = void 0;
const bufio_1 = require("@node-dlc/bufio");
const MessageType_1 = require("../MessageType");
class PayoutCurvePiece {
static deserialize(buf) {
const reader = new bufio_1.BufferReader(buf);
const type = Number(reader.readBigSize());
switch (type) {
case MessageType_1.MessageType.PolynomialPayoutCurvePiece:
return PolynomialPayoutCurvePiece.deserialize(buf);
case MessageType_1.MessageType.HyperbolaPayoutCurvePiece:
return HyperbolaPayoutCurvePiece.deserialize(buf);
case MessageType_1.MessageType.OldHyperbolaPayoutCurvePiece:
return HyperbolaPayoutCurvePiece.deserialize(buf);
default:
throw new Error(`Payout function TLV type must be PolynomialPayoutCurvePiece or HyperbolaPayoutCurvePiece`);
}
}
}
exports.PayoutCurvePiece = PayoutCurvePiece;
/**
* PolynomialPayoutCurvePiece
*/
class PolynomialPayoutCurvePiece extends PayoutCurvePiece {
constructor() {
super(...arguments);
/**
* The type for polynomial_payout_curve_piece message. polynomial_payout_curve_piece = ???
*/
this.type = PolynomialPayoutCurvePiece.type;
this.points = [];
}
/**
* Deserializes an polynomial_payout_curve_piece message
* @param buf
*/
static deserialize(buf) {
const instance = new PolynomialPayoutCurvePiece();
const reader = new bufio_1.BufferReader(buf);
reader.readBigSize(); // read type
instance.length = reader.readBigSize(); // need to fix this
reader.readUInt16BE(); // num_pts
while (!reader.eof) {
const eventOutcome = reader.readBigSize();
const outcomePayout = reader.readBigSize();
const extraPrecision = reader.readUInt16BE();
instance.points.push({
eventOutcome,
outcomePayout,
extraPrecision,
});
}
return instance;
}
/**
* Converts polynomial_payout_curve_piece to JSON
*/
toJSON() {
return {
type: this.type,
points: this.points.map((point) => {
return {
eventOutcome: Number(point.eventOutcome),
outcomePayout: Number(point.outcomePayout),
extraPrecision: Number(point.extraPrecision),
};
}),
};
}
/**
* Serializes the polynomial_payout_curve_piece message into a Buffer
*/
serialize() {
const writer = new bufio_1.BufferWriter();
writer.writeBigSize(this.type);
const dataWriter = new bufio_1.BufferWriter();
dataWriter.writeUInt16BE(this.points.length);
for (const point of this.points) {
dataWriter.writeBigSize(point.eventOutcome);
dataWriter.writeBigSize(point.outcomePayout);
dataWriter.writeUInt16BE(point.extraPrecision);
}
writer.writeBigSize(dataWriter.size);
writer.writeBytes(dataWriter.toBuffer());
return writer.toBuffer();
}
}
exports.PolynomialPayoutCurvePiece = PolynomialPayoutCurvePiece;
PolynomialPayoutCurvePiece.type = MessageType_1.MessageType.PolynomialPayoutCurvePiece;
/**
* HyperbolaPayoutCurvePiece
*/
class HyperbolaPayoutCurvePiece extends PayoutCurvePiece {
constructor() {
super(...arguments);
/**
* The type for hyperbola_payout_curve_piece message. hyperbola_payout_curve_piece = ???
*/
this.type = HyperbolaPayoutCurvePiece.type;
}
/**
* Deserializes an hyperbola_payout_curve_piece message
* @param buf
*/
static deserialize(buf) {
const instance = new HyperbolaPayoutCurvePiece();
const reader = new bufio_1.BufferReader(buf);
reader.readBigSize(); // read type
instance.length = reader.readBigSize(); // need to fix this
instance.usePositivePiece = reader.readUInt8() === 1;
instance.translateOutcomeSign = reader.readUInt8() === 1;
instance.translateOutcome = reader.readBigSize();
instance.translateOutcomeExtraPrecision = reader.readUInt16BE();
instance.translatePayoutSign = reader.readUInt8() === 1;
instance.translatePayout = reader.readBigSize();
instance.translatePayoutExtraPrecision = reader.readUInt16BE();
instance.aSign = reader.readUInt8() === 1;
instance.a = reader.readBigSize();
instance.aExtraPrecision = reader.readUInt16BE();
instance.bSign = reader.readUInt8() === 1;
instance.b = reader.readBigSize();
instance.bExtraPrecision = reader.readUInt16BE();
instance.cSign = reader.readUInt8() === 1;
instance.c = reader.readBigSize();
instance.cExtraPrecision = reader.readUInt16BE();
instance.dSign = reader.readUInt8() === 1;
instance.d = reader.readBigSize();
instance.dExtraPrecision = reader.readUInt16BE();
return instance;
}
/**
* Converts hyperbola_payout_curve_piece to JSON
*/
toJSON() {
return {
type: this.type,
usePositivePiece: this.usePositivePiece,
translateOutcomeSign: this.translateOutcomeSign,
translateOutcome: Number(this.translateOutcome),
translateOutcomeExtraPrecision: this.translateOutcomeExtraPrecision,
translatePayoutSign: this.translatePayoutSign,
translatePayout: Number(this.translatePayout),
translatePayoutExtraPrecision: this.translatePayoutExtraPrecision,
aSign: this.aSign,
a: Number(this.a),
aExtraPrecision: this.aExtraPrecision,
bSign: this.bSign,
b: Number(this.b),
bExtraPrecision: this.bExtraPrecision,
cSign: this.cSign,
c: Number(this.c),
cExtraPrecision: this.cExtraPrecision,
dSign: this.dSign,
d: Number(this.d),
dExtraPrecision: this.dExtraPrecision,
};
}
/**
* Serializes the hyperbola_payout_curve_piece message into a Buffer
*/
serialize() {
const writer = new bufio_1.BufferWriter();
writer.writeBigSize(this.type);
const dataWriter = new bufio_1.BufferWriter();
dataWriter.writeUInt8(this.usePositivePiece ? 1 : 0);
dataWriter.writeUInt8(this.translateOutcomeSign ? 1 : 0);
dataWriter.writeBigSize(this.translateOutcome);
dataWriter.writeUInt16BE(this.translateOutcomeExtraPrecision);
dataWriter.writeUInt8(this.translatePayoutSign ? 1 : 0);
dataWriter.writeBigSize(this.translatePayout);
dataWriter.writeUInt16BE(this.translatePayoutExtraPrecision);
dataWriter.writeUInt8(this.aSign ? 1 : 0);
dataWriter.writeBigSize(this.a);
dataWriter.writeUInt16BE(this.aExtraPrecision);
dataWriter.writeUInt8(this.bSign ? 1 : 0);
dataWriter.writeBigSize(this.b);
dataWriter.writeUInt16BE(this.bExtraPrecision);
dataWriter.writeUInt8(this.cSign ? 1 : 0);
dataWriter.writeBigSize(this.c);
dataWriter.writeUInt16BE(this.cExtraPrecision);
dataWriter.writeUInt8(this.dSign ? 1 : 0);
dataWriter.writeBigSize(this.d);
dataWriter.writeUInt16BE(this.dExtraPrecision);
writer.writeBigSize(dataWriter.size);
writer.writeBytes(dataWriter.toBuffer());
return writer.toBuffer();
}
}
exports.HyperbolaPayoutCurvePiece = HyperbolaPayoutCurvePiece;
HyperbolaPayoutCurvePiece.type = MessageType_1.MessageType.HyperbolaPayoutCurvePiece;
//# sourceMappingURL=PayoutCurvePiece.js.map