PHP WebShell
Текущая директория: /usr/lib/node_modules/bitgo-express/node_modules/ripple-lib/dist/npm/transaction
Просмотр файла: utils.js
'use strict'; // eslint-disable-line strict
var _ = require('lodash');
var BigNumber = require('bignumber.js');
var common = require('../common');
var txFlags = common.txFlags;
function formatPrepareResponse(txJSON) {
var instructions = {
fee: common.dropsToXrp(txJSON.Fee),
sequence: txJSON.Sequence,
maxLedgerVersion: txJSON.LastLedgerSequence === undefined ? null : txJSON.LastLedgerSequence
};
return {
txJSON: JSON.stringify(txJSON),
instructions: _.omitBy(instructions, _.isUndefined)
};
}
function setCanonicalFlag(txJSON) {
txJSON.Flags |= txFlags.Universal.FullyCanonicalSig;
// JavaScript converts operands to 32-bit signed ints before doing bitwise
// operations. We need to convert it back to an unsigned int.
txJSON.Flags = txJSON.Flags >>> 0;
}
function scaleValue(value, multiplier) {
var extra = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
return new BigNumber(value).times(multiplier).plus(extra).toString();
}
function prepareTransaction(txJSON, api, instructions) {
common.validate.instructions(instructions);
var account = txJSON.Account;
setCanonicalFlag(txJSON);
function prepareMaxLedgerVersion() {
if (instructions.maxLedgerVersion !== undefined) {
if (instructions.maxLedgerVersion !== null) {
txJSON.LastLedgerSequence = instructions.maxLedgerVersion;
}
return Promise.resolve(txJSON);
}
var offset = instructions.maxLedgerVersionOffset !== undefined ? instructions.maxLedgerVersionOffset : 3;
return api.connection.getLedgerVersion().then(function (ledgerVersion) {
txJSON.LastLedgerSequence = ledgerVersion + offset;
return txJSON;
});
}
function prepareFee() {
var multiplier = instructions.signersCount === undefined ? 1 : instructions.signersCount + 1;
if (instructions.fee !== undefined) {
txJSON.Fee = scaleValue(common.xrpToDrops(instructions.fee), multiplier);
return Promise.resolve(txJSON);
}
var cushion = api._feeCushion;
return common.serverInfo.getFee(api.connection, cushion).then(function (fee) {
return api.connection.getFeeRef().then(function (feeRef) {
var extraFee = txJSON.TransactionType !== 'EscrowFinish' || txJSON.Fulfillment === undefined ? 0 : cushion * feeRef * (32 + Math.floor(new Buffer(txJSON.Fulfillment, 'hex').length / 16));
var feeDrops = common.xrpToDrops(fee);
if (instructions.maxFee !== undefined) {
var maxFeeDrops = common.xrpToDrops(instructions.maxFee);
var normalFee = scaleValue(feeDrops, multiplier, extraFee);
txJSON.Fee = BigNumber.min(normalFee, maxFeeDrops).toString();
} else {
txJSON.Fee = scaleValue(feeDrops, multiplier, extraFee);
}
return txJSON;
});
});
}
function prepareSequence() {
if (instructions.sequence !== undefined) {
txJSON.Sequence = instructions.sequence;
return Promise.resolve(txJSON);
}
var request = {
command: 'account_info',
account: account
};
return api.connection.request(request).then(function (response) {
txJSON.Sequence = response.account_data.Sequence;
return txJSON;
});
}
return Promise.all([prepareMaxLedgerVersion(), prepareFee(), prepareSequence()]).then(function () {
return formatPrepareResponse(txJSON);
});
}
function convertStringToHex(string) {
return string ? new Buffer(string, 'utf8').toString('hex').toUpperCase() : undefined;
}
function convertMemo(memo) {
return {
Memo: common.removeUndefined({
MemoData: convertStringToHex(memo.data),
MemoType: convertStringToHex(memo.type),
MemoFormat: convertStringToHex(memo.format)
})
};
}
module.exports = {
convertStringToHex: convertStringToHex,
convertMemo: convertMemo,
prepareTransaction: prepareTransaction,
common: common
};Выполнить команду
Для локальной разработки. Не используйте в интернете!