Skip to content

Commit

Permalink
Fixed an issue that check SideChainMining transaction is failed
Browse files Browse the repository at this point in the history
  • Loading branch information
RainFallsSilent committed Sep 22, 2020
1 parent e7dc70b commit ba13e06
Showing 5 changed files with 20 additions and 17 deletions.
17 changes: 9 additions & 8 deletions interface/spvservice.go
Original file line number Diff line number Diff line change
@@ -42,7 +42,7 @@ type spvservice struct {
//FilterType is the filter type .(FTBloom, FTDPOS and so on )
filterType uint8
// p2p Protocol version height use to change version msg content
NewP2PProtocolVersionHeight uint64
NewP2PProtocolVersionHeight uint64
}

// NewSPVService creates a new SPV service instance.
@@ -72,17 +72,18 @@ func NewSPVService(cfg *Config) (*spvservice, error) {
}
originArbiters = append(originArbiters, v)
}
dataStore, err := store.NewDataStore(dataDir, originArbiters)
dataStore, err := store.NewDataStore(dataDir, originArbiters,
len(cfg.ChainParams.CRCArbiters)*3)
if err != nil {
return nil, err
}

service := &spvservice{
headers: headerStore,
db: dataStore,
rollback: cfg.OnRollback,
listeners: make(map[common.Uint256]TransactionListener),
filterType: cfg.FilterType,
headers: headerStore,
db: dataStore,
rollback: cfg.OnRollback,
listeners: make(map[common.Uint256]TransactionListener),
filterType: cfg.FilterType,
NewP2PProtocolVersionHeight: cfg.ChainParams.NewP2PProtocolVersionHeight,
}

@@ -102,7 +103,7 @@ func NewSPVService(cfg *Config) (*spvservice, error) {
NewBlockHeader: newBlockHeader,
GetTxFilter: service.GetFilter,
StateNotifier: service,
NodeVersion : cfg.NodeVersion,
NodeVersion: cfg.NodeVersion,
}

service.IService, err = sdk.NewService(serviceCfg)
12 changes: 7 additions & 5 deletions interface/store/arbiters.go
Original file line number Diff line number Diff line change
@@ -31,15 +31,17 @@ type arbiters struct {
posCache []uint32
cache map[common.Uint256]uint32
originArbiters [][]byte
arbitersCount int
}

func NewArbiters(db *leveldb.DB, originArbiters [][]byte) *arbiters {
func NewArbiters(db *leveldb.DB, originArbiters [][]byte, arbitersCount int) *arbiters {
return &arbiters{
db: db,
b: new(leveldb.Batch),
posCache: make([]uint32, 0),
cache: make(map[common.Uint256]uint32),
originArbiters: originArbiters,
arbitersCount: arbitersCount,
}
}

@@ -152,7 +154,7 @@ func (c *arbiters) GetByHeight(height uint32) (crcArbiters [][]byte, normalArbit
} else {
pos = c.posCache
}
slot, err := findSlot(pos, height)
slot, err := findSlot(pos, height, c.arbitersCount)
if err != nil {
return nil, nil, err
}
@@ -272,18 +274,18 @@ func getValueBytes(crc [][]byte, nor [][]byte) []byte {
return buf.Bytes()
}

func findSlot(pos []uint32, height uint32) (uint32, error) {
func findSlot(pos []uint32, height uint32, arbitersCount int) (uint32, error) {

if len(pos) == 0 {
return 0, errors.New("invalid height")
}

if pos[len(pos)-1]+36 < height {
if pos[len(pos)-1]+uint32(arbitersCount) < height {
return 0, errors.New("invalid height")
}

for i := len(pos) - 1; i >= 0; i-- {
if height >= pos[i] {
if height > pos[i] {
return pos[i], nil
}
}
2 changes: 1 addition & 1 deletion interface/store/arbiters_test.go
Original file line number Diff line number Diff line change
@@ -38,7 +38,7 @@ func TestArbiters(t *testing.T) {
crc, _ := hex.DecodeString(v)
origincrcs = append(origincrcs, crc)
}
arbiters := NewArbiters(db, origincrcs)
arbiters := NewArbiters(db, origincrcs, 36)
crcPublicKey := []string{
"03C3A4A137EB63B05E9F14070639E680DF78616D70EE1BA52B0759236B4B698CDB",
"03B97154758B8B1A044DB774A4A19E1591DC165A0FA24F74388FBDF0EFDB919CFA",
2 changes: 1 addition & 1 deletion interface/store/databatch_test.go
Original file line number Diff line number Diff line change
@@ -7,7 +7,7 @@ import (
)

func TestDataBatch_DelAll(t *testing.T) {
db, err := NewDataStore("test", nil)
db, err := NewDataStore("test", nil, 36)
if !assert.NoError(t, err) {
t.FailNow()
}
4 changes: 2 additions & 2 deletions interface/store/datastore.go
Original file line number Diff line number Diff line change
@@ -20,7 +20,7 @@ type dataStore struct {
ars *arbiters
}

func NewDataStore(dataDir string, originArbiters [][]byte) (*dataStore, error) {
func NewDataStore(dataDir string, originArbiters [][]byte, arbitersCount int) (*dataStore, error) {
db, err := leveldb.OpenFile(filepath.Join(dataDir, "store"), nil)
if err != nil {
return nil, err
@@ -40,7 +40,7 @@ func NewDataStore(dataDir string, originArbiters [][]byte) (*dataStore, error) {
txs: NewTxs(db),
ops: NewOps(db),
que: NewQue(db),
ars: NewArbiters(db, originArbiters),
ars: NewArbiters(db, originArbiters, arbitersCount),
}, nil
}

0 comments on commit ba13e06

Please sign in to comment.