Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/howardwu/wagyu

A Rust library for generating cryptocurrency wallets
https://github.com/howardwu/wagyu

bitcoin ethereum monero zcash

Last synced: 2 days ago
JSON representation

A Rust library for generating cryptocurrency wallets

Awesome Lists containing this project

README

        












## 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) |


  • P2PKH

  • P2SH-P2WPKH

  • Bech32

|

  • BIP-32

  • BIP-44

  • BIP-49

  • Custom

|
  • BIP-39
|

  • Mainnet

  • Testnet

|
| [**wagyu-ethereum**](./ethereum)
[![Crates.io](https://img.shields.io/crates/v/wagyu-ethereum.svg?color=neon)](https://crates.io/crates/wagyu-ethereum)|
  • Standard
|

  • Ethereum

  • Ledger

  • Trezor

  • Keepkey

  • Custom

|
  • BIP-39
|
  • All
|
| [**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

|
  • N/A
|
  • Electrum
|

  • Mainnet

  • Testnet

  • Stagenet

|
| [**wagyu-zcash**](./zcash)
[![Crates.io](https://img.shields.io/crates/v/wagyu-zcash.svg?color=neon)](https://crates.io/crates/wagyu-zcash) |

  • P2PKH

  • Sprout

  • Sapling

|
  • ZIP-32
|
  • N/A
|

  • Mainnet

  • Testnet

|

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, ""]
-i, --index Generates an HD wallet with a specified index
-k, --indices Generates an HD wallet with a specified number of indices
-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 import-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 import-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 with a specified index
-k, --indices Imports an HD wallet with a specified number of indices
-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 import-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.