33 releases (stable)
new 1.0.27 | Dec 21, 2024 |
---|---|
1.0.26 | Oct 21, 2024 |
1.0.25 | Jul 31, 2024 |
1.0.22 | Feb 18, 2024 |
0.1.6 | Sep 3, 2023 |
#250 in #blockchain
27KB
367 lines
Blockchain
A Rust crate provides an interface for interacting with a blockchain.
Reference implementation
Features
new(difficulty, reward, fee)
: Initialize a new blockchain with the specified parameters.get_transactions(page, size)
: Get a list of current transactions in the blockchain using pagination details.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.create_wallet(email)
: Create a new wallet with a unique email and an initial balance.get_wallet_balance(address)
: Get a wallet's balance based on its address.get_wallet_transactions(address, page, size)
: Get a wallet's transaction history based on its address and using pagination details.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 | Data type | Description |
---|---|---|
difficulty |
f64 |
The initial mining difficulty level of the network. |
reward |
f64 |
The initial block reward for miners. |
fee |
f64 |
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.
Examples
Explore the capabilities of this blockchain implementation through a set of examples:
- CLI for interacting with the blockchain: see more
- API for interacting with the blockchain using axum: see more
Usage
use blockchain::Chain;
fn main() {
// Initialise a new blockchain
let mut chain = Chain::new(2, 100.0, 0.01);
// Create a wallet for a sender
let sender = chain.create_wallet(String::from("sender@mail.com"));
// Create a wallet for a receiver
let receiver = chain.create_wallet(String::from("receiver@mail.com"));
// Add a transaction
chain.add_transaction(sender, receiver, 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 the application:
cargo build
Test the application:
cargo test
Run the application:
cargo run
Run clippy:
cargo clippy --all-targets --all-features --no-deps -- -D warnings
Run lint:
cargo fmt
Generate documentation in HTML format:
cargo doc --open
Dependencies
~2.4–3.5MB
~71K SLoC