UNPKG

@muirglacier/jellyfish-transaction

Version:

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

161 lines 8.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CPoolUpdatePair = exports.CPoolCreatePair = exports.CPoolRemoveLiquidity = exports.CPoolAddLiquidity = exports.CCompositeSwap = exports.CPoolId = exports.CPoolSwap = void 0; const jellyfish_buffer_1 = require("@muirglacier/jellyfish-buffer"); const tx_composer_1 = require("../../tx_composer"); const dftx_balance_1 = require("./dftx_balance"); /** * Composable PoolSwap, C stands for Composable. * Immutable by design, bi-directional fromBuffer, toBuffer deep composer. * @throws Error if more than 8 decimals */ class CPoolSwap extends jellyfish_buffer_1.ComposableBuffer { composers(ps) { return [ jellyfish_buffer_1.ComposableBuffer.single(() => ps.fromScript, v => ps.fromScript = v, v => new tx_composer_1.CScript(v)), jellyfish_buffer_1.ComposableBuffer.varUInt(() => ps.fromTokenId, v => ps.fromTokenId = v), jellyfish_buffer_1.ComposableBuffer.satoshiAsBigNumber(() => ps.fromAmount, v => ps.fromAmount = v), jellyfish_buffer_1.ComposableBuffer.single(() => ps.toScript, v => ps.toScript = v, v => new tx_composer_1.CScript(v)), jellyfish_buffer_1.ComposableBuffer.varUInt(() => ps.toTokenId, v => ps.toTokenId = v), jellyfish_buffer_1.ComposableBuffer.maxPriceAsBigNumber(() => ps.maxPrice, v => ps.maxPrice = v) ]; } } exports.CPoolSwap = CPoolSwap; CPoolSwap.OP_CODE = 0x73; CPoolSwap.OP_NAME = 'OP_DEFI_TX_POOL_SWAP'; /** * Composable PoolId, C stands for Composable. * Immutable by design, bi-directional fromBuffer, toBuffer deep composer. */ class CPoolId extends jellyfish_buffer_1.ComposableBuffer { composers(pi) { return [ jellyfish_buffer_1.ComposableBuffer.varUInt(() => pi.id, v => pi.id = v) ]; } } exports.CPoolId = CPoolId; /** * Composable CompositeSwap, C stands for Composable. * Extends from CPoolSwap as it contains same data structure but with different DfTx OP_CODE. * Immutable by design, bi-directional fromBuffer, toBuffer deep composer. * @throws Error if more than 8 decimals */ class CCompositeSwap extends jellyfish_buffer_1.ComposableBuffer { composers(cs) { return [ jellyfish_buffer_1.ComposableBuffer.single(() => cs.poolSwap, v => cs.poolSwap = v, v => new CPoolSwap(v)), jellyfish_buffer_1.ComposableBuffer.varUIntArray(() => cs.pools, v => cs.pools = v, v => new CPoolId(v)) ]; } } exports.CCompositeSwap = CCompositeSwap; CCompositeSwap.OP_CODE = 0x69; // 'i' CCompositeSwap.OP_NAME = 'OP_DEFI_TX_COMPOSITE_SWAP'; /** * Composable PoolAddLiquidity, C stands for Composable. * Immutable by design, bi-directional fromBuffer, toBuffer deep composer. */ class CPoolAddLiquidity extends jellyfish_buffer_1.ComposableBuffer { composers(p) { return [ jellyfish_buffer_1.ComposableBuffer.varUIntArray(() => p.from, v => p.from = v, v => new dftx_balance_1.CScriptBalances(v)), jellyfish_buffer_1.ComposableBuffer.single(() => p.shareAddress, v => p.shareAddress = v, v => new tx_composer_1.CScript(v)) ]; } } exports.CPoolAddLiquidity = CPoolAddLiquidity; CPoolAddLiquidity.OP_CODE = 0x6c; CPoolAddLiquidity.OP_NAME = 'OP_DEFI_TX_POOL_ADD_LIQUIDITY'; /** * Composable PoolRemoveLiquidity, C stands for Composable. * Immutable by design, bi-directional fromBuffer, toBuffer deep composer. */ class CPoolRemoveLiquidity extends jellyfish_buffer_1.ComposableBuffer { composers(p) { return [ jellyfish_buffer_1.ComposableBuffer.single(() => p.script, v => p.script = v, v => new tx_composer_1.CScript(v)), jellyfish_buffer_1.ComposableBuffer.varUInt(() => p.tokenId, v => p.tokenId = v), jellyfish_buffer_1.ComposableBuffer.satoshiAsBigNumber(() => p.amount, v => p.amount = v) ]; } } exports.CPoolRemoveLiquidity = CPoolRemoveLiquidity; CPoolRemoveLiquidity.OP_CODE = 0x72; CPoolRemoveLiquidity.OP_NAME = 'OP_DEFI_TX_POOL_REMOVE_LIQUIDITY'; /** * Composable PoolCreatePair, C stands for Composable. * Immutable by design, bi-directional fromBuffer, toBuffer deep composer. */ class CPoolCreatePair extends jellyfish_buffer_1.ComposableBuffer { composers(p) { return [ jellyfish_buffer_1.ComposableBuffer.varUInt(() => p.tokenA, v => p.tokenA = v), jellyfish_buffer_1.ComposableBuffer.varUInt(() => p.tokenB, v => p.tokenB = v), jellyfish_buffer_1.ComposableBuffer.satoshiAsBigNumber(() => p.commission, v => p.commission = v), jellyfish_buffer_1.ComposableBuffer.single(() => p.ownerAddress, v => p.ownerAddress = v, v => new tx_composer_1.CScript(v)), jellyfish_buffer_1.ComposableBuffer.uBool8(() => p.status, v => p.status = v), jellyfish_buffer_1.ComposableBuffer.varUIntUtf8BE(() => p.pairSymbol, v => p.pairSymbol = v), // Note(canonbrother): special fix for inconsistent bytes in "block height >= ClarkeQuayHeight" condition // https://github.com/DeFiCh/ain/blob/4b70ecd8ee32d00c75be04a786dc75ec4a3c91dd/src/masternodes/rpc_poolpair.cpp#L571-L573 { fromBuffer: (buffer) => { if (buffer.remaining() > 0) { const length = jellyfish_buffer_1.readVarUInt(buffer); p.customRewards = []; for (let i = 0; i < length; i++) { p.customRewards.push(new dftx_balance_1.CTokenBalance(buffer).toObject()); } } }, toBuffer: (buffer) => { if (p.customRewards !== undefined) { jellyfish_buffer_1.writeVarUInt(p.customRewards.length, buffer); p.customRewards.forEach(data => new dftx_balance_1.CTokenBalance(data).toBuffer(buffer)); } } } ]; } } exports.CPoolCreatePair = CPoolCreatePair; CPoolCreatePair.OP_CODE = 0x70; CPoolCreatePair.OP_NAME = 'OP_DEFI_TX_POOL_CREATE_PAIR'; /** * Composable PoolUpdatePair, C stands for Composable. * Immutable by design, bi-directional fromBuffer, toBuffer deep composer. */ class CPoolUpdatePair extends jellyfish_buffer_1.ComposableBuffer { composers(p) { return [ jellyfish_buffer_1.ComposableBuffer.varUInt(() => p.poolId, v => p.poolId = v), jellyfish_buffer_1.ComposableBuffer.uBool32(() => p.status, v => p.status = v), jellyfish_buffer_1.ComposableBuffer.satoshiAsBigNumber(() => p.commission, v => p.commission = v), jellyfish_buffer_1.ComposableBuffer.single(() => p.ownerAddress, v => p.ownerAddress = v, v => new tx_composer_1.CScript(v)), // Note(canonbrother): special fix for inconsistent bytes in "block height >= ClarkeQuayHeight" condition // https://github.com/DeFiCh/ain/blob/4b70ecd8ee32d00c75be04a786dc75ec4a3c91dd/src/masternodes/rpc_poolpair.cpp#L719-721 { fromBuffer: (buffer) => { if (buffer.remaining() > 0) { const length = jellyfish_buffer_1.readVarUInt(buffer); p.customRewards = []; for (let i = 0; i < length; i++) { p.customRewards.push(new dftx_balance_1.CTokenBalance(buffer).toObject()); } } }, toBuffer: (buffer) => { if (p.customRewards !== undefined) { jellyfish_buffer_1.writeVarUInt(p.customRewards.length, buffer); p.customRewards.forEach(data => new dftx_balance_1.CTokenBalance(data).toBuffer(buffer)); } } } ]; } } exports.CPoolUpdatePair = CPoolUpdatePair; CPoolUpdatePair.OP_CODE = 0x75; CPoolUpdatePair.OP_NAME = 'OP_DEFI_TX_POOL_UPDATE_PAIR'; //# sourceMappingURL=dftx_pool.js.map