Giter Site home page Giter Site logo

etcdevteam / emerald-vault-archive Goto Github PK

View Code? Open in Web Editor NEW
17.0 11.0 10.0 420 KB

ARCHIVE. CODE MOVED TO:

Home Page: https://github.com/emeraldpay/emerald-vault

License: Apache License 2.0

Rust 83.61% Shell 16.39%
cold-wallets blockchain ethereum-classic ethereum

emerald-vault-archive's People

Contributors

belfordz avatar gagarin55 avatar r8d8 avatar realcodywburns avatar splix avatar whilei avatar

Stargazers

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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

emerald-vault-archive's Issues

get balance command

$ emerald balance 0xdbaebfe227e6b29fceac4f4da22d7daa72eec8a0 --chain morden
1234500000000000000
$ emerald balance 0xdbaebfe227e6b29fceac4f4da22d7daa72eec8a0 --chain morden --hex
0x1121D33597384000
$ emerald balance 0xdbaebfe227e6b29fceac4f4da22d7daa72eec8a0 --chain morden --unit ether
1.2345

Build failed

  --> src/rpc/http.rs:30:5
   |
30 |     EthGetTxByHash,
   |     ^^^^^^^^^^^^^^
   |
   = note: #[warn(dead_code)] on by default

MissingFieldError("crypto"): should check for "Crypto" too

