wallet allows setting unspent outputs

This commit is contained in:
Wei Lu 2014-03-22 15:09:00 +08:00
parent 16dc68cbaa
commit 26afbccc98
2 changed files with 56 additions and 0 deletions

View file

@ -80,6 +80,23 @@ var Wallet = function (seed, options) {
return utxo
}
this.setUnspentOutputs = function(utxo) {
var outputs = {}
utxo.forEach(function(o){
var hash = o.hash || convert.reverseEndian(o.hashLittleEndian)
var key = hash + ":" + o.outputIndex
outputs[key] = {
output: key,
scriptPubKey: o.scriptPubKey,
address: o.address,
value: o.value
}
})
this.outputs = outputs
}
// Processes a transaction object
// If "verified" is true, then we trust the transaction as "final"
this.processTx = function(tx, verified) {

View file

@ -172,6 +172,40 @@ describe('Wallet', function() {
assert.deepEqual(wallet.getUnspentOutputs(), expectedUtxo)
})
})
describe('setUnspentOutputs', function(){
var utxo;
beforeEach(function(){
utxo = cloneObject(expectedUtxo)
})
it('uses hashLittleEndian when hash is not present', function(){
delete utxo[0]['hash']
wallet.setUnspentOutputs(utxo)
verifyOutputs()
})
it('uses hash when hashLittleEndian is not present', function(){
delete utxo[0]['hashLittleEndian']
wallet.setUnspentOutputs(utxo)
verifyOutputs()
})
it('uses hash when both hash and hashLittleEndian are present', function(){
wallet.setUnspentOutputs(utxo)
verifyOutputs()
})
function verifyOutputs() {
var output = wallet.outputs[expectedOutputKey]
assert(output)
assert.equal(output.value, utxo[0].value)
assert.equal(output.address, utxo[0].address)
assert.equal(output.scriptPubKey, utxo[0].scriptPubKey)
}
})
})
function assertEqual(obj1, obj2){
@ -181,4 +215,9 @@ describe('Wallet', function() {
function assertNotEqual(obj1, obj2){
assert.notEqual(obj1.toString(), obj2.toString())
}
// quick and dirty: does not deal with functions on object
function cloneObject(obj){
return JSON.parse(JSON.stringify(obj))
}
})