Only try to resolve origin address during top-level invocation

This commit is contained in:
Aayush Rajasekaran 2020-03-23 04:17:45 -04:00 committed by Jeromy
parent 1c55c6afba
commit 05d43af3fc

View File

@ -191,15 +191,10 @@ type ApplyRet struct {
func (vm *VM) send(ctx context.Context, msg *types.Message, parent *Runtime, func (vm *VM) send(ctx context.Context, msg *types.Message, parent *Runtime,
gasCharge int64) ([]byte, aerrors.ActorError, *Runtime) { gasCharge int64) ([]byte, aerrors.ActorError, *Runtime) {
origin, aerr := ResolveToKeyAddr(vm.cstate, vm.cst, msg.From)
if aerr != nil {
return nil, aerr, nil
}
st := vm.cstate st := vm.cstate
gasUsed := gasCharge gasUsed := gasCharge
var origin address.Address
on := msg.Nonce on := msg.Nonce
var nac uint64 = 0 var nac uint64 = 0
if parent != nil { if parent != nil {
@ -207,6 +202,12 @@ func (vm *VM) send(ctx context.Context, msg *types.Message, parent *Runtime,
origin = parent.origin origin = parent.origin
on = parent.originNonce on = parent.originNonce
nac = parent.numActorsCreated nac = parent.numActorsCreated
} else {
var aerr aerrors.ActorError
origin, aerr = ResolveToKeyAddr(vm.cstate, vm.cst, msg.From)
if aerr != nil {
return nil, aerr, nil
}
} }
rt := vm.makeRuntime(ctx, msg, origin, on, gasUsed, nac) rt := vm.makeRuntime(ctx, msg, origin, on, gasUsed, nac)
if parent != nil { if parent != nil {
@ -234,7 +235,7 @@ func (vm *VM) send(ctx context.Context, msg *types.Message, parent *Runtime,
} }
} }
aerr = rt.chargeGasSafe(rt.Pricelist().OnMethodInvocation(msg.Value, msg.Method)) aerr := rt.chargeGasSafe(rt.Pricelist().OnMethodInvocation(msg.Value, msg.Method))
if aerr != nil { if aerr != nil {
return nil, aerr, rt return nil, aerr, rt
} }