Browse Source

Implement Block mining

gRPC
garritfra 6 years ago
parent
commit
2e2a69d87e
  1. 7
      core/Block.go
  2. 22
      core/Blockchain.go
  3. 2
      core/Server.go

7
core/Block.go

@ -10,12 +10,7 @@ type Block struct {
Hash string
PreviousHash string
Data []Transaction
}
// NewBlock creates a new Block
func NewBlock() Block {
block := Block{}
return block
Nonce int
}
// AddTransaction takes in a transaction and adds it to the block

22
core/Blockchain.go

@ -2,6 +2,8 @@ package main
import (
"log"
"strings"
"time"
)
// Blockchain struct
@ -13,10 +15,22 @@ type Blockchain struct {
func (bc *Blockchain) AddBlock(block Block) {
block.PreviousHash = bc.GetLastHash()
log.Print("Mining Block...")
// Mine Block
for {
hash := calculateHash(block)
if strings.HasPrefix(hash, "00000") {
block.Hash = hash
block.Timestamp = time.Now()
bc.blocks = append(bc.blocks, block)
log.Print("Block Added: ", block.Hash)
break
}
block.Nonce++
}
block.Hash = calculateHash(block)
bc.blocks = append(bc.blocks, block)
log.Print("Block added: %o", block)
}
// NewBlockchain creates a new Blockchain
@ -32,7 +46,7 @@ func NewBlockchain() Blockchain {
func generateGenesisBlock() Block {
block := Block{PreviousHash: "0"}
block := Block{PreviousHash: "0", Timestamp: time.Now()}
transaction := Transaction{Amount: 0, Sender: "0", Receiver: "0", Message: "Genesis"}
block.AddTransaction(transaction)
log.Print("Genesis Block created")

2
core/Server.go

@ -16,7 +16,7 @@ func StartServer() {
gob.Register(Blockchain{})
blockchain = NewBlockchain()
block := NewBlock()
block := Block{}
transaction := Transaction{Sender: "foo", Receiver: "bar", Amount: 100}
block.AddTransaction(transaction)

Loading…
Cancel
Save