UNPKG

@muirglacier/jellyfish-transaction

Version:

A collection of TypeScript + JavaScript tools and libraries for DeFi Blockchain developers to build decentralized finance for Bitcoin

164 lines 7.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CVote = exports.CCreateVoc = exports.CCreateCfp = exports.CCreateProposal = exports.CSetGovernanceHeight = exports.CSetGovernance = exports.CGovernanceVarWithHeight = exports.CGovernanceVarWithoutHeight = exports.CGovernanceVar = exports.CLiqPoolSplit = void 0; const jellyfish_buffer_1 = require("@muirglacier/jellyfish-buffer"); const tx_composer_1 = require("../../tx_composer"); class CLiqPoolSplit extends jellyfish_buffer_1.ComposableBuffer { composers(lps) { return [ jellyfish_buffer_1.ComposableBuffer.uInt32(() => lps.tokenId, v => lps.tokenId = v), jellyfish_buffer_1.ComposableBuffer.satoshiAsBigNumber(() => lps.value, v => lps.value = v) ]; } } exports.CLiqPoolSplit = CLiqPoolSplit; class CGovernanceVar extends jellyfish_buffer_1.ComposableBuffer { composers(gv) { return [ jellyfish_buffer_1.ComposableBuffer.varUIntUtf8BE(() => gv.key, v => gv.key = v), { fromBuffer: (buffer) => { if (gv.key === 'LP_DAILY_DFI_REWARD') { gv.value = jellyfish_buffer_1.readBigNumberUInt64(buffer).div('1e8'); } else if (gv.key === 'LP_SPLITS') { gv.value = []; const configLen = buffer.readUInt8(); for (let i = 0; i < configLen; i++) { gv.value.push(new CLiqPoolSplit(buffer).toObject()); } } else { let remainingLength = buffer.remaining(); if (this.isWithHeight()) { remainingLength -= 4; // 4 bytes reserved for SetGovernanceHeight's height data } gv.value = buffer.readBuffer(remainingLength).toString('hex'); } }, toBuffer: (buffer) => { if (gv.key === 'LP_DAILY_DFI_REWARD') { jellyfish_buffer_1.writeBigNumberUInt64(gv.value.times('1e8'), buffer); } else if (gv.key === 'LP_SPLITS') { const lpss = gv.value; buffer.writeUInt8(lpss.length); lpss.forEach(lps => new CLiqPoolSplit(lps).toBuffer(buffer)); } else { // UNMAPPED buffer.writeBuffer(Buffer.from(gv.value, 'hex')); } } } ]; } } exports.CGovernanceVar = CGovernanceVar; class CGovernanceVarWithoutHeight extends CGovernanceVar { isWithHeight() { return false; } } exports.CGovernanceVarWithoutHeight = CGovernanceVarWithoutHeight; class CGovernanceVarWithHeight extends CGovernanceVar { isWithHeight() { return true; } } exports.CGovernanceVarWithHeight = CGovernanceVarWithHeight; /** * Composable CSetGovernance, C stands for Composable. * Immutable by design, bi-directional fromBuffer, toBuffer deep composer. */ class CSetGovernance extends jellyfish_buffer_1.ComposableBuffer { composers(gvs) { return [ { fromBuffer: (buffer) => { gvs.governanceVars = []; while (buffer.remaining() > 0) { const govVar = new CGovernanceVarWithoutHeight(buffer); gvs.governanceVars.push(govVar.toObject()); } }, toBuffer: (buffer) => { gvs.governanceVars.forEach(gv => new CGovernanceVarWithoutHeight(gv).toBuffer(buffer)); } } ]; } } exports.CSetGovernance = CSetGovernance; CSetGovernance.OP_CODE = 0x47; // 'G' CSetGovernance.OP_NAME = 'OP_DEFI_TX_SET_GOVERNANCE'; /** * Composable CSetGovernanceHeight, C stands for Composable. * Immutable by design, bi-directional fromBuffer, toBuffer deep composer. */ class CSetGovernanceHeight extends jellyfish_buffer_1.ComposableBuffer { composers(gvs) { return [ { fromBuffer: (buffer) => { gvs.governanceVars = []; // entries count in GovVar array is unknown // we have to hardcode the remaining length here to determine the end while (buffer.remaining() > 4) { const govVar = new CGovernanceVarWithHeight(buffer); gvs.governanceVars.push(govVar.toObject()); } }, toBuffer: (buffer) => { gvs.governanceVars.forEach(gv => new CGovernanceVarWithHeight(gv).toBuffer(buffer)); } }, jellyfish_buffer_1.ComposableBuffer.uInt32(() => gvs.activationHeight, v => gvs.activationHeight = v) ]; } } exports.CSetGovernanceHeight = CSetGovernanceHeight; CSetGovernanceHeight.OP_CODE = 0x6a; // 'j' CSetGovernanceHeight.OP_NAME = 'OP_DEFI_TX_SET_GOVERNANCE_HEIGHT'; /** * Composable CCreateProposal, C stands for Composable. * Immutable by design, bi-directional fromBuffer, toBuffer deep composer. */ class CCreateProposal extends jellyfish_buffer_1.ComposableBuffer { composers(ccp) { return [ jellyfish_buffer_1.ComposableBuffer.uInt8(() => ccp.type, v => ccp.type = v), jellyfish_buffer_1.ComposableBuffer.single(() => ccp.address, v => ccp.address = v, v => new tx_composer_1.CScript(v)), jellyfish_buffer_1.ComposableBuffer.satoshiAsBigNumber(() => ccp.amount, v => ccp.amount = v), jellyfish_buffer_1.ComposableBuffer.uInt8(() => ccp.cycles, v => ccp.cycles = v), jellyfish_buffer_1.ComposableBuffer.varUIntUtf8BE(() => ccp.title, v => ccp.title = v) ]; } } exports.CCreateProposal = CCreateProposal; class CCreateCfp extends CCreateProposal { } exports.CCreateCfp = CCreateCfp; CCreateCfp.OP_CODE = 0x50; // 'P' CCreateCfp.OP_NAME = 'OP_DEFI_TX_CREATE_CFP'; class CCreateVoc extends CCreateProposal { } exports.CCreateVoc = CCreateVoc; CCreateVoc.OP_CODE = 0x45; // 'E' CCreateVoc.OP_NAME = 'OP_DEFI_TX_CREATE_VOC'; /** * Composable CVote, C stands for Composable. * Immutable by design, bi-directional fromBuffer, toBuffer deep composer. */ class CVote extends jellyfish_buffer_1.ComposableBuffer { composers(vote) { return [ jellyfish_buffer_1.ComposableBuffer.hexBEBufferLE(32, () => vote.proposalId, v => vote.proposalId = v), jellyfish_buffer_1.ComposableBuffer.hexBEBufferLE(32, () => vote.masternodeId, v => vote.masternodeId = v), jellyfish_buffer_1.ComposableBuffer.uInt8(() => vote.voteDecision, v => vote.voteDecision = v) ]; } } exports.CVote = CVote; CVote.OP_CODE = 0x4f; // 'O' CVote.OP_NAME = 'OP_DEFI_TX_CREATE_CFP'; //# sourceMappingURL=dftx_governance.js.map