PHP WebShell
Текущая директория: /usr/lib/node_modules/bitgo-express/node_modules/ripple-lib/dist/npm/transaction
Просмотр файла: settings.js
'use strict'; // eslint-disable-line strict
var _ = require('lodash');
var assert = require('assert');
var BigNumber = require('bignumber.js');
var utils = require('./utils');
var validate = utils.common.validate;
var AccountFlagIndices = utils.common.constants.AccountFlagIndices;
var AccountFields = utils.common.constants.AccountFields;
// Emptry string passed to setting will clear it
var CLEAR_SETTING = null;
function setTransactionFlags(txJSON, values) {
var keys = Object.keys(values);
assert(keys.length === 1, 'ERROR: can only set one setting per transaction');
var flagName = keys[0];
var value = values[flagName];
var index = AccountFlagIndices[flagName];
if (index !== undefined) {
if (value) {
txJSON.SetFlag = index;
} else {
txJSON.ClearFlag = index;
}
}
}
function setTransactionFields(txJSON, input) {
var fieldSchema = AccountFields;
for (var fieldName in fieldSchema) {
var field = fieldSchema[fieldName];
var value = input[field.name];
if (value === undefined) {
continue;
}
// The value required to clear an account root field varies
if (value === CLEAR_SETTING && field.hasOwnProperty('defaults')) {
value = field.defaults;
}
if (field.encoding === 'hex' && !field.length) {
// This is currently only used for Domain field
value = new Buffer(value, 'ascii').toString('hex').toUpperCase();
}
txJSON[fieldName] = value;
}
}
/**
* Note: A fee of 1% requires 101% of the destination to be sent for the
* destination to receive 100%.
* The transfer rate is specified as the input amount as fraction of 1.
* To specify the default rate of 0%, a 100% input amount, specify 1.
* To specify a rate of 1%, a 101% input amount, specify 1.01
*
* @param {Number|String} transferRate
*
* @returns {Number|String} numbers will be converted while strings
* are returned
*/
function convertTransferRate(transferRate) {
return new BigNumber(transferRate).shift(9).toNumber();
}
function formatSignerEntry(signer) {
return {
SignerEntry: {
Account: signer.address,
SignerWeight: signer.weight
}
};
}
function createSettingsTransactionWithoutMemos(account, settings) {
if (settings.regularKey !== undefined) {
var removeRegularKey = {
TransactionType: 'SetRegularKey',
Account: account
};
if (settings.regularKey === null) {
return removeRegularKey;
}
return _.assign({}, removeRegularKey, { RegularKey: settings.regularKey });
}
if (settings.signers !== undefined) {
return {
TransactionType: 'SignerListSet',
Account: account,
SignerQuorum: settings.signers.threshold,
SignerEntries: _.map(settings.signers.weights, formatSignerEntry)
};
}
var txJSON = {
TransactionType: 'AccountSet',
Account: account
};
setTransactionFlags(txJSON, _.omit(settings, 'memos'));
setTransactionFields(txJSON, settings);
if (txJSON.TransferRate !== undefined) {
txJSON.TransferRate = convertTransferRate(txJSON.TransferRate);
}
return txJSON;
}
function createSettingsTransaction(account, settings) {
var txJSON = createSettingsTransactionWithoutMemos(account, settings);
if (settings.memos !== undefined) {
txJSON.Memos = _.map(settings.memos, utils.convertMemo);
}
return txJSON;
}
function prepareSettings(address, settings) {
var instructions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
validate.prepareSettings({ address: address, settings: settings, instructions: instructions });
var txJSON = createSettingsTransaction(address, settings);
return utils.prepareTransaction(txJSON, this, instructions);
}
module.exports = prepareSettings;Выполнить команду
Для локальной разработки. Не используйте в интернете!