minter-js-sdk
Version:
JS SDK for Minter Blockchain
154 lines (142 loc) • 6.6 kB
JavaScript
import {TX_TYPE, normalizeTxType} from 'minterjs-util';
import {TxData as TxBufferData} from 'minterjs-tx';
import SendTxData from './send.js';
import MultisendTxData from './multisend.js';
import SellTxData from './convert-sell.js';
import BuyTxData from './convert-buy.js';
import SellAllTxData from './convert-sell-all.js';
import CreateCoinTxData from './create-coin.js';
import DeclareCandidacyTxData from './candidacy-declare.js';
import EditCandidateTxData from './candidate-edit.js';
import SetCandidateOnTxData from './candidate-set-on.js';
import SetCandidateOffTxData from './candidate-set-off.js';
import DelegateTxData from './stake-delegate.js';
import UnbondTxData from './stake-unbond.js';
import RedeemCheckTxData from './redeem-check.js';
import CreateMultisigTxData from './create-multisig.js';
import SetHaltBlockTxData from './vote-halt-block.js';
import RecreateCoinTxData from './recreate-coin.js';
import EditTickerOwnerTxData from './edit-ticker-owner.js';
import EditMultisigTxData from './edit-multisig.js';
import PriceVoteTxData from './vote-price.js';
import EditCandidatePublicKeyTxData from './candidate-edit-public-key.js';
import AddLiquidityTxData from './pool-add-liquidity.js';
import RemoveLiquidityTxData from './pool-remove-liquidity.js';
import BuyPoolTxData from './pool-buy.js';
import SellPoolTxData from './pool-sell.js';
import SellAllPoolTxData from './pool-sell-all.js';
import EditCandidateCommissionTxData from './candidate-edit-commission.js';
import MoveStakeTxData from './stake-move.js';
import MintTokenTxData from './token-mint.js';
import BurnTokenTxData from './token-burn.js';
import CreateTokenTxData from './token-create.js';
import RecreateTokenTxData from './token-recreate.js';
import VoteCommissionTxData from './vote-commission.js';
import VoteUpdateTxData from './vote-update.js';
import CreatePoolTxData from './pool-create.js';
import AddLimitOrderTxData from './limit-order-add.js';
import RemoveLimitOrderTxData from './limit-order-remove.js';
import LockStakeTxData from './stake-lock.js';
import LockTxData from './lock.js';
import {decodeCheck} from '../check.js';
const TX_DATA_CONSTRUCTOR = {
[]: SendTxData,
[]: MultisendTxData,
[]: SellTxData,
[]: BuyTxData,
[]: SellAllTxData,
[]: CreateCoinTxData,
[]: DeclareCandidacyTxData,
[]: EditCandidateTxData,
[]: SetCandidateOnTxData,
[]: SetCandidateOffTxData,
[]: DelegateTxData,
[]: UnbondTxData,
[]: RedeemCheckTxData,
[]: CreateMultisigTxData,
[]: SetHaltBlockTxData,
[]: RecreateCoinTxData,
[]: EditTickerOwnerTxData,
[]: EditMultisigTxData,
[]: PriceVoteTxData,
[]: EditCandidatePublicKeyTxData,
[]: AddLiquidityTxData,
[]: RemoveLiquidityTxData,
[]: BuyPoolTxData,
[]: SellPoolTxData,
[]: SellAllPoolTxData,
[]: EditCandidateCommissionTxData,
[]: MoveStakeTxData,
[]: MintTokenTxData,
[]: BurnTokenTxData,
[]: CreateTokenTxData,
[]: RecreateTokenTxData,
[]: VoteCommissionTxData,
[]: VoteUpdateTxData,
[]: CreatePoolTxData,
[]: AddLimitOrderTxData,
[]: RemoveLimitOrderTxData,
[]: LockStakeTxData,
[]: LockTxData,
};
/**
* @param {TX_TYPE|number|string|Buffer|Uint8Array} txType
* @return {SendTxData|MultisendTxData|SellTxData|SellAllTxData|BuyTxData|CreateCoinTxData|DeclareCandidacyTxData|EditCandidateTxData|SetCandidateOnTxData|SetCandidateOffTxData|DelegateTxData|UnbondTxData|RedeemCheckTxData|CreateMultisigTxData|SetHaltBlockTxData|RecreateCoinTxData|EditTickerOwnerTxData|EditMultisigTxData|PriceVoteTxData|EditCandidatePublicKeyTxData|AddLiquidityTxData|RemoveLiquidityTxData|BuyPoolTxData|SellPoolTxData|SellAllPoolTxData|EditCandidateCommissionTxData|MoveStakeTxData|MintTokenTxData|BurnTokenTxData|CreateTokenTxData|RecreateTokenTxData|VoteCommissionTxData|VoteUpdateTxData|CreatePoolTxData|AddLimitOrderTxData|RemoveLimitOrderTxData|LockStakeTxData|LockTxData}
*/
export default function getTxData(txType) {
txType = normalizeTxType(txType);
return TX_DATA_CONSTRUCTOR[txType];
}
/**
* @param {Buffer|TxData|object} txData
* @param {TX_TYPE} txType
* @param {TxOptions} [options] - options for RedeemCheckTxData
* @return {Buffer}
*/
export function ensureBufferData(txData, txType, options) {
// serialize, if it TxData
if (txData && typeof txData.serialize === 'function') {
txData = txData.serialize();
}
// make buffer from object
if (txData.length === undefined) {
const TxData = getTxData(txType);
txData = new TxData(txData, options);
txData = txData.serialize();
}
return txData;
}
/**
* Decode rlp txData into fields
* @param {TX_TYPE} txType
* @param {string|Buffer|Uint8Array} txData
* @param {boolean} [decodeCheck]
*/
export function decodeTxData(txType, txData, {decodeCheck: isDecodeCheck} = {}) {
txType = normalizeTxType(txType);
let txDataDecoded = getTxData(txType).fromRlp(txData);
let fields = txDataDecoded.fields;
if (isDecodeCheck && txType === TX_TYPE.REDEEM_CHECK) {
fields.checkData = decodeCheck(fields.check);
}
return fields;
}
/**
* Fill tx data params with default values
* @param {TX_TYPE} txType
* @param {object} txData
* @return {object}
*/
export function fillDefaultData(txType, txData) {
const defaultBufferData = new TxBufferData({}, txType, {forceDefaultValues: true});
const defaultData = getTxData(txType).fromBufferFields(defaultBufferData, {disableValidation: true});
let mergedData = {};
defaultBufferData._fields.forEach((key) => {
if (txData?.[key] !== undefined) {
mergedData[key] = txData[key];
} else {
mergedData[key] = defaultData[key];
}
});
return mergedData;
}