From 11e65786d3ed2f395bf0422a31c49182699e234c Mon Sep 17 00:00:00 2001 From: tom <69969590+simlecode@users.noreply.github.com> Date: Fri, 23 Sep 2022 16:49:45 +0800 Subject: [PATCH] chore: Check for existing signers in add-propose (#5320) * chore: Check for existing signers in add-propose * chore: fix lint --- cmd/multisig.go | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/cmd/multisig.go b/cmd/multisig.go index e79ffc88a3..37f7914760 100644 --- a/cmd/multisig.go +++ b/cmd/multisig.go @@ -603,6 +603,40 @@ var msigAddProposeCmd = &cmds.Command{ if err != nil { return err } + + store := adt.WrapStore(ctx, cbor.NewCborStore(sbchain.NewAPIBlockstore(env.(*node.Env).BlockStoreAPI))) + + head, err := env.(*node.Env).ChainAPI.ChainHead(ctx) + if err != nil { + return err + } + + act, err := env.(*node.Env).ChainAPI.StateGetActor(ctx, msig, head.Key()) + if err != nil { + return err + } + + mstate, err := multisig.Load(store, act) + if err != nil { + return err + } + + signers, err := mstate.Signers() + if err != nil { + return err + } + + addrID, err := env.(*node.Env).ChainAPI.StateLookupID(ctx, addr, types.EmptyTSK) + if err != nil { + return err + } + + for _, s := range signers { + if s == addrID { + return fmt.Errorf("%s is already a signer", addr.String()) + } + } + msgCid, err := env.(*node.Env).MultiSigAPI.MsigAddPropose(ctx, msig, from, addr, reqBoolOption(req, "increase-threshold")) if err != nil { return err