Merge pull request #935 from eordano/feature/outputinspect

Add inspect method to output
This commit is contained in:
Manuel Aráoz 2015-01-09 17:11:03 -03:00
commit 7c87305943
3 changed files with 69 additions and 6 deletions

View File

@ -13,6 +13,9 @@ function Output(params) {
return new Output(params);
}
if (params) {
if (JSUtil.isValidJSON(params)) {
return Output.fromJSON(params);
}
return this._fromObject(params);
}
}
@ -34,13 +37,15 @@ Object.defineProperty(Output.prototype, 'satoshis', {
writeable: true,
enumerable: true,
get: function() {
return this._satoshis.toNumber();
return this._satoshis;
},
set: function(num) {
if (num instanceof BN) {
this._satoshis = num;
this._satoshisBN = num;
this._satoshis = num.toNumber();
} else {
this._satoshis = BN.fromNumber(num);
this._satoshisBN = BN.fromNumber(num);
this._satoshis = num;
}
}
});
@ -90,9 +95,13 @@ Output.prototype.setScript = function(script) {
return this;
};
Output.prototype.inspect = function() {
return '<Output (' + this.satoshis + ' sats) ' + this.script.inspect() + '>';
};
Output.fromBufferReader = function(br) {
var output = new Output();
output._satoshis = br.readUInt64LEBN();
output.satoshis = br.readUInt64LEBN();
var size = br.readVarintNum();
if (size !== 0) {
output._scriptBuffer = br.read(size);
@ -106,7 +115,7 @@ Output.prototype.toBufferWriter = function(writer) {
if (!writer) {
writer = new BufferWriter();
}
writer.writeUInt64LEBN(this._satoshis);
writer.writeUInt64LEBN(this._satoshisBN);
var script = this._scriptBuffer;
writer.writeVarintNum(script.length);
writer.write(script);

View File

@ -681,7 +681,7 @@ Transaction.prototype.verify = function() {
var valueoutbn = BN(0);
for (var i = 0; i < this.outputs.length; i++) {
var txout = this.outputs[i];
var valuebn = txout._satoshis;
var valuebn = txout._satoshisBN;
if (valuebn.lt(0)) {
return 'transaction txout ' + i + ' negative';
}

View File

@ -0,0 +1,54 @@
'use strict';
/* jshint unused: false */
/* jshint latedef: false */
var should = require('chai').should();
var expect = require('chai').expect;
var _ = require('lodash');
var bitcore = require('../..');
var BN = bitcore.crypto.BN;
var BufferWriter = bitcore.encoding.BufferWriter;
var BufferReader = bitcore.encoding.BufferReader;
var Output = bitcore.Transaction.Output;
var Script = bitcore.Script;
var errors = bitcore.errors;
describe('Output', function() {
var output = new Output({satoshis: 0, script: Script.empty()});
it('can be assigned a satoshi amount in big number', function() {
var newOutput = new Output({satoshis: new BN(100), script: Script.empty()});
newOutput.satoshis.should.equal(100);
});
var expectEqualOutputs = function(a, b) {
a.satoshis.should.equal(b.satoshis);
a.script.toString().should.equal(b.script.toString());
};
it('deserializes correctly a simple output', function() {
var writer = new BufferWriter();
output.toBufferWriter(writer);
var deserialized = Output.fromBufferReader(new BufferReader(writer.toBuffer()));
expectEqualOutputs(output, deserialized);
});
it('roundtrips to/from object', function() {
var newOutput = new Output({satoshis: 50, script: new Script().add(0)});
var otherOutput = new Output(newOutput.toObject());
expectEqualOutputs(newOutput, otherOutput);
});
it('can set a script from a buffer', function() {
var newOutput = Output(output);
newOutput.setScript(Script().add(0).toBuffer());
newOutput.inspect().should.equal('<Output (0 sats) <Script: OP_0>>');
});
it('has a inspect property', function() {
output.inspect().should.equal('<Output (0 sats) <Script: >>');
});
});