## Table of Contents
* [1. Overview](#1-overview)
* [2. Build Guide](#2-build-guide)
* [2.1 Install Rust](#21-install-rust)
* [2.2a Build from Homebrew](#22a-build-from-homebrew)
* [2.2b Build from Crates.io](#22b-build-from-cratesio)
* [2.2c Build from Source Code](#22c-build-from-source-code)
* [3. Usage Guide](#3-usage-guide)
* [3.1 Generate a cryptocurrency wallet](#31-generate-a-cryptocurrency-wallet)
* [3.2 Generate an HD cryptocurrency wallet](#32-generate-an-hd-cryptocurrency-wallet)
* [3.3 Import a cryptocurrency wallet](#33-import-a-cryptocurrency-wallet)
* [3.4 Import an HD cryptocurrency wallet](#34-import-an-hd-cryptocurrency-wallet)
* [4. License](#4-license)
## 1. Overview
Wagyu is a feature-rich command-line utility to generate a cryptocurrency wallet.
Wagyu enables developers to build their own cryptocurrency application using the following modules.
| Library | Standard Wallet | HD Wallet | Mnemonic | Network |
|:------------------------------------------------------------------------------------------------------------------------------------------------------------:|-----------------------------------------------------------------------|----------------------------------------------------------------------------------------------|---------------------------------|-----------------------------------------------------------------|
| [**wagyu-bitcoin**](./bitcoin)
[![Crates.io](https://img.shields.io/crates/v/wagyu-bitcoin.svg?color=neon)](https://crates.io/crates/wagyu-bitcoin) |
|
|
|
|
| [**wagyu-ethereum**](./ethereum)
[![Crates.io](https://img.shields.io/crates/v/wagyu-ethereum.svg?color=neon)](https://crates.io/crates/wagyu-ethereum)|
|
- Ethereum
- Ledger
- Trezor
- Keepkey
- Custom
|
|
|
| [**wagyu-monero**](./monero)
[![Crates.io](https://img.shields.io/crates/v/wagyu-monero.svg?color=neon)](https://crates.io/crates/wagyu-monero) |
- Standard
- Integrated
- Subaddress
|
|
|
|
| [**wagyu-zcash**](./zcash)
[![Crates.io](https://img.shields.io/crates/v/wagyu-zcash.svg?color=neon)](https://crates.io/crates/wagyu-zcash) |
|
|
|
|
Wagyu can support new cryptocurrencies by implementing the model as outlined in this module.
| Library | Standard Wallet | HD Wallet | Mnemonic | Network |
|:-------------------------------------------------------------------------------------------------------------------------------------------------:|----------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------|
| [**wagyu_model**](./model)
[![Crates.io](https://img.shields.io/crates/v/wagyu-model.svg?color=neon)](https://crates.io/crates/wagyu-model) |
- [Address](./model/src/address.rs)
- [Public Key](./model/src/public_key.rs)
- [Private Key](./model/src/private_key.rs)
|
- [Derivation Path](./model/src/derivation_path.rs)
- [Extended Public Key](./model/src/extended_public_key.rs)
- [Extended Private Key](./model/src/extended_private_key.rs)
|
- [Mnemonic](./model/src/mnemonic.rs)
- [Wordlist](model/src/wordlist/wordlist.rs)
|
- [Network](./model/src/network.rs)
|
## 2. Build Guide
### 2.1 Install Rust
We recommend installing Rust using [rustup](https://www.rustup.rs/). You can install `rustup` as follows:
- macOS or Linux:
```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
- Windows (64-bit):
Download the [Windows 64-bit executable](https://win.rustup.rs/x86_64) and follow the on-screen instructions.
- Windows (32-bit):
Download the [Windows 32-bit executable](https://win.rustup.rs/i686) and follow the on-screen instructions.
### 2.2a Build from Homebrew (for macOS)
For macOS users, we recommend installing `wagyu` via Homebrew as follows:
```bash
brew install wagyu
```
### 2.2b Build from Crates.io
We recommend installing `wagyu` this way. In your terminal, run:
```bash
cargo install wagyu
```
Now to use `wagyu`, in your terminal, run:
```bash
wagyu
```
### 2.2c Build from Source Code
Alternatively, you can install `wagyu` by building from the source code as follows:
```bash
# Download the source code
git clone https://github.com/AleoHQ/wagyu
cd wagyu
# Build in release mode
$ cargo build --release
```
This will generate an executable under the `./target/release` directory. To use wagyu, run the following command:
```bash
./target/release/wagyu
```
## 3. Usage Guide
### 3.1 Generate a cryptocurrency wallet
To generate a cryptocurrency wallet, run:
```
wagyu [CRYPTOCURRENCY] [FLAGS] [OPTIONS]
```
#### 3.1.1 Bitcoin
To generate a Bitcoin wallet, run:
```
wagyu bitcoin [FLAGS] [OPTIONS]
```
The command can be run with the following optional parameters:
```
FLAGS:
-h, --help Prints help information
-j, --json Prints the generated wallet(s) in JSON format
OPTIONS:
-c, --count Generates a specified number of wallets
-f, --format Generates a wallet with a specified format [possible values: bech32, legacy, segwit]
-n, --network Generates a wallet for a specified network [possible values: mainnet, testnet]
```
#### 3.1.2 Ethereum
To generate an Ethereum wallet, run:
```
wagyu ethereum [FLAGS] [OPTIONS]
```
The command can be run with the following optional parameters:
```
FLAGS:
-h, --help Prints help information
-j, --json Prints the generated wallet(s) in JSON format
OPTIONS:
-c, --count Generates a specified number of wallets
```
#### 3.1.3 Monero
To generate a Monero wallet, run:
```
wagyu monero [FLAGS] [OPTIONS]
```
The command can be run with the following parameters:
```
FLAGS:
-h, --help Prints help information
-j, --json Prints the generated wallet(s) in JSON format
OPTIONS:
-c, --count Generates a specified number of wallets
-i, --integrated Generates a wallet with a specified payment ID
-l, --language Generates a wallet with a specified language [possible values: chinese_simplified, dutch, english, esperanto, french, german, italian, japanese, lojban, portuguese, russian, spanish]
-n, --network Generates a wallet for a specified network [possible values: mainnet, stagenet, testnet]
-s, --subaddress Generates a wallet with a specified major and minor index
```
#### 3.1.4 Zcash
To generate a Zcash wallet, run:
```
wagyu zcash [FLAGS] [OPTIONS]
```
The command can be run with the following parameters:
```
FLAGS:
-h, --help Prints help information
-j, --json Prints the generated wallet(s) in JSON format
OPTIONS:
-c, --count Generates a specified number of wallets
--diversifier Generates a wallet with a specified Sapling address diversifier
-f, --format Generates a wallet with a specified format [possible values: sapling, sprout, transparent]
-n, --network Generates a wallet for a specified network [possible values: mainnet, testnet]
```
### 3.2 Generate an HD cryptocurrency wallet
To generate an HD cryptocurrency wallet, run:
```
wagyu [CRYPTOCURRENCY] hd [FLAGS] [OPTIONS]
```
#### 3.2.1 Bitcoin
To generate a Bitcoin HD wallet, run:
```
wagyu bitcoin hd [FLAGS] [OPTIONS]
```
This command can be run with the following parameters:
```
FLAGS:
-h, --help Prints help information
-j, --json Prints the generated wallet(s) in JSON format
OPTIONS:
-c, --count Generates a specified number of wallets
-d, --derivation <"path"> Generates an HD wallet for a specified derivation path (in quotes) [possible values: bip32, bip44, bip49, ""]
-l, --language Generates an HD wallet with a specified language [possible values: chinese_simplified, chinese_traditional, english, french, italian, japanese, korean, spanish]
-n, --network Generates an HD wallet for a specified network [possible values: mainnet, testnet]
-p, --password Generates an HD wallet with a specified password
-w, --word-count Generates an HD wallet with a specified word count [possible values: 12, 15, 18, 21, 24]
```
#### 3.2.2 Ethereum
To generate an Ethereum HD wallet, run:
```
wagyu ethereum hd [FLAGS] [OPTIONS]
```
The command can be run with the following parameters:
```
FLAGS:
-h, --help Prints help information
-j, --json Prints the generated wallet(s) in JSON format
OPTIONS:
-c, --count Generates a specified number of wallets
-d, --derivation <"path"> Generates an HD wallet for a specified derivation path (in quotes) [possible values: ethereum, keepkey, ledger-legacy, ledger-live, trezor, ""]
-l, --language Generates an HD wallet with a specified language [possible values: chinese_simplified, chinese_traditional, english, french, italian, japanese, korean, spanish]
-p, --password Generates an HD wallet with a specified password
-w, --word-count Generates an HD wallet with a specified word count [possible values: 12, 15, 18, 21, 24]
```
#### 3.2.3 Zcash
To generate a Zcash HD wallet, run:
```
wagyu zcash hd [FLAGS] [OPTIONS]
```
The command can be run with the following parameters:
```
FLAGS:
-h, --help Prints help information
-j, --json Prints the generated wallet(s) in JSON format
OPTIONS:
-c, --count Generates a specified number of wallets
-d, --derivation <"path"> Generates an HD wallet for a specified derivation path (in quotes) [possible values: zip32, ""]
--diversifier Imports a wallet with a specified Sapling address diversifier
-n, --network Generates an HD wallet for a specified network [possible values: mainnet, testnet]
```
### 3.3 Import a cryptocurrency wallet
To import a cryptocurrency wallet, run:
```
wagyu [CRYPTOCURRENCY] import [FLAGS] [OPTIONS]
```
#### 3.3.1 Bitcoin
To import a Bitcoin wallet, run:
```
wagyu bitcoin import [FLAGS] [OPTIONS]
```
This command can be run with the following parameters:
```
FLAGS:
-h, --help Prints help information
-j, --json Prints the generated wallet(s) in JSON format
OPTIONS:
--address Imports a partial wallet for a specified address
-f, --format Imports a wallet with a specified format [possible values: bech32, legacy, segwit]
-n, --network Imports a wallet for a specified network [possible values: mainnet, testnet]
--private Imports a wallet for a specified private key
--public Imports a partial wallet for a specified public key
```
#### 3.3.2 Ethereum
To import an Etheruem wallet, run:
```
wagyu ethereum import [FLAGS] [OPTIONS]
```
This command can be run with the following parameters:
```
FLAGS:
-h, --help Prints help information
-j, --json Prints the generated wallet(s) in JSON format
OPTIONS:
--address Imports a partial wallet for a specified address
--private Imports a wallet for a specified private key
--public Imports a partial wallet for a specified public key
```
#### 3.3.3 Monero
To import a Monero wallet, run:
```
wagyu monero import [FLAGS] [OPTIONS]
```
This command can be run with the following parameters:
```
FLAGS:
-h, --help Prints help information
-j, --json Prints the generated wallet(s) in JSON format
OPTIONS:
--address Imports a partial wallet for a specified address
-i, --integrated Imports a wallet with a specified payment ID
-l, --language Imports a wallet with a specified mnemonic language (requires private spend key) [possible values: chinese_simplified, dutch, english, esperanto, french, german, italian, japanese, lojban, portuguese, russian, spanish]
-m, --mnemonic <"mnemonic"> Imports a wallet for a specified mnemonic (in quotes)
-n, --network Imports a wallet for a specified network [possible values: mainnet, stagenet, testnet]
--private-spend Imports a wallet for a specified private spend key
--private-view Imports a partial wallet for a specified private view key
--public-spend Imports a partial wallet for a specified public spend key
--public-view Imports a partial wallet for a specified public view key
-s, --subaddress Imports a wallet with a specified major and minor index
```
#### 3.3.4 Zcash
To import a Zcash wallet, run:
```
wagyu zcash import [FLAGS] [OPTIONS]
```
This command can be run with the following parameters:
```
FLAGS:
-h, --help Prints help information
-j, --json Prints the generated wallet(s) in JSON format
OPTIONS:
--address Imports a partial wallet for a specified address
--diversifier Imports a wallet with a specified Sapling address diversifier
--private Imports a wallet for a specified private key
--public Imports a partial wallet for a specified public key
```
### 3.4 Import an HD cryptocurrency wallet
To import an HD cryptocurrency wallet, run:
```
wagyu [CRYPTOCURRENCY] import-hd [FLAGS] [OPTIONS]
```
#### 3.4.1 Bitcoin
To import a Bitcoin HD wallet, run:
```
wagyu bitcoin hd [FLAGS] [OPTIONS]
```
This command can be run with the following parameters:
```
FLAGS:
-h, --help Prints help information
-j, --json Prints the generated wallet(s) in JSON format
OPTIONS:
-a, --account Imports an HD wallet for a specified account number for bip44 and bip49 derivations
-c, --chain Imports an HD wallet for a specified (external/internal) chain for bip44 and bip49 derivations [possible values: 0, 1]
-d, --derivation <"path"> Imports an HD wallet for a specified derivation path (in quotes) [possible values: bip32, bip44, bip49, ""]
--extended-private Imports a partial HD wallet for a specified extended private key
--extended-public Imports a partial HD wallet for a specified extended public key
-i, --index Imports an HD wallet for a specified index
-m, --mnemonic <"mnemonic"> Imports an HD wallet for a specified mnemonic (in quotes)
-n, --network Imports an HD wallet for a specified network [possible values: mainnet, testnet]
-p, --password Imports an HD wallet with a specified password
```
#### 3.4.2 Ethereum
To import an Ethereum HD wallet, run:
```
wagyu ethereum hd [FLAGS] [OPTIONS]
```
This command can be run with the following parameters:
```
FLAGS:
-h, --help Prints help information
-j, --json Prints the generated wallet(s) in JSON format
OPTIONS:
-d, --derivation <"path"> Imports an HD wallet for a specified derivation path (in quotes) [possible values: ethereum, keepkey, ledger-legacy, ledger-live, trezor, ""]
--extended-private Imports a partial HD wallet for a specified extended private key
--extended-public Imports a partial HD wallet for a specified extended public key
-i, --index Imports an HD wallet for a specified index
-m, --mnemonic <"mnemonic"> Imports an HD wallet for a specified mnemonic (in quotes)
-p, --password Imports an HD wallet with a specified password
```
#### 3.4.3 Zcash
To import a Zcash HD wallet, run:
```
wagyu zcash hd [FLAGS] [OPTIONS]
```
This command can be run with the following parameters:
```
FLAGS:
-h, --help Prints help information
-j, --json Prints the generated wallet(s) in JSON format
OPTIONS:
-a, --account Imports an HD wallet for a specified account number for bip44 and bip49 derivations
-d, --derivation <"path"> Imports an HD wallet for a specified derivation path (in quotes) [possible values: zip32, ""]
--diversifier Imports an HD wallet with a specified Sapling address diversifier
--extended-private Imports a partial HD wallet for a specified extended private key
--extended-public Imports a partial HD wallet for a specified extended public key
-i, --index Imports an HD wallet for a specified index
```
### 3.5 Generate a cryptocurrency transaction
To import an HD cryptocurrency wallet, run:
```
wagyu [CRYPTOCURRENCY] transaction [FLAGS] [OPTIONS]
```
#### 3.5.1 Bitcoin
To generate a Bitcoin transaction, run:
```
wagyu bitcoin transaction [FLAGS] [OPTIONS]
```
This command can be run with the following parameters:
```
FLAGS:
-h, --help Prints help information
-j, --json Prints the generated wallet(s) in JSON format
OPTIONS:
--createrawtransaction Generates a raw Bitcoin transaction
Inputs format: '[{"txid":"txid", "vout":index},...]'
Outputs format: '{"address":amount,...}'
--lock-time Specify a Bitcoin transaction lock time
--signrawtransaction Sign a raw Bitcoin transaction
Inputs format: '[{"txid":"txid", "vout":index, "amount":amount, "address":"address", "privatekey":"private_key"},...]'
(Optional: manually specify scriptPubKey and redeemScript)
--version Specify a Bitcoin transaction version
```
#### 3.5.2 Ethereum
To generate an Ethereum transaction, run:
```
wagyu ethereum transaction [FLAGS] [OPTIONS]
```
This command can be run with the following parameters:
```
FLAGS:
-h, --help Prints help information
-j, --json Prints the generated wallet(s) in JSON format
OPTIONS:
--createrawtransaction <'{"to":"address", "value":"value", "gas":"gas", "gasPrice":"gas_price", "nonce":nonce, "network":"network"}'> Generates a raw Ethereum transaction
--network Specify an Ethereum transaction network
--signrawtransaction Sign a raw Ethereum transaction
```
#### 3.5.3 Zcash
To generate a Zcash transaction, run:
```
wagyu zcash transaction [FLAGS] [OPTIONS]
```
This command can be run with the following parameters:
```
FLAGS:
-h, --help Prints help information
-j, --json Prints the generated wallet(s) in JSON format
OPTIONS:
--createrawtransaction Generates a raw Zcash transaction
Inputs format: '[{"txid":"txid", "vout":index},...]'
Outputs format: '{"address":amount,...}'
--expiry-height Specify a Zcash transaction expiry height
--lock-time Specify a Zcash transaction lock time
--signrawtransaction Sign a raw Zcash transaction
Inputs format: '[{"txid":"txid", "vout":index, "amount":amount, "address":"address", "privatekey":"private_key"},...]'
(Optional: manually specify scriptPubKey and redeemScript)
--version Specify a Zcash transaction version [possible values: sapling]
```
#### 3.5.4 Transaction Remarks
`wagyu` CLI operates offline without chain state, and thus cannot immediately craft Monero transactions or Zcash Sapling spends (Zcash Sapling outputs are supported).
## 4. License
This work is licensed under either of the following licenses, at your discretion.
- Apache License Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you,
as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.