@terra-money/core
Version:
This package provides Terra Blockchain client side APIs to support building transaction, singing, or querying chain data.
203 lines • 5.63 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const SHA256 = require("crypto-js/sha256");
function normalizeDecimal(decimalNumber) {
const num = decimalNumber.split('.');
let result = decimalNumber;
if (num.length === 1) {
result += '000000000000000000';
}
else {
const decimalPart = num[1];
for (let i = 18; i > decimalPart.length; i -= 1) {
result += '0';
}
}
return result;
}
function generateVoteHash(salt, exchangeRate, denom, voter) {
const proof = `${salt}:${normalizeDecimal(exchangeRate)}:${denom}:${voter}`;
const hash = SHA256(proof).toString(); // hex string
return hash.slice(0, 40); // 20 prefix bytes
}
exports.generateVoteHash = generateVoteHash;
function buildStdTx(msg, fee, memo) {
fee.amount.sort((a, b) => {
if (a.denom < b.denom)
return -1;
return 1;
});
return {
type: 'core/StdTx',
value: {
fee,
memo,
msg,
signatures: []
}
};
}
exports.buildStdTx = buildStdTx;
function buildExchangeRatePrevote(hash, denom, feeder, validator) {
return {
type: 'oracle/MsgExchangeRatePrevote',
value: {
hash,
denom,
feeder,
validator
}
};
}
exports.buildExchangeRatePrevote = buildExchangeRatePrevote;
function buildExchangeRateVote(exchangeRate, salt, denom, feeder, validator) {
return {
type: 'oracle/MsgExchangeRateVote',
value: {
exchange_rate: exchangeRate,
salt,
denom,
feeder,
validator
}
};
}
exports.buildExchangeRateVote = buildExchangeRateVote;
function buildSend(amount, fromAddress, toAddress) {
// Sort coins before building msg
amount.sort((a, b) => {
if (a.denom < b.denom)
return -1;
return 1;
});
return {
type: 'bank/MsgSend',
value: {
amount,
from_address: fromAddress,
to_address: toAddress
}
};
}
exports.buildSend = buildSend;
function buildMultiSend(inputs, outputs) {
// Sort coins before building msg
inputs.forEach(o => {
o.coins.sort((a, b) => {
if (a < b)
return -1;
return 1;
});
});
outputs.forEach(o => {
o.coins.sort((a, b) => {
if (a < b)
return -1;
return 1;
});
});
return {
type: 'bank/MsgMultiSend',
value: {
inputs,
outputs
}
};
}
exports.buildMultiSend = buildMultiSend;
function buildSwap(trader, offerCoin, askDenom) {
return {
type: 'market/MsgSwap',
value: {
trader,
offer_coin: offerCoin,
ask_denom: askDenom
}
};
}
exports.buildSwap = buildSwap;
function buildSetWithdrawAddress(delegatorAddress, withdrawAddress) {
return {
type: 'distribution/MsgModifyWithdrawAddress',
value: {
delegator_address: delegatorAddress,
withdraw_address: withdrawAddress
}
};
}
exports.buildSetWithdrawAddress = buildSetWithdrawAddress;
function buildWithdrawDelegatorReward(delegatorAddress, validatorAddress) {
return {
type: 'distribution/MsgWithdrawDelegationReward',
value: {
delegator_address: delegatorAddress,
validator_address: validatorAddress
}
};
}
exports.buildWithdrawDelegatorReward = buildWithdrawDelegatorReward;
function buildDelegate(delegatorAddress, validatorAddress, amount) {
return {
type: 'staking/MsgDelegate',
value: {
delegator_address: delegatorAddress,
validator_address: validatorAddress,
amount
}
};
}
exports.buildDelegate = buildDelegate;
function buildRedelegate(delegatorAddress, validatorSrcAddress, validatorDstAddress, amount) {
return {
type: 'staking/MsgBeginRedelegate',
value: {
delegator_address: delegatorAddress,
validator_src_address: validatorSrcAddress,
validator_dst_address: validatorDstAddress,
amount
}
};
}
exports.buildRedelegate = buildRedelegate;
function buildUndelegate(delegatorAddress, validatorAddress, amount) {
return {
type: 'staking/MsgUndelegate',
value: {
delegator_address: delegatorAddress,
validator_address: validatorAddress,
amount
}
};
}
exports.buildUndelegate = buildUndelegate;
function buildDeposit(proposalID, depositor, amount) {
return {
type: 'gov/MsgDeposit',
value: {
proposal_id: proposalID,
depositor,
amount
}
};
}
exports.buildDeposit = buildDeposit;
var VoteOption;
(function (VoteOption) {
VoteOption[VoteOption["OptionEmpty"] = 0] = "OptionEmpty";
VoteOption[VoteOption["OptionYes"] = 1] = "OptionYes";
VoteOption[VoteOption["OptionAbstain"] = 2] = "OptionAbstain";
VoteOption[VoteOption["OptionNo"] = 3] = "OptionNo";
VoteOption[VoteOption["OptionNoWithVeto"] = 4] = "OptionNoWithVeto";
})(VoteOption = exports.VoteOption || (exports.VoteOption = {}));
function buildVote(proposalID, voter, option) {
return {
type: 'gov/MsgVote',
value: {
proposal_id: proposalID,
voter,
option
}
};
}
exports.buildVote = buildVote;
//# sourceMappingURL=msgUtils.js.map