diff --git a/consensus/bor/bor.go b/consensus/bor/bor.go index f353e2643f07c179a563257172ed7e64368eb1e1..bb01bb024738f129bbaa47995a2b048e997e0fa1 100644 --- a/consensus/bor/bor.go +++ b/consensus/bor/bor.go @@ -682,7 +682,7 @@ func (c *Bor) Finalize(chain consensus.ChainReader, header *types.Header, state // FinalizeAndAssemble implements consensus.Engine, ensuring no uncles are set, // nor block rewards given, and returns the final block. func (c *Bor) FinalizeAndAssemble(chain consensus.ChainReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, uncles []*types.Header, receipts []*types.Receipt) (*types.Block, error) { - stateSyncData := &types.StateData{} + stateSyncData := []*types.StateData{} headerNumber := header.Number.Uint64() if headerNumber%c.config.Sprint == 0 { cx := chainContext{Chain: chain, Bor: c} @@ -1093,8 +1093,8 @@ func (c *Bor) CommitStates( state *state.StateDB, header *types.Header, chain chainContext, -) (*types.StateData, error) { - var stateData types.StateData +) ([]*types.StateData, error) { + stateSyncs := make([]*types.StateData, 0) number := header.Number.Uint64() _lastStateID, err := c.GenesisContractsClient.LastStateId(number - 1) if err != nil { @@ -1119,19 +1119,20 @@ func (c *Bor) CommitStates( break } - stateData = types.StateData{ + stateData := types.StateData{ Did: eventRecord.ID, Contract: eventRecord.Contract, Data: hex.EncodeToString(eventRecord.Data), TxHash: eventRecord.TxHash, } + stateSyncs = append(stateSyncs, &stateData) if err := c.GenesisContractsClient.CommitState(eventRecord, state, header, chain); err != nil { return nil, err } lastStateID++ } - return &stateData, nil + return stateSyncs, nil } func validateEventRecord(eventRecord *EventRecordWithTime, number uint64, to time.Time, lastStateID uint64, chainID string) error { diff --git a/core/blockchain.go b/core/blockchain.go index faae6dff8811aca6a15b39a478a96ad28f0313cf..df85ed45447c6adf9b9aceb12aa4503784456665 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -1544,8 +1544,8 @@ func (bc *BlockChain) writeBlockWithState(block *types.Block, receipts []*types. } syncData := block.StateSyncData() // TODO: add emitStateSyncEvent flag check - if syncData.Did != 0 { - bc.stateSyncFeed.Send(StateSyncEvent{StateData: syncData}) + for _, data := range syncData { + bc.stateSyncFeed.Send(StateSyncEvent{StateData: data}) } } else { bc.chainSideFeed.Send(ChainSideEvent{Block: block}) diff --git a/core/types/block.go b/core/types/block.go index 6235bb7eb53d4578355214cdf99d47938cdeb4aa..e00b5e0d2be57e80af5d433af033d905bd45485e 100644 --- a/core/types/block.go +++ b/core/types/block.go @@ -159,7 +159,7 @@ type Block struct { header *Header uncles []*Header transactions Transactions - stateSyncData *StateData + stateSyncData []*StateData // caches hash atomic.Value size atomic.Value @@ -267,7 +267,7 @@ func CopyHeader(h *Header) *Header { } // SetStateSync set sync data in block -func (b *Block) SetStateSync(stateData *StateData) { +func (b *Block) SetStateSync(stateData []*StateData) { b.stateSyncData = stateData } @@ -316,12 +316,12 @@ func (b *Block) Transaction(hash common.Hash) *Transaction { return nil } -func (b *Block) Number() *big.Int { return new(big.Int).Set(b.header.Number) } -func (b *Block) GasLimit() uint64 { return b.header.GasLimit } -func (b *Block) GasUsed() uint64 { return b.header.GasUsed } -func (b *Block) Difficulty() *big.Int { return new(big.Int).Set(b.header.Difficulty) } -func (b *Block) Time() uint64 { return b.header.Time } -func (b *Block) StateSyncData() *StateData { return b.stateSyncData } +func (b *Block) Number() *big.Int { return new(big.Int).Set(b.header.Number) } +func (b *Block) GasLimit() uint64 { return b.header.GasLimit } +func (b *Block) GasUsed() uint64 { return b.header.GasUsed } +func (b *Block) Difficulty() *big.Int { return new(big.Int).Set(b.header.Difficulty) } +func (b *Block) Time() uint64 { return b.header.Time } +func (b *Block) StateSyncData() []*StateData { return b.stateSyncData } func (b *Block) NumberU64() uint64 { return b.header.Number.Uint64() } func (b *Block) MixDigest() common.Hash { return b.header.MixDigest }