Merge pull request #440 from nodar-chkuaselidze/mtx/from-json

MTX - Recover view from JSON
This commit is contained in:
Christopher Jeffrey (JJ) 2018-04-06 16:12:35 -07:00 committed by GitHub
commit 9fb9b1c4ad
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 43 additions and 0 deletions

View File

@ -21,6 +21,7 @@ const consensus = require('../protocol/consensus');
const policy = require('../protocol/policy');
const Amount = require('../btc/amount');
const Stack = require('../script/stack');
const util = require('../utils/util');
/**
* MTX
@ -1460,6 +1461,32 @@ class MTX extends TX {
return super.getJSON(network, this.view);
}
/**
* Inject properties from a json object
* @param {Object} json
*/
fromJSON(json) {
super.fromJSON(json);
for (let i = 0; i < json.inputs.length; i++) {
const input = json.inputs[i];
const {prevout} = input;
if (!input.coin)
continue;
const coin = Coin.fromJSON(input.coin);
coin.hash = util.revHex(prevout.hash);
coin.index = prevout.index;
this.view.addCoin(coin);
}
return this;
}
/**
* Instantiate a transaction from a
* jsonified transaction object.

View File

@ -10,6 +10,7 @@ const random = require('bcrypto/lib/random');
const util = require('../lib/utils/util');
const consensus = require('../lib/protocol/consensus');
const TX = require('../lib/primitives/tx');
const MTX = require('../lib/primitives/mtx');
const Output = require('../lib/primitives/output');
const Outpoint = require('../lib/primitives/outpoint');
const Script = require('../lib/script/script');
@ -1102,4 +1103,19 @@ describe('TX', function() {
assert.strictEqual(json.index, index);
}
});
it('should recover coins from JSON', () => {
const [tx, view] = tx2.getTX();
const mtx = MTX.fromTX(tx);
mtx.view = view;
// get input value as example
const value1 = mtx.getInputValue();
const mtx2 = MTX.fromJSON(mtx.toJSON());
const value2 = mtx2.getInputValue();
assert.strictEqual(value1, value2);
});
});