PHP WebShell

Текущая директория: /usr/lib/node_modules/bitgo-express/node_modules/ripple-lib/dist/npm/ledger/parse

Просмотр файла: utils.js

'use strict'; // eslint-disable-line strict

var _ = require('lodash');
var transactionParser = require('ripple-lib-transactionparser');
var utils = require('../utils');
var BigNumber = require('bignumber.js');
var parseAmount = require('./amount');

function adjustQualityForXRP(quality, takerGetsCurrency, takerPaysCurrency) {
  // quality = takerPays.value/takerGets.value
  // using drops (1e-6 XRP) for XRP values
  var numeratorShift = takerPaysCurrency === 'XRP' ? -6 : 0;
  var denominatorShift = takerGetsCurrency === 'XRP' ? -6 : 0;
  var shift = numeratorShift - denominatorShift;
  return shift === 0 ? quality : new BigNumber(quality).shift(shift).toString();
}

function parseQuality(quality) {
  if (typeof quality === 'number') {
    return new BigNumber(quality).shift(-9).toNumber();
  }
  return undefined;
}

function parseTimestamp(rippleTime) {
  return rippleTime ? utils.common.rippleTimeToISO8601(rippleTime) : undefined;
}

function removeEmptyCounterparty(amount) {
  if (amount.counterparty === '') {
    delete amount.counterparty;
  }
}

function removeEmptyCounterpartyInBalanceChanges(balanceChanges) {
  _.forEach(balanceChanges, function (changes) {
    _.forEach(changes, removeEmptyCounterparty);
  });
}

function removeEmptyCounterpartyInOrderbookChanges(orderbookChanges) {
  _.forEach(orderbookChanges, function (changes) {
    _.forEach(changes, function (change) {
      _.forEach(change, removeEmptyCounterparty);
    });
  });
}

function isPartialPayment(tx) {
  return (tx.Flags & utils.common.txFlags.Payment.PartialPayment) !== 0;
}

function parseDeliveredAmount(tx) {

  if (tx.TransactionType !== 'Payment' || tx.meta.TransactionResult !== 'tesSUCCESS') {
    return undefined;
  }

  if (tx.meta.delivered_amount && tx.meta.delivered_amount === 'unavailable') {
    return undefined;
  }

  // parsable delivered_amount
  if (tx.meta.delivered_amount) {
    return parseAmount(tx.meta.delivered_amount);
  }

  // DeliveredAmount only present on partial payments
  if (tx.meta.DeliveredAmount) {
    return parseAmount(tx.meta.DeliveredAmount);
  }

  // no partial payment flag, use tx.Amount
  if (tx.Amount && !isPartialPayment(tx)) {
    return parseAmount(tx.Amount);
  }

  // DeliveredAmount field was introduced at
  // ledger 4594095 - after that point its absence
  // on a tx flagged as partial payment indicates
  // the full amount was transferred. The amount
  // transferred with a partial payment before
  // that date must be derived from metadata.
  if (tx.Amount && tx.ledger_index > 4594094) {
    return parseAmount(tx.Amount);
  }

  return undefined;
}

function parseOutcome(tx) {
  var metadata = tx.meta || tx.metaData;
  if (!metadata) {
    return undefined;
  }
  var balanceChanges = transactionParser.parseBalanceChanges(metadata);
  var orderbookChanges = transactionParser.parseOrderbookChanges(metadata);
  removeEmptyCounterpartyInBalanceChanges(balanceChanges);
  removeEmptyCounterpartyInOrderbookChanges(orderbookChanges);

  return utils.common.removeUndefined({
    result: tx.meta.TransactionResult,
    timestamp: parseTimestamp(tx.date),
    fee: utils.common.dropsToXrp(tx.Fee),
    balanceChanges: balanceChanges,
    orderbookChanges: orderbookChanges,
    ledgerVersion: tx.ledger_index,
    indexInLedger: tx.meta.TransactionIndex,
    deliveredAmount: parseDeliveredAmount(tx)
  });
}

function hexToString(hex) {
  return hex ? new Buffer(hex, 'hex').toString('utf-8') : undefined;
}

function parseMemos(tx) {
  if (!Array.isArray(tx.Memos) || tx.Memos.length === 0) {
    return undefined;
  }
  return tx.Memos.map(function (m) {
    return utils.common.removeUndefined({
      type: m.Memo.parsed_memo_type || hexToString(m.Memo.MemoType),
      format: m.Memo.parsed_memo_format || hexToString(m.Memo.MemoFormat),
      data: m.Memo.parsed_memo_data || hexToString(m.Memo.MemoData)
    });
  });
}

module.exports = {
  parseQuality: parseQuality,
  parseOutcome: parseOutcome,
  parseMemos: parseMemos,
  hexToString: hexToString,
  parseTimestamp: parseTimestamp,
  adjustQualityForXRP: adjustQualityForXRP,
  isPartialPayment: isPartialPayment,
  dropsToXrp: utils.common.dropsToXrp,
  constants: utils.common.constants,
  txFlags: utils.common.txFlags,
  removeUndefined: utils.common.removeUndefined,
  rippleTimeToISO8601: utils.common.rippleTimeToISO8601
};

Выполнить команду


Для локальной разработки. Не используйте в интернете!