blockchain-cli 1.0.10

Provides a command-line interface (CLI) for interacting with blockchain
Documentation

Blockchain CLI

A Rust library provides a command-line interface (CLI) for interacting with blockchain.

Reference implementation

test release docs crate Crates.io (recent) codecov

Features

Features

  • new(address, difficulty, reward): Initialize a new blockchain with the specified parameters.
  • get_transactions(): Get a list of current transactions in the blockchain.
  • get_transaction(hash): Get a transaction by its hash.
  • add_transaction(from, to, amount): Add a new transaction to the blockchain.
  • validate_transaction(from, amount): Validate a new transaction to the blockchain.
  • get_last_hash(): Get the hash of the last block in the blockchain.
  • update_difficulty(difficulty): Update the mining difficulty of the blockchain.
  • update_reward(reward): Update the block reward.
  • update_fee(fee): Update the transaction fee.
  • generate_new_block(): Generate a new block and append it to the blockchain.
  • get_merkle(transactions): Calculate the Merkle root hash for a list of transactions.
  • proof_of_work(header): Perform the proof-of-work process to mine a block.
  • hash(item): Calculate the SHA-256 hash of a serializable item.

Options

Option Description
address The address associated with the blockchain.
difficulty The initial mining difficulty level of the network.
reward The initial block reward for miners.
fee The transaction fee.

Safety

This crate uses #![forbid(unsafe_code)] to ensure everything is implemented in 100% safe Rust.

Documentation

For more in-depth details, please refer to the full documentation.

If you encounter any issues or have questions that are not addressed in the documentation, feel free to submit an issue.

Usage

Run the following Cargo command in your project directory::

cargo add blockchain-cli
extern crate blockchain;

use blockchain::Chain;

fn main() {
  // Initialise a new blockchain
  let mut chain = Chain::new(
    String::from("bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh"),
    2,
    100.0,
    0.01,
  );

  // Add a transaction
  chain.add_transaction(
    String::from("mxwgXGHxtjmGJ1cFebRW9emcV2vV1aPGfk"),
    String::from("n2zet2T3KNRjD69oF9ZquLsigH1ZBJcraR"),
    1.25
  );

  // Get a transaction
  let transaction = chain.get_transaction(
    String::from("6e8c5dc01145016e5a979683ba7e13bafaf85e765490aa33c0bba1f41cf581ed")
  );

  match transaction {
    Some(trx) => println!("📦 Transaction: {:?}", trx),
    None => println!("❌ Transaction was not found"),
  }

  // Get all transactions
  let transactions = chain.get_transactions();
  println!("📦 Transactions: {:?}", transactions);

  // Others
}

Contributing

Build an application:

cargo build

Test an application:

cargo test

Run an application:

cargo run

Run clippy:

cargo clippy --all-targets --all-features -- -D warnings

Run lint:

cargo fmt

Generate documentation in HTML format:

cargo doc --open