@muirglacier/jellyfish-transaction
Version:
A collection of TypeScript + JavaScript tools and libraries for DeFi Blockchain developers to build decentralized finance for Bitcoin
85 lines • 3.08 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.OP_DEFI_TX = exports.remapDeFiScript = exports.isDeFiScript = void 0;
const smart_buffer_1 = require("smart-buffer");
const opcode_1 = require("../opcode");
const data_1 = require("../data");
const control_1 = require("../control");
const dftx_1 = require("./dftx");
const mapping_1 = require("../mapping");
__exportStar(require("./dftx_account"), exports);
__exportStar(require("./dftx_balance"), exports);
__exportStar(require("./dftx_governance"), exports);
__exportStar(require("./dftx_masternode"), exports);
__exportStar(require("./dftx_misc"), exports);
__exportStar(require("./dftx_oracles"), exports);
__exportStar(require("./dftx_pool"), exports);
__exportStar(require("./dftx_price"), exports);
__exportStar(require("./dftx_token"), exports);
__exportStar(require("./dftx_loans"), exports);
__exportStar(require("./dftx_unmapped"), exports);
__exportStar(require("./dftx_icxorderbook"), exports);
__exportStar(require("./dftx"), exports);
const DEFI_SIGNATURE = '44665478'; // DfTx
/**
* @param {OPCode[]} stack to check if it is a dftx script
*/
function isDeFiScript(stack) {
if (stack.length < 2) {
return false;
}
if (!(stack[0] instanceof control_1.OP_RETURN && stack[1] instanceof data_1.OP_PUSHDATA)) {
return false;
}
const pushData = stack[1];
const hex = pushData.hex;
return hex.length >= 10 && hex.startsWith(DEFI_SIGNATURE);
}
exports.isDeFiScript = isDeFiScript;
/**
* @param {OPCode[]} stack to check and remap into OP_DEFI_TX if valid
*/
function remapDeFiScript(stack) {
if (!isDeFiScript(stack)) {
return stack;
}
const pushData = stack[1];
const hex = pushData.hex;
const buffer = smart_buffer_1.SmartBuffer.fromBuffer(Buffer.from(hex, 'hex'));
const dftx = new dftx_1.CDfTx(buffer);
return [
mapping_1.OP_CODES.OP_RETURN,
mapping_1.OP_CODES.OP_DEFI_TX(dftx.toObject()),
...stack.slice(2)
];
}
exports.remapDeFiScript = remapDeFiScript;
/**
* DeFi Transaction wrapped as an OpCode
*/
class OP_DEFI_TX extends opcode_1.OPCode {
constructor(tx) {
super('OP_DEFI_TX');
this.tx = tx;
}
asBuffer() {
const buffer = new smart_buffer_1.SmartBuffer();
new dftx_1.CDfTx(this.tx).toBuffer(buffer);
return Buffer.concat([
data_1.OP_PUSHDATA.getLenOpBuffer(buffer.length),
buffer.toBuffer()
]);
}
}
exports.OP_DEFI_TX = OP_DEFI_TX;
//# sourceMappingURL=index.js.map