@protokol/guardian-crypto
Version:
Transaction Builders For Guardian Transaction Types
147 lines • 5.9 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.GuardianUserPermissionsTransaction = void 0;
const crypto_1 = require("@arkecosystem/crypto");
const utils_1 = require("@protokol/utils");
const bytebuffer_1 = __importDefault(require("bytebuffer"));
const defaults_1 = require("../defaults");
const enums_1 = require("../enums");
const guardian_schemas_1 = require("./utils/guardian-schemas");
const serde_1 = require("./utils/serde");
const { schemas } = crypto_1.Transactions;
class GuardianUserPermissionsTransaction extends crypto_1.Transactions.Transaction {
static getSchema() {
return schemas.extend(schemas.transactionBaseSchema, {
$id: this.key,
required: ["asset", "typeGroup"],
properties: {
type: { transactionType: this.type },
typeGroup: { const: this.typeGroup },
amount: guardian_schemas_1.amountSchema,
vendorField: guardian_schemas_1.vendorFieldSchema,
asset: {
type: "object",
required: ["setUserPermissions"],
properties: {
setUserPermissions: {
type: "object",
required: ["publicKey"],
uniqueAllowDeny: true,
properties: {
publicKey: {
$ref: "publicKey",
},
groupNames: {
type: "array",
uniqueItems: true,
items: guardian_schemas_1.groupNameSchema,
},
allow: guardian_schemas_1.permissionsSchema,
deny: guardian_schemas_1.permissionsSchema,
},
},
},
},
},
});
}
serialize() {
var _a;
const { data } = this;
utils_1.Asserts.assert.defined((_a = data.asset) === null || _a === void 0 ? void 0 : _a.setUserPermissions);
const setUserPermissionAsset = data.asset.setUserPermissions;
const groupNamesBuffer = [];
let groupNamesLength = 1;
if (setUserPermissionAsset.groupNames) {
for (const groupName of setUserPermissionAsset.groupNames) {
const groupNameBuffer = Buffer.from(groupName);
groupNamesBuffer.push(groupNameBuffer);
groupNamesLength += 1 + groupNameBuffer.length;
}
}
const buffer = new bytebuffer_1.default(66 + // privateKey
groupNamesLength +
(0, serde_1.calculatePermissionsLength)(setUserPermissionAsset.allow) +
(0, serde_1.calculatePermissionsLength)(setUserPermissionAsset.deny), true);
// publicKey
buffer.append(Buffer.from(setUserPermissionAsset.publicKey), "hex");
// groupNames
buffer.writeByte(groupNamesBuffer.length);
for (const groupNameBuffer of groupNamesBuffer) {
buffer.writeByte(groupNameBuffer.length);
buffer.append(groupNameBuffer, "hex");
}
// allow permissions
(0, serde_1.serializePermissions)(buffer, setUserPermissionAsset.allow);
// deny permissions
(0, serde_1.serializePermissions)(buffer, setUserPermissionAsset.deny);
return buffer;
}
deserialize(buf) {
const { data } = this;
const publicKey = buf.readString(66);
const setUserPermissions = {
publicKey,
};
// groupNames
const numOfGroupNames = buf.readUint8();
if (numOfGroupNames) {
setUserPermissions.groupNames = [];
for (let i = 0; i < numOfGroupNames; i++) {
const groupNameLength = buf.readUint8();
setUserPermissions.groupNames.push(buf.readBytes(groupNameLength).toBuffer().toString("utf8"));
}
}
// allow permissions
const allow = (0, serde_1.deserializePermissions)(buf);
if (allow) {
setUserPermissions.allow = allow;
}
// deny permissions
const deny = (0, serde_1.deserializePermissions)(buf);
if (deny) {
setUserPermissions.deny = deny;
}
data.asset = {
setUserPermissions,
};
}
hasVendorField() {
return true;
}
}
exports.GuardianUserPermissionsTransaction = GuardianUserPermissionsTransaction;
Object.defineProperty(GuardianUserPermissionsTransaction, "typeGroup", {
enumerable: true,
configurable: true,
writable: true,
value: enums_1.GuardianTransactionGroup
});
Object.defineProperty(GuardianUserPermissionsTransaction, "type", {
enumerable: true,
configurable: true,
writable: true,
value: enums_1.GuardianTransactionTypes.GuardianSetUserPermissions
});
Object.defineProperty(GuardianUserPermissionsTransaction, "key", {
enumerable: true,
configurable: true,
writable: true,
value: "GuardianUserPermissions"
});
Object.defineProperty(GuardianUserPermissionsTransaction, "version", {
enumerable: true,
configurable: true,
writable: true,
value: defaults_1.defaults.version
});
Object.defineProperty(GuardianUserPermissionsTransaction, "defaultStaticFee", {
enumerable: true,
configurable: true,
writable: true,
value: crypto_1.Utils.BigNumber.make(enums_1.GuardianStaticFees.GuardianSetUserPermissions)
});
//# sourceMappingURL=guardian-user-permissions.js.map