meta-contract-debug
Version:
Meta Contract SDK
83 lines (82 loc) • 2.84 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TxDecoder = exports.OutputType = void 0;
const proto = require("../common/protoheader");
const api_1 = require("../api");
const __1 = require("..");
var OutputType;
(function (OutputType) {
OutputType[OutputType["SENSIBLE_NFT"] = 0] = "SENSIBLE_NFT";
OutputType[OutputType["SENSIBLE_FT"] = 1] = "SENSIBLE_FT";
OutputType[OutputType["P2PKH"] = 2] = "P2PKH";
OutputType[OutputType["OP_RETURN"] = 3] = "OP_RETURN";
OutputType[OutputType["UNKNOWN"] = 4] = "UNKNOWN";
})(OutputType = exports.OutputType || (exports.OutputType = {}));
class TxDecoder {
static decodeOutput(output, network) {
let scriptBuf = output.script.toBuffer();
if (proto.hasProtoFlag(scriptBuf)) {
let protoType = proto.getProtoType(scriptBuf);
if (protoType == proto.PROTO_TYPE.NFT) {
return {
type: OutputType.SENSIBLE_NFT,
satoshis: output.satoshis,
data: __1.NftManager.parseTokenScript(scriptBuf, network),
};
}
else if (protoType == proto.PROTO_TYPE.FT) {
return {
type: OutputType.SENSIBLE_FT,
satoshis: output.satoshis,
data: __1.FtManager.parseTokenScript(scriptBuf, network),
};
}
else {
return {
type: OutputType.UNKNOWN,
satoshis: output.satoshis,
};
}
}
else if (output.script.isPublicKeyHashOut()) {
return {
type: OutputType.P2PKH,
satoshis: output.satoshis,
address: output.script.toAddress(network).toString(),
};
}
else if (output.script.isSafeDataOut()) {
return {
type: OutputType.OP_RETURN,
satoshis: 0,
};
}
else {
return {
type: OutputType.UNKNOWN,
satoshis: output.satoshis,
};
}
}
static decodeTx(tx, network = api_1.API_NET.MAIN) {
let inputs = [];
tx.inputs.forEach((v) => {
if (v.output) {
inputs.push(this.decodeOutput(v.output, network));
}
});
let outputs = [];
tx.outputs.forEach((v) => {
outputs.push(this.decodeOutput(v, network));
});
let fee = inputs.reduce((pre, cur) => pre + cur.satoshis, 0) -
outputs.reduce((pre, cur) => pre + cur.satoshis, 0);
return {
txId: tx.id,
inputs,
outputs,
fee,
};
}
}
exports.TxDecoder = TxDecoder;