miner: refactor getSealingBlock method (#27993)
This commit is contained in:
parent
feb8f416ac
commit
60ec41ce73
@ -175,10 +175,20 @@ func (w *worker) buildPayload(args *BuildPayloadArgs) (*Payload, error) {
|
|||||||
// Build the initial version with no transaction included. It should be fast
|
// Build the initial version with no transaction included. It should be fast
|
||||||
// enough to run. The empty payload can at least make sure there is something
|
// enough to run. The empty payload can at least make sure there is something
|
||||||
// to deliver for not missing slot.
|
// to deliver for not missing slot.
|
||||||
empty := w.getSealingBlock(args.Parent, args.Timestamp, args.FeeRecipient, args.Random, args.Withdrawals, true)
|
emptyParams := &generateParams{
|
||||||
|
timestamp: args.Timestamp,
|
||||||
|
forceTime: true,
|
||||||
|
parentHash: args.Parent,
|
||||||
|
coinbase: args.FeeRecipient,
|
||||||
|
random: args.Random,
|
||||||
|
withdrawals: args.Withdrawals,
|
||||||
|
noTxs: true,
|
||||||
|
}
|
||||||
|
empty := w.getSealingBlock(emptyParams)
|
||||||
if empty.err != nil {
|
if empty.err != nil {
|
||||||
return nil, empty.err
|
return nil, empty.err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Construct a payload object for return.
|
// Construct a payload object for return.
|
||||||
payload := newPayload(empty.block, args.Id())
|
payload := newPayload(empty.block, args.Id())
|
||||||
|
|
||||||
@ -195,11 +205,21 @@ func (w *worker) buildPayload(args *BuildPayloadArgs) (*Payload, error) {
|
|||||||
// by the timestamp parameter.
|
// by the timestamp parameter.
|
||||||
endTimer := time.NewTimer(time.Second * 12)
|
endTimer := time.NewTimer(time.Second * 12)
|
||||||
|
|
||||||
|
fullParams := &generateParams{
|
||||||
|
timestamp: args.Timestamp,
|
||||||
|
forceTime: true,
|
||||||
|
parentHash: args.Parent,
|
||||||
|
coinbase: args.FeeRecipient,
|
||||||
|
random: args.Random,
|
||||||
|
withdrawals: args.Withdrawals,
|
||||||
|
noTxs: false,
|
||||||
|
}
|
||||||
|
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-timer.C:
|
case <-timer.C:
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
r := w.getSealingBlock(args.Parent, args.Timestamp, args.FeeRecipient, args.Random, args.Withdrawals, false)
|
r := w.getSealingBlock(fullParams)
|
||||||
if r.err == nil {
|
if r.err == nil {
|
||||||
payload.update(r, time.Since(start))
|
payload.update(r, time.Since(start))
|
||||||
}
|
}
|
||||||
|
@ -1106,17 +1106,9 @@ func (w *worker) commit(env *environment, interval func(), update bool, start ti
|
|||||||
// getSealingBlock generates the sealing block based on the given parameters.
|
// getSealingBlock generates the sealing block based on the given parameters.
|
||||||
// The generation result will be passed back via the given channel no matter
|
// The generation result will be passed back via the given channel no matter
|
||||||
// the generation itself succeeds or not.
|
// the generation itself succeeds or not.
|
||||||
func (w *worker) getSealingBlock(parent common.Hash, timestamp uint64, coinbase common.Address, random common.Hash, withdrawals types.Withdrawals, noTxs bool) *newPayloadResult {
|
func (w *worker) getSealingBlock(params *generateParams) *newPayloadResult {
|
||||||
req := &getWorkReq{
|
req := &getWorkReq{
|
||||||
params: &generateParams{
|
params: params,
|
||||||
timestamp: timestamp,
|
|
||||||
forceTime: true,
|
|
||||||
parentHash: parent,
|
|
||||||
coinbase: coinbase,
|
|
||||||
random: random,
|
|
||||||
withdrawals: withdrawals,
|
|
||||||
noTxs: noTxs,
|
|
||||||
},
|
|
||||||
result: make(chan *newPayloadResult, 1),
|
result: make(chan *newPayloadResult, 1),
|
||||||
}
|
}
|
||||||
select {
|
select {
|
||||||
|
@ -452,7 +452,15 @@ func testGetSealingWork(t *testing.T, chainConfig *params.ChainConfig, engine co
|
|||||||
|
|
||||||
// This API should work even when the automatic sealing is not enabled
|
// This API should work even when the automatic sealing is not enabled
|
||||||
for _, c := range cases {
|
for _, c := range cases {
|
||||||
r := w.getSealingBlock(c.parent, timestamp, c.coinbase, c.random, nil, false)
|
r := w.getSealingBlock(&generateParams{
|
||||||
|
parentHash: c.parent,
|
||||||
|
timestamp: timestamp,
|
||||||
|
coinbase: c.coinbase,
|
||||||
|
random: c.random,
|
||||||
|
withdrawals: nil,
|
||||||
|
noTxs: false,
|
||||||
|
forceTime: true,
|
||||||
|
})
|
||||||
if c.expectErr {
|
if c.expectErr {
|
||||||
if r.err == nil {
|
if r.err == nil {
|
||||||
t.Error("Expect error but get nil")
|
t.Error("Expect error but get nil")
|
||||||
@ -468,7 +476,15 @@ func testGetSealingWork(t *testing.T, chainConfig *params.ChainConfig, engine co
|
|||||||
// This API should work even when the automatic sealing is enabled
|
// This API should work even when the automatic sealing is enabled
|
||||||
w.start()
|
w.start()
|
||||||
for _, c := range cases {
|
for _, c := range cases {
|
||||||
r := w.getSealingBlock(c.parent, timestamp, c.coinbase, c.random, nil, false)
|
r := w.getSealingBlock(&generateParams{
|
||||||
|
parentHash: c.parent,
|
||||||
|
timestamp: timestamp,
|
||||||
|
coinbase: c.coinbase,
|
||||||
|
random: c.random,
|
||||||
|
withdrawals: nil,
|
||||||
|
noTxs: false,
|
||||||
|
forceTime: true,
|
||||||
|
})
|
||||||
if c.expectErr {
|
if c.expectErr {
|
||||||
if r.err == nil {
|
if r.err == nil {
|
||||||
t.Error("Expect error but get nil")
|
t.Error("Expect error but get nil")
|
||||||
|
Loading…
Reference in New Issue
Block a user