소스 검색

Check coinbase for from/to inclusion

obscuren 11 년 전
부모
커밋
0a22dc2ce5
2개의 변경된 파일13개의 추가작업 그리고 8개의 파일을 삭제
  1. 11 6
      chain/block_manager.go
  2. 2 2
      chain/filter.go

+ 11 - 6
chain/block_manager.go

@@ -275,16 +275,24 @@ func (sm *BlockManager) ProcessWithParent(block, parent *Block) (td *big.Int, me
 	}
 }
 
-func (sm *BlockManager) ApplyDiff(state *state.State, parent, block *Block) (receipts Receipts, err error) {
-	coinbase := state.GetOrNewStateObject(block.Coinbase)
+func (sm *BlockManager) ApplyDiff(statedb *state.State, parent, block *Block) (receipts Receipts, err error) {
+	coinbase := statedb.GetOrNewStateObject(block.Coinbase)
 	coinbase.SetGasPool(block.CalcGasLimit(parent))
 
 	// Process the transactions on to current block
-	receipts, _, _, _, err = sm.ProcessTransactions(coinbase, state, block, parent, block.Transactions())
+	receipts, _, _, _, err = sm.ProcessTransactions(coinbase, statedb, block, parent, block.Transactions())
 	if err != nil {
 		return nil, err
 	}
 
+	statedb.Manifest().AddMessage(&state.Message{
+		To: block.Coinbase, From: block.Coinbase,
+		Input:  nil,
+		Origin: nil,
+		Block:  block.Hash(), Timestamp: block.Time, Coinbase: block.Coinbase, Number: block.Number,
+		Value: new(big.Int),
+	})
+
 	return receipts, nil
 }
 
@@ -303,9 +311,6 @@ func (sm *BlockManager) CalculateTD(block *Block) (*big.Int, bool) {
 	// is greater than the previous.
 	if td.Cmp(sm.bc.TD) > 0 {
 		return td, true
-
-		// Set the new total difficulty back to the block chain
-		//sm.bc.SetTotalDifficulty(td)
 	}
 
 	return nil, false

+ 2 - 2
chain/filter.go

@@ -175,7 +175,7 @@ func (self *Filter) bloomFilter(block *Block) bool {
 	var fromIncluded, toIncluded bool
 	if len(self.from) > 0 {
 		for _, from := range self.from {
-			if BloomLookup(block.LogsBloom, from) {
+			if BloomLookup(block.LogsBloom, from) || bytes.Equal(block.Coinbase, from) {
 				fromIncluded = true
 				break
 			}
@@ -186,7 +186,7 @@ func (self *Filter) bloomFilter(block *Block) bool {
 
 	if len(self.to) > 0 {
 		for _, to := range self.to {
-			if BloomLookup(block.LogsBloom, ethutil.U256(new(big.Int).Add(ethutil.Big1, ethutil.BigD(to))).Bytes()) {
+			if BloomLookup(block.LogsBloom, ethutil.U256(new(big.Int).Add(ethutil.Big1, ethutil.BigD(to))).Bytes()) || bytes.Equal(block.Coinbase, to) {
 				toIncluded = true
 				break
 			}