@c4tplatform/caminojs
Version:
Camino Platform JS Library
113 lines • 13.7 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.EssentialProposal = exports.VoteOption = void 0;
const buffer_1 = require("buffer/");
const bintools_1 = __importDefault(require("../../../utils/bintools"));
const serialization_1 = require("../../../utils/serialization");
const common_1 = require("../../../common");
/**
* @ignore
*/
const bintools = bintools_1.default.getInstance();
const serialization = serialization_1.Serialization.getInstance();
class VoteOption extends common_1.NBytes {
clone() {
let newbase = new VoteOption();
newbase.fromBuffer(this.toBuffer());
return newbase;
}
create() {
return new VoteOption();
}
/**
* VoteOption for a [[Tx]]
*/
constructor() {
super();
this._typeName = "VoteOption";
this._typeID = undefined;
//serialize and deserialize both are inherited
this.bytes = buffer_1.Buffer.alloc(8);
this.bsize = 8;
}
}
exports.VoteOption = VoteOption;
class EssentialProposal {
constructor(start, end) {
this.start = buffer_1.Buffer.alloc(8);
this.end = buffer_1.Buffer.alloc(8);
this.numOptions = buffer_1.Buffer.alloc(4);
this.start = start;
this.end = end;
this.options = [];
}
getStart() {
return this.start;
}
getEnd() {
return this.end;
}
getOptions() {
return this.options;
}
/**
* Adds a option to the proposal and returns the index off the added option.
*/
addOption(option) {
this.options.push(option);
if (this.options) {
this.numOptions.writeUInt32BE(this.options.length, 0);
}
return this.options.length - 1;
}
serialize(encoding = "hex") {
let fields = {
start: serialization.encoder(this.start, encoding, "Buffer", "number"),
end: serialization.encoder(this.end, encoding, "Buffer", "number"),
options: this.options.map((opt) => opt.serialize(encoding))
};
return fields;
}
deserialize(fields, encoding = "hex") {
this.start = serialization.decoder(fields["start"], encoding, "number", "Buffer");
this.end = serialization.decoder(fields["end"], encoding, "number", "Buffer");
this.numOptions.writeUInt32BE(this.options.length, 0);
this.options = fields["options"].map((opt) => new VoteOption().deserialize(opt, encoding));
return this;
}
fromBuffer(bytes, offset = 0) {
this.numOptions = bintools.copyFrom(bytes, offset, offset + 4); // this.numOptions.readUInt32BE(0)
offset += 4;
const optionCount = this.numOptions.readUInt32BE(0);
this.options = [];
for (let i = 0; i < optionCount; i++) {
const option = new VoteOption();
offset = option.fromBuffer(bytes, offset);
this.options.push(option);
}
this.start = bintools.copyFrom(bytes, offset, offset + 8);
offset += 8;
this.end = bintools.copyFrom(bytes, offset, offset + 8);
offset += 8;
return offset;
}
/**
* Returns a {@link https://github.com/feross/buffer|Buffer} representation of the [[BaseProposal]].
*/
toBuffer() {
const barr = [this.numOptions];
let bsize = this.numOptions.length;
this.options.forEach((opt) => {
bsize += opt.getSize();
barr.push(opt.toBuffer());
});
barr.push(this.start, this.end);
bsize += this.start.length + this.end.length;
return buffer_1.Buffer.concat(barr, bsize);
}
}
exports.EssentialProposal = EssentialProposal;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNzZW50aWFscHJvcG9zYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpcy9wbGF0Zm9ybXZtL2FkZHByb3Bvc2FsdHgvZXNzZW50aWFscHJvcG9zYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0NBQWdDO0FBQ2hDLHVFQUE4QztBQUM5QyxnRUFBZ0Y7QUFDaEYsNENBQXdDO0FBRXhDOztHQUVHO0FBQ0gsTUFBTSxRQUFRLEdBQWEsa0JBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtBQUNqRCxNQUFNLGFBQWEsR0FBa0IsNkJBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtBQUVoRSxNQUFhLFVBQVcsU0FBUSxlQUFNO0lBU3BDLEtBQUs7UUFDSCxJQUFJLE9BQU8sR0FBZSxJQUFJLFVBQVUsRUFBRSxDQUFBO1FBQzFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7UUFDbkMsT0FBTyxPQUFlLENBQUE7SUFDeEIsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPLElBQUksVUFBVSxFQUFVLENBQUE7SUFDakMsQ0FBQztJQUVEOztPQUVHO0lBQ0g7UUFDRSxLQUFLLEVBQUUsQ0FBQTtRQXRCQyxjQUFTLEdBQUcsWUFBWSxDQUFBO1FBQ3hCLFlBQU8sR0FBRyxTQUFTLENBQUE7UUFFN0IsOENBQThDO1FBRXBDLFVBQUssR0FBRyxlQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3ZCLFVBQUssR0FBRyxDQUFDLENBQUE7SUFpQm5CLENBQUM7Q0FDRjtBQXpCRCxnQ0F5QkM7QUFFRCxNQUFzQixpQkFBaUI7SUFNckMsWUFBWSxLQUFjLEVBQUUsR0FBWTtRQUw5QixVQUFLLEdBQVcsZUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUMvQixRQUFHLEdBQVcsZUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUU3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QUMsQ0FBQTtJQUNuQyxDQUFDO0NBQ0Y7QUFuR0QsOENBbUdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSBcImJ1ZmZlci9cIlxuaW1wb3J0IEJpblRvb2xzIGZyb20gXCIuLi8uLi8uLi91dGlscy9iaW50b29sc1wiXG5pbXBvcnQgeyBTZXJpYWxpemF0aW9uLCBTZXJpYWxpemVkRW5jb2RpbmcgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvc2VyaWFsaXphdGlvblwiXG5pbXBvcnQgeyBOQnl0ZXMgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uXCJcblxuLyoqXG4gKiBAaWdub3JlXG4gKi9cbmNvbnN0IGJpbnRvb2xzOiBCaW5Ub29scyA9IEJpblRvb2xzLmdldEluc3RhbmNlKClcbmNvbnN0IHNlcmlhbGl6YXRpb246IFNlcmlhbGl6YXRpb24gPSBTZXJpYWxpemF0aW9uLmdldEluc3RhbmNlKClcblxuZXhwb3J0IGNsYXNzIFZvdGVPcHRpb24gZXh0ZW5kcyBOQnl0ZXMge1xuICBwcm90ZWN0ZWQgX3R5cGVOYW1lID0gXCJWb3RlT3B0aW9uXCJcbiAgcHJvdGVjdGVkIF90eXBlSUQgPSB1bmRlZmluZWRcblxuICAvL3NlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgYm90aCBhcmUgaW5oZXJpdGVkXG5cbiAgcHJvdGVjdGVkIGJ5dGVzID0gQnVmZmVyLmFsbG9jKDgpXG4gIHByb3RlY3RlZCBic2l6ZSA9IDhcblxuICBjbG9uZSgpOiB0aGlzIHtcbiAgICBsZXQgbmV3YmFzZTogVm90ZU9wdGlvbiA9IG5ldyBWb3RlT3B0aW9uKClcbiAgICBuZXdiYXNlLmZyb21CdWZmZXIodGhpcy50b0J1ZmZlcigpKVxuICAgIHJldHVybiBuZXdiYXNlIGFzIHRoaXNcbiAgfVxuXG4gIGNyZWF0ZSgpOiB0aGlzIHtcbiAgICByZXR1cm4gbmV3IFZvdGVPcHRpb24oKSBhcyB0aGlzXG4gIH1cblxuICAvKipcbiAgICogVm90ZU9wdGlvbiBmb3IgYSBbW1R4XV1cbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKClcbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRXNzZW50aWFsUHJvcG9zYWwge1xuICBwcm90ZWN0ZWQgc3RhcnQ6IEJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyg4KVxuICBwcm90ZWN0ZWQgZW5kOiBCdWZmZXIgPSBCdWZmZXIuYWxsb2MoOClcbiAgcHJvdGVjdGVkIG9wdGlvbnM6IFZvdGVPcHRpb25bXSAvLyBUT0RPOiBkZWZpbmUgaW4gZWFjaCBQcm9wb3NhbCBzZXBhcmF0ZWxseVxuICBwcm90ZWN0ZWQgbnVtT3B0aW9uczogQnVmZmVyID0gQnVmZmVyLmFsbG9jKDQpXG5cbiAgY29uc3RydWN0b3Ioc3RhcnQ/OiBCdWZmZXIsIGVuZD86IEJ1ZmZlcikge1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydFxuICAgIHRoaXMuZW5kID0gZW5kXG4gICAgdGhpcy5vcHRpb25zID0gW11cbiAgfVxuXG4gIGdldFN0YXJ0KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0XG4gIH1cblxuICBnZXRFbmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5kXG4gIH1cblxuICBnZXRPcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnNcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgb3B0aW9uIHRvIHRoZSBwcm9wb3NhbCBhbmQgcmV0dXJucyB0aGUgaW5kZXggb2ZmIHRoZSBhZGRlZCBvcHRpb24uXG4gICAqL1xuICBhZGRPcHRpb24ob3B0aW9uOiBWb3RlT3B0aW9uKTogbnVtYmVyIHtcbiAgICB0aGlzLm9wdGlvbnMucHVzaChvcHRpb24pXG4gICAgaWYgKHRoaXMub3B0aW9ucykge1xuICAgICAgdGhpcy5udW1PcHRpb25zLndyaXRlVUludDMyQkUodGhpcy5vcHRpb25zLmxlbmd0aCwgMClcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sZW5ndGggLSAxXG4gIH1cblxuICBzZXJpYWxpemUoZW5jb2Rpbmc6IFNlcmlhbGl6ZWRFbmNvZGluZyA9IFwiaGV4XCIpOiBvYmplY3Qge1xuICAgIGxldCBmaWVsZHMgPSB7XG4gICAgICBzdGFydDogc2VyaWFsaXphdGlvbi5lbmNvZGVyKHRoaXMuc3RhcnQsIGVuY29kaW5nLCBcIkJ1ZmZlclwiLCBcIm51bWJlclwiKSxcbiAgICAgIGVuZDogc2VyaWFsaXphdGlvbi5lbmNvZGVyKHRoaXMuZW5kLCBlbmNvZGluZywgXCJCdWZmZXJcIiwgXCJudW1iZXJcIiksXG4gICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMubWFwKChvcHQpID0+IG9wdC5zZXJpYWxpemUoZW5jb2RpbmcpKVxuICAgIH1cbiAgICByZXR1cm4gZmllbGRzXG4gIH1cblxuICBkZXNlcmlhbGl6ZShmaWVsZHM6IG9iamVjdCwgZW5jb2Rpbmc6IFNlcmlhbGl6ZWRFbmNvZGluZyA9IFwiaGV4XCIpOiB0aGlzIHtcbiAgICB0aGlzLnN0YXJ0ID0gc2VyaWFsaXphdGlvbi5kZWNvZGVyKFxuICAgICAgZmllbGRzW1wic3RhcnRcIl0sXG4gICAgICBlbmNvZGluZyxcbiAgICAgIFwibnVtYmVyXCIsXG4gICAgICBcIkJ1ZmZlclwiXG4gICAgKVxuICAgIHRoaXMuZW5kID0gc2VyaWFsaXphdGlvbi5kZWNvZGVyKFxuICAgICAgZmllbGRzW1wiZW5kXCJdLFxuICAgICAgZW5jb2RpbmcsXG4gICAgICBcIm51bWJlclwiLFxuICAgICAgXCJCdWZmZXJcIlxuICAgIClcbiAgICB0aGlzLm51bU9wdGlvbnMud3JpdGVVSW50MzJCRSh0aGlzLm9wdGlvbnMubGVuZ3RoLCAwKVxuICAgIHRoaXMub3B0aW9ucyA9IGZpZWxkc1tcIm9wdGlvbnNcIl0ubWFwKChvcHQpID0+XG4gICAgICBuZXcgVm90ZU9wdGlvbigpLmRlc2VyaWFsaXplKG9wdCwgZW5jb2RpbmcpXG4gICAgKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIGZyb21CdWZmZXIoYnl0ZXM6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIgPSAwKTogbnVtYmVyIHtcbiAgICB0aGlzLm51bU9wdGlvbnMgPSBiaW50b29scy5jb3B5RnJvbShieXRlcywgb2Zmc2V0LCBvZmZzZXQgKyA0KSAvLyB0aGlzLm51bU9wdGlvbnMucmVhZFVJbnQzMkJFKDApXG4gICAgb2Zmc2V0ICs9IDRcbiAgICBjb25zdCBvcHRpb25Db3VudCA9IHRoaXMubnVtT3B0aW9ucy5yZWFkVUludDMyQkUoMClcbiAgICB0aGlzLm9wdGlvbnMgPSBbXVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9uQ291bnQ7IGkrKykge1xuICAgICAgY29uc3Qgb3B0aW9uID0gbmV3IFZvdGVPcHRpb24oKVxuICAgICAgb2Zmc2V0ID0gb3B0aW9uLmZyb21CdWZmZXIoYnl0ZXMsIG9mZnNldClcbiAgICAgIHRoaXMub3B0aW9ucy5wdXNoKG9wdGlvbilcbiAgICB9XG4gICAgdGhpcy5zdGFydCA9IGJpbnRvb2xzLmNvcHlGcm9tKGJ5dGVzLCBvZmZzZXQsIG9mZnNldCArIDgpXG4gICAgb2Zmc2V0ICs9IDhcbiAgICB0aGlzLmVuZCA9IGJpbnRvb2xzLmNvcHlGcm9tKGJ5dGVzLCBvZmZzZXQsIG9mZnNldCArIDgpXG4gICAgb2Zmc2V0ICs9IDhcbiAgICByZXR1cm4gb2Zmc2V0XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlcnxCdWZmZXJ9IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBbW0Jhc2VQcm9wb3NhbF1dLlxuICAgKi9cbiAgdG9CdWZmZXIoKTogQnVmZmVyIHtcbiAgICBjb25zdCBiYXJyOiBCdWZmZXJbXSA9IFt0aGlzLm51bU9wdGlvbnNdXG4gICAgbGV0IGJzaXplOiBudW1iZXIgPSB0aGlzLm51bU9wdGlvbnMubGVuZ3RoXG5cbiAgICB0aGlzLm9wdGlvbnMuZm9yRWFjaCgob3B0KSA9PiB7XG4gICAgICBic2l6ZSArPSBvcHQuZ2V0U2l6ZSgpXG4gICAgICBiYXJyLnB1c2gob3B0LnRvQnVmZmVyKCkpXG4gICAgfSlcblxuICAgIGJhcnIucHVzaCh0aGlzLnN0YXJ0LCB0aGlzLmVuZClcbiAgICBic2l6ZSArPSB0aGlzLnN0YXJ0Lmxlbmd0aCArIHRoaXMuZW5kLmxlbmd0aFxuXG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYmFyciwgYnNpemUpXG4gIH1cbn1cbiJdfQ==