Express trustline quality as a float

This commit is contained in:
Chris Clark
2015-07-23 13:42:09 -07:00
parent e76e693bdb
commit a383bd7e52
6 changed files with 24 additions and 14 deletions

View File

@@ -1,8 +1,8 @@
{ {
"$schema": "http://json-schema.org/draft-04/schema#", "$schema": "http://json-schema.org/draft-04/schema#",
"title": "quality", "title": "quality",
"description": "Ratio for incoming/outgoing transit fees represented in billionths. (For example, a value of 500 million represents a 0.5:1 ratio.) As a special case, 0 is treated as a 1:1 ratio.", "description": "Ratio for incoming/outgoing transit fees.",
"type": "integer", "type": "number",
"minimum": 0, "minimum": 0.000000001,
"maximum": 1000000000 "maximum": 4.294967295
} }

View File

@@ -3,6 +3,7 @@
const assert = require('assert'); const assert = require('assert');
const utils = require('./utils'); const utils = require('./utils');
const flags = utils.core.Transaction.flags.TrustSet; const flags = utils.core.Transaction.flags.TrustSet;
const BigNumber = require('bignumber.js');
function parseFlag(flagsValue, trueValue, falseValue) { function parseFlag(flagsValue, trueValue, falseValue) {
if (flagsValue & trueValue) { if (flagsValue & trueValue) {
@@ -14,6 +15,10 @@ function parseFlag(flagsValue, trueValue, falseValue) {
return undefined; return undefined;
} }
function parseQuality(quality) {
return (new BigNumber(quality)).shift(-9).toNumber();
}
function parseTrustline(tx: Object): Object { function parseTrustline(tx: Object): Object {
assert(tx.TransactionType === 'TrustSet'); assert(tx.TransactionType === 'TrustSet');
@@ -21,8 +26,8 @@ function parseTrustline(tx: Object): Object {
limit: tx.LimitAmount.value, limit: tx.LimitAmount.value,
currency: tx.LimitAmount.currency, currency: tx.LimitAmount.currency,
counterparty: tx.LimitAmount.issuer, counterparty: tx.LimitAmount.issuer,
qualityIn: tx.QualityIn, qualityIn: parseQuality(tx.QualityIn),
qualityOut: tx.QualityOut, qualityOut: parseQuality(tx.QualityOut),
ripplingDisabled: parseFlag( ripplingDisabled: parseFlag(
tx.Flags, flags.SetNoRipple, flags.ClearNoRipple), tx.Flags, flags.SetNoRipple, flags.ClearNoRipple),
frozen: parseFlag(tx.Flags, flags.SetFreeze, flags.ClearFreeze), frozen: parseFlag(tx.Flags, flags.SetFreeze, flags.ClearFreeze),

View File

@@ -3,6 +3,7 @@
const utils = require('./utils'); const utils = require('./utils');
const validate = utils.common.validate; const validate = utils.common.validate;
const Transaction = utils.common.core.Transaction; const Transaction = utils.common.core.Transaction;
const BigNumber = require('bignumber.js');
const TrustSetFlags = { const TrustSetFlags = {
authorized: {set: 'SetAuth'}, authorized: {set: 'SetAuth'},
@@ -10,6 +11,10 @@ const TrustSetFlags = {
frozen: {set: 'SetFreeze', unset: 'ClearFreeze'} frozen: {set: 'SetFreeze', unset: 'ClearFreeze'}
}; };
function convertQuality(quality) {
return (new BigNumber(quality)).shift(9).truncated().toNumber();
}
function createTrustlineTransaction(account, trustline) { function createTrustlineTransaction(account, trustline) {
validate.address(account); validate.address(account);
validate.trustline(trustline); validate.trustline(trustline);
@@ -21,8 +26,8 @@ function createTrustlineTransaction(account, trustline) {
}; };
const transaction = new Transaction(); const transaction = new Transaction();
transaction.trustSet(account, limit, transaction.trustSet(account, limit, convertQuality(trustline.qualityIn),
trustline.qualityIn, trustline.qualityOut); convertQuality(trustline.qualityOut));
utils.setTransactionBitFlags(transaction, trustline, TrustSetFlags); utils.setTransactionBitFlags(transaction, trustline, TrustSetFlags);
return transaction; return transaction;
} }

View File

@@ -2,8 +2,8 @@
"currency": "USD", "currency": "USD",
"counterparty": "rMH4UxPrbuMa1spCBR98hLLyNJp4d8p4tM", "counterparty": "rMH4UxPrbuMa1spCBR98hLLyNJp4d8p4tM",
"limit": "10000", "limit": "10000",
"qualityIn": 500000000, "qualityIn": 0.91,
"qualityOut": 500000000, "qualityOut": 0.87,
"ripplingDisabled": true, "ripplingDisabled": true,
"frozen": false "frozen": false
} }

View File

@@ -7,8 +7,8 @@
"limit": "10000", "limit": "10000",
"currency": "USD", "currency": "USD",
"counterparty": "rMH4UxPrbuMa1spCBR98hLLyNJp4d8p4tM", "counterparty": "rMH4UxPrbuMa1spCBR98hLLyNJp4d8p4tM",
"qualityIn": 500000000, "qualityIn": 0.5,
"qualityOut": 500000000, "qualityOut": 0.5,
"ripplingDisabled": true "ripplingDisabled": true
}, },
"outcome": { "outcome": {

View File

@@ -7,8 +7,8 @@
"currency": "USD", "currency": "USD",
"issuer": "rMH4UxPrbuMa1spCBR98hLLyNJp4d8p4tM" "issuer": "rMH4UxPrbuMa1spCBR98hLLyNJp4d8p4tM"
}, },
"QualityIn": 500000000, "QualityIn": 910000000,
"QualityOut": 500000000, "QualityOut": 870000000,
"LastLedgerSequence": 8820051, "LastLedgerSequence": 8820051,
"Fee": "12", "Fee": "12",
"Sequence": 23 "Sequence": 23