Lint utils directory (#1563)

* Lint the utils directory

* Modify computeLedgerHash to take new Ledger format.
This commit is contained in:
Nathan Nichols
2021-09-10 12:32:38 -07:00
committed by Mayukha Vadari
parent 33f83947f1
commit 633032ddd8
29 changed files with 921 additions and 883 deletions

View File

@@ -1,11 +1,15 @@
{
"stateHash": "D9ABF622DA26EEEE48203085D4BC23B0F77DC6F8724AC33D975DA3CA492D2E44",
"closeTime": "2015-08-12T01:01:10.000Z",
"parentCloseTime": "2015-08-12T01:01:00.000Z",
"closeFlags": 0,
"closeTimeResolution": 10,
"ledgerVersion": 15202439,
"parentLedgerHash": "12724A65B030C15A1573AA28B1BBB5DF3DA4589AA3623675A31CAE69B23B1C4E",
"totalDrops": "99998831688050493",
"transactionHash": "325EACC5271322539EEEC2D6A5292471EF1B3E72AE7180533EFC3B8F0AD435C8"
"account_hash": "D9ABF622DA26EEEE48203085D4BC23B0F77DC6F8724AC33D975DA3CA492D2E44",
"close_time": 492656470,
"parent_close_time": 492656460,
"close_flags": 0,
"ledger_index": "15202439",
"close_time_human": "2015-Aug-12 01:01:10.000000000 UTC",
"close_time_resolution": 10,
"closed": true,
"hash": "F4D865D83EB88C1A1911B9E90641919A1314F36E1B099F8E95FE3B7C77BE3349",
"ledger_hash": "F4D865D83EB88C1A1911B9E90641919A1314F36E1B099F8E95FE3B7C77BE3349",
"parent_hash": "12724A65B030C15A1573AA28B1BBB5DF3DA4589AA3623675A31CAE69B23B1C4E",
"total_coins": "99998831688050493",
"transaction_hash": "325EACC5271322539EEEC2D6A5292471EF1B3E72AE7180533EFC3B8F0AD435C8"
}

View File

@@ -1,21 +1,16 @@
[
{
"hash": "F8F337DEE5D5B238A10AF4A4D56926BA26C83EE7AF5A5A6474340C56F9252DF3",
"date": "2015-08-12T01:01:10+00:00",
"ledger_index": 15202439,
"tx": {
"TransactionType": "Payment",
"Flags": 2147483648,
"Sequence": 1608,
"LastLedgerSequence": 15202446,
"Amount": "120000000",
"Fee": "15000",
"SigningPubKey": "03BC0973F997BC6384BE455B163519A3E96BC2D725C37F7172D5FED5DD38E2A357",
"TxnSignature": "3045022100D80A1802B00AEEF9FDFDE594B0D568217A312D54E6337B8519C0D699841EFB96022067F6913B13D0EC2354C5A67CE0A41AE4181A09CD08A1BB0638D128D357961006",
"Account": "rDPL68aNpdfp9h59R4QT5R6B1Z2W9oRc51",
"Destination": "rE4S4Xw8euysJ3mt7gmK8EhhYEwmALpb3R"
},
"meta": {
"TransactionType": "Payment",
"Flags": 2147483648,
"Sequence": 1608,
"LastLedgerSequence": 15202446,
"Amount": "120000000",
"Fee": "15000",
"SigningPubKey": "03BC0973F997BC6384BE455B163519A3E96BC2D725C37F7172D5FED5DD38E2A357",
"TxnSignature": "3045022100D80A1802B00AEEF9FDFDE594B0D568217A312D54E6337B8519C0D699841EFB96022067F6913B13D0EC2354C5A67CE0A41AE4181A09CD08A1BB0638D128D357961006",
"Account": "rDPL68aNpdfp9h59R4QT5R6B1Z2W9oRc51",
"Destination": "rE4S4Xw8euysJ3mt7gmK8EhhYEwmALpb3R",
"metaData": {
"TransactionIndex": 6,
"AffectedNodes": [
{
@@ -60,22 +55,17 @@
}
},
{
"hash": "F8D5DE632B1D8B64E577C46912CCE483D6DF4FD4E2CF4A3D586A099DE3B27021",
"date": "2015-08-12T01:01:10+00:00",
"ledger_index": 15202439,
"tx": {
"TransactionType": "Payment",
"Flags": 2147483648,
"Sequence": 18874,
"LastLedgerSequence": 15202446,
"Amount": "120000000",
"Fee": "15000",
"SigningPubKey": "035D097E75D4B35345CEB30F9B1D18CB81165FE6ADD02481AA5B02B5F9C8107EE1",
"TxnSignature": "304402203D80E8BC71908AB345948AB71FB7B8DE239DD79636D96D3C5BDA2B2F192A5EEA0220686413D69BF0D813FC61DABD437AEFAAE69925D3E10FCD5B2C4D90B5AF7B883D",
"Account": "rnHScgV6wSP9sR25uYWiMo3QYNA5ybQ7cH",
"Destination": "rwnnfHDaEAwXaVji52cWWizbHVMs2Cz5K9"
},
"meta": {
"TransactionType": "Payment",
"Flags": 2147483648,
"Sequence": 18874,
"LastLedgerSequence": 15202446,
"Amount": "120000000",
"Fee": "15000",
"SigningPubKey": "035D097E75D4B35345CEB30F9B1D18CB81165FE6ADD02481AA5B02B5F9C8107EE1",
"TxnSignature": "304402203D80E8BC71908AB345948AB71FB7B8DE239DD79636D96D3C5BDA2B2F192A5EEA0220686413D69BF0D813FC61DABD437AEFAAE69925D3E10FCD5B2C4D90B5AF7B883D",
"Account": "rnHScgV6wSP9sR25uYWiMo3QYNA5ybQ7cH",
"Destination": "rwnnfHDaEAwXaVji52cWWizbHVMs2Cz5K9",
"metaData": {
"TransactionIndex": 5,
"AffectedNodes": [
{
@@ -120,22 +110,17 @@
}
},
{
"hash": "E9004490A92413E92DACD621AC73FD434A8950C350F7572FFEAF4D6AAF8FC288",
"date": "2015-08-12T01:01:10+00:00",
"ledger_index": 15202439,
"tx": {
"TransactionType": "Payment",
"Flags": 2147483648,
"Sequence": 1615,
"LastLedgerSequence": 15202446,
"Amount": "400000000",
"Fee": "15000",
"SigningPubKey": "03ACFAA11628C558AB5E7FA64705F442BDAABA6E9D318B30E010BC87CDEA8D1D7D",
"TxnSignature": "3045022100A3530C2E983FB05DFF27172C649494291F7BEBA2E6A59EEAF945CB9728D1DB5E022015BCA0E9D69760224DD7C2B68F3BC1F239D89C3397161AA3901C2E04EE31C18F",
"Account": "razcSDpwds1aTeqDphqzBr7ay1ZELYAWTm",
"Destination": "rhuqJAE2UfhGCvkR7Ve35bvm39JmRvFML4"
},
"meta": {
"TransactionType": "Payment",
"Flags": 2147483648,
"Sequence": 1615,
"LastLedgerSequence": 15202446,
"Amount": "400000000",
"Fee": "15000",
"SigningPubKey": "03ACFAA11628C558AB5E7FA64705F442BDAABA6E9D318B30E010BC87CDEA8D1D7D",
"TxnSignature": "3045022100A3530C2E983FB05DFF27172C649494291F7BEBA2E6A59EEAF945CB9728D1DB5E022015BCA0E9D69760224DD7C2B68F3BC1F239D89C3397161AA3901C2E04EE31C18F",
"Account": "razcSDpwds1aTeqDphqzBr7ay1ZELYAWTm",
"Destination": "rhuqJAE2UfhGCvkR7Ve35bvm39JmRvFML4",
"metaData": {
"TransactionIndex": 4,
"AffectedNodes": [
{
@@ -180,22 +165,17 @@
}
},
{
"hash": "D44BFF924D23211B82B8F604AF6D92F260F8DD13103A96F03E48825C4A978FD6",
"date": "2015-08-12T01:01:10+00:00",
"ledger_index": 15202439,
"tx": {
"TransactionType": "Payment",
"Flags": 2147483648,
"Sequence": 1674,
"LastLedgerSequence": 15202446,
"Amount": "800000000",
"Fee": "15000",
"SigningPubKey": "028F28D78FDA74222F4008F012247DF3BBD42B90CE4CFD87E29598196108E91B52",
"TxnSignature": "3044022065A003194D91E774D180BE47D4E086BB2624BC8F6DB7C655E135D5C6C03BBC7C02205DC961C2B7A06D701B29C2116ACF6F84CC84205FF44411576C15507852ECC31C",
"Account": "rQGLp9nChtWkdgcHjj6McvJithN2S2HJsP",
"Destination": "rEUubanepAAugnNJY1gxEZLDnk9W5NCoFU"
},
"meta": {
"TransactionType": "Payment",
"Flags": 2147483648,
"Sequence": 1674,
"LastLedgerSequence": 15202446,
"Amount": "800000000",
"Fee": "15000",
"SigningPubKey": "028F28D78FDA74222F4008F012247DF3BBD42B90CE4CFD87E29598196108E91B52",
"TxnSignature": "3044022065A003194D91E774D180BE47D4E086BB2624BC8F6DB7C655E135D5C6C03BBC7C02205DC961C2B7A06D701B29C2116ACF6F84CC84205FF44411576C15507852ECC31C",
"Account": "rQGLp9nChtWkdgcHjj6McvJithN2S2HJsP",
"Destination": "rEUubanepAAugnNJY1gxEZLDnk9W5NCoFU",
"metaData": {
"TransactionIndex": 3,
"AffectedNodes": [
{
@@ -240,39 +220,34 @@
}
},
{
"hash": "C978D915BFB17687335CBFC4B207D9E7213BCEE35B468C2EEE016CDCE4EDB6E4",
"date": "2015-08-12T01:01:10+00:00",
"ledger_index": 15202439,
"tx": {
"TransactionType": "OfferCreate",
"Sequence": 289444,
"OfferSequence": 289443,
"LastLedgerSequence": 15202441,
"TakerPays": {
"value": "19.99999999991",
"currency": "EUR",
"issuer": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q"
},
"TakerGets": {
"value": "20.88367500010602",
"currency": "USD",
"issuer": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q"
},
"Fee": "10000",
"SigningPubKey": "024D129D4F5A12D4C5A9E9D1E4AC447BBE3496F182FAE82F7709C7EB9F12DBC697",
"TxnSignature": "3044022041EBE6B06BA493867F4FFBD72E5D6253F97306E1E82DABDF9649E15B1151B59F0220539C589F40174471C067FDC761A2B791F36F1A3C322734B43DB16880E489BD81",
"Account": "rD8LigXE7165r3VWhSQ4FwzJy7PNrTMwUq",
"Memos": [
{
"Memo": {
"MemoType": "6F666665725F636F6D6D656E74",
"MemoData": "72655F6575722368656467655F726970706C65",
"parsed_memo_type": "offer_comment"
}
}
]
"TransactionType": "OfferCreate",
"Sequence": 289444,
"OfferSequence": 289443,
"LastLedgerSequence": 15202441,
"TakerPays": {
"value": "19.99999999991",
"currency": "EUR",
"issuer": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q"
},
"meta": {
"TakerGets": {
"value": "20.88367500010602",
"currency": "USD",
"issuer": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q"
},
"Fee": "10000",
"SigningPubKey": "024D129D4F5A12D4C5A9E9D1E4AC447BBE3496F182FAE82F7709C7EB9F12DBC697",
"TxnSignature": "3044022041EBE6B06BA493867F4FFBD72E5D6253F97306E1E82DABDF9649E15B1151B59F0220539C589F40174471C067FDC761A2B791F36F1A3C322734B43DB16880E489BD81",
"Account": "rD8LigXE7165r3VWhSQ4FwzJy7PNrTMwUq",
"Memos": [
{
"Memo": {
"MemoType": "6F666665725F636F6D6D656E74",
"MemoData": "72655F6575722368656467655F726970706C65",
"parsed_memo_type": "offer_comment"
}
}
],
"metaData": {
"TransactionIndex": 2,
"AffectedNodes": [
{
@@ -372,20 +347,15 @@
}
},
{
"hash": "31B34FD7C90CDC6CF680A814DEBC6F616C69275C0E99711F904DE088A8ED4B28",
"date": "2015-08-12T01:01:10+00:00",
"ledger_index": 15202439,
"tx": {
"TransactionType": "AccountSet",
"Flags": 2147483648,
"Sequence": 387262,
"LastLedgerSequence": 15202440,
"Fee": "10500",
"SigningPubKey": "027DFE042DC2BD07D2E88DD526A5FBF816C831C25CA0BB62A3BF320A3B2BA6DB5C",
"TxnSignature": "30440220572D89688D9F9DB9874CDDDD3EBDCB5808A836982864C81F185FBC54FAD1A7B902202E09AAA6D65EECC9ACDEA7F70D8D2EE024152C7B288FA9E42C427260CF922F58",
"Account": "rn6uAt46Xi6uxA2dRCtqaJyM3aaP6V9WWM"
},
"meta": {
"TransactionType": "AccountSet",
"Flags": 2147483648,
"Sequence": 387262,
"LastLedgerSequence": 15202440,
"Fee": "10500",
"SigningPubKey": "027DFE042DC2BD07D2E88DD526A5FBF816C831C25CA0BB62A3BF320A3B2BA6DB5C",
"TxnSignature": "30440220572D89688D9F9DB9874CDDDD3EBDCB5808A836982864C81F185FBC54FAD1A7B902202E09AAA6D65EECC9ACDEA7F70D8D2EE024152C7B288FA9E42C427260CF922F58",
"Account": "rn6uAt46Xi6uxA2dRCtqaJyM3aaP6V9WWM",
"metaData": {
"TransactionIndex": 1,
"AffectedNodes": [
{
@@ -412,22 +382,17 @@
}
},
{
"hash": "260BC2964FFE6D81CB25C152F8054FFB2CE6ED04FF89D8D0D0559BC14BEF0E46",
"date": "2015-08-12T01:01:10+00:00",
"ledger_index": 15202439,
"tx": {
"TransactionType": "Payment",
"Flags": 2147483648,
"Sequence": 1673,
"LastLedgerSequence": 15202446,
"Amount": "1700000000",
"Fee": "15000",
"SigningPubKey": "02C26CF5D395A1CB352BE10D5AAB73FE27FC0AFAE0BD6121E55D097EBDCF394E11",
"TxnSignature": "304402204190B6DC7D14B1CC8DDAA87F1C01FEDA6D67D598D65E1AA19D4ADE937ED14B720220662EE404438F415AD3335B9FBA1A4C2A5F72AA387740D8A011A8C53346481B1D",
"Account": "rEE77T1E5vEFcEB9zM92jBD3rPs3kPdS1j",
"Destination": "r3AsrDRMNYaKNCofo9a5Us7R66RAzTigiU"
},
"meta": {
"TransactionType": "Payment",
"Flags": 2147483648,
"Sequence": 1673,
"LastLedgerSequence": 15202446,
"Amount": "1700000000",
"Fee": "15000",
"SigningPubKey": "02C26CF5D395A1CB352BE10D5AAB73FE27FC0AFAE0BD6121E55D097EBDCF394E11",
"TxnSignature": "304402204190B6DC7D14B1CC8DDAA87F1C01FEDA6D67D598D65E1AA19D4ADE937ED14B720220662EE404438F415AD3335B9FBA1A4C2A5F72AA387740D8A011A8C53346481B1D",
"Account": "rEE77T1E5vEFcEB9zM92jBD3rPs3kPdS1j",
"Destination": "r3AsrDRMNYaKNCofo9a5Us7R66RAzTigiU",
"metaData": {
"TransactionIndex": 0,
"AffectedNodes": [
{

View File

@@ -178,7 +178,7 @@ const getOrderbook = {
}
const computeLedgerHash = {
header: { ...header, rawTransactions: JSON.stringify(transactions) },
header,
transactions,
}

View File

@@ -1,6 +1,5 @@
{
"xAddress": "XVLcsWWNiFdUEqoDmSwgxh1abfddG1LtbGFk7omPgYpbyE8",
"classicAddress": "rGCkuB7PBr5tNy68tPEABEtcdno4hE6Y7f",
"address": "rGCkuB7PBr5tNy68tPEABEtcdno4hE6Y7f",
"secret": "sp6JS7f14BuwFY8Mw6bTtLKWauoUs"
}

View File

@@ -1,12 +1,12 @@
{
"stateHash": "EC028EC32896D537ECCA18D18BEBE6AE99709FEFF9EF72DBD3A7819E918D8B96",
"closeTime": "2014-09-24T21:21:50.000Z",
"closeTimeResolution": 10,
"closeFlags": 0,
"ledgerHash": "0F7ED9F40742D8A513AE86029462B7A6768325583DF8EE21B7EC663019DD6A0F",
"ledgerVersion": 9038214,
"parentLedgerHash": "4BB9CBE44C39DC67A1BE849C7467FE1A6D1F73949EA163C38A0121A15E04FFDE",
"parentCloseTime": "2014-09-24T21:21:40.000Z",
"totalDrops": "99999973964317514",
"transactionHash": "ECB730839EB55B1B114D5D1AD2CD9A932C35BA9AB6D3A8C2F08935EAC2BAC239"
"account_hash": "EC028EC32896D537ECCA18D18BEBE6AE99709FEFF9EF72DBD3A7819E918D8B96",
"close_time": "2014-09-24T21:21:50.000Z",
"close_time_resolution": 10,
"close_flags": 0,
"ledger_hash": "0F7ED9F40742D8A513AE86029462B7A6768325583DF8EE21B7EC663019DD6A0F",
"ledger_index": 9038214,
"parent_hash": "4BB9CBE44C39DC67A1BE849C7467FE1A6D1F73949EA163C38A0121A15E04FFDE",
"parent_close_time": "2014-09-24T21:21:40.000Z",
"total_coins": "99999973964317514",
"transaction_hash": "ECB730839EB55B1B114D5D1AD2CD9A932C35BA9AB6D3A8C2F08935EAC2BAC239"
}

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
import assert from 'assert'
import { SHAMap, NodeType } from '../src/utils/hashes/shamap'
import SHAMap, { NodeType } from '../src/utils/hashes/shaMap'
const TYPE_TRANSACTION_NO_METADATA = NodeType.TRANSACTION_NO_METADATA

View File

@@ -1,34 +1,45 @@
import { assert } from 'chai'
import { ValidationError } from '../../src/common/errors'
import { computeLedgerHeaderHash } from '../../src/utils'
import { computeLedgerHash } from '../../src/utils'
import requests from '../fixtures/requests'
import responses from '../fixtures/responses'
import { assertResultMatch } from '../testUtils'
const { computeLedgerHash: REQUEST_FIXTURES } = requests
describe('computeLedgerHash', function () {
let ledger
beforeEach(function () {
ledger = JSON.parse(JSON.stringify(responses.getLedger.full))
if (ledger.rawState != null) {
ledger.accountState = JSON.parse(ledger.rawState)
}
})
it('given corrupt data - should fail', function () {
const ledger = JSON.parse(JSON.stringify(responses.getLedger.full))
ledger.transactions[0].rawTransaction =
'{"Account":"r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV","Amount":"12000000000","Destination":"rLQBHVhFnaC5gLEkgr6HgBJJ3bgeZHg9cj","Fee":"10","Flags":0,"Sequence":62,"SigningPubKey":"034AADB09CFF4A4804073701EC53C3510CDC95917C2BB0150FB742D0C66E6CEE9E","TransactionType":"Payment","TxnSignature":"3045022022EB32AECEF7C644C891C19F87966DF9C62B1F34BABA6BE774325E4BB8E2DD62022100A51437898C28C2B297112DF8131F2BB39EA5FE613487DDD611525F1796264639","hash":"3B1A4E1C9BB6A7208EB146BCDB86ECEA6068ED01466D933528CA2B4C64F753EF","meta":{"AffectedNodes":[{"CreatedNode":{"LedgerEntryType":"AccountRoot","LedgerIndex":"4C6ACBD635B0F07101F7FA25871B0925F8836155462152172755845CE691C49E","NewFields":{"Account":"rLQBHVhFnaC5gLEkgr6HgBJJ3bgeZHg9cj","Balance":"10000000000","Sequence":1}}},{"ModifiedNode":{"FinalFields":{"Account":"r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV","Balance":"981481999380","Flags":0,"OwnerCount":0,"Sequence":63},"LedgerEntryType":"AccountRoot","LedgerIndex":"B33FDD5CF3445E1A7F2BE9B06336BEBD73A5E3EE885D3EF93F7E3E2992E46F1A","PreviousFields":{"Balance":"991481999390","Sequence":62},"PreviousTxnID":"2485FDC606352F1B0785DA5DE96FB9DBAF43EB60ECBB01B7F6FA970F512CDA5F","PreviousTxnLgrSeq":31317}}],"TransactionIndex":0,"TransactionResult":"tesSUCCESS"},"ledger_index":38129}'
ledger.parentCloseTime = ledger.closeTime
let hash: string
ledger.transactions[0] = JSON.parse(
'{"Account":"r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV","Amount":"12000000000","Destination":"rLQBHVhFnaC5gLEkgr6HgBJJ3bgeZHg9cj","Fee":"10","Flags":0,"Sequence":62,"SigningPubKey":"034AADB09CFF4A4804073701EC53C3510CDC95917C2BB0150FB742D0C66E6CEE9E","TransactionType":"Payment","TxnSignature":"3045022022EB32AECEF7C644C891C19F87966DF9C62B1F34BABA6BE774325E4BB8E2DD62022100A51437898C28C2B297112DF8131F2BB39EA5FE613487DDD611525F1796264639","hash":"3B1A4E1C9BB6A7208EB146BCDB86ECEA6068ED01466D933528CA2B4C64F753EF","metaData":{"AffectedNodes":[{"CreatedNode":{"LedgerEntryType":"AccountRoot","LedgerIndex":"4C6ACBD635B0F07101F7FA25871B0925F8836155462152172755845CE691C49E","NewFields":{"Account":"rLQBHVhFnaC5gLEkgr6HgBJJ3bgeZHg9cj","Balance":"10000000000","Sequence":1}}},{"ModifiedNode":{"FinalFields":{"Account":"r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV","Balance":"981481999380","Flags":0,"OwnerCount":0,"Sequence":63},"LedgerEntryType":"AccountRoot","LedgerIndex":"B33FDD5CF3445E1A7F2BE9B06336BEBD73A5E3EE885D3EF93F7E3E2992E46F1A","PreviousFields":{"Balance":"991481999390","Sequence":62},"PreviousTxnID":"2485FDC606352F1B0785DA5DE96FB9DBAF43EB60ECBB01B7F6FA970F512CDA5F","PreviousTxnLgrSeq":31317}}],"TransactionIndex":0,"TransactionResult":"tesSUCCESS"},"ledger_index":38129}',
)
ledger.parent_close_time = ledger.close_time
let hash
try {
hash = computeLedgerHeaderHash(ledger, { computeTreeHashes: true })
hash = computeLedgerHash(ledger, { computeTreeHashes: true })
} catch (error) {
assert(error instanceof ValidationError)
assert.strictEqual(
error.message,
'transactionHash in header does not match computed hash of transactions',
)
assert.deepStrictEqual(error.data, {
transactionHashInHeader:
'DB83BF807416C5B3499A73130F843CF615AB8E797D79FE7D330ADF1BFA93951A',
computedHashOfTransactions:
'EAA1ADF4D627339450F0E95EA88B7069186DD64230BAEBDCF3EEC4D616A9FC68',
})
if (error instanceof ValidationError) {
assert.strictEqual(
error.message,
'transactionHash in header does not match computed hash of transactions',
)
assert.deepStrictEqual(error.data, {
transactionHashInHeader:
'DB83BF807416C5B3499A73130F843CF615AB8E797D79FE7D330ADF1BFA93951A',
computedHashOfTransactions:
'EAA1ADF4D627339450F0E95EA88B7069186DD64230BAEBDCF3EEC4D616A9FC68',
})
}
return
}
assert(
@@ -38,77 +49,68 @@ describe('computeLedgerHash', function () {
})
it('given ledger without raw transactions - should throw', function () {
const ledger = JSON.parse(JSON.stringify(responses.getLedger.full))
delete ledger.transactions[0].rawTransaction
delete ledger.transactions
ledger.parentCloseTime = ledger.closeTime
let hash: string
try {
hash = computeLedgerHeaderHash(ledger, { computeTreeHashes: true })
} catch (error) {
assert(error instanceof ValidationError)
assert.strictEqual(error.message, 'ledger is missing raw transactions')
return
}
assert(
false,
`Should throw ValidationError instead of producing hash: ${hash}`,
assert.throws(
() => computeLedgerHash(ledger, { computeTreeHashes: true }),
ValidationError,
'transactions is missing from the ledger',
)
})
it('given ledger without state or transactions - only compute ledger hash', function () {
const ledger = JSON.parse(JSON.stringify(responses.getLedger.full))
assert.strictEqual(
ledger.transactions[0].rawTransaction,
'{"Account":"r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV","Amount":"10000000000","Destination":"rLQBHVhFnaC5gLEkgr6HgBJJ3bgeZHg9cj","Fee":"10","Flags":0,"Sequence":62,"SigningPubKey":"034AADB09CFF4A4804073701EC53C3510CDC95917C2BB0150FB742D0C66E6CEE9E","TransactionType":"Payment","TxnSignature":"3045022022EB32AECEF7C644C891C19F87966DF9C62B1F34BABA6BE774325E4BB8E2DD62022100A51437898C28C2B297112DF8131F2BB39EA5FE613487DDD611525F1796264639","hash":"3B1A4E1C9BB6A7208EB146BCDB86ECEA6068ED01466D933528CA2B4C64F753EF","meta":{"AffectedNodes":[{"CreatedNode":{"LedgerEntryType":"AccountRoot","LedgerIndex":"4C6ACBD635B0F07101F7FA25871B0925F8836155462152172755845CE691C49E","NewFields":{"Account":"rLQBHVhFnaC5gLEkgr6HgBJJ3bgeZHg9cj","Balance":"10000000000","Sequence":1}}},{"ModifiedNode":{"FinalFields":{"Account":"r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV","Balance":"981481999380","Flags":0,"OwnerCount":0,"Sequence":63},"LedgerEntryType":"AccountRoot","LedgerIndex":"B33FDD5CF3445E1A7F2BE9B06336BEBD73A5E3EE885D3EF93F7E3E2992E46F1A","PreviousFields":{"Balance":"991481999390","Sequence":62},"PreviousTxnID":"2485FDC606352F1B0785DA5DE96FB9DBAF43EB60ECBB01B7F6FA970F512CDA5F","PreviousTxnLgrSeq":31317}}],"TransactionIndex":0,"TransactionResult":"tesSUCCESS"},"ledger_index":38129}',
ledger.transactions[0] = JSON.parse(
'{"Account":"r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV","Amount":"10000000000","Destination":"rLQBHVhFnaC5gLEkgr6HgBJJ3bgeZHg9cj","Fee":"10","Flags":0,"Sequence":62,"SigningPubKey":"034AADB09CFF4A4804073701EC53C3510CDC95917C2BB0150FB742D0C66E6CEE9E","TransactionType":"Payment","TxnSignature":"3045022022EB32AECEF7C644C891C19F87966DF9C62B1F34BABA6BE774325E4BB8E2DD62022100A51437898C28C2B297112DF8131F2BB39EA5FE613487DDD611525F1796264639","hash":"3B1A4E1C9BB6A7208EB146BCDB86ECEA6068ED01466D933528CA2B4C64F753EF","metaData":{"AffectedNodes":[{"CreatedNode":{"LedgerEntryType":"AccountRoot","LedgerIndex":"4C6ACBD635B0F07101F7FA25871B0925F8836155462152172755845CE691C49E","NewFields":{"Account":"rLQBHVhFnaC5gLEkgr6HgBJJ3bgeZHg9cj","Balance":"10000000000","Sequence":1}}},{"ModifiedNode":{"FinalFields":{"Account":"r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV","Balance":"981481999380","Flags":0,"OwnerCount":0,"Sequence":63},"LedgerEntryType":"AccountRoot","LedgerIndex":"B33FDD5CF3445E1A7F2BE9B06336BEBD73A5E3EE885D3EF93F7E3E2992E46F1A","PreviousFields":{"Balance":"991481999390","Sequence":62},"PreviousTxnID":"2485FDC606352F1B0785DA5DE96FB9DBAF43EB60ECBB01B7F6FA970F512CDA5F","PreviousTxnLgrSeq":31317}}],"TransactionIndex":0,"TransactionResult":"tesSUCCESS"},"ledger_index":38129}',
)
ledger.parentCloseTime = ledger.closeTime
const computeLedgerHash = computeLedgerHeaderHash
function testCompute(ledgerToCompute, expectedError): void {
let hash = computeLedgerHash(ledgerToCompute)
ledger.parent_close_time = ledger.close_time
function testCompute(ledgerToTest, expectedError): void {
const hash = computeLedgerHash(ledgerToTest)
assert.strictEqual(
hash,
'E6DB7365949BF9814D76BCC730B01818EB9136A89DB224F3F9F5AAE4569D758E',
)
// fail if required to compute tree hashes
try {
hash = computeLedgerHash(ledgerToCompute, { computeTreeHashes: true })
} catch (error) {
assert(error instanceof ValidationError)
assert.strictEqual(error.message, expectedError)
return
}
assert(
false,
`Should throw ValidationError instead of producing hash: ${hash}`,
assert.throws(
() => computeLedgerHash(ledgerToTest, { computeTreeHashes: true }),
ValidationError,
expectedError,
)
}
const transactions = ledger.transactions
delete ledger.transactions
testCompute(ledger, 'transactions property is missing from the ledger')
delete ledger.rawState
testCompute(ledger, 'transactions property is missing from the ledger')
testCompute(ledger, 'transactions is missing from the ledger')
delete ledger.accountState
testCompute(ledger, 'transactions is missing from the ledger')
ledger.transactions = transactions
testCompute(ledger, 'rawState property is missing from the ledger')
testCompute(ledger, 'accountState is missing from the ledger')
})
it('wrong hash', function () {
const ledger = JSON.parse(JSON.stringify(responses.getLedger.full))
assertResultMatch(ledger, responses.getLedger.full, 'getLedger')
const newLedger = {
...ledger,
parentCloseTime: ledger.closeTime,
stateHash:
parent_close_time: ledger.close_time,
account_hash:
'D9ABF622DA26EEEE48203085D4BC23B0F77DC6F8724AC33D975DA3CA492D2E44',
}
assert.throws(() => {
computeLedgerHeaderHash(newLedger)
}, /does not match computed hash of state/u)
assert.throws(
() => {
computeLedgerHash(newLedger, { computeTreeHashes: true })
},
ValidationError,
'does not match computed hash of state',
)
})
it('computeLedgerHash', function () {
const header = REQUEST_FIXTURES.header
const ledgerHash = computeLedgerHeaderHash(header)
const ledgerHash = computeLedgerHash(header)
assert.strictEqual(
ledgerHash,
'F4D865D83EB88C1A1911B9E90641919A1314F36E1B099F8E95FE3B7C77BE3349',
@@ -119,21 +121,27 @@ describe('computeLedgerHash', function () {
const header = {
...REQUEST_FIXTURES.header,
transactionHash: undefined,
rawTransactions: JSON.stringify(REQUEST_FIXTURES.transactions),
rawTransactions: REQUEST_FIXTURES.transactions,
}
const ledgerHash = computeLedgerHeaderHash(header)
const ledgerHash = computeLedgerHash(header)
assert.strictEqual(
ledgerHash,
'F4D865D83EB88C1A1911B9E90641919A1314F36E1B099F8E95FE3B7C77BE3349',
)
})
it('computeLedgerHash - incorrent transaction_hash', function () {
it('computeLedgerHash - incorrect transaction_hash', function () {
const header = {
...REQUEST_FIXTURES.header,
transactionHash:
transaction_hash:
'325EACC5271322539EEEC2D6A5292471EF1B3E72AE7180533EFC3B8F0AD435C9',
transactions: REQUEST_FIXTURES.transactions as any,
}
assert.throws(() => computeLedgerHeaderHash(header))
assert.throws(
() => computeLedgerHash(header, { computeTreeHashes: true }),
ValidationError,
'transactionHash in header does not match computed hash of transactions',
)
})
})

View File

@@ -168,7 +168,6 @@ describe('generateAddress', function () {
secret: 'sEdSJHS4oiAdz7w2X2ni1gFiqtbJHqE',
classicAddress: 'r9zRhGr7b6xPekLvT6wP4qNdWMryaumZS7',
address: 'r9zRhGr7b6xPekLvT6wP4qNdWMryaumZS7',
})
})
@@ -211,7 +210,6 @@ describe('generateAddress', function () {
xAddress: 'T7t4HeTMF5tT68agwuVbJwu23ssMPeh8dDtGysZoQiij1oo',
secret: 'sEdSJHS4oiAdz7w2X2ni1gFiqtbJHqE',
classicAddress: 'r9zRhGr7b6xPekLvT6wP4qNdWMryaumZS7',
address: 'r9zRhGr7b6xPekLvT6wP4qNdWMryaumZS7',
})
})