~/dev/etc/emerald-cli master= ⟠ emerald import --chain=mainnet path/to/key_encrypted
[ERROR]	Command execution error: Invalid keystore file decoding: MissingFieldError("crypto")
~/dev/etc/emerald-cli master= ⟠ cat path/to/key_encrypted
{"version":3,"id":"asdf-asdf-asdf-asdf-asdf","address":"0x539blahblah","Crypto":{"cipher [...]

sed -i 's/Crypto/crypto/' path/to/key_encrypted and all is ok. I guess all key/values should be case insensitive?

Table output for accounts list

It should be easier to read in table-like structure:

$ emerald list --chain testnet
ADDRESS                                     NAME
0x6475efceda36524c381fa7ea429c51c1e5d60b68  Test 1
0x83e4fc1f1922919845e5dda843c6d1191837ea6b  My another account

Also, description and total count may be avoided for that simple list (easier to parse output, it's ofter required)

Feature: make cli password input hidden

Currently password input for creating a new account is rendered visibly. Would it be possible to hide the input to prevent over-the-shoulder attacks?

emerald-cli/target/release travis-deploy ⟠ ./emerald new --chain testnet
! Warning: passphrase can't be restored. Don't forget it !
Enter passphrase:
foo
Created new account: 0xb0d31ea6af9390c2727023eb8ec750f0cb7268f7

&

emerald new --chain testnet --security-level high "Test account" < echo "secret passphrase"

Maybe also worth considering using a 2x-input prompt for password confirmation? eg.

Enter your new passphrase:
***
Confirm your new passphrase:
****
> Yikes! Those passphrases don't match. New account creation aborted.

Lack of examples

Required section with examples, where set emerald used inside shell scripts for set of use cases:

transaction sign always tries to connect to upstream

emerald --chain=morden transaction \
  0x3fdc12e77912620c907a1c65a076b38b307968fd \
  0x86da613e694670fb3a61ce0a565ab40bb27ed60d \
  0x100 \
  --nonce=0x1 --gas=0x2100 --gas-price=0x15115
Enter passphrase:

[ERROR]	Command execution error: http://127.0.0.1:8545/: Connection refused (os error 61)

If upstream is not specified it should generate an offline transaction (i.e. put to stdout) instead of sending it right now

Parse raw transaction

emerald parsetx <raw-tx> [--skip-data] [-h]

where:

  • --skip-data skips data putput
  • -h human friendly values. Should find closes valeu unit (Ether, Mwei, Gwei, etc), for example instead of Value (wei): 18451607206952527473 should be Value (Ether): 18.4516, for value and gas price

Example:

emerald parsetx 0xf863018301511582210094863a61ceb4694670fb0bb27da613eed60a565a0d808081a0a080c85533886b7cc2b34588812e9bf184cb7279c22b4ef78ac1f3ef2e75612a84a009b21594af0788db05f4ccdf5ccbe999e11ed8cbd110fb17d192094474681e38

        Address: 0x3fd9075a076b38b3a1c6c12e77912620c07968fd
          Nonce: 1
             To: 0x863a61ceb4694670fb0bb27da613eed60a565a0d
    Value (wei): 0
           Data: 
      Gas limit: 8448
Gas price (wei): 86293

(notice that values are not in hex but dec)

json output format for address list

Introduce a new option --format=<text|json>

By default the output format is text, for a human. Another alternative would be JSON output that simplifies integration with external tools.

emerald --chain=morden list
ADDRESS                                       NAME
0x907c6c1a17707968fd238b91263fde5a076b20c3
0x60da613e63a6180a565a0dedcebb2770fbb46946    test 2

emerald --chain=morden --format=json list
[{"address":"0x907c6c1a17707968fd238b91263fde5a076b20c3", "name": null}, {"address": "0x60da613e63a6180a565a0dedcebb2770fbb46946", "name": "test 2"}]

allow to omit Value and To for a new transaction

Just:

emerald transaction   [--chain=<chain>] <from> <to> [--gas=<gas>] [--gas-price=<price>] [--data=<data>] (--nonce=<nonce> | --upstream=<upstream>)
emerald transaction   [--chain=<chain>] <from> [--gas=<gas>] [--gas-price=<price>] [--data=<data>] (--nonce=<nonce> | --upstream=<upstream>)

Use 0 if not passed. It's especially important for to parameter, because when a use wants to deploy a contract with current schema it need to figure out that zero-address (i.e. count all zeroes), it's error prone.

Also, it's better to make both parameters as named by default but keep full from-to-value as a shorthand:

emerald transaction   [--chain=<chain>] <from> [--to=<address>] [--value=<value>] [--gas=<gas>] [--gas-price=<price>] [--data=<data>] (--nonce=<nonce> | --upstream=<upstream>)
emerald transaction   [--chain=<chain>] <from> <to> <value> [--gas=<gas>] [--gas-price=<price>] [--data=<data>] (--nonce=<nonce> | --upstream=<upstream>)

doesn't accept gastracker upstream

With --upstream=https://web3.gastracker.io it produces error:

emerald balance 0x907c6c1a17707968fd238b91263fde5a076b20c3 --upstream=https://web3.gastracker.io
[INFO]	Missed `--chain` argument. Use default: `mainnet`
[ERROR]	Command execution error: no connection to client

Maybe because of https

Use dec number format by default

Currently it always expect hex for all value, which is no user friendly. It should parse as hex only if it has 0x prefix.

Following should generate identical transaction value:

emerald transaction \
  0x3fd9075a076b38b3a1c6c12e77912620c07968fd \
  0x863a61ceb4694670fb0bb27da613eed60a565a0d \
  1234567890

emerald transaction \
  0x3fd9075a076b38b3a1c6c12e77912620c07968fd \
  0x863a61ceb4694670fb0bb27da613eed60a565a0d \
  0x499602d2

$ emerald <command> --help

I think it would be really useful to provide some specific help information for each command (including one example with most basic possible use, and one with ultra-fancy use).

Further, to provide some kind of information about units for each required arg. For example,

~/dev/etc/emerald-cli master= ⟠ emerald transaction --help
Invalid arguments.

Usage:
  emerald server    [--port=<port>] [--host=<host>] [--base-path=<path>] [-v | --verbose] [-q | --quite]
  emerald new       --chain=<chain>  ([[--security-level=<level>] [--name=<name>] [--description=<description>]] | --raw <key>)
  emerald list      --chain=<chain>  [--show-hidden]
  emerald hide      --chain=<chain>  <address>
  emerald unhide    --chain=<chain>  ([-a | --all] | <address>)
  emerald strip     --chain=<chain>  <address>
  emerald import    --chain=<chain>  [-a | --all] [-f | --force] <path>
  emerald export    --chain=<chain>  ([-a | --all] | <address>) <path>
  emerald update    --chain=<chain>  <address> [--name=<name>] [--description=<description>]
  emerald transaction   --chain=<chain> <from> <to> <value> [--gas=<gas>] [--gas-price=<price>] [--data=<data>] (--nonce=<nonce> | --upstream=<upstream>)
  emerald balance   <address> [--upstream=<upstream>]
  emerald -V | --version
  emerald -h | --help

should give something like

emerald transaction   --chain=<chain> <from> <to> <value> [--gas=<gas>] [--gas-price=<price>] [--data=<data>] (--nonce=<nonce> | --upstream=<upstream>)

     --nonce=<nonce> is optional; if not provided you must ensure it will be set by your '--upstream' client
     --gas=<gas> is in 0x-prefixed hex encoding
     ...

     A couple of examples:
          emerald transaction --chain=mainnet 0xblahblah 0xblahblah 100000
          emerald transaction --chan=morden 0xblahblah 0xblahblah 0x539000 --gas-price=0x21000 --gas=0x2100000 --data="Happy birthday" --upstream=127.0.0.1:8545


... Because I have questions like

  • "Is <gas> in hex, wei, or ether?"
  • "I'm assuming <data> is 0x-hex-encoded? (But it would be cool if I could leave a message real easy there for my buddy like ':beers: on me')"
  • "Can I use my --name for my account instead of an address for <from>?"

EMERALD_CHAIN env var default not getting set

~/dev/etc/emerald-cli master= ⟠ emerald list
Invalid arguments.

Usage:
  emerald server    [--port=<port>] [--host=<host>] [--base-path=<path>] [-v | --verbose] [-q | --quite]
  emerald new       --chain=<chain>  ([[--security-level=<level>] [--name=<name>] [--description=<description>]] | --raw <key>)
  emerald list      --chain=<chain>  [--show-hidden]
  emerald hide      --chain=<chain>  <address>
  emerald unhide    --chain=<chain>  ([-a | --all] | <address>)
  emerald strip     --chain=<chain>  <address>
  emerald import    --chain=<chain>  [-a | --all] [-f | --force] <path>
  emerald export    --chain=<chain>  ([-a | --all] | <address>) <path>
  emerald update    --chain=<chain>  <address> [--name=<name>] [--description=<description>]
  emerald transaction   --chain=<chain> <from> <to> <value> [--gas=<gas>] [--gas-price=<price>] [--data=<data>] (--nonce=<nonce> | --upstream=<upstream>)
  emerald balance   <address> [--upstream=<upstream>]
  emerald -V | --version
  emerald -h | --help
~/dev/etc/emerald-cli master= ⟠ echo $EMERALD_CHAIN
mainnet

Maybe other ENV_VARS not getting set? I didn't check anything else.

Possible dup #35 ?

include return values in documentation

It would be very useful for me to be able to easily reference success/error return values.

For example below, I'm not sure if the command will return just the signed raw transaction 0xdeadbeef123.... in stdout or it it will show something more verbose that I'll need to parse, like:

$ emerald transaction new 0xabc... 0xdef... 0x1000
> Created raw signed transaction:
> 0xdeadbeef123...
$ emerald transaction new --help
emerald-transaction-new
Build new transaction

USAGE:
    emerald transaction new <from> <to> <value> [ARGS]

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

ARGS:
    <from>         Senders address
    <to>           Receiver address
    <value>        Amount ot send
    <gas>          Gas limit for transaction
    <gas-price>    Gas price
    <data>         Transation data
    <nonce>        Nonce value for sender

send raw transaction

Instead of building a new tx, should allow to send existing provided raw transaction and output txid (or rpc code + error):

$ emerald transaction --upstream localhost:8545 --raw 0x1234...890
0x1daca18fa64eee94fded661fdaf36cc24344e718f4fa9192e6718454617d9f15

$ cat rawtx.txt | emerald transaction --upstream localhost:8545 --raw - 
0x24c7157980d9552ab67203a9840f4552b016a287c81457c1018f5c22ddcd5edc

$ cat rawtx.txt | emerald transaction --upstream localhost:8545 --raw -
Error 32000: Transaction nonce is too low

Accept any url for upstream

Currently it requires an IP and a port, which works fine for a local node, but doesn't work for a remote one that uses https for example. Let's use just an URL instead of IP:PORT. Like:

emerald server --upstream https://web3.gastracker.io/morden

Provide packages for linux

Required easy way to install emerald-cli using package managers on main distros (Debian, Arch, FreeBSD).
Also, required support for Linux man command to display usage.

(idea/proposal): transaction --interactive

For some users I imagine that it might be more familiar and encouraging
to be walked through transaction creation. As it is currently, the integrity and
validity of the transaction requires putting the right values in the right order,
and adding and reading the usage information to determine the availability and specs
for optional flags you might like to use, eg gas price/limit. For some, this
be a daunting challenge. Here's an idea for a friendlier way.

# Use '--interactive|-i' flag to enable interactive mode.
$ emerald transaction -i
Welcome to interactive transaction creation mode.

Here's an overview of required and available transaction values:

    Transaction REQUIRED values:
    - from: the sender address for the transaction. This should be in 0x-prefixed hexadecimal format.
    - to: the recipient address for the transaction. This should be in 0x-prefixed hexadecimal format.
    - value: the amount to transfer. You will be prompted whether your input value should be interpreted as 0x-prefixed hexadecimal, as eth, wei, or mgas.

    Transaction OPTIONAL values:
    - gas: the upper limit for gas the transaction is willing to pay for processing. Like 'value', you'll be able to choose hex, eth, wei, or mgas units.
    - gas-price: the multiplier for the gas price. Like 'value', you'll be able to choose hex, eth, wei, or mgas units.

    Transaction OPTIONAL metadata:
    - note: add a note for this transaction. A note will *not* be included with the raw signed transaction or anywhere on the blockchain. This is just for personal reference.

    Transaction management:
    - upstream: (default: 127.0.0.1:8545) Set an HTTP-RPC endpoint for broadcasting your transaction to a node like geth.
    - broadcast: (default: no) If you'd like to broadcast your transaction immediately after signing this transaction.
    - keep: (default: yes) If you'd like to store your transaction for later use.

The output of this command will be a raw signed transaction sent to stdout.

At any point during this interaction you can use the following commands:
[f - edit from]
[t - edit to]
[v - edit value]
[$ - edit value units]
[g - edit gas limit]
[p - edit gas price]
[u - edit upstream endpoint]
[n - edit note]
[b - edit if should broadcast]
[k - edit if should keep]
[= - show transaction values]
[s - skip prompt]
[? - show help/usage]
[quit - exit interactive mode]


----
from:
> 0xabc1234...

to:
> 0xdef5678...

value:
> =

    from: 0xabc1234
    to:   0xdef5678

value:
> 1.42

value units: [hex|eth|wei|mgas]
> eth

gas:
> s
gas-price:
> s
note:
> My first interactive transaction! Cool!

upstream:
> 127.0.0.1:8546

broadcast: [yes|No]
> s # Note: skipping enables default No.

keep: [Yes|no]
> yes

You're almost done! Everything look ok?

    from:       0xabc1234
    to:         0xdef5678
    value:      eth=1.42 hex=0x1337000 wei=1420000000000000000000000 mgas=142000000000000
    gas:        [client default]
    gas-price:  [client default]
    upstream:   127.0.0.1:8546
    broadcast:  no
    keep:       yes

Use 'quit' to finish, or any of the following edit commands to keep editing:

[f - edit from]
[t - edit to]
[v - edit value]
[$ - edit value units]
[g - edit gas limit]
[p - edit gas price]
[u - edit upstream endpoint]
[n - edit note]
[b - edit if should broadcast]
[k - edit if should keep]
[= - show transaction values]
[s - skip prompt]
[? - show help/usage]
[quit - exit interactive mode]

> f
from:
> 0xabc9999

    from:       0xabc9999
    to:         0xdef5678
    value:      eth=1.42 hex=0x1337000 wei=1420000000000000000000000 mgas=142000000000000
    gas:        [client default]
    gas-price:  [client default]
    note:       "My first interactive transaction! Cool!"
    upstream:   127.0.0.1:8546
    broadcast:  no
    keep:       yes

> quit
0xrawSignedTransaction

improve UI: export command fails: No such file or directory

~/Library/EthereumClassic  ⟠ which emerald
/usr/local/bin/emerald

~/Library/EthereumClassic  ⟠ emerald -V
v0.19.0

~/Library/EthereumClassic  ⟠ emerald new --chain mainnet
! Warning: passphrase can't be restored. Don't forget it !
Enter passphrase:

Created new account: 0x2c1ed20222ef60eb4d88cc54c18319ec7fbf547d

~/Library/EthereumClassic  ⟠ emerald list
ADDRESS                                       NAME
0x2c1ed20222ef60eb4d88cc54c18319ec7fbf547d
0xc1243818f7b39454310b3b4262a2a83882e0150f    testes

~/Library/EthereumClassic  ⟠ emerald export 0x2c1ed20222ef60eb4d88cc54c18319ec7fbf547d ./add.json
[ERROR]	Command execution error: No such file or directory (os error 2)
~/Library/EthereumClassic  ⟠ emerald export 0x2c1ed20222ef60eb4d88cc54c18319ec7fbf547d $pwd/add.json
[ERROR]	Command execution error: No such file or directory (os error 2)
~/Library/EthereumClassic  ⟠ emerald export --chain mainnet 0x2c1ed20222ef60eb4d88cc54c18319ec7fbf547d ./add.json
[ERROR]	Command execution error: No such file or directory (os error 2)

~/Library/EthereumClassic  ⟠ emerald --help | grep export
  emerald export    [--chain=<chain>]  ([-a | --all] | <address>) <path>

Use hdpath as an address

Allow user to specify a HD Path from a hardware wallet for a new transaction, for to and from parts.

emerald transaction \
   hw:m/44'/60'/0'/1 \
   0x0e7c045110b8dbf29765047380898919c5cb56f4 \
   10 \
   --nonce 1

Should ask user to sign transaction using HW Wallet:

Emerald Vault is requesting to sign following transaction:
----------------------------------------------------
FROM:     m/44'/60'/0'/1
          0x9cbe7c045110b8d8768915047bf2f456030899c5
TO:       0x0e7c045110b8dbf29765047380898919c5cb56f4
VALUE:    10.00 ETC 
          0x8AC7230489E80000 WEI
NONCE:    1
GAS:      21000
GASPRICE: 15200000000 WEI
DATA:     <none>
----------------------------------------------------
Please confirm the transaction on the device.

For

emerald transaction \
   0x0e7c045110b8dbf29765047380898919c5cb56f4 \
   hw:m/44'/60'/0'/1 \
   10 \
   --nonce 1

It should just sign prepare transaction to 0x9cbe7c045110b8d8768915047bf2f456030899c5 (which is m/44'/60'/0'/1)

Debug logs

How to run emerald-cli with detailed debug logs ?

(idea/proposal): stored transaction pool

I was thinking it'd be nice to have a kind of "transaction pool" for emerald.

One use case is to manage tx creation/+broadcasting (or not broadcasting, as the case may be).
Another is to store transactions that you'd like to reuse.

I imagine a scenario for this would be to be able to create and sign and index
transactions in an offline/cold setting, like on your secret computer/rasperry-pi/whatever
that you don't connect to the internet.

Here's a quick UX gist:

# Note that I'm using a made-up command 'value' with an '--eth' flag.
# The idea with this is to modularize to-hex, to-wei, from-eth, what-the-is-mgas-even
# and be able to use emerald to get the proper data with the proper format.
# Even though this 'value' command is a topic for another separate issue, I'm
# going to leave it in here for daydreaming and demonstration.
#
# Note: no '--upstream': this is an "offline"/"cold" signed tx
# Note: This success output formatting would
$ env BEERS_COST=$(emerald value --eth=1.3) emerald transaction <0xfrom> <0xto> $BEER_COST \
    --note="I buy beer for Bob every Friday."
transaction@{0} from=<0xfrom> to=<0xto> value=<0x1337000000> [value.eth=1.3] note="I buy beer for Bob every Friday"

$ emerald transaction \
    <0xfrom> \
    <0xto> \
    2.433 --value=eth
transaction@{0} from=<0xfrom> to=<0xto> value=<0x1337000000> [value.eth=1.3] note="I buy beer for Bob every Friday"
transaction@{1} from=<0xfrom> to=<0xto> value=<0x266d0> [value.eth=2.433]

# List all txs in the txpool store.
# Note: the command name here TBD: 'emerald signed'?, or 'emerald transaction list'?
# Note: List all signed and stored transactions which haven't been 'broadcasted'/exported yet
$ emerald transactions
transaction@{0} from=<0xfrom> to=<0xto> value=<0x1337000000> [value.eth=1.3] note="I buy beer for Bob every Friday"
transaction@{1} from=<0xfrom> to=<0xto> value=<0x266d0> [value.eth=2.433]

# Broadcast a tx from the txpool store.
# Note: *pops* signed tx from store and sends upstream
# Note: I use port '8546' here because for the broadcast command I'd like to
# see localhost:8545 as a default, since that plays well automatically with geth.
$ emerald broadcast transaction@{1} --upstream=127.0.0.1:8546
Successfully sent transaction:
<blah blah some details about the PIZZA transaction/return val from geth, whatever>

# List txpool stored txs again.
# Note: @1 has been popped and removed from txpool store by default. Only @0 remains.
$ emerald transactions
transaction@{0} from=<0xfrom> to=<0xto> value=<0x1337000000> [value.eth=1.3] note="I buy beer for Bob every Friday"

# Let's send the last tx.
# Note: sends upstream, but because of '--keep' does not remove from stored txpool txs
$ emerald broadcast @{1} --keep
Successfully sent transaction:
<blah blah some details about the BEER transaction/return val from geth, whatever>

$ emerald transactions
transaction@{0} <0xBeerTransactionHashOrIdentifier>

# Changed my mind, I never want to buy Bob beer again.
$ emerald transactions rm transaction@{0}
Success.

$ emerald transactions
No stored transactions yet. Use 'emerald transaction' to create one.

Importing existent accounts

If I understood correctly emerald import command would replace existent key data for address if such address already in vault. It can lead to situation when user accidentally replace working keys with another key, encrypted by another passphrase.

As a solution we can introduce additional parameters:
-f - force to replace existent keys. User must explicitly ask to replace.
-i - ignore existent keys. This is safe option.

What do you think ?

Lack of usage documentation

Need to provide transparent doc for console usage of funcitonality provided in emerald-rs.
emerald-cli should be used for user scrotpting.

create account doesn't show progress

$ emerald --chain=morden new
! Warning: passphrase can't be restored. Don't forget it !
Enter passphrase:

test
test


test
^C

It's not clear that after you've entered a password it starts to do something.

Better to show a message:

$ emerald --chain=morden new
! Warning: passphrase can't be restored. Don't forget it !
Enter passphrase:

Generating a new private key for chain Morden...

get nonce command

Command to read next nonce from upstream:

emerald nonce <address> [--hex]

Example:

emerald nonce 0x3fd9075a076b38b3a1c6c12e77912620c07968fd
61
emerald nonce 0x3fd9075a076b38b3a1c6c12e77912620c07968fd --hex
0x3d

can't send transaction

$ emerald transaction --chain testnet 0xdbaebfe227e6b29fceac4f4da22d7daa72eec8a0 0xdbaebfe227e6b29fceac4f4da22d7daa72eec8a0 0x1234567000 --upstream http://ethereum.dev:8555
[ERROR]	Command execution error: Invalid parameter: empty string

$ emerald transaction --chain testnet 0xdbaebfe227e6b29fceac4f4da22d7daa72eec8a0 0xdbaebfe227e6b29fceac4f4da22d7daa72eec8a0 0x1234567000 --nonce 1000000
[ERROR]	Command execution error: Missed arguments

raw pk from cli option

Allow to pass a raw PK from command line.

emerald-cli --raw 0x8AB57394868C31248C3A3D22DA61E6D436D3638413FB33724514E
emerald-cli --raw-file ./pk-in-hex.txt

Should be available as alternative to a pk stored in key storage, for sending/signing a transaction

emerald -V wrong for v0.18.1 (says 0.17.0)

~/Downloads/emerald018  ⟠ dtrx emerald-cli-osx-v0.18.1-832bba6.zip
emerald-cli-osx-v0.18.1-832bba6.zip contains one file but its name doesn't match.
 Expected: emerald-cli-osx-v0.18.1-832bba6
   Actual: emerald
You can:
 * extract the file _I_nside a new directory named emerald-cli-osx-v0.18.1-832bba6
 * extract the file and _R_ename it emerald-cli-osx-v0.18.1-832bba6
 * extract the file _H_ere
What do you want to do?  (I/r/h) h
~/Downloads/emerald018  ⟠ l
total 12M
-rwxr-xr-x 1 ia staff 8.6M Nov 29 01:23 emerald
-rw-r--r-- 1 ia staff 3.0M Dec  8 16:05 emerald-cli-osx-v0.18.1-832bba6.zip
~/Downloads/emerald018  ⟠ ./emerald -V
v0.17.0
~/Downloads/emerald018  ⟠ sha emerald-cli-osx-v0.18.1-832bba6.zip
SHA256(emerald-cli-osx-v0.18.1-832bba6.zip)= 626cffc48998ea008c8997b96cfa448a77d8636fb270f56ef6a50bfbaaf911bb
~/Downloads/emerald018  ⟠ sha emerald
SHA256(emerald)= 0a0c091b75d8ab1af370e053dd1efcffb1e5c55ccc86d9b30ba3150155d49c34

Provide `--help` for subcommands

Currenlty emerald-cli provides only top level help, due to limitations of docopt crate.
Ex.: emerald --help

Required detailed help for each command, like rustup have.
Ex.: emerald list --help

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.