forked from TrueCloudLab/neoneo-go
scripts: ignore ledger items while comparing dumps
This commit is contained in:
parent
e1384cb795
commit
5e9d05b9af
1 changed files with 19 additions and 5 deletions
|
@ -1,6 +1,9 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/base64"
|
||||||
|
"encoding/binary"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
@ -12,6 +15,8 @@ import (
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var ledgerContractID = -2
|
||||||
|
|
||||||
type dump []blockDump
|
type dump []blockDump
|
||||||
|
|
||||||
type blockDump struct {
|
type blockDump struct {
|
||||||
|
@ -39,15 +44,27 @@ func readFile(path string) (dump, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d dump) normalize() {
|
func (d dump) normalize() {
|
||||||
|
ledgerIDBytes := make([]byte, 4)
|
||||||
|
binary.LittleEndian.PutUint32(ledgerIDBytes, uint32(ledgerContractID))
|
||||||
for i := range d {
|
for i := range d {
|
||||||
|
var newStorage []storageOp
|
||||||
for j := range d[i].Storage {
|
for j := range d[i].Storage {
|
||||||
|
keyBytes, err := base64.StdEncoding.DecodeString(d[i].Storage[j].Key)
|
||||||
|
if err != nil {
|
||||||
|
panic(fmt.Errorf("invalid key encoding: %w", err))
|
||||||
|
}
|
||||||
|
if bytes.HasPrefix(keyBytes, ledgerIDBytes) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
if d[i].Storage[j].State == "Changed" {
|
if d[i].Storage[j].State == "Changed" {
|
||||||
d[i].Storage[j].State = "Added"
|
d[i].Storage[j].State = "Added"
|
||||||
}
|
}
|
||||||
|
newStorage = append(newStorage, d[i].Storage[j])
|
||||||
}
|
}
|
||||||
sort.Slice(d[i].Storage, func(k, l int) bool {
|
sort.Slice(newStorage, func(k, l int) bool {
|
||||||
return d[i].Storage[k].Key < d[i].Storage[l].Key
|
return newStorage[k].Key < newStorage[l].Key
|
||||||
})
|
})
|
||||||
|
d[i].Storage = newStorage
|
||||||
}
|
}
|
||||||
// assume that d is already sorted by Block
|
// assume that d is already sorted by Block
|
||||||
}
|
}
|
||||||
|
@ -72,9 +89,6 @@ func compare(a, b string) error {
|
||||||
if blockA.Block != blockB.Block {
|
if blockA.Block != blockB.Block {
|
||||||
return fmt.Errorf("block number mismatch: %d vs %d", blockA.Block, blockB.Block)
|
return fmt.Errorf("block number mismatch: %d vs %d", blockA.Block, blockB.Block)
|
||||||
}
|
}
|
||||||
if blockA.Size != blockB.Size {
|
|
||||||
return fmt.Errorf("block %d, changes number mismatch: %d vs %d", blockA.Block, blockA.Size, blockB.Size)
|
|
||||||
}
|
|
||||||
if len(blockA.Storage) != len(blockB.Storage) {
|
if len(blockA.Storage) != len(blockB.Storage) {
|
||||||
return fmt.Errorf("block %d, changes length mismatch: %d vs %d", blockA.Block, len(blockA.Storage), len(blockB.Storage))
|
return fmt.Errorf("block %d, changes length mismatch: %d vs %d", blockA.Block, len(blockA.Storage), len(blockB.Storage))
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue