wallet allows setting unspent outputs
This commit is contained in:
parent
16dc68cbaa
commit
26afbccc98
2 changed files with 56 additions and 0 deletions
|
@ -80,6 +80,23 @@ var Wallet = function (seed, options) {
|
||||||
return utxo
|
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
|
// Processes a transaction object
|
||||||
// If "verified" is true, then we trust the transaction as "final"
|
// If "verified" is true, then we trust the transaction as "final"
|
||||||
this.processTx = function(tx, verified) {
|
this.processTx = function(tx, verified) {
|
||||||
|
|
|
@ -172,6 +172,40 @@ describe('Wallet', function() {
|
||||||
assert.deepEqual(wallet.getUnspentOutputs(), expectedUtxo)
|
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){
|
function assertEqual(obj1, obj2){
|
||||||
|
@ -181,4 +215,9 @@ describe('Wallet', function() {
|
||||||
function assertNotEqual(obj1, obj2){
|
function assertNotEqual(obj1, obj2){
|
||||||
assert.notEqual(obj1.toString(), obj2.toString())
|
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))
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
Loading…
Add table
Reference in a new issue