From 7aee10124f1427b6458f1c0842deb9141908d597 Mon Sep 17 00:00:00 2001 From: Alex North <445306+anorth@users.noreply.github.com> Date: Tue, 28 Apr 2020 10:32:31 +1000 Subject: [PATCH] Power actor CreateMiner passes on value received to new actor (#327) --- actors/builtin/power/power_actor.go | 4 ++-- actors/builtin/power/power_test.go | 14 ++++++++------ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/actors/builtin/power/power_actor.go b/actors/builtin/power/power_actor.go index a5d47ecd4..f25adef5c 100644 --- a/actors/builtin/power/power_actor.go +++ b/actors/builtin/power/power_actor.go @@ -91,7 +91,7 @@ type CreateMinerParams struct { type CreateMinerReturn struct { IDAddress addr.Address // The canonical ID-based address for the actor. - RobustAddress addr.Address // A mre expensive but re-org-safe address for the newly created actor. + RobustAddress addr.Address // A more expensive but re-org-safe address for the newly created actor. } func (a Actor) CreateMiner(rt Runtime, params *CreateMinerParams) *CreateMinerReturn { @@ -115,7 +115,7 @@ func (a Actor) CreateMiner(rt Runtime, params *CreateMinerParams) *CreateMinerRe CodeCID: builtin.StorageMinerActorCodeID, ConstructorParams: ctorParamBuf.Bytes(), }, - abi.NewTokenAmount(0), + rt.Message().ValueReceived(), // Pass on any value to the new actor. ) builtin.RequireSuccess(rt, code, "failed to init new actor") var addresses initact.ExecReturn diff --git a/actors/builtin/power/power_test.go b/actors/builtin/power/power_test.go index 96ba913ac..83a0c615d 100644 --- a/actors/builtin/power/power_test.go +++ b/actors/builtin/power/power_test.go @@ -23,6 +23,8 @@ import ( tutil "github.com/filecoin-project/specs-actors/support/testing" ) +const sectorSize = abi.SectorSize(2048) + func TestExports(t *testing.T) { mock.CheckActorExports(t, power.Actor{}) } @@ -44,9 +46,7 @@ func TestConstruction(t *testing.T) { rt := builder.Build(t) actor.constructAndVerify(rt) - actor.createMiner(rt, owner, owner, miner, actr, "miner", abi.SectorSize(int64(32))) - - rt.Verify() + actor.createMiner(rt, owner, owner, miner, actr, "miner", sectorSize, abi.NewTokenAmount(10)) var st power.State rt.GetState(&st) @@ -193,7 +193,8 @@ func (h *spActorHarness) constructAndVerify(rt *mock.Runtime) { verifyEmptyMap(h.t, rt, st.CronEventQueue) } -func (h *spActorHarness) createMiner(rt *mock.Runtime, owner, worker, miner, robust addr.Address, peer peer.ID, sectorSize abi.SectorSize) { +func (h *spActorHarness) createMiner(rt *mock.Runtime, owner, worker, miner, robust addr.Address, peer peer.ID, + sectorSize abi.SectorSize, value abi.TokenAmount) { createMinerParams := &power.CreateMinerParams{ Owner: owner, Worker: worker, @@ -203,7 +204,8 @@ func (h *spActorHarness) createMiner(rt *mock.Runtime, owner, worker, miner, rob // owner send CreateMiner to Actor rt.SetCaller(owner, builtin.AccountActorCodeID) - rt.SetReceived(abi.NewTokenAmount(1)) + rt.SetReceived(value) + rt.SetBalance(value) rt.ExpectValidateCallerType(builtin.AccountActorCodeID, builtin.MultisigActorCodeID) createMinerRet := &power.CreateMinerReturn{ @@ -215,7 +217,7 @@ func (h *spActorHarness) createMiner(rt *mock.Runtime, owner, worker, miner, rob CodeCID: builtin.StorageMinerActorCodeID, ConstructorParams: initCreateMinerBytes(h.t, owner, worker, peer, sectorSize), } - rt.ExpectSend(builtin.InitActorAddr, builtin.MethodsInit.Exec, msgParams, big.Zero(), createMinerRet, 0) + rt.ExpectSend(builtin.InitActorAddr, builtin.MethodsInit.Exec, msgParams, value, createMinerRet, 0) rt.Call(h.Actor.CreateMiner, createMinerParams) rt.Verify() }