From 3f2d9d198ea5ab9bc24d005ec176239dee018421 Mon Sep 17 00:00:00 2001 From: Elliot Lee Date: Tue, 28 Aug 2018 17:31:12 -0700 Subject: [PATCH] computeLedgerHash - add requireRawTransactions option --- src/offline/ledgerhash.ts | 19 +++++++++++++++---- test/api-test.js | 2 +- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/offline/ledgerhash.ts b/src/offline/ledgerhash.ts index 8c38fb9e..ead484b9 100644 --- a/src/offline/ledgerhash.ts +++ b/src/offline/ledgerhash.ts @@ -25,9 +25,15 @@ function hashLedgerHeader(ledgerHeader) { return hashes.computeLedgerHash(header) } -function computeTransactionHash(ledger, version) { +function computeTransactionHash(ledger, version, + options: ComputeLedgerHashOptions) { if (ledger.rawTransactions === undefined) { - return ledger.transactionHash + if (options.requireRawTransactions !== true) { + return ledger.transactionHash + } else { + throw new common.errors.ValidationError('rawTransactions' + + ' property is missing from the ledger') + } } const transactions: any[] = JSON.parse(ledger.rawTransactions) const txs = _.map(transactions, tx => { @@ -60,10 +66,15 @@ function computeStateHash(ledger, version) { const sLCF_SHAMapV2 = 0x02 -function computeLedgerHash(ledger: any): string { +export type ComputeLedgerHashOptions = { + requireRawTransactions?: boolean +} + +function computeLedgerHash(ledger: any, + options: ComputeLedgerHashOptions = {}): string { const version = ((ledger.closeFlags & sLCF_SHAMapV2) === 0) ? 1 : 2 const subhashes = { - transactionHash: computeTransactionHash(ledger, version), + transactionHash: computeTransactionHash(ledger, version, options), stateHash: computeStateHash(ledger, version) } return hashLedgerHeader(_.assign({}, ledger, subhashes)) diff --git a/test/api-test.js b/test/api-test.js index 68340a21..8e0ed9ff 100644 --- a/test/api-test.js +++ b/test/api-test.js @@ -2550,7 +2550,7 @@ describe('RippleAPI', function () { .then(response => { const ledger = _.assign({}, response, { parentCloseTime: response.closeTime }); - const hash = this.api.computeLedgerHash(ledger); + const hash = this.api.computeLedgerHash(ledger, {requireRawTransactions: true}); assert.strictEqual(hash, 'E6DB7365949BF9814D76BCC730B01818EB9136A89DB224F3F9F5AAE4569D758E'); });