MCPcopy Create free account
hub / github.com/33cn/chain33 / procExecDelBlock

Method procExecDelBlock

executor/executor.go:482–572  ·  view source on GitHub ↗
(msg *queue.Message)

Source from the content-addressed store, hash-verified

480}
481
482func (exec *Executor) procExecDelBlock(msg *queue.Message) {
483 //panic 处理
484 defer func() {
485 if r := recover(); r != nil {
486 elog.Error("del blk panic error", "err", r)
487 msg.Reply(exec.client.NewMessage("", types.EventReceipts, types.ErrExecPanic))
488 return
489 }
490 }()
491 datas := msg.GetData().(*types.BlockDetail)
492 b := datas.Block
493 ctx := &executorCtx{
494 stateHash: b.StateHash,
495 height: b.Height,
496 blocktime: b.BlockTime,
497 difficulty: uint64(b.Difficulty),
498 mainHash: b.MainHash,
499 mainHeight: b.MainHeight,
500 parentHash: b.ParentHash,
501 }
502 var localdb dbm.KVDB
503 if !exec.disableLocal {
504 localdb = NewLocalDB(exec.client, exec.qclient, false)
505 defer localdb.(*LocalDB).Close()
506 }
507 execute := newExecutor(ctx, exec, localdb, b.Txs, nil)
508 execute.enableMVCC(nil)
509 var kvset types.LocalDBSet
510 for _, kv := range datas.KV {
511 err := execute.stateDB.Set(kv.Key, kv.Value)
512 if err != nil {
513 panic(err)
514 }
515 }
516 for name, plugin := range globalPlugins {
517 kvs, ok, err := plugin.CheckEnable(execute, exec.pluginEnable[name])
518 if err != nil {
519 panic(err)
520 }
521 if !ok {
522 continue
523 }
524 if len(kvs) > 0 {
525 kvset.KV = append(kvset.KV, kvs...)
526 }
527 kvs, err = plugin.ExecDelLocal(execute, datas)
528 if err != nil {
529 msg.Reply(exec.client.NewMessage("", types.EventAddBlock, err))
530 return
531 }
532 if len(kvs) > 0 {
533 kvset.KV = append(kvset.KV, kvs...)
534 }
535 }
536 if !exec.disableExecLocal {
537 for i := len(b.Txs) - 1; i >= 0; i-- {
538 tx := b.Txs[i]
539 //先检查是否是代理交易

Callers 1

SetQueueClientMethod · 0.95

Calls 15

newExecutorFunction · 0.85
checkProxyExecTxMethod · 0.80
proxyExecTxMethod · 0.80
execDelLocalMethod · 0.80
checkPrefixMethod · 0.80
NewLocalDBFunction · 0.70
ErrorMethod · 0.65
ReplyMethod · 0.65
NewMessageMethod · 0.65
GetDataMethod · 0.65
CloseMethod · 0.65
SetMethod · 0.65

Tested by

no test coverage detected