diff --git a/core/kernel/kernel.go b/core/kernel/kernel.go index 38be55de..1416bb33 100644 --- a/core/kernel/kernel.go +++ b/core/kernel/kernel.go @@ -9,6 +9,7 @@ import ( . "github.com/yu-org/yu/core/tripod/dev" . "github.com/yu-org/yu/core/types" . "github.com/yu-org/yu/utils/ip" + "go.uber.org/atomic" "sync" ) @@ -17,6 +18,8 @@ type Kernel struct { RunMode RunMode + pendingBlock atomic.Pointer[Block] + stopChan chan struct{} httpPort string @@ -44,6 +47,7 @@ func NewKernel( } env.Execute = k.OrderedExecute + k.pendingBlock.Store(nil) // Configure the handlers in P2P network diff --git a/core/kernel/run.go b/core/kernel/run.go index 7e6e1e7b..28d114a6 100644 --- a/core/kernel/run.go +++ b/core/kernel/run.go @@ -48,12 +48,18 @@ func (k *Kernel) Run() { } +func (k *Kernel) GetPendingBlock() *Block { + return k.pendingBlock.Load() +} + func (k *Kernel) LocalRun() (err error) { newBlock, err := k.makeNewBasicBlock() if err != nil { return err } + k.pendingBlock.Store(newBlock) + // start a new block err = k.land.RangeList(func(tri *Tripod) error { tri.BlockCycle.StartBlock(newBlock)