eth, miner: removed unnecessary state.Copy()
* miner: removed unnecessary state.Copy() * eth: made use of new miner method without state copying * miner: More documentation about new method
This commit is contained in:
parent
3363a1c227
commit
9f8bc00cf5
@ -56,7 +56,7 @@ func (b *EthApiBackend) SetHead(number uint64) {
|
|||||||
func (b *EthApiBackend) HeaderByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*types.Header, error) {
|
func (b *EthApiBackend) HeaderByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*types.Header, error) {
|
||||||
// Pending block is only known by the miner
|
// Pending block is only known by the miner
|
||||||
if blockNr == rpc.PendingBlockNumber {
|
if blockNr == rpc.PendingBlockNumber {
|
||||||
block, _ := b.eth.miner.Pending()
|
block := b.eth.miner.PendingBlock()
|
||||||
return block.Header(), nil
|
return block.Header(), nil
|
||||||
}
|
}
|
||||||
// Otherwise resolve and return the block
|
// Otherwise resolve and return the block
|
||||||
@ -69,7 +69,7 @@ func (b *EthApiBackend) HeaderByNumber(ctx context.Context, blockNr rpc.BlockNum
|
|||||||
func (b *EthApiBackend) BlockByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*types.Block, error) {
|
func (b *EthApiBackend) BlockByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*types.Block, error) {
|
||||||
// Pending block is only known by the miner
|
// Pending block is only known by the miner
|
||||||
if blockNr == rpc.PendingBlockNumber {
|
if blockNr == rpc.PendingBlockNumber {
|
||||||
block, _ := b.eth.miner.Pending()
|
block := b.eth.miner.PendingBlock()
|
||||||
return block, nil
|
return block, nil
|
||||||
}
|
}
|
||||||
// Otherwise resolve and return the block
|
// Otherwise resolve and return the block
|
||||||
|
@ -187,6 +187,15 @@ func (self *Miner) Pending() (*types.Block, *state.StateDB) {
|
|||||||
return self.worker.pending()
|
return self.worker.pending()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PendingBlock returns the currently pending block.
|
||||||
|
//
|
||||||
|
// Note, to access both the pending block and the pending state
|
||||||
|
// simultaneously, please use Pending(), as the pending state can
|
||||||
|
// change between multiple method calls
|
||||||
|
func (self *Miner) PendingBlock() *types.Block {
|
||||||
|
return self.worker.pendingBlock()
|
||||||
|
}
|
||||||
|
|
||||||
func (self *Miner) SetEtherbase(addr common.Address) {
|
func (self *Miner) SetEtherbase(addr common.Address) {
|
||||||
self.coinbase = addr
|
self.coinbase = addr
|
||||||
self.worker.setEtherbase(addr)
|
self.worker.setEtherbase(addr)
|
||||||
|
@ -176,6 +176,21 @@ func (self *worker) pending() (*types.Block, *state.StateDB) {
|
|||||||
return self.current.Block, self.current.state.Copy()
|
return self.current.Block, self.current.state.Copy()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (self *worker) pendingBlock() *types.Block {
|
||||||
|
self.currentMu.Lock()
|
||||||
|
defer self.currentMu.Unlock()
|
||||||
|
|
||||||
|
if atomic.LoadInt32(&self.mining) == 0 {
|
||||||
|
return types.NewBlock(
|
||||||
|
self.current.header,
|
||||||
|
self.current.txs,
|
||||||
|
nil,
|
||||||
|
self.current.receipts,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return self.current.Block
|
||||||
|
}
|
||||||
|
|
||||||
func (self *worker) start() {
|
func (self *worker) start() {
|
||||||
self.mu.Lock()
|
self.mu.Lock()
|
||||||
defer self.mu.Unlock()
|
defer self.mu.Unlock()
|
||||||
|
Loading…
Reference in New Issue
Block a user