Migrate multisig actor

This commit is contained in:
Aayush Rajasekaran 2020-09-17 02:50:59 -04:00
parent b60614982e
commit e2295c372a
6 changed files with 40 additions and 22 deletions

View File

@ -28,4 +28,7 @@ type State interface {
cbor.Marshaler
LockedBalance(epoch abi.ChainEpoch) (abi.TokenAmount, error)
StartEpoch() abi.ChainEpoch
UnlockDuration() abi.ChainEpoch
InitialBalance() abi.TokenAmount
}

View File

@ -12,5 +12,17 @@ type v0State struct {
}
func (s *v0State) LockedBalance(currEpoch abi.ChainEpoch) (abi.TokenAmount, error) {
return s.State.AmountLocked(currEpoch - s.StartEpoch), nil
return s.State.AmountLocked(currEpoch - s.State.StartEpoch), nil
}
func (s *v0State) StartEpoch() abi.ChainEpoch {
return s.State.StartEpoch
}
func (s *v0State) UnlockDuration() abi.ChainEpoch {
return s.State.UnlockDuration
}
func (s *v0State) InitialBalance() abi.TokenAmount {
return s.State.InitialBalance
}

View File

@ -5,6 +5,10 @@ import (
"fmt"
"sync"
v0msig "github.com/filecoin-project/specs-actors/actors/builtin/multisig"
"github.com/filecoin-project/lotus/chain/actors/builtin/multisig"
"github.com/filecoin-project/lotus/chain/actors/builtin/reward"
"github.com/ipfs/go-cid"
@ -19,7 +23,6 @@ import (
"github.com/filecoin-project/go-state-types/big"
"github.com/filecoin-project/go-state-types/network"
"github.com/filecoin-project/specs-actors/actors/builtin"
"github.com/filecoin-project/specs-actors/actors/builtin/multisig"
v0reward "github.com/filecoin-project/specs-actors/actors/builtin/reward"
"github.com/filecoin-project/specs-actors/actors/util/adt"
@ -793,7 +796,7 @@ func (sm *StateManager) SetVMConstructor(nvm func(context.Context, *vm.VMOpts) (
}
type genesisInfo struct {
genesisMsigs []multisig.State
genesisMsigs []v0msig.State
// info about the Accounts in the genesis state
genesisActors []genesisActor
genesisPledge abi.TokenAmount
@ -856,15 +859,15 @@ func (sm *StateManager) setupGenesisActors(ctx context.Context) error {
return err
}
if s.StartEpoch != 0 {
if s.StartEpoch() != 0 {
return xerrors.New("genesis multisig doesn't start vesting at epoch 0!")
}
ot, f := totalsByEpoch[s.UnlockDuration]
ot, f := totalsByEpoch[s.UnlockDuration()]
if f {
totalsByEpoch[s.UnlockDuration] = big.Add(ot, s.InitialBalance)
totalsByEpoch[s.UnlockDuration()] = big.Add(ot, s.InitialBalance())
} else {
totalsByEpoch[s.UnlockDuration] = s.InitialBalance
totalsByEpoch[s.UnlockDuration()] = s.InitialBalance()
}
} else if act.Code == builtin.AccountActorCodeID {
@ -894,9 +897,9 @@ func (sm *StateManager) setupGenesisActors(ctx context.Context) error {
return xerrors.Errorf("error setting up genesis infos: %w", err)
}
gi.genesisMsigs = make([]multisig.State, 0, len(totalsByEpoch))
gi.genesisMsigs = make([]v0msig.State, 0, len(totalsByEpoch))
for k, v := range totalsByEpoch {
ns := multisig.State{
ns := v0msig.State{
InitialBalance: v,
UnlockDuration: k,
PendingTxns: cid.Undef,
@ -971,9 +974,9 @@ func (sm *StateManager) setupGenesisActorsTestnet(ctx context.Context) error {
totalsByEpoch[sixYears] = big.NewInt(100_000_000)
totalsByEpoch[sixYears] = big.Add(totalsByEpoch[sixYears], big.NewInt(300_000_000))
gi.genesisMsigs = make([]multisig.State, 0, len(totalsByEpoch))
gi.genesisMsigs = make([]v0msig.State, 0, len(totalsByEpoch))
for k, v := range totalsByEpoch {
ns := multisig.State{
ns := v0msig.State{
InitialBalance: v,
UnlockDuration: k,
PendingTxns: cid.Undef,

View File

@ -27,7 +27,7 @@ import (
"github.com/filecoin-project/specs-actors/actors/builtin"
"github.com/filecoin-project/specs-actors/actors/builtin/account"
"github.com/filecoin-project/specs-actors/actors/builtin/cron"
"github.com/filecoin-project/specs-actors/actors/builtin/multisig"
v0msig "github.com/filecoin-project/specs-actors/actors/builtin/multisig"
"github.com/filecoin-project/specs-actors/actors/builtin/paych"
v0reward "github.com/filecoin-project/specs-actors/actors/builtin/reward"
"github.com/filecoin-project/specs-actors/actors/builtin/verifreg"
@ -554,7 +554,7 @@ func init() {
builtin.StorageMinerActorCodeID: {builtin.MethodsMiner, miner.Actor{}},
builtin.StorageMarketActorCodeID: {builtin.MethodsMarket, market.Actor{}},
builtin.PaymentChannelActorCodeID: {builtin.MethodsPaych, paych.Actor{}},
builtin.MultisigActorCodeID: {builtin.MethodsMultisig, multisig.Actor{}},
builtin.MultisigActorCodeID: {builtin.MethodsMultisig, v0msig.Actor{}},
builtin.RewardActorCodeID: {builtin.MethodsReward, v0reward.Actor{}},
builtin.VerifiedRegistryActorCodeID: {builtin.MethodsVerifiedRegistry, verifreg.Actor{}},
}

View File

@ -21,7 +21,7 @@ import (
init_ "github.com/filecoin-project/specs-actors/actors/builtin/init"
"github.com/filecoin-project/specs-actors/actors/builtin/market"
v0miner "github.com/filecoin-project/specs-actors/actors/builtin/miner"
"github.com/filecoin-project/specs-actors/actors/builtin/multisig"
v0msig "github.com/filecoin-project/specs-actors/actors/builtin/multisig"
"github.com/filecoin-project/specs-actors/actors/builtin/paych"
v0power "github.com/filecoin-project/specs-actors/actors/builtin/power"
v0reward "github.com/filecoin-project/specs-actors/actors/builtin/reward"
@ -53,7 +53,7 @@ func NewInvoker() *Invoker {
inv.Register(builtin.StoragePowerActorCodeID, v0power.Actor{}, v0power.State{})
inv.Register(builtin.StorageMarketActorCodeID, market.Actor{}, market.State{})
inv.Register(builtin.StorageMinerActorCodeID, v0miner.Actor{}, v0miner.State{})
inv.Register(builtin.MultisigActorCodeID, multisig.Actor{}, multisig.State{})
inv.Register(builtin.MultisigActorCodeID, v0msig.Actor{}, v0msig.State{})
inv.Register(builtin.PaymentChannelActorCodeID, paych.Actor{}, paych.State{})
inv.Register(builtin.VerifiedRegistryActorCodeID, verifreg.Actor{}, verifreg.State{})
inv.Register(builtin.AccountActorCodeID, account.Actor{}, account.State{})

View File

@ -17,7 +17,7 @@ import (
"github.com/filecoin-project/go-address"
init_ "github.com/filecoin-project/specs-actors/actors/builtin/init"
samsig "github.com/filecoin-project/specs-actors/actors/builtin/multisig"
v0msig "github.com/filecoin-project/specs-actors/actors/builtin/multisig"
cid "github.com/ipfs/go-cid"
cbor "github.com/ipfs/go-ipld-cbor"
"github.com/urfave/cli/v2"
@ -199,7 +199,7 @@ var msigInspectCmd = &cli.Command{
return err
}
var mstate samsig.State
var mstate v0msig.State
if err := mstate.UnmarshalCBOR(bytes.NewReader(obj)); err != nil {
return err
}
@ -251,7 +251,7 @@ var msigInspectCmd = &cli.Command{
},
}
func GetMultisigPending(ctx context.Context, lapi api.FullNode, hroot cid.Cid) (map[int64]*samsig.Transaction, error) {
func GetMultisigPending(ctx context.Context, lapi api.FullNode, hroot cid.Cid) (map[int64]*v0msig.Transaction, error) {
bs := apibstore.NewAPIBlockstore(lapi)
store := adt.WrapStore(ctx, cbor.NewCborStore(bs))
@ -260,8 +260,8 @@ func GetMultisigPending(ctx context.Context, lapi api.FullNode, hroot cid.Cid) (
return nil, err
}
txs := make(map[int64]*samsig.Transaction)
var tx samsig.Transaction
txs := make(map[int64]*v0msig.Transaction)
var tx v0msig.Transaction
err = nd.ForEach(&tx, func(k string) error {
txid, _ := binary.Varint([]byte(k))
@ -276,7 +276,7 @@ func GetMultisigPending(ctx context.Context, lapi api.FullNode, hroot cid.Cid) (
return txs, nil
}
func state(tx *samsig.Transaction) string {
func state(tx *v0msig.Transaction) string {
/* // TODO(why): I strongly disagree with not having these... but i need to move forward
if tx.Complete {
return "done"
@ -385,7 +385,7 @@ var msigProposeCmd = &cli.Command{
return fmt.Errorf("proposal returned exit %d", wait.Receipt.ExitCode)
}
var retval samsig.ProposeReturn
var retval v0msig.ProposeReturn
if err := retval.UnmarshalCBOR(bytes.NewReader(wait.Receipt.Return)); err != nil {
return fmt.Errorf("failed to unmarshal propose return value: %w", err)
}