Merge pull request #8706 from filecoin-project/fix/8636
fix: vm: always set the root message in execution traces in the FVM
This commit is contained in:
commit
c07c87c131
@ -309,7 +309,8 @@ func NewFVM(ctx context.Context, opts *VMOpts) (*FVM, error) {
|
||||
|
||||
func (vm *FVM) ApplyMessage(ctx context.Context, cmsg types.ChainMsg) (*ApplyRet, error) {
|
||||
start := build.Clock.Now()
|
||||
msgBytes, err := cmsg.VMMessage().Serialize()
|
||||
vmMsg := cmsg.VMMessage()
|
||||
msgBytes, err := vmMsg.Serialize()
|
||||
if err != nil {
|
||||
return nil, xerrors.Errorf("serializing msg: %w", err)
|
||||
}
|
||||
@ -319,11 +320,11 @@ func (vm *FVM) ApplyMessage(ctx context.Context, cmsg types.ChainMsg) (*ApplyRet
|
||||
return nil, xerrors.Errorf("applying msg: %w", err)
|
||||
}
|
||||
|
||||
var et FvmExecutionTrace
|
||||
if len(ret.ExecTraceBytes) != 0 {
|
||||
if err = et.UnmarshalCBOR(bytes.NewReader(ret.ExecTraceBytes)); err != nil {
|
||||
return nil, xerrors.Errorf("failed to unmarshal exectrace: %w", err)
|
||||
}
|
||||
duration := time.Since(start)
|
||||
receipt := types.MessageReceipt{
|
||||
Return: ret.Return,
|
||||
ExitCode: exitcode.ExitCode(ret.ExitCode),
|
||||
GasUsed: ret.GasUsed,
|
||||
}
|
||||
|
||||
var aerr aerrors.ActorError
|
||||
@ -335,12 +336,24 @@ func (vm *FVM) ApplyMessage(ctx context.Context, cmsg types.ChainMsg) (*ApplyRet
|
||||
aerr = aerrors.New(exitcode.ExitCode(ret.ExitCode), amsg)
|
||||
}
|
||||
|
||||
var et types.ExecutionTrace
|
||||
if len(ret.ExecTraceBytes) != 0 {
|
||||
var fvmEt FvmExecutionTrace
|
||||
if err = fvmEt.UnmarshalCBOR(bytes.NewReader(ret.ExecTraceBytes)); err != nil {
|
||||
return nil, xerrors.Errorf("failed to unmarshal exectrace: %w", err)
|
||||
}
|
||||
et = fvmEt.ToExecutionTrace()
|
||||
} else {
|
||||
et.Msg = vmMsg
|
||||
et.MsgRct = &receipt
|
||||
et.Duration = duration
|
||||
if aerr != nil {
|
||||
et.Error = aerr.Error()
|
||||
}
|
||||
}
|
||||
|
||||
return &ApplyRet{
|
||||
MessageReceipt: types.MessageReceipt{
|
||||
Return: ret.Return,
|
||||
ExitCode: exitcode.ExitCode(ret.ExitCode),
|
||||
GasUsed: ret.GasUsed,
|
||||
},
|
||||
MessageReceipt: receipt,
|
||||
GasCosts: &GasOutputs{
|
||||
BaseFeeBurn: ret.BaseFeeBurn,
|
||||
OverEstimationBurn: ret.OverEstimationBurn,
|
||||
@ -351,14 +364,15 @@ func (vm *FVM) ApplyMessage(ctx context.Context, cmsg types.ChainMsg) (*ApplyRet
|
||||
GasBurned: ret.GasBurned,
|
||||
},
|
||||
ActorErr: aerr,
|
||||
ExecutionTrace: et.ToExecutionTrace(),
|
||||
Duration: time.Since(start),
|
||||
ExecutionTrace: et,
|
||||
Duration: duration,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (vm *FVM) ApplyImplicitMessage(ctx context.Context, cmsg *types.Message) (*ApplyRet, error) {
|
||||
start := build.Clock.Now()
|
||||
msgBytes, err := cmsg.VMMessage().Serialize()
|
||||
vmMsg := cmsg.VMMessage()
|
||||
msgBytes, err := vmMsg.Serialize()
|
||||
if err != nil {
|
||||
return nil, xerrors.Errorf("serializing msg: %w", err)
|
||||
}
|
||||
@ -367,11 +381,11 @@ func (vm *FVM) ApplyImplicitMessage(ctx context.Context, cmsg *types.Message) (*
|
||||
return nil, xerrors.Errorf("applying msg: %w", err)
|
||||
}
|
||||
|
||||
var et FvmExecutionTrace
|
||||
if len(ret.ExecTraceBytes) != 0 {
|
||||
if err = et.UnmarshalCBOR(bytes.NewReader(ret.ExecTraceBytes)); err != nil {
|
||||
return nil, xerrors.Errorf("failed to unmarshal exectrace: %w", err)
|
||||
}
|
||||
duration := time.Since(start)
|
||||
receipt := types.MessageReceipt{
|
||||
Return: ret.Return,
|
||||
ExitCode: exitcode.ExitCode(ret.ExitCode),
|
||||
GasUsed: ret.GasUsed,
|
||||
}
|
||||
|
||||
var aerr aerrors.ActorError
|
||||
@ -383,15 +397,27 @@ func (vm *FVM) ApplyImplicitMessage(ctx context.Context, cmsg *types.Message) (*
|
||||
aerr = aerrors.New(exitcode.ExitCode(ret.ExitCode), amsg)
|
||||
}
|
||||
|
||||
var et types.ExecutionTrace
|
||||
if len(ret.ExecTraceBytes) != 0 {
|
||||
var fvmEt FvmExecutionTrace
|
||||
if err = fvmEt.UnmarshalCBOR(bytes.NewReader(ret.ExecTraceBytes)); err != nil {
|
||||
return nil, xerrors.Errorf("failed to unmarshal exectrace: %w", err)
|
||||
}
|
||||
et = fvmEt.ToExecutionTrace()
|
||||
} else {
|
||||
et.Msg = vmMsg
|
||||
et.MsgRct = &receipt
|
||||
et.Duration = duration
|
||||
if aerr != nil {
|
||||
et.Error = aerr.Error()
|
||||
}
|
||||
}
|
||||
|
||||
return &ApplyRet{
|
||||
MessageReceipt: types.MessageReceipt{
|
||||
Return: ret.Return,
|
||||
ExitCode: exitcode.ExitCode(ret.ExitCode),
|
||||
GasUsed: ret.GasUsed,
|
||||
},
|
||||
MessageReceipt: receipt,
|
||||
ActorErr: aerr,
|
||||
ExecutionTrace: et.ToExecutionTrace(),
|
||||
Duration: time.Since(start),
|
||||
ExecutionTrace: et,
|
||||
Duration: duration,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user