Blockchain

A basic blockchain implementation written in Go
Alternatives To Blockchain
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
Blockchain752
19 years agoMay 28, 20216Go
A basic blockchain implementation written in Go
Proof Of Work90635 years ago26July 26, 20181JavaScript
Proof of Work with SHA256 and Bloom filter
Victor9
5 years agootherShell
Victor, verifier in cryptography, publicly issues free trusted TIMESTAMP of file hash information embedded into a blockchain.
Igsignature7
8 years ago1March 24, 2015mitObjective-C
Objective-C client of signature gem. Sign API call with shared secret and timestamp using SHA256 HMAC.
Rack Simple_auth2
3 years agomitRuby
Rack Authentication Middlewares
Kvas2
3 months agomitGo
kvas a minimal overhead key value store backed by the filesystem
Ps Flatten Directory1
a year agoPowerShell
This Powershell script removes the duplicated files from source directories and copies them to a single export directory (Flatten-Directory).
Go Pathfingerprint1
6 years agogpl-2.0Go
Recursively calculate a SHA1 or SHA256 hash for a given directory.
Alternatives To Blockchain
Select To Compare


Alternative Project Comparisons
Readme

Blockchain

Having fun implementing a blockchain using Golang.

Using Minimum Viable Blockchain

Keys

The Blockchain uses ECDSA (224 bits) keys. When a user first joins the blockchain a random key will be generated.

Keys are encoded using base58.

Given x, y as the components of the public key, the key is generated as following:

	base58(BigInt(append(x as bytes, y as bytes)))

Proof of work

In order to sign a transaction and send it to the network, proof of work is required.

Proof of work is also required for block generation.

Protocol

The blockchain runs on port 9191 and uses TCP to handle connections among peers.

Message
  • Message type (1 byte)
     const (
     	MESSAGE_GET_NODES = iota + 20
     	MESSAGE_SEND_NODES
    
     	MESSAGE_GET_TRANSACTION
     	MESSAGE_SEND_TRANSACTION
    
     	MESSAGE_GET_BLOCK
     	MESSAGE_SEND_BLOCK
     )
    
  • Options (4 bytes): Data specific
  • Data (n bytes): Data specific
Transaction
  • Header:

    • From (80 bytes): Origin public key
    • To (80 bytes): Destination public key
    • Timestamp (4 bytes): int32 UNIX timestamp
    • Payload Hash (32 bytes): sha256(payloadData)
    • Payload Length (4 bytes): len(payloadData)
    • Nonce (4 bytes): Proof of work
  • Signature (80 bytes): signed(sha256(header))

  • Payload data (Payload Length bytes): raw data

Block
  • Header:

    • Origin (80 bytes): Origin public key
    • Timestamp (4 bytes): int32 UNIX timestamp
    • Previous block (32 bytes): sha256(previous block header)
    • Merkel Root (32 Bytes): sha256(transaction hashes)
    • Nonce (4 bytes): int32 UNIX timestamp
  • Signature (80 bytes): signed(sha256(header))

  • Block transactions

Popular Timestamp Projects
Popular Sha256 Projects
Popular Libraries Categories

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.
Golang
Blockchain
Timestamp
Sha256