Re-added min gas price check on tx pool

This commit is contained in:
obscuren 2014-09-23 17:55:34 +02:00
parent ea67d853a8
commit 6800c3665a
3 changed files with 37 additions and 12 deletions

View File

@ -27,6 +27,8 @@ const (
minGasPrice = 1000000 minGasPrice = 1000000
) )
var MinGasPrice = big.NewInt(10000000000000)
type TxMsg struct { type TxMsg struct {
Tx *Transaction Tx *Transaction
Type TxMsgTy Type TxMsgTy
@ -103,6 +105,10 @@ func (pool *TxPool) ValidateTransaction(tx *Transaction) error {
return fmt.Errorf("[TXPL] Invalid recipient. len = %d", len(tx.Recipient)) return fmt.Errorf("[TXPL] Invalid recipient. len = %d", len(tx.Recipient))
} }
if tx.GasPrice.Cmp(MinGasPrice) >= 0 {
return fmt.Errorf("Gas price to low. Require %v > Got %v", MinGasPrice, tx.GasPrice)
}
// Get the sender // Get the sender
//sender := pool.Ethereum.StateManager().procState.GetAccount(tx.Sender()) //sender := pool.Ethereum.StateManager().procState.GetAccount(tx.Sender())
sender := pool.Ethereum.StateManager().CurrentState().GetAccount(tx.Sender()) sender := pool.Ethereum.StateManager().CurrentState().GetAccount(tx.Sender())

View File

@ -1,4 +1,4 @@
// +build !windows // +build !windows !cgo
package ethutil package ethutil
import ( import (

41
peer.go
View File

@ -155,6 +155,8 @@ type Peer struct {
pingStartTime time.Time pingStartTime time.Time
lastRequestedBlock *ethchain.Block lastRequestedBlock *ethchain.Block
protocolCaps *ethutil.Value
} }
func NewPeer(conn net.Conn, ethereum *Ethereum, inbound bool) *Peer { func NewPeer(conn net.Conn, ethereum *Ethereum, inbound bool) *Peer {
@ -173,20 +175,22 @@ func NewPeer(conn net.Conn, ethereum *Ethereum, inbound bool) *Peer {
blocksRequested: 10, blocksRequested: 10,
caps: ethereum.ServerCaps(), caps: ethereum.ServerCaps(),
version: ethereum.ClientIdentity().String(), version: ethereum.ClientIdentity().String(),
protocolCaps: ethutil.NewValue(nil),
} }
} }
func NewOutboundPeer(addr string, ethereum *Ethereum, caps Caps) *Peer { func NewOutboundPeer(addr string, ethereum *Ethereum, caps Caps) *Peer {
p := &Peer{ p := &Peer{
outputQueue: make(chan *ethwire.Msg, outputBufferSize), outputQueue: make(chan *ethwire.Msg, outputBufferSize),
quit: make(chan bool), quit: make(chan bool),
ethereum: ethereum, ethereum: ethereum,
inbound: false, inbound: false,
connected: 0, connected: 0,
disconnect: 0, disconnect: 0,
port: 30303, port: 30303,
caps: caps, caps: caps,
version: ethereum.ClientIdentity().String(), version: ethereum.ClientIdentity().String(),
protocolCaps: ethutil.NewValue(nil),
} }
// Set up the connection in another goroutine so we don't block the main thread // Set up the connection in another goroutine so we don't block the main thread
@ -568,7 +572,7 @@ func (self *Peer) FetchBlocks() {
func (self *Peer) FetchHashes() { func (self *Peer) FetchHashes() {
blockPool := self.ethereum.blockPool blockPool := self.ethereum.blockPool
if self.td.Cmp(blockPool.td) >= 0 { if self.statusKnown && self.td.Cmp(blockPool.td) >= 0 {
blockPool.td = self.td blockPool.td = self.td
if !blockPool.HasLatestHash() { if !blockPool.HasLatestHash() {
@ -585,7 +589,10 @@ out:
for { for {
select { select {
case <-serviceTimer.C: case <-serviceTimer.C:
if time.Since(self.lastBlockReceived) > 10*time.Second { since := time.Since(self.lastBlockReceived)
if since > 10*time.Second && self.ethereum.blockPool.Len() != 0 && self.IsCap("eth") {
self.FetchHashes()
} else if since > 5*time.Second {
self.catchingUp = false self.catchingUp = false
} }
case <-self.quit: case <-self.quit:
@ -789,6 +796,7 @@ func (p *Peer) handleHandshake(msg *ethwire.Msg) {
p.ethereum.PushPeer(p) p.ethereum.PushPeer(p)
p.ethereum.reactor.Post("peerList", p.ethereum.Peers()) p.ethereum.reactor.Post("peerList", p.ethereum.Peers())
p.protocolCaps = caps
capsIt := caps.NewIterator() capsIt := caps.NewIterator()
var capsStrs []string var capsStrs []string
for capsIt.Next() { for capsIt.Next() {
@ -806,6 +814,17 @@ func (p *Peer) handleHandshake(msg *ethwire.Msg) {
peerlogger.Debugln(p) peerlogger.Debugln(p)
} }
func (self *Peer) IsCap(cap string) bool {
capsIt := self.protocolCaps.NewIterator()
for capsIt.Next() {
if capsIt.Value().Str() == cap {
return true
}
}
return false
}
func (p *Peer) String() string { func (p *Peer) String() string {
var strBoundType string var strBoundType string
if p.inbound { if p.inbound {