PHP WebShell

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

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

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

var _ = require('lodash');
var assert = require('assert');
var AccountFlags = require('./utils').constants.AccountFlags;
var parseFields = require('./fields');

function getAccountRootModifiedNode(tx) {
  var modifiedNodes = tx.meta.AffectedNodes.filter(function (node) {
    return node.ModifiedNode.LedgerEntryType === 'AccountRoot';
  });
  assert(modifiedNodes.length === 1);
  return modifiedNodes[0].ModifiedNode;
}

function parseFlags(tx) {
  var settings = {};
  if (tx.TransactionType !== 'AccountSet') {
    return settings;
  }

  var node = getAccountRootModifiedNode(tx);
  var oldFlags = _.get(node.PreviousFields, 'Flags');
  var newFlags = _.get(node.FinalFields, 'Flags');

  if (oldFlags !== undefined && newFlags !== undefined) {
    var changedFlags = oldFlags ^ newFlags;
    var setFlags = newFlags & changedFlags;
    var clearedFlags = oldFlags & changedFlags;
    _.forEach(AccountFlags, function (flagValue, flagName) {
      if (setFlags & flagValue) {
        settings[flagName] = true;
      } else if (clearedFlags & flagValue) {
        settings[flagName] = false;
      }
    });
  }

  // enableTransactionIDTracking requires a special case because it
  // does not affect the Flags field; instead it adds/removes a field called
  // "AccountTxnID" to/from the account root.

  var oldField = _.get(node.PreviousFields, 'AccountTxnID');
  var newField = _.get(node.FinalFields, 'AccountTxnID');
  if (newField && !oldField) {
    settings.enableTransactionIDTracking = true;
  } else if (oldField && !newField) {
    settings.enableTransactionIDTracking = false;
  }

  return settings;
}

function parseSettings(tx) {
  var txType = tx.TransactionType;
  assert(txType === 'AccountSet' || txType === 'SetRegularKey' || txType === 'SignerListSet');

  return _.assign({}, parseFlags(tx), parseFields(tx));
}

module.exports = parseSettings;

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


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