diff --git a/src/js/ripple/serializedtypes.js b/src/js/ripple/serializedtypes.js index de9150e6..ad309af9 100644 --- a/src/js/ripple/serializedtypes.js +++ b/src/js/ripple/serializedtypes.js @@ -533,8 +533,9 @@ var STPathSet = exports.PathSet = new SerializedType({ if (tag_byte & this.typeCurrency) { //console.log('entry.currency'); entry.currency = STCurrency.parse(so); - if (entry.currency === "XRP") { - entry.non_native = !entry.currency.is_native(); + if (entry.currency.to_json() === "XRP" && + !entry.currency.is_native()) { + entry.non_native = true; } } if (tag_byte & this.typeIssuer) { @@ -628,14 +629,14 @@ function parse(so) { var type = TYPES_MAP[type_bits]; - assert(type, 'Unknown type: ' + type_bits); + assert(type, 'Unknown type - header byte is 0x' + tag_byte.toString(16)); var field_bits = tag_byte & 0x0f; var field_name = (field_bits === 0) ? field_name = FIELDS_MAP[type_bits][so.read(1)[0]] : field_name = FIELDS_MAP[type_bits][field_bits]; - assert(field_name, 'Unknown field: ' + tag_byte); + assert(field_name, 'Unknown field - header byte is 0x' + tag_byte.toString(16)); return [ field_name, type.parse(so) ]; //key, value }; diff --git a/test/serializedobject-test.js b/test/serializedobject-test.js index 09cf3a26..21c8a2ed 100644 --- a/test/serializedobject-test.js +++ b/test/serializedobject-test.js @@ -2,7 +2,7 @@ var utils = require('./testutils'); var assert = require('assert'); var SerializedObject = utils.load_module('serializedobject').SerializedObject; -describe('Serialied object', function() { +describe('Serialized object', function() { describe('Serialized object', function() { it('From json and back', function() { var input_json = { @@ -18,7 +18,7 @@ describe('Serialied object', function() { issuer: 'r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV' }, { - currency:'XRP' + currency: 'XRP' } ]], SendMax: { diff --git a/test/serializedtypes-test.js b/test/serializedtypes-test.js index 6300af0d..435786e2 100644 --- a/test/serializedtypes-test.js +++ b/test/serializedtypes-test.js @@ -565,33 +565,38 @@ describe('Serialized types', function() { assert.strictEqual(so.to_hex(), '31000000000000000000000000000000000000007B00000000000000000000000055534400000000000000000000000000000000000000000000000315FF31000000000000000000000000000000000000007B000000000000000000000000425443000000000000000000000000000000000000000000000003153100000000000000000000000000000000000003DB0000000000000000000000004555520000000000000000000000000000000000000000000000014100'); //TODO: Check this independently }); it('Serialize path through XRP', function () { - // Appears in the history - // TX #0CBB429C456ED999CC691DFCC8E62E8C8C7E9522C2BEA967FED0D7E2A9B28D13 - // Note that XRP IOUs are no longer allowed, so this functionality is - // for historic transactions only. + var hex = '31000000000000000000000000000000000000007B00000000000000000000000055534400000000000000000000000000000000000000000000000315FF1000000000000000000000000000000000000000003100000000000000000000000000000000000003DB0000000000000000000000004555520000000000000000000000000000000000000000000000014100'; + var json = [ + [ { + account: "rrrrrrrrrrrrrrrrrrrrNxV3Xza", + currency: 'USD', + issuer: "rrrrrrrrrrrrrrrrrrrpYnYCNYf" + }], + [{ + currency: "XRP" + }, { + account: "rrrrrrrrrrrrrrrrrrrpvQsW3V3", + currency: 'EUR', + issuer: "rrrrrrrrrrrrrrrrrrrdHRtqg2" + }] + ]; + var so = new SerializedObject(); - types.PathSet.serialize(so, [[ { - account: 123, - currency: 'USD', - issuer: 789 - }], - [{ - currency: "XRP" - }, - { - account: 987, - currency: 'EUR', - issuer: 321 - }]]); - assert.strictEqual(so.to_hex(), '31000000000000000000000000000000000000007B00000000000000000000000055534400000000000000000000000000000000000000000000000315FF1000000000000000000000000000000000000000003100000000000000000000000000000000000003DB0000000000000000000000004555520000000000000000000000000000000000000000000000014100'); + types.PathSet.serialize(so, json); + assert.strictEqual(so.to_hex(), hex); + + so = new SerializedObject(hex); + var parsed_path = SerializedObject.jsonify_structure(types.PathSet.parse(so)); + assert.deepEqual(parsed_path, json); }); it('Serialize path through XRP IOUs', function () { // Appears in the history // TX #0CBB429C456ED999CC691DFCC8E62E8C8C7E9522C2BEA967FED0D7E2A9B28D13 // Note that XRP IOUs are no longer allowed, so this functionality is // for historic transactions only. - var so = new SerializedObject(); - types.PathSet.serialize(so, [ + + var hex = '31585E1F3BD02A15D6185F8BB9B57CC60DEDDB37C10000000000000000000000004254430000000000585E1F3BD02A15D6185F8BB9B57CC60DEDDB37C131E4FE687C90257D3D2D694C8531CDEECBE84F33670000000000000000000000004254430000000000E4FE687C90257D3D2D694C8531CDEECBE84F3367310A20B3C85F482532A9578DBB3950B85CA06594D100000000000000000000000042544300000000000A20B3C85F482532A9578DBB3950B85CA06594D13000000000000000000000000055534400000000000A20B3C85F482532A9578DBB3950B85CA06594D1FF31585E1F3BD02A15D6185F8BB9B57CC60DEDDB37C10000000000000000000000004254430000000000585E1F3BD02A15D6185F8BB9B57CC60DEDDB37C131E4FE687C90257D3D2D694C8531CDEECBE84F33670000000000000000000000004254430000000000E4FE687C90257D3D2D694C8531CDEECBE84F33673115036E2D3F5437A83E5AC3CAEE34FF2C21DEB618000000000000000000000000425443000000000015036E2D3F5437A83E5AC3CAEE34FF2C21DEB6183000000000000000000000000055534400000000000A20B3C85F482532A9578DBB3950B85CA06594D1FF31585E1F3BD02A15D6185F8BB9B57CC60DEDDB37C10000000000000000000000004254430000000000585E1F3BD02A15D6185F8BB9B57CC60DEDDB37C13157180C769B66D942EE69E6DCC940CA48D82337AD000000000000000000000000425443000000000057180C769B66D942EE69E6DCC940CA48D82337AD1000000000000000000000000058525000000000003000000000000000000000000055534400000000000A20B3C85F482532A9578DBB3950B85CA06594D100'; + var json = [ [{ "account": "r9hEDb4xBGRfBCcX3E4FirDWQBAYtpxC8K", "currency": "BTC", @@ -639,12 +644,19 @@ describe('Serialized types', function() { "currency": "USD", "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B" }] - ]); - assert.strictEqual(so.to_hex(), '31585E1F3BD02A15D6185F8BB9B57CC60DEDDB37C10000000000000000000000004254430000000000585E1F3BD02A15D6185F8BB9B57CC60DEDDB37C131E4FE687C90257D3D2D694C8531CDEECBE84F33670000000000000000000000004254430000000000E4FE687C90257D3D2D694C8531CDEECBE84F3367310A20B3C85F482532A9578DBB3950B85CA06594D100000000000000000000000042544300000000000A20B3C85F482532A9578DBB3950B85CA06594D13000000000000000000000000055534400000000000A20B3C85F482532A9578DBB3950B85CA06594D1FF31585E1F3BD02A15D6185F8BB9B57CC60DEDDB37C10000000000000000000000004254430000000000585E1F3BD02A15D6185F8BB9B57CC60DEDDB37C131E4FE687C90257D3D2D694C8531CDEECBE84F33670000000000000000000000004254430000000000E4FE687C90257D3D2D694C8531CDEECBE84F33673115036E2D3F5437A83E5AC3CAEE34FF2C21DEB618000000000000000000000000425443000000000015036E2D3F5437A83E5AC3CAEE34FF2C21DEB6183000000000000000000000000055534400000000000A20B3C85F482532A9578DBB3950B85CA06594D1FF31585E1F3BD02A15D6185F8BB9B57CC60DEDDB37C10000000000000000000000004254430000000000585E1F3BD02A15D6185F8BB9B57CC60DEDDB37C13157180C769B66D942EE69E6DCC940CA48D82337AD000000000000000000000000425443000000000057180C769B66D942EE69E6DCC940CA48D82337AD1000000000000000000000000058525000000000003000000000000000000000000055534400000000000A20B3C85F482532A9578DBB3950B85CA06594D100'); + ]; + + var so = new SerializedObject(); + types.PathSet.serialize(so, json); + assert.strictEqual(so.to_hex(), hex); + + so = new SerializedObject(hex); + var parsed_path = SerializedObject.jsonify_structure(types.PathSet.parse(so)); + assert.deepEqual(parsed_path, json); }); it('Parse single empty path [[]]', function () { var so = new SerializedObject('00'); - var parsed_path = types.PathSet.parse(so) + var parsed_path = SerializedObject.jsonify_structure(types.PathSet.parse(so)); assert.deepEqual(parsed_path, [[]]); }); it('Parse [[e],[e,e]]', function () {