int-cli
Version:
INT is the new generation of bottom-up created system of IoT and blockchain
105 lines (104 loc) • 3.49 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const error_code_1 = require("../error_code");
const Address = require("../address");
const encoding_1 = require("../lib/encoding");
const writer_1 = require("../lib/writer");
const digest = require("../lib/digest");
function instance(superClass) {
return class extends superClass {
constructor(...args) {
super(args[0]);
// Uint8Array(33)
this.m_pubkey = encoding_1.Encoding.ZERO_KEY;
// Uint8Array(64)
this.m_sign = encoding_1.Encoding.ZERO_SIG64;
}
get pubkey() {
return this.m_pubkey;
}
set pubkey(k) {
this.m_pubkey = k;
}
get miner() {
return Address.addressFromPublicKey(this.m_pubkey);
}
encode(writer) {
try {
writer.writeBytes(this.m_sign);
}
catch (e) {
return error_code_1.ErrorCode.RESULT_INVALID_FORMAT;
}
return super.encode(writer);
}
decode(reader) {
this.m_sign = reader.readBytes(64);
return super.decode(reader);
}
_encodeHashContent(writer) {
let err = super._encodeHashContent(writer);
if (err) {
return err;
}
try {
writer.writeBytes(this.m_pubkey);
}
catch (e) {
return error_code_1.ErrorCode.RESULT_INVALID_FORMAT;
}
return error_code_1.ErrorCode.RESULT_OK;
}
_decodeHashContent(reader) {
let err = super._decodeHashContent(reader);
if (err !== error_code_1.ErrorCode.RESULT_OK) {
return err;
}
this.m_pubkey = reader.readBytes(33);
return error_code_1.ErrorCode.RESULT_OK;
}
signBlock(secret) {
this.m_pubkey = Address.publicKeyFromSecretKey(secret);
let writer = new writer_1.BufferWriter();
let err = this._encodeSignContent(writer);
if (err) {
return err;
}
let content;
try {
content = writer.render();
}
catch (e) {
return error_code_1.ErrorCode.RESULT_INVALID_FORMAT;
}
let signHash = digest.hash256(content);
this.m_sign = Address.signBufferMsg(signHash, secret);
return error_code_1.ErrorCode.RESULT_OK;
}
_encodeSignContent(writer) {
let err = super._encodeHashContent(writer);
if (err) {
return err;
}
try {
writer.writeBytes(this.m_pubkey);
}
catch (e) {
return error_code_1.ErrorCode.RESULT_INVALID_FORMAT;
}
return error_code_1.ErrorCode.RESULT_OK;
}
_verifySign() {
let writer = new writer_1.BufferWriter();
this._encodeSignContent(writer);
let signHash = digest.hash256(writer.render());
return Address.verifyBufferMsg(signHash, this.m_sign, this.m_pubkey);
}
stringify() {
let obj = super.stringify();
obj.creator = Address.addressFromPublicKey(this.m_pubkey);
return obj;
}
};
}
exports.instance = instance;