Browse Source

Filter and mutex locks added

obscuren 10 years ago
parent
commit
567428fb34
7 changed files with 33 additions and 17 deletions
  1. 0 5
      cmd/mist/assets/examples/coin.html
  2. 0 2
      cmd/mist/gui.go
  3. 12 1
      core/chain_manager.go
  4. 17 6
      core/filter.go
  5. 1 0
      eth/backend.go
  6. 1 1
      pow/ezp/pow.go
  7. 2 2
      ui/filter.go

+ 0 - 5
cmd/mist/assets/examples/coin.html

@@ -80,11 +80,6 @@
 		refresh();
 	});
 
-	var ev = contract.SingleTransact({})
-	ev.watch(function(log) {
-	someElement.innerHTML += "tnaheousnthaoeu";
-	});
-	
 	eth.watch('chain').changed(function() {
 		refresh();
 	});

+ 0 - 2
cmd/mist/gui.go

@@ -394,7 +394,6 @@ func (gui *Gui) update() {
 	miningLabel := gui.getObjectByName("miningLabel")
 
 	events := gui.eth.EventMux().Subscribe(
-		//eth.PeerListEvent{},
 		core.NewBlockEvent{},
 		core.TxPreEvent{},
 		core.TxPostEvent{},
@@ -410,7 +409,6 @@ func (gui *Gui) update() {
 			switch ev := ev.(type) {
 			case core.NewBlockEvent:
 				gui.processBlock(ev.Block, false)
-				//gui.setWalletValue(gui.eth.ChainManager().State().GetBalance(gui.address()), nil)
 				balance := ethutil.CurrencyToString(gui.eth.ChainManager().State().GetBalance(gui.address()))
 				gui.getObjectByName("balanceLabel").Set("text", fmt.Sprintf("%v", balance))
 

+ 12 - 1
core/chain_manager.go

@@ -79,6 +79,7 @@ type ChainManager struct {
 	genesisBlock *types.Block
 	// Last known total difficulty
 	mu            sync.RWMutex
+	tsmu          sync.RWMutex
 	td            *big.Int
 	currentBlock  *types.Block
 	lastBlockHash []byte
@@ -131,9 +132,19 @@ func (self *ChainManager) State() *state.StateDB {
 }
 
 func (self *ChainManager) TransState() *state.StateDB {
+	self.tsmu.RLock()
+	defer self.tsmu.RUnlock()
+	//tmp := self.transState
+
 	return self.transState
 }
 
+func (self *ChainManager) setTransState(statedb *state.StateDB) {
+	self.tsmu.Lock()
+	defer self.tsmu.Unlock()
+	self.transState = statedb
+}
+
 func (bc *ChainManager) setLastBlock() {
 	data, _ := bc.db.Get([]byte("LastBlock"))
 	if len(data) != 0 {
@@ -376,7 +387,7 @@ func (self *ChainManager) InsertChain(chain types.Blocks) error {
 
 				self.setTotalDifficulty(td)
 				self.insert(block)
-				self.transState = state.New(cblock.Root(), self.db)
+				self.setTransState(state.New(cblock.Root(), self.db))
 
 				self.eventMux.Post(ChainEvent{block, td})
 			}

+ 17 - 6
core/filter.go

@@ -16,7 +16,7 @@ type FilterOptions struct {
 	Earliest int64
 	Latest   int64
 
-	Address []byte
+	Address [][]byte
 	Topics  [][]byte
 
 	Skip int
@@ -29,7 +29,7 @@ type Filter struct {
 	earliest int64
 	latest   int64
 	skip     int
-	address  []byte
+	address  [][]byte
 	max      int
 	topics   [][]byte
 
@@ -65,7 +65,7 @@ func (self *Filter) SetLatestBlock(latest int64) {
 	self.latest = latest
 }
 
-func (self *Filter) SetAddress(addr []byte) {
+func (self *Filter) SetAddress(addr [][]byte) {
 	self.address = addr
 }
 
@@ -145,7 +145,8 @@ func (self *Filter) FilterLogs(logs state.Logs) state.Logs {
 	// Filter the logs for interesting stuff
 Logs:
 	for _, log := range logs {
-		if !bytes.Equal(self.address, log.Address()) {
+		if !includes(self.address, log.Address()) {
+			//if !bytes.Equal(self.address, log.Address()) {
 			continue
 		}
 
@@ -163,8 +164,18 @@ Logs:
 }
 
 func (self *Filter) bloomFilter(block *types.Block) bool {
-	if len(self.address) > 0 && !types.BloomLookup(block.Bloom(), self.address) {
-		return false
+	if len(self.address) > 0 {
+		var included bool
+		for _, addr := range self.address {
+			if types.BloomLookup(block.Bloom(), addr) {
+				included = true
+				break
+			}
+		}
+
+		if !included {
+			return false
+		}
 	}
 
 	for _, topic := range self.topics {

+ 1 - 0
eth/backend.go

@@ -26,6 +26,7 @@ var (
 
 	defaultBootNodes = []*discover.Node{
 		discover.MustParseNode("enode://6cdd090303f394a1cac34ecc9f7cda18127eafa2a3a06de39f6d920b0e583e062a7362097c7c65ee490a758b442acd5c80c6fce4b148c6a391e946b45131365b@54.169.166.226:30303"),
+		discover.MustParseNode("enode://d1760a33c2f25c3b419ee4f6787fb0ea148828f5e678f0450d4be978fef908b42fc47a4c0fbf19832754f17881d381e50364fa93be42f31801d60ac64933f0a5@127.0.0.1:30303"),
 	}
 )
 

+ 1 - 1
pow/ezp/pow.go

@@ -21,7 +21,7 @@ type EasyPow struct {
 }
 
 func New() *EasyPow {
-	return &EasyPow{turbo: false}
+	return &EasyPow{turbo: true}
 }
 
 func (pow *EasyPow) GetHashrate() int64 {

+ 2 - 2
ui/filter.go

@@ -29,8 +29,8 @@ func NewFilterFromMap(object map[string]interface{}, eth core.Backend) *core.Fil
 	}
 
 	if object["address"] != nil {
-		val := ethutil.NewValue(object["address"])
-		filter.SetAddress(fromHex(val.Str()))
+		//val := ethutil.NewValue(object["address"])
+		//filter.SetAddress(fromHex(val.Str()))
 	}
 
 	if object["max"] != nil {