@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
JavaScript
;
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