fc2e313a39
This change replaces the old transaction store file format and implementation. The most important change is how the full backing transactions for any received or sent transaction are now saved, rather than simply saving parsed-out details of the tx (tx shas, block height/hash, pkScripts, etc.). To support the change, notifications for received transaction outputs and txs spending watched outpoints have been updated to use the new redeemingtx and recvtx notifications as these contain the full tx, which is deserializead and inserted into the store. The old transaction store serialization code is completely removed, as updating to the new format automatically cannot be done. Old wallets first running past this change will error reading the file and start a full rescan to rebuild the data. Unlike previous rescan code, transactions spending outpoint managed by wallet are also included. This results in recovering not just received history, but history for sent transactions as well.
41 lines
785 B
Go
41 lines
785 B
Go
// copied from btcwire
|
|
|
|
// Copyright (c) 2013-2014 Conformal Systems LLC.
|
|
// Use of this source code is governed by an ISC
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package tx_test
|
|
|
|
import (
|
|
"io"
|
|
)
|
|
|
|
// fixedWriter implements the io.Writer interface and intentially allows
|
|
// testing of error paths by forcing short writes.
|
|
type fixedWriter struct {
|
|
b []byte
|
|
pos int
|
|
}
|
|
|
|
// Write ...
|
|
func (w *fixedWriter) Write(p []byte) (n int, err error) {
|
|
lenp := len(p)
|
|
if w.pos+lenp > cap(w.b) {
|
|
return 0, io.ErrShortWrite
|
|
}
|
|
n = lenp
|
|
w.pos += copy(w.b[w.pos:], p)
|
|
return
|
|
}
|
|
|
|
// Bytes ...
|
|
func (w *fixedWriter) Bytes() []byte {
|
|
return w.b
|
|
}
|
|
|
|
// newFixedWriter...
|
|
func newFixedWriter(max int64) *fixedWriter {
|
|
b := make([]byte, max, max)
|
|
fw := fixedWriter{b, 0}
|
|
return &fw
|
|
}
|