miner, cmd/geth: settable gas price from flags and console
* --gasprice "<num>" flag * admin.miner.setGasPrice( <num> )
This commit is contained in:
parent
cb1fa523e4
commit
13ddf20bd2
@ -70,6 +70,7 @@ func (js *jsre) adminBindings() {
|
|||||||
miner.Set("stop", js.stopMining)
|
miner.Set("stop", js.stopMining)
|
||||||
miner.Set("hashrate", js.hashrate)
|
miner.Set("hashrate", js.hashrate)
|
||||||
miner.Set("setExtra", js.setExtra)
|
miner.Set("setExtra", js.setExtra)
|
||||||
|
miner.Set("setGasPrice", js.setGasPrice)
|
||||||
|
|
||||||
admin.Set("debug", struct{}{})
|
admin.Set("debug", struct{}{})
|
||||||
t, _ = admin.Get("debug")
|
t, _ = admin.Get("debug")
|
||||||
@ -236,6 +237,17 @@ func (js *jsre) setExtra(call otto.FunctionCall) otto.Value {
|
|||||||
return otto.UndefinedValue()
|
return otto.UndefinedValue()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (js *jsre) setGasPrice(call otto.FunctionCall) otto.Value {
|
||||||
|
gasPrice, err := call.Argument(0).ToString()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
return otto.UndefinedValue()
|
||||||
|
}
|
||||||
|
|
||||||
|
js.ethereum.Miner().SetGasPrice(common.String2Big(gasPrice))
|
||||||
|
return otto.UndefinedValue()
|
||||||
|
}
|
||||||
|
|
||||||
func (js *jsre) hashrate(otto.FunctionCall) otto.Value {
|
func (js *jsre) hashrate(otto.FunctionCall) otto.Value {
|
||||||
return js.re.ToVal(js.ethereum.Miner().HashRate())
|
return js.re.ToVal(js.ethereum.Miner().HashRate())
|
||||||
}
|
}
|
||||||
|
@ -37,6 +37,10 @@ func (self *Miner) Mining() bool {
|
|||||||
return self.mining
|
return self.mining
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *Miner) SetGasPrice(price *big.Int) {
|
||||||
|
m.worker.gasPrice = price
|
||||||
|
}
|
||||||
|
|
||||||
func (self *Miner) Start(coinbase common.Address) {
|
func (self *Miner) Start(coinbase common.Address) {
|
||||||
self.mining = true
|
self.mining = true
|
||||||
self.worker.coinbase = coinbase
|
self.worker.coinbase = coinbase
|
||||||
|
@ -72,6 +72,7 @@ type worker struct {
|
|||||||
proc *core.BlockProcessor
|
proc *core.BlockProcessor
|
||||||
|
|
||||||
coinbase common.Address
|
coinbase common.Address
|
||||||
|
gasPrice *big.Int
|
||||||
extra []byte
|
extra []byte
|
||||||
|
|
||||||
currentMu sync.Mutex
|
currentMu sync.Mutex
|
||||||
@ -93,6 +94,7 @@ func newWorker(coinbase common.Address, eth core.Backend) *worker {
|
|||||||
eth: eth,
|
eth: eth,
|
||||||
mux: eth.EventMux(),
|
mux: eth.EventMux(),
|
||||||
recv: make(chan *types.Block),
|
recv: make(chan *types.Block),
|
||||||
|
gasPrice: new(big.Int),
|
||||||
chain: eth.ChainManager(),
|
chain: eth.ChainManager(),
|
||||||
proc: eth.BlockProcessor(),
|
proc: eth.BlockProcessor(),
|
||||||
possibleUncles: make(map[common.Hash]*types.Block),
|
possibleUncles: make(map[common.Hash]*types.Block),
|
||||||
@ -239,6 +241,19 @@ func (self *worker) makeCurrent() {
|
|||||||
self.current.coinbase.SetGasPool(core.CalcGasLimit(parent))
|
self.current.coinbase.SetGasPool(core.CalcGasLimit(parent))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (w *worker) setGasPrice(p *big.Int) {
|
||||||
|
w.mu.Lock()
|
||||||
|
defer w.mu.Unlock()
|
||||||
|
w.gasPrice = p
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *worker) gasprice(pct int64) *big.Int {
|
||||||
|
p := new(big.Int).Set(w.gasPrice)
|
||||||
|
p.Div(p, big.NewInt(100))
|
||||||
|
p.Mul(p, big.NewInt(pct))
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|
||||||
func (self *worker) commitNewWork() {
|
func (self *worker) commitNewWork() {
|
||||||
self.mu.Lock()
|
self.mu.Lock()
|
||||||
defer self.mu.Unlock()
|
defer self.mu.Unlock()
|
||||||
@ -259,9 +274,22 @@ func (self *worker) commitNewWork() {
|
|||||||
ignoredTransactors = set.New()
|
ignoredTransactors = set.New()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var pct int64 = 90
|
||||||
|
minprice := self.gasprice(pct)
|
||||||
for _, tx := range transactions {
|
for _, tx := range transactions {
|
||||||
// We can skip err. It has already been validated in the tx pool
|
// We can skip err. It has already been validated in the tx pool
|
||||||
from, _ := tx.From()
|
from, _ := tx.From()
|
||||||
|
|
||||||
|
// check if it falls within margin
|
||||||
|
if tx.GasPrice().Cmp(minprice) < 0 {
|
||||||
|
// ignore the transaction and transactor. We ignore the transactor
|
||||||
|
// because nonce will fail after ignoring this transaction so there's
|
||||||
|
// no point
|
||||||
|
ignoredTransactors.Add(from)
|
||||||
|
glog.V(logger.Info).Infof("transaction(%x) below gas price (<%d%% ask price). All sequential txs from this address(%x) will fail\n", tx.Hash().Bytes()[:4], pct, from[:4])
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
// Move on to the next transaction when the transactor is in ignored transactions set
|
// Move on to the next transaction when the transactor is in ignored transactions set
|
||||||
// This may occur when a transaction hits the gas limit. When a gas limit is hit and
|
// This may occur when a transaction hits the gas limit. When a gas limit is hit and
|
||||||
// the transaction is processed (that could potentially be included in the block) it
|
// the transaction is processed (that could potentially be included in the block) it
|
||||||
|
Loading…
Reference in New Issue
Block a user