WIP Block chain

pull/2/head
obscuren 11 years ago
parent 83bb4a3f26
commit 9f42835a02
  1. 34
      block_manager.go

@ -1,21 +1,26 @@
// Blocks, blocks will have transactions.
// Transactions/contracts are updated in goroutines
// Each contract should send a message on a channel with usage statistics
// The statics can be used for fee calculation within the block update method
// Statistics{transaction, /* integers */ normal_ops, store_load, extro_balance, crypto, steps}
// The block updater will wait for all goroutines to be finished and update the block accordingly
// in one go and should use minimal IO overhead.
// The actual block updating will happen within a goroutine as well so normal operation may continue
package main package main
import ( import (
"fmt" "fmt"
) )
type BlockChain struct {
lastBlock *Block
genesisBlock *Block
}
func NewBlockChain() *BlockChain {
bc := &BlockChain{}
bc.genesisBlock = NewBlock( Encode(Genesis) )
return bc
}
type BlockManager struct { type BlockManager struct {
vm *Vm vm *Vm
blockChain *BlockChain
} }
func NewBlockManager() *BlockManager { func NewBlockManager() *BlockManager {
@ -26,6 +31,11 @@ func NewBlockManager() *BlockManager {
// Process a block. // Process a block.
func (bm *BlockManager) ProcessBlock(block *Block) error { func (bm *BlockManager) ProcessBlock(block *Block) error {
// TODO Validation (Or move to other part of the application)
if err := bm.ValidateBlock(block); err != nil {
return err
}
// Get the tx count. Used to create enough channels to 'join' the go routines // Get the tx count. Used to create enough channels to 'join' the go routines
txCount := len(block.transactions) txCount := len(block.transactions)
// Locking channel. When it has been fully buffered this method will return // Locking channel. When it has been fully buffered this method will return
@ -50,6 +60,10 @@ func (bm *BlockManager) ProcessBlock(block *Block) error {
return nil return nil
} }
func (bm *BlockManager) ValidateBlock(block *Block) error {
return nil
}
func (bm *BlockManager) ProcessContract(tx *Transaction, block *Block, lockChan chan bool) { func (bm *BlockManager) ProcessContract(tx *Transaction, block *Block, lockChan chan bool) {
// Recovering function in case the VM had any errors // Recovering function in case the VM had any errors
defer func() { defer func() {

Loading…
Cancel
Save