Skip to content

Latest commit

 

History

History
88 lines (63 loc) · 2.14 KB

README.md

File metadata and controls

88 lines (63 loc) · 2.14 KB

Rockchain

Build Status Build Status

A blockchain written in Rust.

This project is aimed at furthering my personal understanding of Rust. The blockchain implementation is based on the following walkthrough, which was originally done in Python:

https://hackernoon.com/learn-blockchains-by-building-one-117428612f46

Many thanks to the original author!

Usage

The following command will start the blockchain server.

RUST_LOG=blockchain,iron,logger=info cargo run

View the blockchain in it's empty genesis state:

curl http://localhost:3000/chain | jq

Create a new transaction:

curl -XPOST http://localhost:3000/transactions/new -H 'Content-Type: application/json' --data '{
  "sender": "me",
  "recipient": "you",
  "amount": 123
}' | jq

Trigger mining, creating a new block:

curl http://localhost:3000/mine | jq

View the blockchain again, with the requested transaction now persisted within a block:

curl http://localhost:3000/chain | jq

Creating a network

The PORT environment variable can be used to set a custom port number. In another window, another node can be started with the following command.

RUST_LOG=blockchain,iron,logger=info PORT=3001 cargo run

To manually register this node with the original one, the following request can be performed:

curl -XPOST http://localhost:3001/nodes/register -H 'Content-Type: application/json' --data '{
  "nodes": [{
    "address": "http://localhost:3000"
  }]
}' | jq

Trigger the execution of the consensus protocol, bringing state of the new node up to date:

curl http://localhost:3001/nodes/resolve | jq

Status

  • Building a blockchain
  • Blockchain API
  • Distributed Consensus
  • More idiomatic error handling
  • Refactor blockchain and server into separate modules
  • Auto-register peers using CLI args
  • Move blockchain data types into library crate