Check the order of utxos

pull/380/head
Martin Boehm 2020-02-14 10:04:12 +01:00
parent 2e37cbb974
commit d583028721
2 changed files with 21 additions and 13 deletions

View File

@ -1477,7 +1477,7 @@ func (d *RocksDB) disconnectBlock(height uint32, blockTxs []blockTxs) error {
sBtxID := string(btxID)
a, exist := blockAddressesTxs[sAddrDesc]
if !exist {
blockAddressesTxs[sAddrDesc] = map[string]struct{}{sBtxID: struct{}{}}
blockAddressesTxs[sAddrDesc] = map[string]struct{}{sBtxID: {}}
} else {
_, exist = a[sBtxID]
if !exist {
@ -1851,8 +1851,16 @@ func (d *RocksDB) ComputeInternalStateColumnStats(stopCompute chan os.Signal) er
func (d *RocksDB) fixUtxo(addrDesc bchain.AddressDescriptor, ba *AddrBalance) (bool, error) {
var checksum big.Int
var prevUtxo *Utxo
for i := range ba.Utxos {
checksum.Add(&checksum, &ba.Utxos[i].ValueSat)
utxo := &ba.Utxos[i]
checksum.Add(&checksum, &utxo.ValueSat)
if prevUtxo != nil {
if prevUtxo.Vout > utxo.Vout && *(*int)(unsafe.Pointer(&utxo.BtxID[0])) == *(*int)(unsafe.Pointer(&prevUtxo.BtxID[0])) && bytes.Equal(utxo.BtxID, prevUtxo.BtxID) {
glog.Error("FixUtxo: addrDesc ", addrDesc, ", needs reorder")
}
}
prevUtxo = utxo
}
if checksum.Cmp(&ba.BalanceSat) != 0 {
var checksumFromTxs big.Int

View File

@ -1148,19 +1148,19 @@ func TestAddrBalance_utxo_methods(t *testing.T) {
SentSat: *big.NewInt(10000),
BalanceSat: *big.NewInt(1000),
Utxos: []Utxo{
Utxo{
{
BtxID: hexToBytes(dbtestdata.TxidB1T1),
Vout: 1,
Height: 5000,
ValueSat: *big.NewInt(100),
},
Utxo{
{
BtxID: hexToBytes(dbtestdata.TxidB1T1),
Vout: 4,
Height: 5000,
ValueSat: *big.NewInt(100),
},
Utxo{
{
BtxID: hexToBytes(dbtestdata.TxidB1T2),
Vout: 0,
Height: 5001,
@ -1208,49 +1208,49 @@ func TestAddrBalance_utxo_methods(t *testing.T) {
SentSat: *big.NewInt(10000),
BalanceSat: *big.NewInt(1000),
Utxos: []Utxo{
Utxo{
{
BtxID: hexToBytes(dbtestdata.TxidB1T1),
Vout: 0,
Height: 5000,
ValueSat: *big.NewInt(100),
},
Utxo{
{
BtxID: hexToBytes(dbtestdata.TxidB1T1),
Vout: 1,
Height: 5000,
ValueSat: *big.NewInt(100),
},
Utxo{
{
BtxID: hexToBytes(dbtestdata.TxidB1T1),
Vout: 2,
Height: 5000,
ValueSat: *big.NewInt(100),
},
Utxo{
{
BtxID: hexToBytes(dbtestdata.TxidB1T1),
Vout: 4,
Height: 5000,
ValueSat: *big.NewInt(100),
},
Utxo{
{
BtxID: hexToBytes(dbtestdata.TxidB1T1),
Vout: 10,
Height: 5000,
ValueSat: *big.NewInt(100),
},
Utxo{
{
BtxID: hexToBytes(dbtestdata.TxidB1T2),
Vout: 0,
Height: 5001,
ValueSat: *big.NewInt(800),
},
Utxo{
{
BtxID: hexToBytes(dbtestdata.TxidB2T1),
Vout: 0,
Height: 5003,
ValueSat: *big.NewInt(800),
},
Utxo{
{
BtxID: hexToBytes(dbtestdata.TxidB2T1),
Vout: 1,
Height: 5003,