Skip to content

Commit

Permalink
improve the UX of multisig approves
Browse files Browse the repository at this point in the history
  • Loading branch information
whyrusleeping committed Oct 14, 2020
1 parent dfd6fbf commit 4bbb779
Showing 1 changed file with 72 additions and 52 deletions.
124 changes: 72 additions & 52 deletions cli/multisig.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (
"github.com/filecoin-project/go-state-types/abi"

"github.com/filecoin-project/go-address"
cid "github.com/ipfs/go-cid"
cbor "github.com/ipfs/go-ipld-cbor"
"github.com/urfave/cli/v2"
"golang.org/x/xerrors"
Expand All @@ -41,6 +42,13 @@ import (
var multisigCmd = &cli.Command{
Name: "msig",
Usage: "Interact with a multisig wallet",
Flags: []cli.Flag{
&cli.IntFlag{
Name: "confirmations",
Usage: "number of block confirmations to wait for",
Value: int(build.MessageConfidence),
},
},
Subcommands: []*cli.Command{
msigCreateCmd,
msigInspectCmd,
Expand Down Expand Up @@ -146,7 +154,7 @@ var msigCreateCmd = &cli.Command{
}

// wait for it to get mined into a block
wait, err := api.StateWaitMsg(ctx, msgCid, build.MessageConfidence)
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")))
if err != nil {
return err
}
Expand Down Expand Up @@ -410,7 +418,7 @@ var msigProposeCmd = &cli.Command{

fmt.Println("send proposal in message: ", msgCid)

wait, err := api.StateWaitMsg(ctx, msgCid, build.MessageConfidence)
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")))
if err != nil {
return err
}
Expand Down Expand Up @@ -446,14 +454,18 @@ var msigApproveCmd = &cli.Command{
},
},
Action: func(cctx *cli.Context) error {
if cctx.Args().Len() < 5 {
return ShowHelp(cctx, fmt.Errorf("must pass multisig address, message ID, proposer address, destination, and value"))
if cctx.Args().Len() < 2 {
return ShowHelp(cctx, fmt.Errorf("must pass at least multisig address and message ID"))
}

if cctx.Args().Len() > 5 && cctx.Args().Len() != 7 {
return ShowHelp(cctx, fmt.Errorf("usage: msig approve <msig addr> <message ID> <proposer address> <desination> <value> [ <method> <params> ]"))
}

if cctx.Args().Len() > 2 && cctx.Args().Len() != 5 {
return ShowHelp(cctx, fmt.Errorf("usage: msig approve <msig addr> <message ID> <proposer address> <desination> <value>"))
}

api, closer, err := GetFullNodeAPI(cctx)
if err != nil {
return err
Expand All @@ -471,67 +483,75 @@ var msigApproveCmd = &cli.Command{
return err
}

proposer, err := address.NewFromString(cctx.Args().Get(2))
if err != nil {
return err
}

if proposer.Protocol() != address.ID {
proposer, err = api.StateLookupID(ctx, proposer, types.EmptyTSK)
var from address.Address
if cctx.IsSet("from") {
f, err := address.NewFromString(cctx.String("from"))
if err != nil {
return err
}
from = f
} else {
defaddr, err := api.WalletDefaultAddress(ctx)
if err != nil {
return err
}
from = defaddr
}

dest, err := address.NewFromString(cctx.Args().Get(3))
if err != nil {
return err
}

value, err := types.ParseFIL(cctx.Args().Get(4))
if err != nil {
return err
}

var method uint64
var params []byte
if cctx.Args().Len() == 7 {
m, err := strconv.ParseUint(cctx.Args().Get(5), 10, 64)
var msgCid cid.Cid
if cctx.Args().Len() == 2 {
msgCid, err = api.MsigApprove(ctx, msig, txid, from)
if err != nil {
return err
}
method = m

p, err := hex.DecodeString(cctx.Args().Get(6))
} else {
proposer, err := address.NewFromString(cctx.Args().Get(2))
if err != nil {
return err
}
params = p
}

var from address.Address
if cctx.IsSet("from") {
f, err := address.NewFromString(cctx.String("from"))
if proposer.Protocol() != address.ID {
proposer, err = api.StateLookupID(ctx, proposer, types.EmptyTSK)
if err != nil {
return err
}
}

dest, err := address.NewFromString(cctx.Args().Get(3))
if err != nil {
return err
}
from = f
} else {
defaddr, err := api.WalletDefaultAddress(ctx)

value, err := types.ParseFIL(cctx.Args().Get(4))
if err != nil {
return err
}
from = defaddr
}

msgCid, err := api.MsigApproveTxnHash(ctx, msig, txid, proposer, dest, types.BigInt(value), from, method, params)
if err != nil {
return err
var method uint64
var params []byte
if cctx.Args().Len() == 7 {
m, err := strconv.ParseUint(cctx.Args().Get(5), 10, 64)
if err != nil {
return err
}
method = m

p, err := hex.DecodeString(cctx.Args().Get(6))
if err != nil {
return err
}
params = p
}

msgCid, err = api.MsigApproveTxnHash(ctx, msig, txid, proposer, dest, types.BigInt(value), from, method, params)
if err != nil {
return err
}
}

fmt.Println("sent approval in message: ", msgCid)

wait, err := api.StateWaitMsg(ctx, msgCid, build.MessageConfidence)
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")))
if err != nil {
return err
}
Expand Down Expand Up @@ -602,7 +622,7 @@ var msigRemoveProposeCmd = &cli.Command{

fmt.Println("sent remove proposal in message: ", msgCid)

wait, err := api.StateWaitMsg(ctx, msgCid, build.MessageConfidence)
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")))
if err != nil {
return err
}
Expand Down Expand Up @@ -680,7 +700,7 @@ var msigAddProposeCmd = &cli.Command{

fmt.Println("sent add proposal in message: ", msgCid)

wait, err := api.StateWaitMsg(ctx, msgCid, build.MessageConfidence)
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")))
if err != nil {
return err
}
Expand Down Expand Up @@ -762,7 +782,7 @@ var msigAddApproveCmd = &cli.Command{

fmt.Println("sent add approval in message: ", msgCid)

wait, err := api.StateWaitMsg(ctx, msgCid, build.MessageConfidence)
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")))
if err != nil {
return err
}
Expand Down Expand Up @@ -839,7 +859,7 @@ var msigAddCancelCmd = &cli.Command{

fmt.Println("sent add cancellation in message: ", msgCid)

wait, err := api.StateWaitMsg(ctx, msgCid, build.MessageConfidence)
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")))
if err != nil {
return err
}
Expand Down Expand Up @@ -911,7 +931,7 @@ var msigSwapProposeCmd = &cli.Command{

fmt.Println("sent swap proposal in message: ", msgCid)

wait, err := api.StateWaitMsg(ctx, msgCid, build.MessageConfidence)
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")))
if err != nil {
return err
}
Expand Down Expand Up @@ -993,7 +1013,7 @@ var msigSwapApproveCmd = &cli.Command{

fmt.Println("sent swap approval in message: ", msgCid)

wait, err := api.StateWaitMsg(ctx, msgCid, build.MessageConfidence)
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")))
if err != nil {
return err
}
Expand Down Expand Up @@ -1070,7 +1090,7 @@ var msigSwapCancelCmd = &cli.Command{

fmt.Println("sent swap cancellation in message: ", msgCid)

wait, err := api.StateWaitMsg(ctx, msgCid, build.MessageConfidence)
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")))
if err != nil {
return err
}
Expand Down Expand Up @@ -1157,7 +1177,7 @@ var msigLockProposeCmd = &cli.Command{

fmt.Println("sent lock proposal in message: ", msgCid)

wait, err := api.StateWaitMsg(ctx, msgCid, build.MessageConfidence)
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")))
if err != nil {
return err
}
Expand Down Expand Up @@ -1254,7 +1274,7 @@ var msigLockApproveCmd = &cli.Command{

fmt.Println("sent lock approval in message: ", msgCid)

wait, err := api.StateWaitMsg(ctx, msgCid, build.MessageConfidence)
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")))
if err != nil {
return err
}
Expand Down Expand Up @@ -1346,7 +1366,7 @@ var msigLockCancelCmd = &cli.Command{

fmt.Println("sent lock cancellation in message: ", msgCid)

wait, err := api.StateWaitMsg(ctx, msgCid, build.MessageConfidence)
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")))
if err != nil {
return err
}
Expand Down

0 comments on commit 4bbb779

Please sign in to comment.