diff --git a/src/api/common/schemas/quality.json b/src/api/common/schemas/quality.json index 5123173a..47d0589f 100644 --- a/src/api/common/schemas/quality.json +++ b/src/api/common/schemas/quality.json @@ -1,8 +1,8 @@ { "$schema": "http://json-schema.org/draft-04/schema#", "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.", - "type": "integer", - "minimum": 0, - "maximum": 1000000000 + "description": "Ratio for incoming/outgoing transit fees.", + "type": "number", + "minimum": 0.000000001, + "maximum": 4.294967295 } diff --git a/src/api/ledger/parse/trustline.js b/src/api/ledger/parse/trustline.js index 6704b6af..1a413e2f 100644 --- a/src/api/ledger/parse/trustline.js +++ b/src/api/ledger/parse/trustline.js @@ -3,6 +3,7 @@ const assert = require('assert'); const utils = require('./utils'); const flags = utils.core.Transaction.flags.TrustSet; +const BigNumber = require('bignumber.js'); function parseFlag(flagsValue, trueValue, falseValue) { if (flagsValue & trueValue) { @@ -14,6 +15,10 @@ function parseFlag(flagsValue, trueValue, falseValue) { return undefined; } +function parseQuality(quality) { + return (new BigNumber(quality)).shift(-9).toNumber(); +} + function parseTrustline(tx: Object): Object { assert(tx.TransactionType === 'TrustSet'); @@ -21,8 +26,8 @@ function parseTrustline(tx: Object): Object { limit: tx.LimitAmount.value, currency: tx.LimitAmount.currency, counterparty: tx.LimitAmount.issuer, - qualityIn: tx.QualityIn, - qualityOut: tx.QualityOut, + qualityIn: parseQuality(tx.QualityIn), + qualityOut: parseQuality(tx.QualityOut), ripplingDisabled: parseFlag( tx.Flags, flags.SetNoRipple, flags.ClearNoRipple), frozen: parseFlag(tx.Flags, flags.SetFreeze, flags.ClearFreeze), diff --git a/src/api/transaction/trustline.js b/src/api/transaction/trustline.js index 7ce374eb..235d92b3 100644 --- a/src/api/transaction/trustline.js +++ b/src/api/transaction/trustline.js @@ -3,6 +3,7 @@ const utils = require('./utils'); const validate = utils.common.validate; const Transaction = utils.common.core.Transaction; +const BigNumber = require('bignumber.js'); const TrustSetFlags = { authorized: {set: 'SetAuth'}, @@ -10,6 +11,10 @@ const TrustSetFlags = { frozen: {set: 'SetFreeze', unset: 'ClearFreeze'} }; +function convertQuality(quality) { + return (new BigNumber(quality)).shift(9).truncated().toNumber(); +} + function createTrustlineTransaction(account, trustline) { validate.address(account); validate.trustline(trustline); @@ -21,8 +26,8 @@ function createTrustlineTransaction(account, trustline) { }; const transaction = new Transaction(); - transaction.trustSet(account, limit, - trustline.qualityIn, trustline.qualityOut); + transaction.trustSet(account, limit, convertQuality(trustline.qualityIn), + convertQuality(trustline.qualityOut)); utils.setTransactionBitFlags(transaction, trustline, TrustSetFlags); return transaction; } diff --git a/test/fixtures/api/requests/prepare-trustline.json b/test/fixtures/api/requests/prepare-trustline.json index 7a30b716..276e217d 100644 --- a/test/fixtures/api/requests/prepare-trustline.json +++ b/test/fixtures/api/requests/prepare-trustline.json @@ -2,8 +2,8 @@ "currency": "USD", "counterparty": "rMH4UxPrbuMa1spCBR98hLLyNJp4d8p4tM", "limit": "10000", - "qualityIn": 500000000, - "qualityOut": 500000000, + "qualityIn": 0.91, + "qualityOut": 0.87, "ripplingDisabled": true, "frozen": false } diff --git a/test/fixtures/api/responses/get-transaction-trustline-set.json b/test/fixtures/api/responses/get-transaction-trustline-set.json index 826e7d7a..7a643ff7 100644 --- a/test/fixtures/api/responses/get-transaction-trustline-set.json +++ b/test/fixtures/api/responses/get-transaction-trustline-set.json @@ -7,8 +7,8 @@ "limit": "10000", "currency": "USD", "counterparty": "rMH4UxPrbuMa1spCBR98hLLyNJp4d8p4tM", - "qualityIn": 500000000, - "qualityOut": 500000000, + "qualityIn": 0.5, + "qualityOut": 0.5, "ripplingDisabled": true }, "outcome": { diff --git a/test/fixtures/api/responses/prepare-trustline.json b/test/fixtures/api/responses/prepare-trustline.json index 40106acb..0b138662 100644 --- a/test/fixtures/api/responses/prepare-trustline.json +++ b/test/fixtures/api/responses/prepare-trustline.json @@ -7,8 +7,8 @@ "currency": "USD", "issuer": "rMH4UxPrbuMa1spCBR98hLLyNJp4d8p4tM" }, - "QualityIn": 500000000, - "QualityOut": 500000000, + "QualityIn": 910000000, + "QualityOut": 870000000, "LastLedgerSequence": 8820051, "Fee": "12", "Sequence": 23