v1.10.10-statediff #132

Merged
arijitAD merged 2 commits from v1.10.10-statediff-0.0.27 into v1.10.10-statediff 2021-10-18 15:39:51 +00:00
5 changed files with 57 additions and 43 deletions

View File

@ -3,6 +3,7 @@ name: Docker Build and publish to Github
on: on:
push: push:
branches: branches:
- v1.10.10-statediff
- v1.10.9-statediff - v1.10.9-statediff
- v1.10.8-statediff - v1.10.8-statediff
- v1.10.7-statediff - v1.10.7-statediff

View File

@ -64,7 +64,7 @@ type blockChain interface {
GetBlockByHash(hash common.Hash) *types.Block GetBlockByHash(hash common.Hash) *types.Block
GetBlockByNumber(number uint64) *types.Block GetBlockByNumber(number uint64) *types.Block
GetReceiptsByHash(hash common.Hash) types.Receipts GetReceiptsByHash(hash common.Hash) types.Receipts
GetTdByHash(hash common.Hash) *big.Int GetTd(hash common.Hash, number uint64) *big.Int
UnlockTrie(root common.Hash) UnlockTrie(root common.Hash)
StateCache() state.Database StateCache() state.Database
} }
@ -442,7 +442,7 @@ func (sds *Service) newPayload(stateObject []byte, block *types.Block, params Pa
payload.BlockRlp = blockBuff.Bytes() payload.BlockRlp = blockBuff.Bytes()
} }
if params.IncludeTD { if params.IncludeTD {
payload.TotalDifficulty = sds.BlockChain.GetTdByHash(block.Hash()) payload.TotalDifficulty = sds.BlockChain.GetTd(block.Hash(), block.NumberU64())
} }
if params.IncludeReceipts { if params.IncludeReceipts {
receiptBuff := new(bytes.Buffer) receiptBuff := new(bytes.Buffer)
@ -658,7 +658,7 @@ func (sds *Service) writeStateDiff(block *types.Block, parentRoot common.Hash, p
var err error var err error
var tx *ind.BlockTx var tx *ind.BlockTx
if params.IncludeTD { if params.IncludeTD {
totalDifficulty = sds.BlockChain.GetTdByHash(block.Hash()) totalDifficulty = sds.BlockChain.GetTd(block.Hash(), block.NumberU64())
} }
if params.IncludeReceipts { if params.IncludeReceipts {
receipts = sds.BlockChain.GetReceiptsByHash(block.Hash()) receipts = sds.BlockChain.GetReceiptsByHash(block.Hash())

View File

@ -38,40 +38,41 @@ type BlockChain struct {
ChainEvents []core.ChainEvent ChainEvents []core.ChainEvent
Receipts map[common.Hash]types.Receipts Receipts map[common.Hash]types.Receipts
TDByHash map[common.Hash]*big.Int TDByHash map[common.Hash]*big.Int
TDByNum map[uint64]*big.Int
} }
// SetBlocksForHashes mock method // SetBlocksForHashes mock method
func (blockChain *BlockChain) SetBlocksForHashes(blocks map[common.Hash]*types.Block) { func (bc *BlockChain) SetBlocksForHashes(blocks map[common.Hash]*types.Block) {
if blockChain.blocksToReturnByHash == nil { if bc.blocksToReturnByHash == nil {
blockChain.blocksToReturnByHash = make(map[common.Hash]*types.Block) bc.blocksToReturnByHash = make(map[common.Hash]*types.Block)
} }
blockChain.blocksToReturnByHash = blocks bc.blocksToReturnByHash = blocks
} }
// GetBlockByHash mock method // GetBlockByHash mock method
func (blockChain *BlockChain) GetBlockByHash(hash common.Hash) *types.Block { func (bc *BlockChain) GetBlockByHash(hash common.Hash) *types.Block {
blockChain.HashesLookedUp = append(blockChain.HashesLookedUp, hash) bc.HashesLookedUp = append(bc.HashesLookedUp, hash)
var block *types.Block var block *types.Block
if len(blockChain.blocksToReturnByHash) > 0 { if len(bc.blocksToReturnByHash) > 0 {
block = blockChain.blocksToReturnByHash[hash] block = bc.blocksToReturnByHash[hash]
} }
return block return block
} }
// SetChainEvents mock method // SetChainEvents mock method
func (blockChain *BlockChain) SetChainEvents(chainEvents []core.ChainEvent) { func (bc *BlockChain) SetChainEvents(chainEvents []core.ChainEvent) {
blockChain.ChainEvents = chainEvents bc.ChainEvents = chainEvents
} }
// SubscribeChainEvent mock method // SubscribeChainEvent mock method
func (blockChain *BlockChain) SubscribeChainEvent(ch chan<- core.ChainEvent) event.Subscription { func (bc *BlockChain) SubscribeChainEvent(ch chan<- core.ChainEvent) event.Subscription {
subErr := errors.New("subscription error") subErr := errors.New("subscription error")
var eventCounter int var eventCounter int
subscription := event.NewSubscription(func(quit <-chan struct{}) error { subscription := event.NewSubscription(func(quit <-chan struct{}) error {
for _, chainEvent := range blockChain.ChainEvents { for _, chainEvent := range bc.ChainEvents {
if eventCounter > 1 { if eventCounter > 1 {
time.Sleep(250 * time.Millisecond) time.Sleep(250 * time.Millisecond)
return subErr return subErr
@ -90,45 +91,57 @@ func (blockChain *BlockChain) SubscribeChainEvent(ch chan<- core.ChainEvent) eve
} }
// SetReceiptsForHash test method // SetReceiptsForHash test method
func (blockChain *BlockChain) SetReceiptsForHash(hash common.Hash, receipts types.Receipts) { func (bc *BlockChain) SetReceiptsForHash(hash common.Hash, receipts types.Receipts) {
if blockChain.Receipts == nil { if bc.Receipts == nil {
blockChain.Receipts = make(map[common.Hash]types.Receipts) bc.Receipts = make(map[common.Hash]types.Receipts)
} }
blockChain.Receipts[hash] = receipts bc.Receipts[hash] = receipts
} }
// GetReceiptsByHash mock method // GetReceiptsByHash mock method
func (blockChain *BlockChain) GetReceiptsByHash(hash common.Hash) types.Receipts { func (bc *BlockChain) GetReceiptsByHash(hash common.Hash) types.Receipts {
return blockChain.Receipts[hash] return bc.Receipts[hash]
} }
// SetBlockForNumber test method // SetBlockForNumber test method
func (blockChain *BlockChain) SetBlockForNumber(block *types.Block, number uint64) { func (bc *BlockChain) SetBlockForNumber(block *types.Block, number uint64) {
if blockChain.blocksToReturnByNumber == nil { if bc.blocksToReturnByNumber == nil {
blockChain.blocksToReturnByNumber = make(map[uint64]*types.Block) bc.blocksToReturnByNumber = make(map[uint64]*types.Block)
} }
blockChain.blocksToReturnByNumber[number] = block bc.blocksToReturnByNumber[number] = block
} }
// GetBlockByNumber mock method // GetBlockByNumber mock method
func (blockChain *BlockChain) GetBlockByNumber(number uint64) *types.Block { func (bc *BlockChain) GetBlockByNumber(number uint64) *types.Block {
return blockChain.blocksToReturnByNumber[number] return bc.blocksToReturnByNumber[number]
} }
// GetTdByHash mock method // GetTd mock method
func (blockChain *BlockChain) GetTdByHash(hash common.Hash) *big.Int { func (bc *BlockChain) GetTd(hash common.Hash, blockNum uint64) *big.Int {
return blockChain.TDByHash[hash] if td, ok := bc.TDByHash[hash]; ok {
} return td
func (blockChain *BlockChain) SetTdByHash(hash common.Hash, td *big.Int) {
if blockChain.TDByHash == nil {
blockChain.TDByHash = make(map[common.Hash]*big.Int)
} }
blockChain.TDByHash[hash] = td
}
func (blockChain *BlockChain) UnlockTrie(root common.Hash) {} if td, ok := bc.TDByNum[blockNum]; ok {
return td
func (BlockChain *BlockChain) StateCache() state.Database { }
return nil
}
func (bc *BlockChain) SetTd(hash common.Hash, blockNum uint64, td *big.Int) {
if bc.TDByHash == nil {
bc.TDByHash = make(map[common.Hash]*big.Int)
}
bc.TDByHash[hash] = td
if bc.TDByNum == nil {
bc.TDByNum = make(map[uint64]*big.Int)
}
bc.TDByNum[blockNum] = td
}
func (bc *BlockChain) UnlockTrie(root common.Hash) {}
func (bc *BlockChain) StateCache() state.Database {
return nil return nil
} }

View File

@ -166,7 +166,7 @@ func (sds *MockStateDiffService) newPayload(stateObject []byte, block *types.Blo
payload.BlockRlp = blockBuff.Bytes() payload.BlockRlp = blockBuff.Bytes()
} }
if params.IncludeTD { if params.IncludeTD {
payload.TotalDifficulty = sds.BlockChain.GetTdByHash(block.Hash()) payload.TotalDifficulty = sds.BlockChain.GetTd(block.Hash(), block.NumberU64())
} }
if params.IncludeReceipts { if params.IncludeReceipts {
receiptBuff := new(bytes.Buffer) receiptBuff := new(bytes.Buffer)

View File

@ -134,7 +134,7 @@ func testSubscriptionAPI(t *testing.T) {
serviceQuitChan := make(chan bool) serviceQuitChan := make(chan bool)
mockBlockChain := &BlockChain{} mockBlockChain := &BlockChain{}
mockBlockChain.SetReceiptsForHash(block1.Hash(), types.Receipts{mockReceipt}) mockBlockChain.SetReceiptsForHash(block1.Hash(), types.Receipts{mockReceipt})
mockBlockChain.SetTdByHash(block1.Hash(), mockTotalDifficulty) mockBlockChain.SetTd(block1.Hash(), block1.NumberU64(), mockTotalDifficulty)
mockService := MockStateDiffService{ mockService := MockStateDiffService{
Mutex: sync.Mutex{}, Mutex: sync.Mutex{},
Builder: statediff.NewBuilder(chain.StateCache()), Builder: statediff.NewBuilder(chain.StateCache()),
@ -221,7 +221,7 @@ func testHTTPAPI(t *testing.T) {
}) })
mockBlockChain.SetBlockForNumber(block1, block1.Number().Uint64()) mockBlockChain.SetBlockForNumber(block1, block1.Number().Uint64())
mockBlockChain.SetReceiptsForHash(block1.Hash(), types.Receipts{mockReceipt}) mockBlockChain.SetReceiptsForHash(block1.Hash(), types.Receipts{mockReceipt})
mockBlockChain.SetTdByHash(block1.Hash(), big.NewInt(1337)) mockBlockChain.SetTd(block1.Hash(), block1.NumberU64(), big.NewInt(1337))
mockService := MockStateDiffService{ mockService := MockStateDiffService{
Mutex: sync.Mutex{}, Mutex: sync.Mutex{},
Builder: statediff.NewBuilder(chain.StateCache()), Builder: statediff.NewBuilder(chain.StateCache()),