Giter Club home page Giter Club logo

multisig's People

Contributors

andynog avatar ebuchman avatar glnro avatar greg-szabo avatar mircea-c avatar oldremez avatar sryps avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

multisig's Issues

Tx push fails for an unsigned.json generated for a vote tx

Command:

multisig tx push unsigned.json osmosis key-local

unsigned.json:

{"body":{"messages":[{"@type":"/cosmos.gov.v1beta1.MsgVote","proposal_id":"1","voter":"osmo1...,"option":"VOTE_OPTION_YES"}],"memo":"","timeout_height":"0","extension_options":[],"non_critical_extension_options":[]},"auth_info":{"signer_infos":[],"fee":{"amount":[],"gas_limit":"350000","payer":"","granter":""}},"signatures":[]}

Error:

panic: interface conversion: interface {} is nil, not []interface {}

goroutine 1 [running]:
main.parseDenomFromJson({0xc0002c6800, 0x16e, 0x200})
	/home/andy/go/src/github.com/informalsystems/multisig/util.go:114 +0x1c5
main.cmdPush(0x10693e0?, {0xc0002d4420?, 0x3?, 0x3?})
	/home/andy/go/src/github.com/informalsystems/multisig/main.go:342 +0xe8
github.com/spf13/cobra.(*Command).execute(0x10693e0, {0xc0002d43f0, 0x3, 0x3})
	/home/andy/go/pkg/mod/github.com/spf13/[email protected]/command.go:852 +0x67c
github.com/spf13/cobra.(*Command).ExecuteC(0x10675e0)
	/home/andy/go/pkg/mod/github.com/spf13/[email protected]/command.go:960 +0x39c
github.com/spf13/cobra.(*Command).Execute(...)
	/home/andy/go/pkg/mod/github.com/spf13/[email protected]/command.go:897
main.main()
	/home/andy/go/src/github.com/informalsystems/multisig/main.go:45 +0x25

It seems that the logic to parse the denom from the unsigned.json is failing.

Show a better output for `multisig list` command

Currently when executing the multisig list command, the output only displays the folders and files uploaded to S3. A better output would be a table with some details about the transactions, this could even leverage the description parameter that was added in the tool.

error when broadcasting a message

When broadcasting a {"body":{"messages":[{"@type":"/cosmos.staking.v1beta1.MsgDelegate"... on Akash got the error

Error: error unmarshalling result: unknown field "mempoolError" in types.ResponseCheckTx

multisig sign -k does not read config.toml

multisig broadcast states:

 -k, --key string    name of the local multisig key name, flag overrides the config

config.toml states:

[[keys]]
# 2/4 (af,eb,gs,mc), ceph val oper standard
name = "ceph-main"
localname = "cec_2of4_multisig"
address = "ixo1x20lytyf6zkcrv5edpkfkn8sz578qg5s2g53ty"

If I run multisig sign without -k it fails but if I run it with -k cec_2of4_multisig it succeeds. I believe -k should get the data from the localname config if it is not defined.

Command to undelegate from validators

Have a command that you can undelegate from a validator and also with the option --all that generate multiple transactions each with around 5 messages (one message per validator).

broacast on an empty [chain]/[key] outputs the wrong error message

Tried to broadcast a tx but the path is empty on S3, instead of error saying files are not there, got a message saying needed signatures. It would make more sense show the right reason why it failed to broadcast (no files).

Got this error:

$ multisig broadcast cosmos ceph-cosmos
Error: Insufficient signatures for broadcast. Requires 2, got 0

But reason is fails is this:

$ multisig raw cat cosmos ceph-cosmos
No files in cosmos/ceph-cosmos

Use the `chain-id` value from the chain

Re-evaluate the need to have the chain-id in the config. A better approach would be to retrieve it from the chain itself like the account number and sequence. Had an issue that the chain had upgraded and the id had changed but the config had the old id.

Or at least check the local chain-id value against the real value from chain and prevent a transaction to be pushed if they differ (but then if you need to retrieve the remote chain-id what is the value of having a local config of that?).

App panic on user

Michael's push panicked:

multisig tx push ../Downloads/unsigned4.json cosmos icf-fc
panic: interface conversion: interface {} is nil, not []interface {}
goroutine 1 [running]:
main.parseDenomFromJson(0xc0000d4900, 0x699, 0x899, 0x0, 0x0, 0x0, 0x0)
	/Users/niedm/multisig/util.go:114 +0x286
main.cmdPush(0x1cd8100, 0xc0002b23c0, 0x3, 0x3, 0x0, 0x0)
	/Users/niedm/multisig/main.go:342 +0x145
[github.com/spf13/cobra.(*Command).execute(0x1cd8100](http://github.com/spf13/cobra.(*Command).execute(0x1cd8100), 0xc0002b2390, 0x3, 0x3, 0x1cd8100, 0xc0002b2390)
	/Users/niedm/goApps/pkg/mod/github.com/spf13/[email protected]/command.go:852 +0x47c
[github.com/spf13/cobra.(*Command).ExecuteC(0x1cd7480](http://github.com/spf13/cobra.(*Command).ExecuteC(0x1cd7480), 0x0, 0x0, 0x0)
	/Users/niedm/goApps/pkg/mod/github.com/spf13/[email protected]/command.go:960 +0x375
[github.com/spf13/cobra.(*Command).Execute(...)](http://github.com/spf13/cobra.(*Command).Execute(...))
	/Users/niedm/goApps/pkg/mod/github.com/spf13/[email protected]/command.go:897
main.main()
	/Users/niedm/multisig/main.go:45 +0x2d
macbook-pro:multisig niedm$

unsigned4.json:

{
  "body": {
    "messages": [
      {
        "@type": "/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward",
        "delegator_address": "cosmos1z8mzakma7vnaajysmtkwt4wgjqr2m84tzvyfkz",
        "validator_address": "cosmosvaloper14kn0kk33szpwus9nh8n87fjel8djx0y070ymmj"
      },
      {
        "@type": "/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward",
        "delegator_address": "cosmos1z8mzakma7vnaajysmtkwt4wgjqr2m84tzvyfkz",
        "validator_address": "cosmosvaloper1hjct6q7npsspsg3dgvzk3sdf89spmlpfdn6m9d"
      },
      {
        "@type": "/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward",
        "delegator_address": "cosmos1z8mzakma7vnaajysmtkwt4wgjqr2m84tzvyfkz",
        "validator_address": "cosmosvaloper1clpqr4nrk4khgkxj78fcwwh6dl3uw4epsluffn"
      },
      {
        "@type": "/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward",
        "delegator_address": "cosmos1z8mzakma7vnaajysmtkwt4wgjqr2m84tzvyfkz",
        "validator_address": "cosmosvaloper1ehkfl7palwrh6w2hhr2yfrgrq8jetgucudztfe"
      },
      {
        "@type": "/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward",
        "delegator_address": "cosmos1z8mzakma7vnaajysmtkwt4wgjqr2m84tzvyfkz",
        "validator_address": "cosmosvaloper1kgddca7qj96z0qcxr2c45z73cfl0c75p7f3s2e"
      }
    ],
    "memo": "",
    "timeout_height": "0",
    "extension_options": [],
    "non_critical_extension_options": []
  },
  "auth_info": {
    "signer_infos": [],
    "fee": {
      "amount": [
        {
          "denom": "uatom",
          "amount": "10000"
        }
      ],
      "gas_limit": "1200000",
      "payer": "",
      "granter": ""
    }
  },
  "signatures": []
}

Possibly the file has some issues, but we still shouldn't panic.

user-friendly error message if denom is missing from chain registry

> multisig tx authz grant juno ceph-main juno1rq9rdx739n0fss49lrca566hha02352mah34rk vote 365
panic: runtime error: index out of range [0] with length 0

goroutine 1 [running]:
main.getDenomFromRegistry({0x7ff7bfeff998, 0x4})
	/Users/greg/git/informal/multisig/util.go:93 +0x659
main.getDenom(0xc00032e400?, {0x7ff7bfeff998?, 0x4?})
	/Users/greg/git/informal/multisig/util.go:51 +0x105
main.cmdGrantAuthz(0x1c6c700?, {0xc0000985a0?, 0x5?, 0x5?})
	/Users/greg/git/informal/multisig/main.go:186 +0x4df
github.com/spf13/cobra.(*Command).execute(0x1c6c700, {0xc000098550, 0x5, 0x5})
	/Users/greg/go/pkg/mod/github.com/spf13/[email protected]/command.go:852 +0x67c
github.com/spf13/cobra.(*Command).ExecuteC(0x1c6a680)
	/Users/greg/go/pkg/mod/github.com/spf13/[email protected]/command.go:960 +0x39c
github.com/spf13/cobra.(*Command).Execute(...)
	/Users/greg/go/pkg/mod/github.com/spf13/[email protected]/command.go:897
main.main()
	/Users/greg/git/informal/multisig/main.go:45 +0x25```

Authz vote not working for an authz granted vote permission

This is not in particular directly related to multisig but I will open an issue since this might be related to the authz support in multisig.

A vote authz permission (/cosmos.gov.v1beta1.MsgVote) was granted from the multisig CEC-I account to Josh's key.

Josh tried to vote on a CosmosHub proposal using this key but it's not working. When executing the gaiad tx authz exec command he gets an error message. Not sure what is causing that so keeping this issue open for tracking.

Steps to reproduce

Generated a tx for the gov proposal vote:

gaiad tx gov vote 69 no --from <CEC-I cosmos multisig address> --fees 3000uatom --chain-id cosmoshub-4 --generate-only > tx.json

Then when executing that tx using authz he gets an error

gaiad tx authz exec tx.json --from <CEC-I cosmos josh address> 

Error:

Error: error parsing public key: invalid magic in compressed pubkey string: 0
Usage:
  gaiad tx authz exec [msg_tx_json_file] --from [grantee] [flags]

Notes

  • He was able to successfully submit a tx bank send transaction sending some tokens back to the account that funded his account
  • He tried the tx authz exec many times (before and after the tx send) to ensure that his account existed on chain
  • We also tried the gaiad tx authz exec passing the --ledger flag. But he doesn't even get a prompt in his Ledger, it errors out before that.
  • Checking the grant for his account it seems fine
gaiad query authz grants <josh cosmos> <cosmos multisig>


grants:
- authorization:
    '@type': /cosmos.authz.v1beta1.GenericAuthorization
    msg: /cosmos.gov.v1beta1.MsgVote
  expiration: "2023-05-03T17:57:46Z"
pagination:
  next_key: null
  total: "0"

Things to test

  • Maybe we will need someone else that has 'vote' granted via authz to their individual account to test this in order to eliminate the possibility that this issue is caused by a configuration of his key on his machine. If someone else can successfully submit the tx then it might be a configuration issue.

Parsing result from cheqd not working

After broadcast a message there was an error, looks like something related to parsing the result which caused the files not to be deleted from S3

Add test suite

[the purpose of this issue is to highlight my intention to work in this direction]

One of the points of the TODO section is the "test suite that spins up some local nodes and multisigs for testing".

I think that it's a thing of high priority (while it's in the "Mid Priority" section) because it blocks the development of the other features. Since the purpose of the tool is to interact with the blockchain, S3, and local tools, checking if your code didn't break anything is really difficult (you have to configure an S3 bucket, run a local testnet/use RPC of a public testnet node, make a multisig round manually and so on). It makes the development of such an awesome tool uncomfortable.

The approach I'm going to implement is:

  1. Add support of a local self-hosted S3-compatible solution (e.g. minio) so local testing without AWS could be possible
  2. Make a docker container with minio, local gaia testnet, and multisig tool configured to interact with them.
  3. Write scripts to test different scenarios using a multisig tool.

Support for `/cosmos.vesting.v1beta1.ContinuousVestingAccount`

Trying to submit a tgrade tx with multisig fails because it cannot handle "@type":"/cosmos.vesting.v1beta1.ContinuousVestingAccount"

Need to implement support for handling this account types when retrieving the account number and the sequence number.

Broadcast command fails

Attempted to broadcast multiple transactions and got the following result

No index specified

➜  transactions multisig broadcast cosmos ceph-main
Error: Insufficient signatures for broadcast. Requires 2, got 0
Usage:
  multisig broadcast <chain name> <key name> [flags]

Flags:
  -h, --help          help for broadcast
  -i, --index int     index of the tx to broadcast
  -n, --node string   node address to broadcast too. flag overrides config

2022/04/04 17:54:08 Insufficient signatures for broadcast. Requires 2, got 0

Index 0

➜  transactions multisig broadcast cosmos ceph-main -i 0
Error: Insufficient signatures for broadcast. Requires 2, got 0
Usage:
  multisig broadcast <chain name> <key name> [flags]

Flags:
  -h, --help          help for broadcast
  -i, --index int     index of the tx to broadcast
  -n, --node string   node address to broadcast too. flag overrides config

2022/04/04 17:54:15 Insufficient signatures for broadcast. Requires 2, got 0

Index 1

➜  transactions multisig broadcast cosmos ceph-main -i 1
Error: Insufficient signatures for broadcast. Requires 2, got 0
Usage:
  multisig broadcast <chain name> <key name> [flags]

Flags:
  -h, --help          help for broadcast
  -i, --index int     index of the tx to broadcast
  -n, --node string   node address to broadcast too. flag overrides config

2022/04/04 17:54:17 Insufficient signatures for broadcast. Requires 2, got 0

Signature files are there

➜  transactions multisig list cosmos ceph-cosmos        
cosmos/ceph-cosmos/
cosmos/ceph-cosmos/0/eb.json
cosmos/ceph-cosmos/0/gs.json
cosmos/ceph-cosmos/0/signdata.json
cosmos/ceph-cosmos/0/unsigned.json
cosmos/ceph-cosmos/1/eb.json
cosmos/ceph-cosmos/1/gs.json
cosmos/ceph-cosmos/1/signdata.json
cosmos/ceph-cosmos/1/unsigned.json

Confusing Warning

Scenario:
Michael created a transaction and we were pushing it to AWS using tx push. A wild warning appeared:

WARNING: Denom ‘uatom’ in the unsigned json is different from the denom ‘’ in the config or registry!

When broacast message get an error that key cannot be found

If in the config you have key's with the same name, the when broadcasting multisig cannot find the localname for the key

For example, if you have in the config

[[keys]]
name = "ceph-cosmos"
address = "cosmos1..."
localname = "cec-cosmos-multisig" # only needed for the broadcaster

[[keys]]
name = "ceph-cosmos"
address = "cre1.."
localname = "cec-crescent-multisig" # only needed for the broadcaster

then if you are brodcasting for multisig crescent ceph-cosmos this will fail

regen automatic account discovery fails

Regen's validator account is a "Periodic Vesting Account" and it has a different structure.

The account number and sequence numbers can't be automatically obtained unless we somehow properly unmarhsal this structu type.

Ex.:

'@type': /cosmos.vesting.v1beta1.PeriodicVestingAccount
base_vesting_account:
  base_account:
    account_number: "239"
    address: regen1kl83t6gm2y5lgg5c5h3sz87tt5fg3cmyrddngu
    pub_key:
      '@type': /cosmos.crypto.multisig.LegacyAminoPubKey
      public_keys:
      - '@type': /cosmos.crypto.secp256k1.PubKey
        key: AltpFc2WnTmTj4QwDnLpVs4+6cDfknH7GepsIl79w4wM
      - '@type': /cosmos.crypto.secp256k1.PubKey
        key: AqE8JBBgeww4FqDat+AVP3jjZCUg4HjArGZ3tp2wqFb/
      - '@type': /cosmos.crypto.secp256k1.PubKey
        key: AwyaGHlmGJAdPHK0ddAKuSFs4jMhf5eymE2Fz/d414wC
      - '@type': /cosmos.crypto.secp256k1.PubKey
        key: AwfYH+rUsh32daqXcF0AJlEeBU/gdwQsy9qdxdCB0sc9
      threshold: 2
    sequence: "31"
...
2022/05/03 14:23:54 account number in query response is not an integer

add index parameter to `multisig raw cat`

If there are multiple transactions in a particular [chain]/[keyname] it's hard to see the content of a particular transaction. A nice option would be to have an index parameter (-i or --index) that would show only the transaction content on that index.

Confusing error message

Michael was trying to broadcast a test message from a 3-of-5 multisig address. The command should obviously fail, because he didn't sign it and it was just a test. But the error message was misleading:

Error: Insufficient signatures for broadcast. Requires 2, got 0

Michael's correct response:

This one actually requires three…

When forcing overwriting a transaction in S3, the signatures don't get deleted

❯ multisig list juno ceph-main
juno/ceph-main/0/gs.json
juno/ceph-main/0/signdata.json
juno/ceph-main/0/unsigned.json
multisig tx authz grant juno ceph-main juno1rq9rdx739n0fss49lrca566hha02352mah34rk vote 365 -f
❯ multisig list juno ceph-main
juno/ceph-main/0/gs.json
juno/ceph-main/0/signdata.json
juno/ceph-main/0/unsigned.json

Expected: gs.json is deleted.

multisig list --all fails

$ multisig list --all
Error: accepts 2 arg(s), received 0
Usage:
  multisig list <chain name> <key name> [flags]

Flags:
  -a, --all    list files for all chains and keys
  -h, --help   help for list

2022/05/04 14:06:14 accepts 2 arg(s), received 0

This should list everything in the bucket but now fails

Cannot parse tx response for `ixod`

Broadcasting an impacthub chain transaction and getting an error

Error: couldn't find code in tx response

Sample

/home/mircea/go/bin/ixod tx broadcast signed.json --node http://35.182.58.243:26600
{"height":"16481","txhash":"07DC51A357FC169F87A23E4F7D07DBC5D35F421F3B7DAA6F13EB3F45C301506F","codespace":"","code":0,"data":"0A200A1E2F636F736D6F732E617574687A2E763162657461312E4D73674772616E74","raw_log":"[{\"events\":[{\"type\":\"cosmos.authz.v1beta1.EventGrant\",\"attributes\":[{\"key\":\"grantee\",\"value\":\"\\\"ixo1f4nskxfw8ufhwnajh7xwt0wmdtxm02vwenfr7p\\\"\"},{\"key\":\"granter\",\"value\":\"\\\"ixo1x20lytyf6zkcrv5edpkfkn8sz578qg5s2g53ty\\\"\"},{\"key\":\"msg_type_url\",\"value\":\"\\\"/cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission\\\"\"}]},{\"type\":\"message\",\"attributes\":[{\"key\":\"action\",\"value\":\"/cosmos.authz.v1beta1.MsgGrant\"}]}]}]","logs":[{"msg_index":0,"log":"","events":[{"type":"cosmos.authz.v1beta1.EventGrant","attributes":[{"key":"grantee","value":"\"ixo1f4nskxfw8ufhwnajh7xwt0wmdtxm02vwenfr7p\""},{"key":"granter","value":"\"ixo1x20lytyf6zkcrv5edpkfkn8sz578qg5s2g53ty\""},{"key":"msg_type_url","value":"\"/cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission\""}]},{"type":"message","attributes":[{"key":"action","value":"/cosmos.authz.v1beta1.MsgGrant"}]}]}],"info":"","gas_wanted":"300000","gas_used":"83781","tx":null,"timestamp":"","events":[{"type":"coin_spent","attributes":[{"key":"c3BlbmRlcg==","value":"aXhvMXgyMGx5dHlmNnprY3J2NWVkcGtma244c3o1NzhxZzVzMmc1M3R5","index":true},{"key":"YW1vdW50","value":"NTAwMHVpeG8=","index":true}]},{"type":"coin_received","attributes":[{"key":"cmVjZWl2ZXI=","value":"aXhvMTd4cGZ2YWttMmFtZzk2MnlsczZmODR6M2tlbGw4YzVsMHZhajB3","index":true},{"key":"YW1vdW50","value":"NTAwMHVpeG8=","index":true}]},{"type":"transfer","attributes":[{"key":"cmVjaXBpZW50","value":"aXhvMTd4cGZ2YWttMmFtZzk2MnlsczZmODR6M2tlbGw4YzVsMHZhajB3","index":true},{"key":"c2VuZGVy","value":"aXhvMXgyMGx5dHlmNnprY3J2NWVkcGtma244c3o1NzhxZzVzMmc1M3R5","index":true},{"key":"YW1vdW50","value":"NTAwMHVpeG8=","index":true}]},{"type":"message","attributes":[{"key":"c2VuZGVy","value":"aXhvMXgyMGx5dHlmNnprY3J2NWVkcGtma244c3o1NzhxZzVzMmc1M3R5","index":true}]},{"type":"tx","attributes":[{"key":"ZmVl","value":"NTAwMHVpeG8=","index":true},{"key":"ZmVlX3BheWVy","value":"aXhvMXgyMGx5dHlmNnprY3J2NWVkcGtma244c3o1NzhxZzVzMmc1M3R5","index":true}]},{"type":"tx","attributes":[{"key":"YWNjX3NlcQ==","value":"aXhvMXgyMGx5dHlmNnprY3J2NWVkcGtma244c3o1NzhxZzVzMmc1M3R5LzEz","index":true}]},{"type":"tx","attributes":[{"key":"c2lnbmF0dXJl","value":"cUdHQ09SQkVzZlROYVpnTkFiUE9Hcm1pYWg3YnlaN2laVGZVRWlkWXNIb3BpT3FKbGFrVnE4eUI3T0p1UkdIWXRLTlgyWGpoZDhwMzdrWlZrMzZLc2c9PQ==","index":true}]},{"type":"tx","attributes":[{"key":"c2lnbmF0dXJl","value":"Vll3L1Q5Z052SW5HUkNpbWxhTkgyZk0zV0cvZFFiYTdseE9McHVNSWxOSTdSYmxLNjQ5bldLTTRSVDcvTHZST1JCWUtqazN3MFRMdkJqVjVtS28zYUE9PQ==","index":true}]},{"type":"tx","attributes":[{"key":"c2lnbmF0dXJl","value":"Q2tDb1lZSTVFRVN4OU0xcG1BMEJzODRhdWFKcUh0dkpudUpsTjlRU0oxaXdlaW1JNm9tVnFSV3J6SUhzNG01RVlkaTBvMWZaZU9GM3luZnVSbFdUZm9xeUNrQlZqRDlQMkEyOGljWkVLS2FWbzBmWjh6ZFliOTFCdHJ1WEU0dW00d2lVMGp0RnVVcnJqMmRZb3poRlB2OHU5RTVFRmdxT1RmRFJNdThHTlhtWXFqZG8=","index":true}]},{"type":"message","attributes":[{"key":"YWN0aW9u","value":"L2Nvc21vcy5hdXRoei52MWJldGExLk1zZ0dyYW50","index":true}]},{"type":"cosmos.authz.v1beta1.EventGrant","attributes":[{"key":"Z3JhbnRlZQ==","value":"Iml4bzFmNG5za3hmdzh1Zmh3bmFqaDd4d3Qwd21kdHhtMDJ2d2VuZnI3cCI=","index":true},{"key":"Z3JhbnRlcg==","value":"Iml4bzF4MjBseXR5ZjZ6a2NydjVlZHBrZmtuOHN6NTc4cWc1czJnNTN0eSI=","index":true},{"key":"bXNnX3R5cGVfdXJs","value":"Ii9jb3Ntb3MuZGlzdHJpYnV0aW9uLnYxYmV0YTEuTXNnV2l0aGRyYXdWYWxpZGF0b3JDb21taXNzaW9uIg==","index":true}]}]}

Error: couldn't find code in tx response
Usage:
  multisig broadcast <chain name> <key name> [flags]

Flags:
  -h, --help          help for broadcast
  -i, --index int     index of the tx to broadcast
  -n, --node string   node address to broadcast too. flag overrides config

Global Flags:
  -c, --config string   custom config path

2022/12/09 15:15:47 couldn't find code in tx response

Better support for `fees`

Add option to specify the fee amount when creating a transaction

Currently there is no way to specify the fee amount when creating a transaction (e.g. multisig tx authz grant), so depending on the chain, because the fee is hard-coded at 10000, you might get an error when broadcasting the transaction "raw_log":"insufficient fees)

Add a --fees flag to the transaction commands so if a user specifies --fees 50000utoken then the transaction fee will be:

"fee":{"amount":[{"denom":"utoken","amount":"50000"}]

Add a defaultFee and defaultGas option to the config

Instead of having the default fee hard-coded at 10000 and the default gas at 300000, add an option to retrieve these defaults from the config.toml file

add a `--all` flag to delete command to remove all transactions at once

Currently there is no way to remove / delete all transactions in a particular path all at once. If you use the delete command you have to specify the index if there are more than 1 transaction in a particular path.

In order to allow users to remove all the transactions in a path add the flag --all to the delete command and remove all the transactions at once.

It would be good to also have a confirmation message asking the user for confirmation on executing this command since it removes several transactions at once.

Cannot parse Stride account type

Creating a multisig tx on Stride returns an error that it cannot parse the /stride.vesting.StridePeriodicVestingAccount account type.

raw cat doesn't work?

added a grant transaction
list works
raw cat says folder empty
multisig raw cat cosmos ceph-cosmos

Better error message when signing with wrong key

When trying to sign a tx, if the user uses the wrong keys name (e.g the multisig key name), the tool might show an error that is not very intuitive to describe this mistake.

Error: cannot sign with offline keys

If possible, find a way to provide a more user friendly error to the user saying the wrong key might have been specified.

Delete command or raw delete input parameter change

All commands, including raw cat has the <chain> <key> input parameters, so the user gets used to using that.

raw delete on the other hand has <path> instead because of its advanced functionality of being able to delete a single file.

Scenario:
Michael tested multisig by adding two transactions to AWS. Then he wanted to delete them. raw delete made it confusing to delete all files one-by-one when he knew exactly which chain,key and possibly -i index he wanted to delete.

Possible solution:
new, regular delete <chain> <key> [-i index] command.

empty folders cannot be deleted with `delete` command

Currently if a folder is empty e.g. cosmos/ceph-cosmos if you issue a command multisig delete cosmos ceph-cosmos the command doesn't delete the folder, in order to remove it you need to execute two raw delete commands:
multisig raw delete cosmos/ceph-cosmos/
multisig raw delete cosmos/

It would be nice if the delete command would get rig of the folder (sometimes the folder created was with an invalid chain-id or key name).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.