PHP WebShell
Текущая директория: /usr/lib/node_modules/bitgo/node_modules/avalanche/dist/apis/avm
Просмотр файла: initialstates.js
"use strict";
/**
* @packageDocumentation
* @module API-AVM-InitialStates
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.InitialStates = void 0;
const buffer_1 = require("buffer/");
const bintools_1 = __importDefault(require("../../utils/bintools"));
const output_1 = require("../../common/output");
const outputs_1 = require("./outputs");
const constants_1 = require("./constants");
const serialization_1 = require("../../utils/serialization");
/**
* @ignore
*/
const bintools = bintools_1.default.getInstance();
/**
* Class for creating initial output states used in asset creation
*/
class InitialStates extends serialization_1.Serializable {
constructor() {
super(...arguments);
this._typeName = "InitialStates";
this._typeID = undefined;
this.fxs = {};
}
serialize(encoding = "hex") {
const fields = super.serialize(encoding);
const flatfxs = {};
for (let fxid in this.fxs) {
flatfxs[`${fxid}`] = this.fxs[`${fxid}`].map((o) => o.serialize(encoding));
}
return Object.assign(Object.assign({}, fields), { fxs: flatfxs });
}
deserialize(fields, encoding = "hex") {
super.deserialize(fields, encoding);
const unflat = {};
for (let fxid in fields["fxs"]) {
unflat[`${fxid}`] = fields["fxs"][`${fxid}`].map((o) => {
const out = (0, outputs_1.SelectOutputClass)(o["_typeID"]);
out.deserialize(o, encoding);
return out;
});
}
this.fxs = unflat;
}
/**
*
* @param out The output state to add to the collection
* @param fxid The FxID that will be used for this output, default AVMConstants.SECPFXID
*/
addOutput(out, fxid = constants_1.AVMConstants.SECPFXID) {
if (!(fxid in this.fxs)) {
this.fxs[`${fxid}`] = [];
}
this.fxs[`${fxid}`].push(out);
}
fromBuffer(bytes, offset = 0) {
const result = [];
const klen = bintools.copyFrom(bytes, offset, offset + 4);
offset += 4;
const klennum = klen.readUInt32BE(0);
for (let i = 0; i < klennum; i++) {
const fxidbuff = bintools.copyFrom(bytes, offset, offset + 4);
offset += 4;
const fxid = fxidbuff.readUInt32BE(0);
result[`${fxid}`] = [];
const statelenbuff = bintools.copyFrom(bytes, offset, offset + 4);
offset += 4;
const statelen = statelenbuff.readUInt32BE(0);
for (let j = 0; j < statelen; j++) {
const outputid = bintools
.copyFrom(bytes, offset, offset + 4)
.readUInt32BE(0);
offset += 4;
const out = (0, outputs_1.SelectOutputClass)(outputid);
offset = out.fromBuffer(bytes, offset);
result[`${fxid}`].push(out);
}
}
this.fxs = result;
return offset;
}
toBuffer() {
const buff = [];
const keys = Object.keys(this.fxs)
.map((k) => parseInt(k, 10))
.sort();
const klen = buffer_1.Buffer.alloc(4);
klen.writeUInt32BE(keys.length, 0);
buff.push(klen);
for (let i = 0; i < keys.length; i++) {
const fxid = keys[`${i}`];
const fxidbuff = buffer_1.Buffer.alloc(4);
fxidbuff.writeUInt32BE(fxid, 0);
buff.push(fxidbuff);
const initialState = this.fxs[`${fxid}`].sort(output_1.Output.comparator());
const statelen = buffer_1.Buffer.alloc(4);
statelen.writeUInt32BE(initialState.length, 0);
buff.push(statelen);
for (let j = 0; j < initialState.length; j++) {
const outputid = buffer_1.Buffer.alloc(4);
outputid.writeInt32BE(initialState[`${j}`].getOutputID(), 0);
buff.push(outputid);
buff.push(initialState[`${j}`].toBuffer());
}
}
return buffer_1.Buffer.concat(buff);
}
}
exports.InitialStates = InitialStates;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdGlhbHN0YXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcGlzL2F2bS9pbml0aWFsc3RhdGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7Ozs7OztBQUVILG9DQUFnQztBQUNoQyxvRUFBMkM7QUFDM0MsZ0RBQTRDO0FBQzVDLHVDQUE2QztBQUM3QywyQ0FBMEM7QUFDMUMsNkRBQTRFO0FBQzVFOztHQUVHO0FBQ0gsTUFBTSxRQUFRLEdBQWEsa0JBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtBQUVqRDs7R0FFRztBQUNILE1BQWEsYUFBYyxTQUFRLDRCQUFZO0lBQS9DOztRQUNZLGNBQVMsR0FBRyxlQUFlLENBQUE7UUFDM0IsWUFBTyxHQUFHLFNBQVMsQ0FBQTtRQTRCbkIsUUFBRyxHQUFpQyxFQUFFLENBQUE7SUFtRWxELENBQUM7SUE3RkMsU0FBUyxDQUFDLFdBQStCLEtBQUs7UUFDNUMsTUFBTSxNQUFNLEdBQVcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNoRCxNQUFNLE9BQU8sR0FBVyxFQUFFLENBQUE7UUFDMUIsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ3pCLE9BQU8sQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBUyxFQUFVLEVBQUUsQ0FDakUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FDdEIsQ0FBQTtTQUNGO1FBQ0QsdUNBQ0ssTUFBTSxLQUNULEdBQUcsRUFBRSxPQUFPLElBQ2I7SUFDSCxDQUFDO0lBQ0QsV0FBVyxDQUFDLE1BQWMsRUFBRSxXQUErQixLQUFLO1FBQzlELEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ25DLE1BQU0s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O1lBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDbkIsS0FBSyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3BELE1BQU0sUUFBUSxHQUFXLGVBQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBQ3hDLFFBQVEsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQTtnQkFDNUQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtnQkFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7YUFDM0M7U0FDRjtRQUNELE9BQU8sZUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUM1QixDQUFDO0NBQ0Y7QUFqR0Qsc0NBaUdDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqIEBtb2R1bGUgQVBJLUFWTS1Jbml0aWFsU3RhdGVzXG4gKi9cblxuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSBcImJ1ZmZlci9cIlxuaW1wb3J0IEJpblRvb2xzIGZyb20gXCIuLi8uLi91dGlscy9iaW50b29sc1wiXG5pbXBvcnQgeyBPdXRwdXQgfSBmcm9tIFwiLi4vLi4vY29tbW9uL291dHB1dFwiXG5pbXBvcnQgeyBTZWxlY3RPdXRwdXRDbGFzcyB9IGZyb20gXCIuL291dHB1dHNcIlxuaW1wb3J0IHsgQVZNQ29uc3RhbnRzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCJcbmltcG9ydCB7IFNlcmlhbGl6YWJsZSwgU2VyaWFsaXplZEVuY29kaW5nIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3NlcmlhbGl6YXRpb25cIlxuLyoqXG4gKiBAaWdub3JlXG4gKi9cbmNvbnN0IGJpbnRvb2xzOiBCaW5Ub29scyA9IEJpblRvb2xzLmdldEluc3RhbmNlKClcblxuLyoqXG4gKiBDbGFzcyBmb3IgY3JlYXRpbmcgaW5pdGlhbCBvdXRwdXQgc3RhdGVzIHVzZWQgaW4gYXNzZXQgY3JlYXRpb25cbiAqL1xuZXhwb3J0IGNsYXNzIEluaXRpYWxTdGF0ZXMgZXh0ZW5kcyBTZXJpYWxpemFibGUge1xuICBwcm90ZWN0ZWQgX3R5cGVOYW1lID0gXCJJbml0aWFsU3RhdGVzXCJcbiAgcHJvdGVjdGVkIF90eXBlSUQgPSB1bmRlZmluZWRcblxuICBzZXJpYWxpemUoZW5jb2Rpbmc6IFNlcmlhbGl6ZWRFbmNvZGluZyA9IFwiaGV4XCIpOiBvYmplY3Qge1xuICAgIGNvbnN0IGZpZWxkczogb2JqZWN0ID0gc3VwZXIuc2VyaWFsaXplKGVuY29kaW5nKVxuICAgIGNvbnN0IGZsYXRmeHM6IG9iamVjdCA9IHt9XG4gICAgZm9yIChsZXQgZnhpZCBpbiB0aGlzLmZ4cykge1xuICAgICAgZmxhdGZ4c1tgJHtmeGlkfWBdID0gdGhpcy5meHNbYCR7ZnhpZH1gXS5tYXAoKG86IE91dHB1dCk6IG9iamVjdCA9PlxuICAgICAgICBvLnNlcmlhbGl6ZShlbmNvZGluZylcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmZpZWxkcyxcbiAgICAgIGZ4czogZmxhdGZ4c1xuICAgIH1cbiAgfVxuICBkZXNlcmlhbGl6ZShmaWVsZHM6IG9iamVjdCwgZW5jb2Rpbmc6IFNlcmlhbGl6ZWRFbmNvZGluZyA9IFwiaGV4XCIpIHtcbiAgICBzdXBlci5kZXNlcmlhbGl6ZShmaWVsZHMsIGVuY29kaW5nKVxuICAgIGNvbnN0IHVuZmxhdDogeyBbZnhpZDogbnVtYmVyXTogT3V0cHV0W10gfSA9IHt9XG4gICAgZm9yIChsZXQgZnhpZCBpbiBmaWVsZHNbXCJmeHNcIl0pIHtcbiAgICAgIHVuZmxhdFtgJHtmeGlkfWBdID0gZmllbGRzW1wiZnhzXCJdW2Ake2Z4aWR9YF0ubWFwKChvOiBvYmplY3QpID0+IHtcbiAgICAgICAgY29uc3Qgb3V0OiBPdXRwdXQgPSBTZWxlY3RPdXRwdXRDbGFzcyhvW1wiX3R5cGVJRFwiXSlcbiAgICAgICAgb3V0LmRlc2VyaWFsaXplKG8sIGVuY29kaW5nKVxuICAgICAgICByZXR1cm4gb3V0XG4gICAgICB9KVxuICAgIH1cbiAgICB0aGlzLmZ4cyA9IHVuZmxhdFxuICB9XG5cbiAgcHJvdGVjdGVkIGZ4czogeyBbZnhpZDogbnVtYmVyXTogT3V0cHV0W10gfSA9IHt9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBvdXQgVGhlIG91dHB1dCBzdGF0ZSB0byBhZGQgdG8gdGhlIGNvbGxlY3Rpb25cbiAgICogQHBhcmFtIGZ4aWQgVGhlIEZ4SUQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHRoaXMgb3V0cHV0LCBkZWZhdWx0IEFWTUNvbnN0YW50cy5TRUNQRlhJRFxuICAgKi9cbiAgYWRkT3V0cHV0KG91dDogT3V0cHV0LCBmeGlkOiBudW1iZXIgPSBBVk1Db25zdGFudHMuU0VDUEZYSUQpOiB2b2lkIHtcbiAgICBpZiAoIShmeGlkIGluIHRoaXMuZnhzKSkge1xuICAgICAgdGhpcy5meHNbYCR7ZnhpZH1gXSA9IFtdXG4gICAgfVxuICAgIHRoaXMuZnhzW2Ake2Z4aWR9YF0ucHVzaChvdXQpXG4gIH1cblxuICBmcm9tQnVmZmVyKGJ5dGVzOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyID0gMCk6IG51bWJlciB7XG4gICAgY29uc3QgcmVzdWx0OiB7IFtmeGlkOiBudW1iZXJdOiBPdXRwdXRbXSB9ID0gW11cbiAgICBjb25zdCBrbGVuOiBCdWZmZXIgPSBiaW50b29scy5jb3B5RnJvbShieXRlcywgb2Zmc2V0LCBvZmZzZXQgKyA0KVxuICAgIG9mZnNldCArPSA0XG4gICAgY29uc3Qga2xlbm51bTogbnVtYmVyID0ga2xlbi5yZWFkVUludDMyQkUoMClcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwga2xlbm51bTsgaSsrKSB7XG4gICAgICBjb25zdCBmeGlkYnVmZjogQnVmZmVyID0gYmludG9vbHMuY29weUZyb20oYnl0ZXMsIG9mZnNldCwgb2Zmc2V0ICsgNClcbiAgICAgIG9mZnNldCArPSA0XG4gICAgICBjb25zdCBmeGlkOiBudW1iZXIgPSBmeGlkYnVmZi5yZWFkVUludDMyQkUoMClcbiAgICAgIHJlc3VsdFtgJHtmeGlkfWBdID0gW11cbiAgICAgIGNvbnN0IHN0YXRlbGVuYnVmZjogQnVmZmVyID0gYmludG9vbHMuY29weUZyb20oYnl0ZXMsIG9mZnNldCwgb2Zmc2V0ICsgNClcbiAgICAgIG9mZnNldCArPSA0XG4gICAgICBjb25zdCBzdGF0ZWxlbjogbnVtYmVyID0gc3RhdGVsZW5idWZmLnJlYWRVSW50MzJCRSgwKVxuICAgICAgZm9yIChsZXQgajogbnVtYmVyID0gMDsgaiA8IHN0YXRlbGVuOyBqKyspIHtcbiAgICAgICAgY29uc3Qgb3V0cHV0aWQ6IG51bWJlciA9IGJpbnRvb2xzXG4gICAgICAgICAgLmNvcHlGcm9tKGJ5dGVzLCBvZmZzZXQsIG9mZnNldCArIDQpXG4gICAgICAgICAgLnJlYWRVSW50MzJCRSgwKVxuICAgICAgICBvZmZzZXQgKz0gNFxuICAgICAgICBjb25zdCBvdXQ6IE91dHB1dCA9IFNlbGVjdE91dHB1dENsYXNzKG91dHB1dGlkKVxuICAgICAgICBvZmZzZXQgPSBvdXQuZnJvbUJ1ZmZlcihieXRlcywgb2Zmc2V0KVxuICAgICAgICByZXN1bHRbYCR7ZnhpZH1gXS5wdXNoKG91dClcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5meHMgPSByZXN1bHRcbiAgICByZXR1cm4gb2Zmc2V0XG4gIH1cblxuICB0b0J1ZmZlcigpOiBCdWZmZXIge1xuICAgIGNvbnN0IGJ1ZmY6IEJ1ZmZlcltdID0gW11cbiAgICBjb25zdCBrZXlzOiBudW1iZXJbXSA9IE9iamVjdC5rZXlzKHRoaXMuZnhzKVxuICAgICAgLm1hcCgoazogc3RyaW5nKTogbnVtYmVyID0+IHBhcnNlSW50KGssIDEwKSlcbiAgICAgIC5zb3J0KClcbiAgICBjb25zdCBrbGVuOiBCdWZmZXIgPSBCdWZmZXIuYWxsb2MoNClcbiAgICBrbGVuLndyaXRlVUludDMyQkUoa2V5cy5sZW5ndGgsIDApXG4gICAgYnVmZi5wdXNoKGtsZW4pXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGZ4aWQ6IG51bWJlciA9IGtleXNbYCR7aX1gXVxuICAgICAgY29uc3QgZnhpZGJ1ZmY6IEJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyg0KVxuICAgICAgZnhpZGJ1ZmYud3JpdGVVSW50MzJCRShmeGlkLCAwKVxuICAgICAgYnVmZi5wdXNoKGZ4aWRidWZmKVxuICAgICAgY29uc3QgaW5pdGlhbFN0YXRlID0gdGhpcy5meHNbYCR7ZnhpZH1gXS5zb3J0KE91dHB1dC5jb21wYXJhdG9yKCkpXG4gICAgICBjb25zdCBzdGF0ZWxlbjogQnVmZmVyID0gQnVmZmVyLmFsbG9jKDQpXG4gICAgICBzdGF0ZWxlbi53cml0ZVVJbnQzMkJFKGluaXRpYWxTdGF0ZS5sZW5ndGgsIDApXG4gICAgICBidWZmLnB1c2goc3RhdGVsZW4pXG4gICAgICBmb3IgKGxldCBqOiBudW1iZXIgPSAwOyBqIDwgaW5pdGlhbFN0YXRlLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNvbnN0IG91dHB1dGlkOiBCdWZmZXIgPSBCdWZmZXIuYWxsb2MoNClcbiAgICAgICAgb3V0cHV0aWQud3JpdGVJbnQzMkJFKGluaXRpYWxTdGF0ZVtgJHtqfWBdLmdldE91dHB1dElEKCksIDApXG4gICAgICAgIGJ1ZmYucHVzaChvdXRwdXRpZClcbiAgICAgICAgYnVmZi5wdXNoKGluaXRpYWxTdGF0ZVtgJHtqfWBdLnRvQnVmZmVyKCkpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZmYpXG4gIH1cbn1cbiJdfQ==Выполнить команду
Для локальной разработки. Не используйте в интернете!