Browse Source

Refactor Blockchain Interface

gRPC
garritfra 6 years ago
parent
commit
04e095f861
  1. 10
      core/Block.go
  2. 13
      core/Blockchain.go
  3. 7
      core/Server.go

10
core/Block.go

@ -17,14 +17,20 @@ type Block struct {
}
// NewBlock creates a new Block
func NewBlock(previousHash string, data []Transaction) Block {
block := Block{Timestamp: time.Now(), PreviousHash: previousHash, Data: data}
func NewBlock(previousHash string) Block {
block := Block{Timestamp: time.Now(), PreviousHash: previousHash}
block.calculateHash()
return block
}
// AddTransaction takes in a transaction and adds it to the block
func (block *Block) AddTransaction(transaction Transaction) error {
block.Data = append(block.Data, transaction)
return nil
}
func (block *Block) calculateHash() {
var buffer bytes.Buffer
encoder := gob.NewEncoder(&buffer)

13
core/Blockchain.go

@ -5,7 +5,8 @@ type Blockchain struct {
blocks []Block
}
func (bc *Blockchain) addBlock(block Block) {
// AddBlock adds a block to the chain
func (bc *Blockchain) AddBlock(block Block) {
bc.blocks = append(bc.blocks, block)
}
@ -15,14 +16,20 @@ func NewBlockchain() Blockchain {
blockchain := Blockchain{blocks: make([]Block, 0)}
genesisBlock := generateGenesisBlock()
blockchain.addBlock(genesisBlock)
blockchain.AddBlock(genesisBlock)
return blockchain
}
func generateGenesisBlock() Block {
block := NewBlock("0")
transaction := Transaction{Amount: 0, Sender: "0", Receiver: "0", Message: "Genesis"}
block := NewBlock("0", []Transaction{transaction})
block.AddTransaction(transaction)
return block
}
// GetLastBlock returns the latest block on the chain
func (bc *Blockchain) GetLastBlock() Block {
return bc.blocks[len(bc.blocks)-1]
}

7
core/Server.go

@ -16,9 +16,12 @@ func StartServer() {
gob.Register(Blockchain{})
blockchain = NewBlockchain()
block := NewBlock(blockchain.GetLastBlock().Hash)
transaction := Transaction{Sender: "foo", Receiver: "bar", Amount: 100}
block := NewBlock(blockchain.blocks[0].Hash, []Transaction{transaction})
blockchain.addBlock(block)
block.AddTransaction(transaction)
blockchain.AddBlock(block)
http.HandleFunc("/blockchain", listBlocks)

Loading…
Cancel
Save