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

Method Exec

executor/execenv.go:241–275  ·  view source on GitHub ↗

Exec base exec func

(tx *types.Transaction, index int)

Source from the content-addressed store, hash-verified

239
240// Exec base exec func
241func (e *executor) Exec(tx *types.Transaction, index int) (receipt *types.Receipt, err error) {
242 //针对一个交易执行阶段panic的处理,防止链停止,返回TyLogErr
243 defer func() {
244 if r := recover(); r != nil {
245 receipt = nil
246 err = types.ErrExecPanic
247 elog.Error("execTx.Exec", "index", index, "hash", common.ToHex(tx.Hash()), "err", r, "stack", GetStack())
248 return
249 }
250 }()
251
252 exec := e.loadDriver(tx, index)
253 //to 必须是一个地址
254 if err := drivers.CheckAddress(e.cfg, tx.GetRealToAddr(), e.height); err != nil {
255 return nil, err
256 }
257 if e.localDB != nil && e.cfg.IsFork(e.height, "ForkLocalDBAccess") {
258 e.localDB.(*LocalDB).DisableWrite()
259 if exec.ExecutorOrder() != drivers.ExecLocalSameTime {
260 e.localDB.(*LocalDB).DisableRead()
261 }
262 defer func() {
263 e.localDB.(*LocalDB).EnableWrite()
264 if exec.ExecutorOrder() != drivers.ExecLocalSameTime {
265 e.localDB.(*LocalDB).EnableRead()
266 }
267 }()
268 }
269 //第一步先检查 CheckTx
270 if err := exec.CheckTx(tx, index); err != nil {
271 return nil, err
272 }
273 r, err := exec.Exec(tx, index)
274 return r, err
275}
276
277func (e *executor) execLocal(tx *types.Transaction, r *types.ReceiptData, index int) (*types.LocalDBSet, error) {
278 exec := e.loadDriver(tx, index)

Callers 2

execTxOneMethod · 0.95
execTxMethod · 0.95

Calls 14

loadDriverMethod · 0.95
ToHexFunction · 0.92
GetStackFunction · 0.85
DisableWriteMethod · 0.80
DisableReadMethod · 0.80
EnableWriteMethod · 0.80
EnableReadMethod · 0.80
ErrorMethod · 0.65
HashMethod · 0.65
GetRealToAddrMethod · 0.65
IsForkMethod · 0.65
ExecutorOrderMethod · 0.65

Tested by

no test coverage detected